Merge pull request 'fix: use unique names for packages' (#40) from Maks1mS/ALR:fix/use-unique-package-name into master
Reviewed-on: #40
This commit is contained in:
		
							
								
								
									
										10
									
								
								build.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								build.go
									
									
									
									
									
								
							| @@ -78,8 +78,7 @@ func BuildCmd() *cli.Command { | |||||||
|  |  | ||||||
| 			var script string | 			var script string | ||||||
| 			var packages []string | 			var packages []string | ||||||
|  | 			repository := "default" | ||||||
| 			// Проверяем, установлен ли флаг script (-s) |  | ||||||
|  |  | ||||||
| 			repoDir := cfg.GetPaths(ctx).RepoDir | 			repoDir := cfg.GetPaths(ctx).RepoDir | ||||||
|  |  | ||||||
| @@ -106,11 +105,13 @@ func BuildCmd() *cli.Command { | |||||||
| 					os.Exit(1) | 					os.Exit(1) | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|  | 				repository = pkg[0].Repository | ||||||
|  |  | ||||||
| 				if pkg[0].BasePkgName != "" { | 				if pkg[0].BasePkgName != "" { | ||||||
| 					script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].BasePkgName, "alr.sh") | 					script = filepath.Join(repoDir, repository, pkg[0].BasePkgName, "alr.sh") | ||||||
| 					packages = append(packages, pkg[0].Name) | 					packages = append(packages, pkg[0].Name) | ||||||
| 				} else { | 				} else { | ||||||
| 					script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].Name, "alr.sh") | 					script = filepath.Join(repoDir, repository, pkg[0].Name, "alr.sh") | ||||||
| 				} | 				} | ||||||
| 			default: | 			default: | ||||||
| 				script = filepath.Join(repoDir, "alr.sh") | 				script = filepath.Join(repoDir, "alr.sh") | ||||||
| @@ -142,6 +143,7 @@ func BuildCmd() *cli.Command { | |||||||
| 				ctx, | 				ctx, | ||||||
| 				types.BuildOpts{ | 				types.BuildOpts{ | ||||||
| 					Packages:    packages, | 					Packages:    packages, | ||||||
|  | 					Repository:  repository, | ||||||
| 					Script:      script, | 					Script:      script, | ||||||
| 					Manager:     mgr, | 					Manager:     mgr, | ||||||
| 					Clean:       c.Bool("clean"), | 					Clean:       c.Bool("clean"), | ||||||
|   | |||||||
| @@ -193,3 +193,7 @@ func (c *ALRConfig) RootCmd(ctx context.Context) string { | |||||||
| 	}) | 	}) | ||||||
| 	return c.cfg.RootCmd | 	return c.cfg.RootCmd | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (c *ALRConfig) Save(f *os.File) error { | ||||||
|  | 	return toml.NewEncoder(f).Encode(c.cfg) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -34,31 +34,31 @@ msgstr "" | |||||||
| msgid "Error initialization database" | msgid "Error initialization database" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: build.go:105 | #: build.go:104 | ||||||
| msgid "Package not found" | msgid "Package not found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: build.go:123 | #: build.go:124 | ||||||
| msgid "Error pulling repositories" | msgid "Error pulling repositories" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: build.go:131 | #: build.go:132 | ||||||
| msgid "Unable to detect a supported package manager on the system" | msgid "Unable to detect a supported package manager on the system" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: build.go:137 | #: build.go:138 | ||||||
| msgid "Error parsing os release" | msgid "Error parsing os release" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: build.go:158 | #: build.go:160 | ||||||
| msgid "Error building package" | msgid "Error building package" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: build.go:165 | #: build.go:167 | ||||||
| msgid "Error getting working directory" | msgid "Error getting working directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: build.go:174 | #: build.go:176 | ||||||
| msgid "Error moving the package" | msgid "Error moving the package" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -323,11 +323,11 @@ msgstr "" | |||||||
| msgid "ERROR" | msgid "ERROR" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: list.go:40 | #: list.go:41 | ||||||
| msgid "List ALR repo packages" | msgid "List ALR repo packages" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: list.go:91 | #: list.go:92 | ||||||
| msgid "Error listing installed packages" | msgid "Error listing installed packages" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -369,60 +369,68 @@ msgstr "" | |||||||
| msgid "Downloading sources" | msgid "Downloading sources" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:246 | #: pkg/build/build.go:250 | ||||||
| msgid "Building package metadata" | msgid "Building package metadata" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:268 | #: pkg/build/build.go:272 | ||||||
| msgid "Compressing package" | msgid "Compressing package" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:421 | #: pkg/build/build.go:426 | ||||||
| msgid "" | msgid "" | ||||||
| "Your system's CPU architecture doesn't match this package. Do you want to " | "Your system's CPU architecture doesn't match this package. Do you want to " | ||||||
| "build anyway?" | "build anyway?" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:435 | #: pkg/build/build.go:440 | ||||||
| msgid "This package is already installed" | msgid "This package is already installed" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:459 | #: pkg/build/build.go:464 | ||||||
| msgid "Installing build dependencies" | msgid "Installing build dependencies" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:500 | #: pkg/build/build.go:505 | ||||||
| msgid "Installing dependencies" | msgid "Installing dependencies" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:535 | #: pkg/build/build.go:540 | ||||||
| msgid "The checksums array must be the same length as sources" | msgid "The checksums array must be the same length as sources" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:586 | #: pkg/build/build.go:591 | ||||||
| msgid "Would you like to remove the build dependencies?" | msgid "Would you like to remove the build dependencies?" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:649 | #: pkg/build/build.go:654 | ||||||
| msgid "Executing prepare()" | msgid "Executing prepare()" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:659 | #: pkg/build/build.go:664 | ||||||
| msgid "Executing build()" | msgid "Executing build()" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:689 pkg/build/build.go:709 | #: pkg/build/build.go:694 pkg/build/build.go:714 | ||||||
| msgid "Executing %s()" | msgid "Executing %s()" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:768 | #: pkg/build/build.go:773 | ||||||
| msgid "Error installing native packages" | msgid "Error installing native packages" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:792 | #: pkg/build/build.go:797 | ||||||
| msgid "Error installing package" | msgid "Error installing package" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #: pkg/build/build.go:857 | ||||||
|  | msgid "AutoProv is not implemented for this package format, so it's skipped" | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
|  | #: pkg/build/build.go:868 | ||||||
|  | msgid "AutoReq is not implemented for this package format, so it's skipped" | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:35 | #: pkg/build/findDeps.go:35 | ||||||
| msgid "Command not found on the system" | msgid "Command not found on the system" | ||||||
| msgstr "" | msgstr "" | ||||||
| @@ -435,14 +443,6 @@ msgstr "" | |||||||
| msgid "Required dependency found" | msgid "Required dependency found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/utils.go:133 |  | ||||||
| msgid "AutoProv is not implemented for this package format, so it's skipped" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: pkg/build/utils.go:144 |  | ||||||
| msgid "AutoReq is not implemented for this package format, so it's skipped" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: pkg/repos/pull.go:79 | #: pkg/repos/pull.go:79 | ||||||
| msgid "Pulling repository" | msgid "Pulling repository" | ||||||
| msgstr "" | msgstr "" | ||||||
|   | |||||||
| @@ -12,8 +12,8 @@ msgstr "" | |||||||
| "MIME-Version: 1.0\n" | "MIME-Version: 1.0\n" | ||||||
| "Content-Type: text/plain; charset=UTF-8\n" | "Content-Type: text/plain; charset=UTF-8\n" | ||||||
| "Content-Transfer-Encoding: 8bit\n" | "Content-Transfer-Encoding: 8bit\n" | ||||||
| "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" | ||||||
| "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | ||||||
| "X-Generator: Gtranslator 47.1\n" | "X-Generator: Gtranslator 47.1\n" | ||||||
|  |  | ||||||
| #: build.go:44 | #: build.go:44 | ||||||
| @@ -41,31 +41,31 @@ msgstr "Создайте пакет с нуля, даже если уже име | |||||||
| msgid "Error initialization database" | msgid "Error initialization database" | ||||||
| msgstr "Ошибка инициализации базы данных" | msgstr "Ошибка инициализации базы данных" | ||||||
|  |  | ||||||
| #: build.go:105 | #: build.go:104 | ||||||
| msgid "Package not found" | msgid "Package not found" | ||||||
| msgstr "Пакет не найден" | msgstr "Пакет не найден" | ||||||
|  |  | ||||||
| #: build.go:123 | #: build.go:124 | ||||||
| msgid "Error pulling repositories" | msgid "Error pulling repositories" | ||||||
| msgstr "Ошибка при извлечении репозиториев" | msgstr "Ошибка при извлечении репозиториев" | ||||||
|  |  | ||||||
| #: build.go:131 | #: build.go:132 | ||||||
| msgid "Unable to detect a supported package manager on the system" | msgid "Unable to detect a supported package manager on the system" | ||||||
| msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе" | msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе" | ||||||
|  |  | ||||||
| #: build.go:137 | #: build.go:138 | ||||||
| msgid "Error parsing os release" | msgid "Error parsing os release" | ||||||
| msgstr "Ошибка при разборе файла выпуска операционной системы" | msgstr "Ошибка при разборе файла выпуска операционной системы" | ||||||
|  |  | ||||||
| #: build.go:158 | #: build.go:160 | ||||||
| msgid "Error building package" | msgid "Error building package" | ||||||
| msgstr "Ошибка при сборке пакета" | msgstr "Ошибка при сборке пакета" | ||||||
|  |  | ||||||
| #: build.go:165 | #: build.go:167 | ||||||
| msgid "Error getting working directory" | msgid "Error getting working directory" | ||||||
| msgstr "Ошибка при получении рабочего каталога" | msgstr "Ошибка при получении рабочего каталога" | ||||||
|  |  | ||||||
| #: build.go:174 | #: build.go:176 | ||||||
| msgid "Error moving the package" | msgid "Error moving the package" | ||||||
| msgstr "Ошибка при перемещении пакета" | msgstr "Ошибка при перемещении пакета" | ||||||
|  |  | ||||||
| @@ -335,11 +335,11 @@ msgstr "%s %s загружается — %s/с\n" | |||||||
| msgid "ERROR" | msgid "ERROR" | ||||||
| msgstr "ОШИБКА" | msgstr "ОШИБКА" | ||||||
|  |  | ||||||
| #: list.go:40 | #: list.go:41 | ||||||
| msgid "List ALR repo packages" | msgid "List ALR repo packages" | ||||||
| msgstr "Список пакетов репозитория ALR" | msgstr "Список пакетов репозитория ALR" | ||||||
|  |  | ||||||
| #: list.go:91 | #: list.go:92 | ||||||
| msgid "Error listing installed packages" | msgid "Error listing installed packages" | ||||||
| msgstr "Ошибка при составлении списка установленных пакетов" | msgstr "Ошибка при составлении списка установленных пакетов" | ||||||
|  |  | ||||||
| @@ -383,15 +383,15 @@ msgstr "Сборка пакета" | |||||||
| msgid "Downloading sources" | msgid "Downloading sources" | ||||||
| msgstr "Скачивание источников" | msgstr "Скачивание источников" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:246 | #: pkg/build/build.go:250 | ||||||
| msgid "Building package metadata" | msgid "Building package metadata" | ||||||
| msgstr "Сборка метаданных пакета" | msgstr "Сборка метаданных пакета" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:268 | #: pkg/build/build.go:272 | ||||||
| msgid "Compressing package" | msgid "Compressing package" | ||||||
| msgstr "Сжатие пакета" | msgstr "Сжатие пакета" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:421 | #: pkg/build/build.go:426 | ||||||
| msgid "" | msgid "" | ||||||
| "Your system's CPU architecture doesn't match this package. Do you want to " | "Your system's CPU architecture doesn't match this package. Do you want to " | ||||||
| "build anyway?" | "build anyway?" | ||||||
| @@ -399,46 +399,56 @@ msgstr "" | |||||||
| "Архитектура процессора вашей системы не соответствует этому пакету. Вы все " | "Архитектура процессора вашей системы не соответствует этому пакету. Вы все " | ||||||
| "равно хотите выполнить сборку?" | "равно хотите выполнить сборку?" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:435 | #: pkg/build/build.go:440 | ||||||
| msgid "This package is already installed" | msgid "This package is already installed" | ||||||
| msgstr "Этот пакет уже установлен" | msgstr "Этот пакет уже установлен" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:459 | #: pkg/build/build.go:464 | ||||||
| msgid "Installing build dependencies" | msgid "Installing build dependencies" | ||||||
| msgstr "Установка зависимостей сборки" | msgstr "Установка зависимостей сборки" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:500 | #: pkg/build/build.go:505 | ||||||
| msgid "Installing dependencies" | msgid "Installing dependencies" | ||||||
| msgstr "Установка зависимостей" | msgstr "Установка зависимостей" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:535 | #: pkg/build/build.go:540 | ||||||
| msgid "The checksums array must be the same length as sources" | msgid "The checksums array must be the same length as sources" | ||||||
| msgstr "Массив контрольных сумм должен быть той же длины, что и источники" | msgstr "Массив контрольных сумм должен быть той же длины, что и источники" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:586 | #: pkg/build/build.go:591 | ||||||
| msgid "Would you like to remove the build dependencies?" | msgid "Would you like to remove the build dependencies?" | ||||||
| msgstr "Хотели бы вы удалить зависимости сборки?" | msgstr "Хотели бы вы удалить зависимости сборки?" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:649 | #: pkg/build/build.go:654 | ||||||
| msgid "Executing prepare()" | msgid "Executing prepare()" | ||||||
| msgstr "Исполнение prepare()" | msgstr "Исполнение prepare()" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:659 | #: pkg/build/build.go:664 | ||||||
| msgid "Executing build()" | msgid "Executing build()" | ||||||
| msgstr "Исполнение build()" | msgstr "Исполнение build()" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:689 pkg/build/build.go:709 | #: pkg/build/build.go:694 pkg/build/build.go:714 | ||||||
| msgid "Executing %s()" | msgid "Executing %s()" | ||||||
| msgstr "Исполнение %s()" | msgstr "Исполнение %s()" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:768 | #: pkg/build/build.go:773 | ||||||
| msgid "Error installing native packages" | msgid "Error installing native packages" | ||||||
| msgstr "Ошибка при установке нативных пакетов" | msgstr "Ошибка при установке нативных пакетов" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:792 | #: pkg/build/build.go:797 | ||||||
| msgid "Error installing package" | msgid "Error installing package" | ||||||
| msgstr "Ошибка при установке пакета" | msgstr "Ошибка при установке пакета" | ||||||
|  |  | ||||||
|  | #: pkg/build/build.go:857 | ||||||
|  | msgid "AutoProv is not implemented for this package format, so it's skipped" | ||||||
|  | msgstr "" | ||||||
|  | "AutoProv не реализовано для этого формата пакета, поэтому будет пропущено" | ||||||
|  |  | ||||||
|  | #: pkg/build/build.go:868 | ||||||
|  | msgid "AutoReq is not implemented for this package format, so it's skipped" | ||||||
|  | msgstr "" | ||||||
|  | "AutoReq не реализовано для этого формата пакета, поэтому будет пропущено" | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:35 | #: pkg/build/findDeps.go:35 | ||||||
| msgid "Command not found on the system" | msgid "Command not found on the system" | ||||||
| msgstr "Команда не найдена в системе" | msgstr "Команда не найдена в системе" | ||||||
| @@ -451,16 +461,6 @@ msgstr "Найденная предоставленная зависимость | |||||||
| msgid "Required dependency found" | msgid "Required dependency found" | ||||||
| msgstr "Найдена требуемая зависимость" | msgstr "Найдена требуемая зависимость" | ||||||
|  |  | ||||||
| #: pkg/build/utils.go:133 |  | ||||||
| msgid "AutoProv is not implemented for this package format, so it's skipped" |  | ||||||
| msgstr "" |  | ||||||
| "AutoProv не реализовано для этого формата пакета, поэтому будет пропущено" |  | ||||||
|  |  | ||||||
| #: pkg/build/utils.go:144 |  | ||||||
| msgid "AutoReq is not implemented for this package format, so it's skipped" |  | ||||||
| msgstr "" |  | ||||||
| "AutoReq не реализовано для этого формата пакета, поэтому будет пропущено" |  | ||||||
|  |  | ||||||
| #: pkg/repos/pull.go:79 | #: pkg/repos/pull.go:79 | ||||||
| msgid "Pulling repository" | msgid "Pulling repository" | ||||||
| msgstr "Скачивание репозитория" | msgstr "Скачивание репозитория" | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ import "gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" | |||||||
|  |  | ||||||
| type BuildOpts struct { | type BuildOpts struct { | ||||||
| 	Script      string | 	Script      string | ||||||
|  | 	Repository  string | ||||||
| 	Packages    []string | 	Packages    []string | ||||||
| 	Manager     manager.Manager | 	Manager     manager.Manager | ||||||
| 	Clean       bool | 	Clean       bool | ||||||
| @@ -102,6 +103,7 @@ type BuildVars struct { | |||||||
| 	Scripts       Scripts  `sh:"scripts"` | 	Scripts       Scripts  `sh:"scripts"` | ||||||
| 	AutoReq       []string `sh:"auto_req"` | 	AutoReq       []string `sh:"auto_req"` | ||||||
| 	AutoProv      []string `sh:"auto_prov"` | 	AutoProv      []string `sh:"auto_prov"` | ||||||
|  | 	Base          string | ||||||
| } | } | ||||||
|  |  | ||||||
| type Scripts struct { | type Scripts struct { | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								list.go
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								list.go
									
									
									
									
									
								
							| @@ -30,6 +30,7 @@ import ( | |||||||
|  |  | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config" | ||||||
| 	database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db" | 	database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db" | ||||||
|  | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" | ||||||
| ) | ) | ||||||
| @@ -78,7 +79,7 @@ func ListCmd() *cli.Command { | |||||||
| 			} | 			} | ||||||
| 			defer result.Close() | 			defer result.Close() | ||||||
|  |  | ||||||
| 			var installed map[string]string | 			installedAlrPackages := map[string]string{} | ||||||
| 			if c.Bool("installed") { | 			if c.Bool("installed") { | ||||||
| 				mgr := manager.Detect() | 				mgr := manager.Detect() | ||||||
| 				if mgr == nil { | 				if mgr == nil { | ||||||
| @@ -86,11 +87,20 @@ func ListCmd() *cli.Command { | |||||||
| 					os.Exit(1) | 					os.Exit(1) | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
| 				installed, err = mgr.ListInstalled(&manager.Opts{AsRoot: false}) | 				installed, err := mgr.ListInstalled(&manager.Opts{AsRoot: false}) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					slog.Error(gotext.Get("Error listing installed packages"), "err", err) | 					slog.Error(gotext.Get("Error listing installed packages"), "err", err) | ||||||
| 					os.Exit(1) | 					os.Exit(1) | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|  | 				for pkgName, version := range installed { | ||||||
|  | 					matches := build.RegexpALRPackageName.FindStringSubmatch(pkgName) | ||||||
|  | 					if matches != nil { | ||||||
|  | 						packageName := matches[build.RegexpALRPackageName.SubexpIndex("package")] | ||||||
|  | 						repoName := matches[build.RegexpALRPackageName.SubexpIndex("repo")] | ||||||
|  | 						installedAlrPackages[fmt.Sprintf("%s/%s", repoName, packageName)] = version | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			for result.Next() { | 			for result.Next() { | ||||||
| @@ -106,7 +116,7 @@ func ListCmd() *cli.Command { | |||||||
|  |  | ||||||
| 				version := pkg.Version | 				version := pkg.Version | ||||||
| 				if c.Bool("installed") { | 				if c.Bool("installed") { | ||||||
| 					instVersion, ok := installed[pkg.Name] | 					instVersion, ok := installedAlrPackages[fmt.Sprintf("%s/%s", pkg.Repository, pkg.Name)] | ||||||
| 					if !ok { | 					if !ok { | ||||||
| 						continue | 						continue | ||||||
| 					} else { | 					} else { | ||||||
|   | |||||||
| @@ -28,6 +28,8 @@ import ( | |||||||
| 	"log/slog" | 	"log/slog" | ||||||
| 	"os" | 	"os" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
|  | 	"slices" | ||||||
|  | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @@ -87,6 +89,7 @@ func NewBuilder( | |||||||
|  |  | ||||||
| func (b *Builder) UpdateOptsFromPkg(pkg *db.Package, packages []string) { | func (b *Builder) UpdateOptsFromPkg(pkg *db.Package, packages []string) { | ||||||
| 	repodir := b.config.GetPaths(b.ctx).RepoDir | 	repodir := b.config.GetPaths(b.ctx).RepoDir | ||||||
|  | 	b.opts.Repository = pkg.Repository | ||||||
| 	if pkg.BasePkgName != "" { | 	if pkg.BasePkgName != "" { | ||||||
| 		b.opts.Script = filepath.Join(repodir, pkg.Repository, pkg.BasePkgName, "alr.sh") | 		b.opts.Script = filepath.Join(repodir, pkg.Repository, pkg.BasePkgName, "alr.sh") | ||||||
| 		b.opts.Packages = packages | 		b.opts.Packages = packages | ||||||
| @@ -116,14 +119,11 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error) | |||||||
| 	// возвращаем его, а не собираем заново. | 	// возвращаем его, а не собираем заново. | ||||||
| 	if !b.opts.Clean { | 	if !b.opts.Clean { | ||||||
| 		var remainingVars []*types.BuildVars | 		var remainingVars []*types.BuildVars | ||||||
|  |  | ||||||
| 		for _, vars := range varsOfPackages { | 		for _, vars := range varsOfPackages { | ||||||
| 			builtPkgPath, ok, err := checkForBuiltPackage( | 			builtPkgPath, ok, err := b.checkForBuiltPackage( | ||||||
| 				b.opts.Manager, |  | ||||||
| 				vars, | 				vars, | ||||||
| 				getPkgFormat(b.opts.Manager), | 				getPkgFormat(b.opts.Manager), | ||||||
| 				dirs.BaseDir, | 				dirs.BaseDir, | ||||||
| 				b.info, |  | ||||||
| 			) | 			) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return nil, nil, err | 				return nil, nil, err | ||||||
| @@ -238,7 +238,11 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for _, vars := range varsOfPackages { | 	for _, vars := range varsOfPackages { | ||||||
| 		funcOut, err := b.executePackageFunctions(ctx, dec, dirs, vars.Name) | 		packageName := "" | ||||||
|  | 		if vars.Base != "" { | ||||||
|  | 			packageName = vars.Name | ||||||
|  | 		} | ||||||
|  | 		funcOut, err := b.executePackageFunctions(ctx, dec, dirs, packageName) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, nil, err | 			return nil, nil, err | ||||||
| 		} | 		} | ||||||
| @@ -247,7 +251,7 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error) | |||||||
|  |  | ||||||
| 		pkgFormat := getPkgFormat(b.opts.Manager) // Получаем формат пакета | 		pkgFormat := getPkgFormat(b.opts.Manager) // Получаем формат пакета | ||||||
|  |  | ||||||
| 		pkgInfo, err := buildPkgMetadata(ctx, vars, dirs, pkgFormat, b.info, append(repoDeps, builtNames...), funcOut.Contents) // Собираем метаданные пакета | 		pkgInfo, err := b.buildPkgMetadata(ctx, vars, dirs, pkgFormat, append(repoDeps, builtNames...), funcOut.Contents) // Собираем метаданные пакета | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, nil, err | 			return nil, nil, err | ||||||
| 		} | 		} | ||||||
| @@ -366,6 +370,7 @@ func (b *Builder) executeFirstPass( | |||||||
| 		} | 		} | ||||||
| 		vars := preVars.ToBuildVars() | 		vars := preVars.ToBuildVars() | ||||||
| 		vars.Name = pkgName | 		vars.Name = pkgName | ||||||
|  | 		vars.Base = pkgs.BasePkgName | ||||||
|  |  | ||||||
| 		varsOfPackages = append(varsOfPackages, &vars) | 		varsOfPackages = append(varsOfPackages, &vars) | ||||||
| 	} | 	} | ||||||
| @@ -678,8 +683,8 @@ func (b *Builder) executePackageFunctions( | |||||||
| 	var filesFuncName string | 	var filesFuncName string | ||||||
|  |  | ||||||
| 	if packageName == "" { | 	if packageName == "" { | ||||||
| 		filesFuncName = "files" |  | ||||||
| 		packageFuncName = "package" | 		packageFuncName = "package" | ||||||
|  | 		filesFuncName = "files" | ||||||
| 	} else { | 	} else { | ||||||
| 		packageFuncName = fmt.Sprintf("package_%s", packageName) | 		packageFuncName = fmt.Sprintf("package_%s", packageName) | ||||||
| 		filesFuncName = fmt.Sprintf("files_%s", packageName) | 		filesFuncName = fmt.Sprintf("files_%s", packageName) | ||||||
| @@ -795,3 +800,109 @@ func (b *Builder) InstallALRPackages(ctx context.Context, pkgs []db.Package, opt | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Функция buildPkgMetadata создает метаданные для пакета, который будет собран. | ||||||
|  | func (b *Builder) buildPkgMetadata( | ||||||
|  | 	ctx context.Context, | ||||||
|  | 	vars *types.BuildVars, | ||||||
|  | 	dirs types.Directories, | ||||||
|  | 	pkgFormat string, | ||||||
|  | 	deps []string, | ||||||
|  | 	preferedContents *[]string, | ||||||
|  | ) (*nfpm.Info, error) { | ||||||
|  | 	pkgInfo := getBasePkgInfo(vars, b.info, &b.opts) | ||||||
|  | 	pkgInfo.Description = vars.Description | ||||||
|  | 	pkgInfo.Platform = "linux" | ||||||
|  | 	pkgInfo.Homepage = vars.Homepage | ||||||
|  | 	pkgInfo.License = strings.Join(vars.Licenses, ", ") | ||||||
|  | 	pkgInfo.Maintainer = vars.Maintainer | ||||||
|  | 	pkgInfo.Overridables = nfpm.Overridables{ | ||||||
|  | 		Conflicts: append(vars.Conflicts, vars.Name), | ||||||
|  | 		Replaces:  vars.Replaces, | ||||||
|  | 		Provides:  append(vars.Provides, vars.Name), | ||||||
|  | 		Depends:   deps, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if pkgFormat == "apk" { | ||||||
|  | 		// Alpine отказывается устанавливать пакеты, которые предоставляют сами себя, поэтому удаляем такие элементы | ||||||
|  | 		pkgInfo.Overridables.Provides = slices.DeleteFunc(pkgInfo.Overridables.Provides, func(s string) bool { | ||||||
|  | 			return s == pkgInfo.Name | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if vars.Epoch != 0 { | ||||||
|  | 		pkgInfo.Epoch = strconv.FormatUint(uint64(vars.Epoch), 10) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	setScripts(vars, pkgInfo, dirs.ScriptDir) | ||||||
|  |  | ||||||
|  | 	if slices.Contains(vars.Architectures, "all") { | ||||||
|  | 		pkgInfo.Arch = "all" | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	contents, err := buildContents(vars, dirs, preferedContents) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	slog.Info("contents", "contents", contents) | ||||||
|  | 	pkgInfo.Overridables.Contents = contents | ||||||
|  |  | ||||||
|  | 	if len(vars.AutoProv) == 1 && decoder.IsTruthy(vars.AutoProv[0]) { | ||||||
|  | 		if pkgFormat == "rpm" { | ||||||
|  | 			err = rpmFindProvides(ctx, pkgInfo, dirs) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return nil, err | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			slog.Info(gotext.Get("AutoProv is not implemented for this package format, so it's skipped")) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(vars.AutoReq) == 1 && decoder.IsTruthy(vars.AutoReq[0]) { | ||||||
|  | 		if pkgFormat == "rpm" { | ||||||
|  | 			err = rpmFindRequires(ctx, pkgInfo, dirs) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return nil, err | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			slog.Info(gotext.Get("AutoReq is not implemented for this package format, so it's skipped")) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return pkgInfo, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Функция checkForBuiltPackage пытается обнаружить ранее собранный пакет и вернуть его путь | ||||||
|  | // и true, если нашла. Если нет, возвратит "", false, nil. | ||||||
|  | func (b *Builder) checkForBuiltPackage( | ||||||
|  | 	vars *types.BuildVars, | ||||||
|  | 	pkgFormat, | ||||||
|  | 	baseDir string, | ||||||
|  | ) (string, bool, error) { | ||||||
|  | 	filename, err := b.pkgFileName(vars, pkgFormat) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", false, err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	pkgPath := filepath.Join(baseDir, filename) | ||||||
|  |  | ||||||
|  | 	_, err = os.Stat(pkgPath) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", false, nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return pkgPath, true, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // pkgFileName returns the filename of the package if it were to be built. | ||||||
|  | // This is used to check if the package has already been built. | ||||||
|  | func (b *Builder) pkgFileName(vars *types.BuildVars, pkgFormat string) (string, error) { | ||||||
|  | 	pkgInfo := getBasePkgInfo(vars, b.info, &b.opts) | ||||||
|  |  | ||||||
|  | 	packager, err := nfpm.Get(pkgFormat) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return packager.ConventionalFileName(pkgInfo), nil | ||||||
|  | } | ||||||
|   | |||||||
| @@ -17,11 +17,11 @@ | |||||||
| package build | package build | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"fmt" | ||||||
| 	"io" | 	"io" | ||||||
| 	"log/slog" |  | ||||||
| 	"os" | 	"os" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
|  | 	"regexp" | ||||||
| 	"runtime" | 	"runtime" | ||||||
| 	"slices" | 	"slices" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| @@ -33,7 +33,6 @@ import ( | |||||||
| 	_ "github.com/goreleaser/nfpm/v2/arch" | 	_ "github.com/goreleaser/nfpm/v2/arch" | ||||||
| 	_ "github.com/goreleaser/nfpm/v2/deb" | 	_ "github.com/goreleaser/nfpm/v2/deb" | ||||||
| 	_ "github.com/goreleaser/nfpm/v2/rpm" | 	_ "github.com/goreleaser/nfpm/v2/rpm" | ||||||
| 	"github.com/leonelquinteros/gotext" |  | ||||||
| 	"mvdan.cc/sh/v3/syntax" | 	"mvdan.cc/sh/v3/syntax" | ||||||
|  |  | ||||||
| 	"github.com/goreleaser/nfpm/v2" | 	"github.com/goreleaser/nfpm/v2" | ||||||
| @@ -42,7 +41,6 @@ import ( | |||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/cpu" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/cpu" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/decoder" |  | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" | ||||||
| @@ -77,77 +75,6 @@ func prepareDirs(dirs types.Directories) error { | |||||||
| 	return os.MkdirAll(dirs.PkgDir, 0o755) // Создаем директорию для пакетов | 	return os.MkdirAll(dirs.PkgDir, 0o755) // Создаем директорию для пакетов | ||||||
| } | } | ||||||
|  |  | ||||||
| // Функция buildPkgMetadata создает метаданные для пакета, который будет собран. |  | ||||||
| func buildPkgMetadata( |  | ||||||
| 	ctx context.Context, |  | ||||||
| 	vars *types.BuildVars, |  | ||||||
| 	dirs types.Directories, |  | ||||||
| 	pkgFormat string, |  | ||||||
| 	info *distro.OSRelease, |  | ||||||
| 	deps []string, |  | ||||||
| 	preferedContents *[]string, |  | ||||||
| ) (*nfpm.Info, error) { |  | ||||||
| 	pkgInfo := getBasePkgInfo(vars, info) |  | ||||||
| 	pkgInfo.Description = vars.Description |  | ||||||
| 	pkgInfo.Platform = "linux" |  | ||||||
| 	pkgInfo.Homepage = vars.Homepage |  | ||||||
| 	pkgInfo.License = strings.Join(vars.Licenses, ", ") |  | ||||||
| 	pkgInfo.Maintainer = vars.Maintainer |  | ||||||
| 	pkgInfo.Overridables = nfpm.Overridables{ |  | ||||||
| 		Conflicts: vars.Conflicts, |  | ||||||
| 		Replaces:  vars.Replaces, |  | ||||||
| 		Provides:  vars.Provides, |  | ||||||
| 		Depends:   deps, |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if pkgFormat == "apk" { |  | ||||||
| 		// Alpine отказывается устанавливать пакеты, которые предоставляют сами себя, поэтому удаляем такие элементы |  | ||||||
| 		pkgInfo.Overridables.Provides = slices.DeleteFunc(pkgInfo.Overridables.Provides, func(s string) bool { |  | ||||||
| 			return s == pkgInfo.Name |  | ||||||
| 		}) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if vars.Epoch != 0 { |  | ||||||
| 		pkgInfo.Epoch = strconv.FormatUint(uint64(vars.Epoch), 10) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	setScripts(vars, pkgInfo, dirs.ScriptDir) |  | ||||||
|  |  | ||||||
| 	if slices.Contains(vars.Architectures, "all") { |  | ||||||
| 		pkgInfo.Arch = "all" |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	contents, err := buildContents(vars, dirs, preferedContents) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	pkgInfo.Overridables.Contents = contents |  | ||||||
|  |  | ||||||
| 	if len(vars.AutoProv) == 1 && decoder.IsTruthy(vars.AutoProv[0]) { |  | ||||||
| 		if pkgFormat == "rpm" { |  | ||||||
| 			err = rpmFindProvides(ctx, pkgInfo, dirs) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return nil, err |  | ||||||
| 			} |  | ||||||
| 		} else { |  | ||||||
| 			slog.Info(gotext.Get("AutoProv is not implemented for this package format, so it's skipped")) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if len(vars.AutoReq) == 1 && decoder.IsTruthy(vars.AutoReq[0]) { |  | ||||||
| 		if pkgFormat == "rpm" { |  | ||||||
| 			err = rpmFindRequires(ctx, pkgInfo, dirs) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return nil, err |  | ||||||
| 			} |  | ||||||
| 		} else { |  | ||||||
| 			slog.Info(gotext.Get("AutoReq is not implemented for this package format, so it's skipped")) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return pkgInfo, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Функция buildContents создает секцию содержимого пакета, которая содержит файлы, | // Функция buildContents создает секцию содержимого пакета, которая содержит файлы, | ||||||
| // которые будут включены в конечный пакет. | // которые будут включены в конечный пакет. | ||||||
| func buildContents(vars *types.BuildVars, dirs types.Directories, preferedContents *[]string) ([]*files.Content, error) { | func buildContents(vars *types.BuildVars, dirs types.Directories, preferedContents *[]string) ([]*files.Content, error) { | ||||||
| @@ -244,33 +171,11 @@ func buildContents(vars *types.BuildVars, dirs types.Directories, preferedConten | |||||||
| 	return contents, nil | 	return contents, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| // Функция checkForBuiltPackage пытается обнаружить ранее собранный пакет и вернуть его путь | var RegexpALRPackageName = regexp.MustCompile(`^(?P<package>[^+]+)\+alr-(?P<repo>.+)$`) | ||||||
| // и true, если нашла. Если нет, возвратит "", false, nil. |  | ||||||
| func checkForBuiltPackage( |  | ||||||
| 	mgr manager.Manager, |  | ||||||
| 	vars *types.BuildVars, |  | ||||||
| 	pkgFormat, |  | ||||||
| 	baseDir string, |  | ||||||
| 	info *distro.OSRelease, |  | ||||||
| ) (string, bool, error) { |  | ||||||
| 	filename, err := pkgFileName(vars, pkgFormat, info) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return "", false, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	pkgPath := filepath.Join(baseDir, filename) | func getBasePkgInfo(vars *types.BuildVars, info *distro.OSRelease, opts *types.BuildOpts) *nfpm.Info { | ||||||
|  |  | ||||||
| 	_, err = os.Stat(pkgPath) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return "", false, nil |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return pkgPath, true, nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func getBasePkgInfo(vars *types.BuildVars, info *distro.OSRelease) *nfpm.Info { |  | ||||||
| 	return &nfpm.Info{ | 	return &nfpm.Info{ | ||||||
| 		Name:    vars.Name, | 		Name:    fmt.Sprintf("%s+alr-%s", vars.Name, opts.Repository), | ||||||
| 		Arch:    cpu.Arch(), | 		Arch:    cpu.Arch(), | ||||||
| 		Version: vars.Version, | 		Version: vars.Version, | ||||||
| 		Release: overrides.ReleasePlatformSpecific(vars.Release, info), | 		Release: overrides.ReleasePlatformSpecific(vars.Release, info), | ||||||
| @@ -278,19 +183,6 @@ func getBasePkgInfo(vars *types.BuildVars, info *distro.OSRelease) *nfpm.Info { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // pkgFileName returns the filename of the package if it were to be built. |  | ||||||
| // This is used to check if the package has already been built. |  | ||||||
| func pkgFileName(vars *types.BuildVars, pkgFormat string, info *distro.OSRelease) (string, error) { |  | ||||||
| 	pkgInfo := getBasePkgInfo(vars, info) |  | ||||||
|  |  | ||||||
| 	packager, err := nfpm.Get(pkgFormat) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return "", err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return packager.ConventionalFileName(pkgInfo), nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Функция getPkgFormat возвращает формат пакета из менеджера пакетов, | // Функция getPkgFormat возвращает формат пакета из менеджера пакетов, | ||||||
| // или ALR_PKG_FORMAT, если он установлен. | // или ALR_PKG_FORMAT, если он установлен. | ||||||
| func getPkgFormat(mgr manager.Manager) string { | func getPkgFormat(mgr manager.Manager) string { | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								repo.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								repo.go
									
									
									
									
									
								
							| @@ -83,7 +83,7 @@ func AddRepoCmd() *cli.Command { | |||||||
| 				os.Exit(1) | 				os.Exit(1) | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			err = toml.NewEncoder(cfgFl).Encode(cfg) | 			err = cfg.Save(cfgFl) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				slog.Error(gotext.Get("Error encoding config"), "err", err) | 				slog.Error(gotext.Get("Error encoding config"), "err", err) | ||||||
| 				os.Exit(1) | 				os.Exit(1) | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								upgrade.go
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								upgrade.go
									
									
									
									
									
								
							| @@ -29,7 +29,6 @@ import ( | |||||||
| 	"github.com/urfave/cli/v2" | 	"github.com/urfave/cli/v2" | ||||||
| 	"go.elara.ws/vercmp" | 	"go.elara.ws/vercmp" | ||||||
| 	"golang.org/x/exp/maps" | 	"golang.org/x/exp/maps" | ||||||
| 	"golang.org/x/exp/slices" |  | ||||||
|  |  | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config" | ||||||
| 	database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db" | 	database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db" | ||||||
| @@ -39,6 +38,7 @@ import ( | |||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" | ||||||
|  | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/search" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func UpgradeCmd() *cli.Command { | func UpgradeCmd() *cli.Command { | ||||||
| @@ -85,7 +85,7 @@ func UpgradeCmd() *cli.Command { | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			updates, err := checkForUpdates(ctx, mgr, cfg, rs, info) | 			updates, err := checkForUpdates(ctx, mgr, cfg, db, rs, info) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				slog.Error(gotext.Get("Error checking for updates"), "err", err) | 				slog.Error(gotext.Get("Error checking for updates"), "err", err) | ||||||
| 				os.Exit(1) | 				os.Exit(1) | ||||||
| @@ -121,6 +121,7 @@ func checkForUpdates( | |||||||
| 	ctx context.Context, | 	ctx context.Context, | ||||||
| 	mgr manager.Manager, | 	mgr manager.Manager, | ||||||
| 	cfg *config.ALRConfig, | 	cfg *config.ALRConfig, | ||||||
|  | 	db *database.Database, | ||||||
| 	rs *repos.Repos, | 	rs *repos.Repos, | ||||||
| 	info *distro.OSRelease, | 	info *distro.OSRelease, | ||||||
| ) ([]database.Package, error) { | ) ([]database.Package, error) { | ||||||
| @@ -130,25 +131,27 @@ func checkForUpdates( | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	pkgNames := maps.Keys(installed) | 	pkgNames := maps.Keys(installed) | ||||||
| 	found, _, err := rs.FindPkgs(ctx, pkgNames) |  | ||||||
|  | 	s := search.New(db) | ||||||
|  |  | ||||||
|  | 	var out []database.Package | ||||||
|  | 	for _, pkgName := range pkgNames { | ||||||
|  | 		matches := build.RegexpALRPackageName.FindStringSubmatch(pkgName) | ||||||
|  | 		if matches != nil { | ||||||
|  | 			packageName := matches[build.RegexpALRPackageName.SubexpIndex("package")] | ||||||
|  | 			repoName := matches[build.RegexpALRPackageName.SubexpIndex("repo")] | ||||||
|  |  | ||||||
|  | 			pkgs, err := s.Search( | ||||||
|  | 				ctx, | ||||||
|  | 				search.NewSearchOptions(). | ||||||
|  | 					WithName(packageName). | ||||||
|  | 					WithRepository(repoName). | ||||||
|  | 					Build(), | ||||||
|  | 			) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return nil, err | 				return nil, err | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 	var out []database.Package |  | ||||||
| 	for pkgName, pkgs := range found { |  | ||||||
| 		if slices.Contains(cfg.IgnorePkgUpdates(ctx), pkgName) { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		if len(pkgs) > 1 { |  | ||||||
| 			// Puts the element with the highest version first |  | ||||||
| 			slices.SortFunc(pkgs, func(a, b database.Package) int { |  | ||||||
| 				return vercmp.Compare(a.Version, b.Version) |  | ||||||
| 			}) |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// First element is the package we want to install |  | ||||||
| 			pkg := pkgs[0] | 			pkg := pkgs[0] | ||||||
|  |  | ||||||
| 			repoVer := pkg.Version | 			repoVer := pkg.Version | ||||||
| @@ -167,5 +170,8 @@ func checkForUpdates( | |||||||
| 				out = append(out, pkg) | 				out = append(out, pkg) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	return out, nil | 	return out, nil | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user