Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6567f8a71f | |||
| 7448d91817 | |||
| f775641cb7 | |||
| e05396f214 | |||
| 5e094fa69f |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -15,3 +15,4 @@ commit_msg.txt
|
||||
/scripts/.claude/settings.local.json
|
||||
/ALR
|
||||
.claude/settings.local.json
|
||||
.directory
|
||||
|
||||
@@ -202,6 +202,23 @@ func main() {
|
||||
|
||||
var buf bytes.Buffer
|
||||
|
||||
buf.WriteString(`// ALR - Any Linux Repository
|
||||
// Copyright (C) 2025 The ALR Authors
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
`)
|
||||
buf.WriteString("// DO NOT EDIT MANUALLY. This file is generated.\n")
|
||||
buf.WriteString("package alrsh")
|
||||
|
||||
|
||||
@@ -293,7 +293,7 @@ func (b *Builder) BuildPackageFromScript(
|
||||
) ([]*BuiltDep, error) {
|
||||
return b.BuildPackage(ctx, &BuildInput{
|
||||
script: args.Script,
|
||||
repository: "default",
|
||||
repository: ExtractRepoNameFromPath(args.Script),
|
||||
packages: args.Packages,
|
||||
pkgFormat: args.PkgFormat(),
|
||||
opts: args.Opts,
|
||||
|
||||
@@ -331,3 +331,29 @@ func removeDuplicatesSources(sources, checksums []string) ([]string, []string) {
|
||||
}
|
||||
return newSources, newChecksums
|
||||
}
|
||||
|
||||
// ExtractRepoNameFromPath извлекает имя репозитория из пути к скрипту.
|
||||
// Ожидаемый формат: repo-name/package-name/alr.sh или /abs/path/repo-name/package-name/alr.sh
|
||||
// Возвращает "default", если не удалось извлечь имя.
|
||||
func ExtractRepoNameFromPath(scriptPath string) string {
|
||||
// Нормализуем путь
|
||||
cleanPath := filepath.Clean(scriptPath)
|
||||
|
||||
// Разбиваем путь на компоненты
|
||||
dir := filepath.Dir(cleanPath) // package-name
|
||||
if dir == "." || dir == "/" {
|
||||
return "default"
|
||||
}
|
||||
|
||||
repoDir := filepath.Dir(dir) // repo-name
|
||||
if repoDir == "." || repoDir == "/" {
|
||||
return "default"
|
||||
}
|
||||
|
||||
repoName := filepath.Base(repoDir)
|
||||
if repoName == "." || repoName == "/" || repoName == "" {
|
||||
return "default"
|
||||
}
|
||||
|
||||
return repoName
|
||||
}
|
||||
|
||||
@@ -155,4 +155,57 @@ func TestRegexpALRPackageName(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestExtractRepoNameFromPath(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
scriptPath string
|
||||
expectedRepo string
|
||||
}{
|
||||
{
|
||||
name: "относительный путь - стандартная структура",
|
||||
scriptPath: "alr-default/alr-bin/alr.sh",
|
||||
expectedRepo: "alr-default",
|
||||
},
|
||||
{
|
||||
name: "абсолютный путь",
|
||||
scriptPath: "/home/user/repos/alr-default/alr-bin/alr.sh",
|
||||
expectedRepo: "alr-default",
|
||||
},
|
||||
{
|
||||
name: "репозиторий без префикса alr-",
|
||||
scriptPath: "my-repo/my-package/alr.sh",
|
||||
expectedRepo: "my-repo",
|
||||
},
|
||||
{
|
||||
name: "только имя файла",
|
||||
scriptPath: "alr.sh",
|
||||
expectedRepo: "default",
|
||||
},
|
||||
{
|
||||
name: "один уровень директории",
|
||||
scriptPath: "package/alr.sh",
|
||||
expectedRepo: "default",
|
||||
},
|
||||
{
|
||||
name: "путь с точками",
|
||||
scriptPath: "./alr-default/alr-bin/alr.sh",
|
||||
expectedRepo: "alr-default",
|
||||
},
|
||||
{
|
||||
name: "путь с двойными точками",
|
||||
scriptPath: "../alr-default/alr-bin/alr.sh",
|
||||
expectedRepo: "alr-default",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := ExtractRepoNameFromPath(tt.scriptPath)
|
||||
if result != tt.expectedRepo {
|
||||
t.Errorf("ExtractRepoNameFromPath(%q) = %q, ожидается %q", tt.scriptPath, result, tt.expectedRepo)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,19 @@
|
||||
// ALR - Any Linux Repository
|
||||
// Copyright (C) 2025 The ALR Authors
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// DO NOT EDIT MANUALLY. This file is generated.
|
||||
package alrsh
|
||||
|
||||
|
||||
Reference in New Issue
Block a user