feat: add skiplists for auto_req and auto_prov #64
| @@ -11,7 +11,7 @@ | |||||||
|     <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"> |     <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"> | ||||||
|         <text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text> |         <text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text> | ||||||
|         <text x="33.5" y="14">coverage</text> |         <text x="33.5" y="14">coverage</text> | ||||||
|         <text x="86" y="15" fill="#010101" fill-opacity=".3">19.4%</text> |         <text x="86" y="15" fill="#010101" fill-opacity=".3">19.2%</text> | ||||||
|         <text x="86" y="14">19.4%</text> |         <text x="86" y="14">19.2%</text> | ||||||
|     </g> |     </g> | ||||||
| </svg> | </svg> | ||||||
|   | |||||||
| Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 926 B | 
| @@ -100,13 +100,19 @@ func e2eSpawn(runnable e2e.Runnable, command e2e.Command, timeout time.Duration, | |||||||
|  |  | ||||||
| var ALL_SYSTEMS []string = []string{ | var ALL_SYSTEMS []string = []string{ | ||||||
| 	"ubuntu-24.04", | 	"ubuntu-24.04", | ||||||
| 	// "alt-sisyphus", | 	"alt-sisyphus", | ||||||
|  | 	"fedora-41", | ||||||
| 	// "archlinux", | 	// "archlinux", | ||||||
| 	// "alpine", | 	// "alpine", | ||||||
| 	// "opensuse-leap", | 	// "opensuse-leap", | ||||||
| 	// "redos-8", | 	// "redos-8", | ||||||
| } | } | ||||||
|  |  | ||||||
|  | var AUTOREQ_AUTOPROV_SYSTEMS []string = []string{ | ||||||
|  | 	"alt-sisyphus", | ||||||
|  | 	"fedora-41", | ||||||
|  | } | ||||||
|  |  | ||||||
| var COMMON_SYSTEMS []string = []string{ | var COMMON_SYSTEMS []string = []string{ | ||||||
| 	"ubuntu-24.04", | 	"ubuntu-24.04", | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| FROM registry.altlinux.org/sisyphus/alt:latest | FROM registry.altlinux.org/sisyphus/alt:latest | ||||||
| RUN apt-get update && apt-get install -y ca-certificates | RUN apt-get update && apt-get install -y ca-certificates rpm-build | ||||||
| RUN useradd -m -s /bin/bash alr-user | RUN useradd -m -s /bin/bash alr-user | ||||||
| USER alr-user | USER alr-user | ||||||
|  | WORKDIR /home/alr-user | ||||||
| ENTRYPOINT ["tail", "-f", "/dev/null"] | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										8
									
								
								e2e-tests/images/Dockerfile.fedora-41
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								e2e-tests/images/Dockerfile.fedora-41
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | FROM fedora:41 | ||||||
|  | RUN dnf install -y ca-certificates sudo rpm-build | ||||||
|  | RUN useradd -m -s /bin/bash alr-user && \ | ||||||
|  |     echo "alr-user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/alr-user && \ | ||||||
|  |     chmod 0440 /etc/sudoers.d/alr-user | ||||||
|  | USER alr-user | ||||||
|  | WORKDIR /home/alr-user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										80
									
								
								e2e-tests/issue_41_autoreq_skiplist_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								e2e-tests/issue_41_autoreq_skiplist_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | |||||||
|  | // ALR - Any Linux Repository | ||||||
|  | // Copyright (C) 2025 Евгений Храмов | ||||||
|  | // | ||||||
|  | // 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/>. | ||||||
|  |  | ||||||
|  | //go:build e2e | ||||||
|  |  | ||||||
|  | package e2etests_test | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
|  | 	"github.com/efficientgo/e2e" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestE2EIssue41AutoreqSkiplist(t *testing.T) { | ||||||
|  | 	dockerMultipleRun( | ||||||
|  | 		t, | ||||||
|  | 		"issue-41-autoreq-skiplist", | ||||||
|  | 		AUTOREQ_AUTOPROV_SYSTEMS, | ||||||
|  | 		func(t *testing.T, r e2e.Runnable) { | ||||||
|  | 			err := r.Exec(e2e.NewCommand( | ||||||
|  | 				"alr", | ||||||
|  | 				"addrepo", | ||||||
|  | 				"--name", | ||||||
|  | 				"alr-repo", | ||||||
|  | 				"--url", | ||||||
|  | 				"https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"alr", | ||||||
|  | 				"ref", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"alr", | ||||||
|  | 				"build", | ||||||
|  | 				"-p", | ||||||
|  | 				"alr-repo/test-autoreq-autoprov", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sh", | ||||||
|  | 				"-c", | ||||||
|  | 				"rpm -qp --requires *.rpm | grep \"^/bin/sh$\"", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sh", | ||||||
|  | 				"-c", | ||||||
|  | 				"rpm -qp --requires *.rpm | grep \"^/bin/bash$\"", | ||||||
|  | 			)) | ||||||
|  | 			assert.Error(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sh", | ||||||
|  | 				"-c", | ||||||
|  | 				"rpm -qp --requires *.rpm | grep \"^/bin/zsh$\"", | ||||||
|  | 			)) | ||||||
|  | 			assert.Error(t, err) | ||||||
|  | 		}, | ||||||
|  | 	) | ||||||
|  | } | ||||||
| @@ -123,15 +123,29 @@ func (d *Decoder) DecodeVars(val any) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	rVal := reflect.ValueOf(val).Elem() | 	rVal := reflect.ValueOf(val).Elem() | ||||||
|  | 	return d.decodeStruct(rVal) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (d *Decoder) decodeStruct(rVal reflect.Value) error { | ||||||
| 	for i := 0; i < rVal.NumField(); i++ { | 	for i := 0; i < rVal.NumField(); i++ { | ||||||
| 		field := rVal.Field(i) | 		field := rVal.Field(i) | ||||||
| 		fieldType := rVal.Type().Field(i) | 		fieldType := rVal.Type().Field(i) | ||||||
|  |  | ||||||
|  | 		// Пропускаем неэкспортируемые поля | ||||||
| 		if !fieldType.IsExported() { | 		if !fieldType.IsExported() { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		// Обрабатываем встроенные поля рекурсивно | ||||||
|  | 		if fieldType.Anonymous { | ||||||
|  | 			if field.Kind() == reflect.Struct { | ||||||
|  | 				if err := d.decodeStruct(field); err != nil { | ||||||
|  | 					return err | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		name := fieldType.Name | 		name := fieldType.Name | ||||||
| 		tag := fieldType.Tag.Get("sh") | 		tag := fieldType.Tag.Get("sh") | ||||||
| 		required := false | 		required := false | ||||||
| @@ -160,7 +174,6 @@ func (d *Decoder) DecodeVars(val any) error { | |||||||
|  |  | ||||||
| 		field.Set(newVal.Elem()) | 		field.Set(newVal.Elem()) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -337,92 +337,92 @@ msgstr "" | |||||||
| msgid "Error while running app" | msgid "Error while running app" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:156 | #: pkg/build/build.go:157 | ||||||
| msgid "Failed to prompt user to view build script" | msgid "Failed to prompt user to view build script" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:160 | #: pkg/build/build.go:161 | ||||||
| msgid "Building package" | msgid "Building package" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:208 | #: pkg/build/build.go:209 | ||||||
| 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:235 | #: pkg/build/build.go:238 | ||||||
| msgid "Downloading sources" | msgid "Downloading sources" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:257 | #: pkg/build/build.go:260 | ||||||
| msgid "Building package metadata" | msgid "Building package metadata" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:279 | #: pkg/build/build.go:282 | ||||||
| msgid "Compressing package" | msgid "Compressing package" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:438 | #: pkg/build/build.go:441 | ||||||
| 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:452 | #: pkg/build/build.go:455 | ||||||
| msgid "This package is already installed" | msgid "This package is already installed" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:476 | #: pkg/build/build.go:479 | ||||||
| msgid "Installing build dependencies" | msgid "Installing build dependencies" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:521 | #: pkg/build/build.go:524 | ||||||
| msgid "Installing dependencies" | msgid "Installing dependencies" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:602 | #: pkg/build/build.go:605 | ||||||
| msgid "Would you like to remove the build dependencies?" | msgid "Would you like to remove the build dependencies?" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:665 | #: pkg/build/build.go:668 | ||||||
| msgid "Executing prepare()" | msgid "Executing prepare()" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:675 | #: pkg/build/build.go:678 | ||||||
| msgid "Executing build()" | msgid "Executing build()" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:705 pkg/build/build.go:725 | #: pkg/build/build.go:708 pkg/build/build.go:728 | ||||||
| msgid "Executing %s()" | msgid "Executing %s()" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:784 | #: pkg/build/build.go:787 | ||||||
| msgid "Error installing native packages" | msgid "Error installing native packages" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:808 | #: pkg/build/build.go:811 | ||||||
| msgid "Error installing package" | msgid "Error installing package" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:867 | #: pkg/build/find_deps/alt_linux.go:35 | ||||||
| msgid "AutoProv is not implemented for this package format, so it's skipped" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: pkg/build/build.go:878 |  | ||||||
| msgid "AutoReq is not implemented for this package format, so it's skipped" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:35 |  | ||||||
| msgid "Command not found on the system" | msgid "Command not found on the system" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:82 | #: pkg/build/find_deps/alt_linux.go:86 | ||||||
| msgid "Provided dependency found" | msgid "Provided dependency found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:89 | #: pkg/build/find_deps/alt_linux.go:93 | ||||||
| msgid "Required dependency found" | msgid "Required dependency found" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #: pkg/build/find_deps/empty.go:32 | ||||||
|  | msgid "AutoProv is not implemented for this package format, so it's skipped" | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
|  | #: pkg/build/find_deps/empty.go:37 | ||||||
|  | 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 "" | ||||||
|   | |||||||
| @@ -349,31 +349,31 @@ msgstr "Показать справку" | |||||||
| msgid "Error while running app" | msgid "Error while running app" | ||||||
| msgstr "Ошибка при запуске приложения" | msgstr "Ошибка при запуске приложения" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:156 | #: pkg/build/build.go:157 | ||||||
| msgid "Failed to prompt user to view build script" | msgid "Failed to prompt user to view build script" | ||||||
| msgstr "Не удалось предложить пользователю просмотреть скрипт сборки" | msgstr "Не удалось предложить пользователю просмотреть скрипт сборки" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:160 | #: pkg/build/build.go:161 | ||||||
| msgid "Building package" | msgid "Building package" | ||||||
| msgstr "Сборка пакета" | msgstr "Сборка пакета" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:208 | #: pkg/build/build.go:209 | ||||||
| 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:235 | #: pkg/build/build.go:238 | ||||||
| msgid "Downloading sources" | msgid "Downloading sources" | ||||||
| msgstr "Скачивание источников" | msgstr "Скачивание источников" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:257 | #: pkg/build/build.go:260 | ||||||
| msgid "Building package metadata" | msgid "Building package metadata" | ||||||
| msgstr "Сборка метаданных пакета" | msgstr "Сборка метаданных пакета" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:279 | #: pkg/build/build.go:282 | ||||||
| msgid "Compressing package" | msgid "Compressing package" | ||||||
| msgstr "Сжатие пакета" | msgstr "Сжатие пакета" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:438 | #: pkg/build/build.go:441 | ||||||
| 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?" | ||||||
| @@ -381,64 +381,64 @@ msgstr "" | |||||||
| "Архитектура процессора вашей системы не соответствует этому пакету. Вы все " | "Архитектура процессора вашей системы не соответствует этому пакету. Вы все " | ||||||
| "равно хотите выполнить сборку?" | "равно хотите выполнить сборку?" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:452 | #: pkg/build/build.go:455 | ||||||
| msgid "This package is already installed" | msgid "This package is already installed" | ||||||
| msgstr "Этот пакет уже установлен" | msgstr "Этот пакет уже установлен" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:476 | #: pkg/build/build.go:479 | ||||||
| msgid "Installing build dependencies" | msgid "Installing build dependencies" | ||||||
| msgstr "Установка зависимостей сборки" | msgstr "Установка зависимостей сборки" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:521 | #: pkg/build/build.go:524 | ||||||
| msgid "Installing dependencies" | msgid "Installing dependencies" | ||||||
| msgstr "Установка зависимостей" | msgstr "Установка зависимостей" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:602 | #: pkg/build/build.go:605 | ||||||
| msgid "Would you like to remove the build dependencies?" | msgid "Would you like to remove the build dependencies?" | ||||||
| msgstr "Хотели бы вы удалить зависимости сборки?" | msgstr "Хотели бы вы удалить зависимости сборки?" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:665 | #: pkg/build/build.go:668 | ||||||
| msgid "Executing prepare()" | msgid "Executing prepare()" | ||||||
| msgstr "Исполнение prepare()" | msgstr "Исполнение prepare()" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:675 | #: pkg/build/build.go:678 | ||||||
| msgid "Executing build()" | msgid "Executing build()" | ||||||
| msgstr "Исполнение build()" | msgstr "Исполнение build()" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:705 pkg/build/build.go:725 | #: pkg/build/build.go:708 pkg/build/build.go:728 | ||||||
| msgid "Executing %s()" | msgid "Executing %s()" | ||||||
| msgstr "Исполнение %s()" | msgstr "Исполнение %s()" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:784 | #: pkg/build/build.go:787 | ||||||
| msgid "Error installing native packages" | msgid "Error installing native packages" | ||||||
| msgstr "Ошибка при установке нативных пакетов" | msgstr "Ошибка при установке нативных пакетов" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:808 | #: pkg/build/build.go:811 | ||||||
| msgid "Error installing package" | msgid "Error installing package" | ||||||
| msgstr "Ошибка при установке пакета" | msgstr "Ошибка при установке пакета" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:867 | #: pkg/build/find_deps/alt_linux.go:35 | ||||||
|  | msgid "Command not found on the system" | ||||||
|  | msgstr "Команда не найдена в системе" | ||||||
|  |  | ||||||
|  | #: pkg/build/find_deps/alt_linux.go:86 | ||||||
|  | msgid "Provided dependency found" | ||||||
|  | msgstr "Найденная предоставленная зависимость" | ||||||
|  |  | ||||||
|  | #: pkg/build/find_deps/alt_linux.go:93 | ||||||
|  | msgid "Required dependency found" | ||||||
|  | msgstr "Найдена требуемая зависимость" | ||||||
|  |  | ||||||
|  | #: pkg/build/find_deps/empty.go:32 | ||||||
| msgid "AutoProv is not implemented for this package format, so it's skipped" | msgid "AutoProv is not implemented for this package format, so it's skipped" | ||||||
| msgstr "" | msgstr "" | ||||||
| "AutoProv не реализовано для этого формата пакета, поэтому будет пропущено" | "AutoProv не реализовано для этого формата пакета, поэтому будет пропущено" | ||||||
|  |  | ||||||
| #: pkg/build/build.go:878 | #: pkg/build/find_deps/empty.go:37 | ||||||
| msgid "AutoReq is not implemented for this package format, so it's skipped" | msgid "AutoReq is not implemented for this package format, so it's skipped" | ||||||
| msgstr "" | msgstr "" | ||||||
| "AutoReq не реализовано для этого формата пакета, поэтому будет пропущено" | "AutoReq не реализовано для этого формата пакета, поэтому будет пропущено" | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:35 |  | ||||||
| msgid "Command not found on the system" |  | ||||||
| msgstr "Команда не найдена в системе" |  | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:82 |  | ||||||
| msgid "Provided dependency found" |  | ||||||
| msgstr "Найденная предоставленная зависимость" |  | ||||||
|  |  | ||||||
| #: pkg/build/findDeps.go:89 |  | ||||||
| msgid "Required dependency found" |  | ||||||
| msgstr "Найдена требуемая зависимость" |  | ||||||
|  |  | ||||||
| #: pkg/repos/pull.go:79 | #: pkg/repos/pull.go:79 | ||||||
| msgid "Pulling repository" | msgid "Pulling repository" | ||||||
| msgstr "Скачивание репозитория" | msgstr "Скачивание репозитория" | ||||||
|   | |||||||
| @@ -51,31 +51,15 @@ type BuildVarsPre 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"` | ||||||
|  | 	AutoReqSkipList  []string `sh:"auto_req_skiplist"` | ||||||
|  | 	AutoProvSkipList []string `sh:"auto_prov_skiplist"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func (bv *BuildVarsPre) ToBuildVars() BuildVars { | func (bv *BuildVarsPre) ToBuildVars() BuildVars { | ||||||
| 	return BuildVars{ | 	return BuildVars{ | ||||||
| 		Name:         "", | 		Name:         "", | ||||||
| 		Version:       bv.Version, | 		Base:         "", | ||||||
| 		Release:       bv.Release, | 		BuildVarsPre: *bv, | ||||||
| 		Epoch:         bv.Epoch, |  | ||||||
| 		Description:   bv.Description, |  | ||||||
| 		Homepage:      bv.Homepage, |  | ||||||
| 		Maintainer:    bv.Maintainer, |  | ||||||
| 		Architectures: bv.Architectures, |  | ||||||
| 		Licenses:      bv.Licenses, |  | ||||||
| 		Provides:      bv.Provides, |  | ||||||
| 		Conflicts:     bv.Conflicts, |  | ||||||
| 		Depends:       bv.Depends, |  | ||||||
| 		BuildDepends:  bv.BuildDepends, |  | ||||||
| 		OptDepends:    bv.OptDepends, |  | ||||||
| 		Replaces:      bv.Replaces, |  | ||||||
| 		Sources:       bv.Sources, |  | ||||||
| 		Checksums:     bv.Checksums, |  | ||||||
| 		Backup:        bv.Backup, |  | ||||||
| 		Scripts:       bv.Scripts, |  | ||||||
| 		AutoReq:       bv.AutoReq, |  | ||||||
| 		AutoProv:      bv.AutoProv, |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -83,27 +67,8 @@ func (bv *BuildVarsPre) ToBuildVars() BuildVars { | |||||||
| // to build a package | // to build a package | ||||||
| type BuildVars struct { | type BuildVars struct { | ||||||
| 	Name string `sh:"name,required"` | 	Name string `sh:"name,required"` | ||||||
| 	Version       string   `sh:"version,required"` |  | ||||||
| 	Release       int      `sh:"release,required"` |  | ||||||
| 	Epoch         uint     `sh:"epoch"` |  | ||||||
| 	Description   string   `sh:"desc"` |  | ||||||
| 	Homepage      string   `sh:"homepage"` |  | ||||||
| 	Maintainer    string   `sh:"maintainer"` |  | ||||||
| 	Architectures []string `sh:"architectures"` |  | ||||||
| 	Licenses      []string `sh:"license"` |  | ||||||
| 	Provides      []string `sh:"provides"` |  | ||||||
| 	Conflicts     []string `sh:"conflicts"` |  | ||||||
| 	Depends       []string `sh:"deps"` |  | ||||||
| 	BuildDepends  []string `sh:"build_deps"` |  | ||||||
| 	OptDepends    []string `sh:"opt_deps"` |  | ||||||
| 	Replaces      []string `sh:"replaces"` |  | ||||||
| 	Sources       []string `sh:"sources"` |  | ||||||
| 	Checksums     []string `sh:"checksums"` |  | ||||||
| 	Backup        []string `sh:"backup"` |  | ||||||
| 	Scripts       Scripts  `sh:"scripts"` |  | ||||||
| 	AutoReq       []string `sh:"auto_req"` |  | ||||||
| 	AutoProv      []string `sh:"auto_prov"` |  | ||||||
| 	Base string | 	Base string | ||||||
|  | 	BuildVarsPre | ||||||
| } | } | ||||||
|  |  | ||||||
| type Scripts struct { | type Scripts struct { | ||||||
|   | |||||||
| @@ -50,6 +50,7 @@ import ( | |||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/handlers" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/handlers" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/helpers" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/helpers" | ||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | ||||||
|  | 	finddeps "gitea.plemya-x.ru/Plemya-x/ALR/pkg/build/find_deps" | ||||||
| 	"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" | ||||||
| ) | ) | ||||||
| @@ -211,8 +212,10 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error) | |||||||
| 	sources, checksums = removeDuplicatesSources(sources, checksums) | 	sources, checksums = removeDuplicatesSources(sources, checksums) | ||||||
|  |  | ||||||
| 	mergedVars := types.BuildVars{ | 	mergedVars := types.BuildVars{ | ||||||
|  | 		BuildVarsPre: types.BuildVarsPre{ | ||||||
| 			Sources:   sources, | 			Sources:   sources, | ||||||
| 			Checksums: checksums, | 			Checksums: checksums, | ||||||
|  | 		}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	buildDeps, err := b.installBuildDeps(ctx, buildDepends) // Устанавливаем зависимости для сборки | 	buildDeps, err := b.installBuildDeps(ctx, buildDepends) // Устанавливаем зависимости для сборки | ||||||
| @@ -858,25 +861,19 @@ func (b *Builder) buildPkgMetadata( | |||||||
| 	pkgInfo.Overridables.Contents = contents | 	pkgInfo.Overridables.Contents = contents | ||||||
|  |  | ||||||
| 	if len(vars.AutoProv) == 1 && decoder.IsTruthy(vars.AutoProv[0]) { | 	if len(vars.AutoProv) == 1 && decoder.IsTruthy(vars.AutoProv[0]) { | ||||||
| 		if pkgFormat == "rpm" { | 		f := finddeps.New(b.info, pkgFormat) | ||||||
| 			err = rpmFindProvides(ctx, pkgInfo, dirs) | 		err = f.FindProvides(ctx, pkgInfo, dirs, vars.AutoProvSkipList) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			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 len(vars.AutoReq) == 1 && decoder.IsTruthy(vars.AutoReq[0]) { | ||||||
| 		if pkgFormat == "rpm" { | 		f := finddeps.New(b.info, pkgFormat) | ||||||
| 			err = rpmFindRequires(ctx, pkgInfo, dirs) | 		err = f.FindRequires(ctx, pkgInfo, dirs, vars.AutoReqSkipList) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 		} else { |  | ||||||
| 			slog.Info(gotext.Get("AutoReq is not implemented for this package format, so it's skipped")) |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return pkgInfo, nil | 	return pkgInfo, nil | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ | |||||||
| // You should have received a copy of the GNU General Public License | // You should have received a copy of the GNU General Public License | ||||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
| 
 | 
 | ||||||
| package build | package finddeps | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"bytes" | 	"bytes" | ||||||
| @@ -30,7 +30,7 @@ import ( | |||||||
| 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, command string, updateFunc func(string)) error { | func rpmFindDependenciesALTLinux(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, command string, envs []string, updateFunc func(string)) error { | ||||||
| 	if _, err := exec.LookPath(command); err != nil { | 	if _, err := exec.LookPath(command); err != nil { | ||||||
| 		slog.Info(gotext.Get("Command not found on the system"), "command", command) | 		slog.Info(gotext.Get("Command not found on the system"), "command", command) | ||||||
| 		return nil | 		return nil | ||||||
| @@ -49,8 +49,8 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir | |||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	cmd := exec.Command(command) | 	cmd := exec.CommandContext(ctx, command) | ||||||
| 	cmd.Stdin = bytes.NewBufferString(strings.Join(paths, "\n")) | 	cmd.Stdin = bytes.NewBufferString(strings.Join(paths, "\n") + "\n") | ||||||
| 	cmd.Env = append(cmd.Env, | 	cmd.Env = append(cmd.Env, | ||||||
| 		"RPM_BUILD_ROOT="+dirs.PkgDir, | 		"RPM_BUILD_ROOT="+dirs.PkgDir, | ||||||
| 		"RPM_FINDPROV_METHOD=", | 		"RPM_FINDPROV_METHOD=", | ||||||
| @@ -58,6 +58,7 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir | |||||||
| 		"RPM_DATADIR=", | 		"RPM_DATADIR=", | ||||||
| 		"RPM_SUBPACKAGE_NAME=", | 		"RPM_SUBPACKAGE_NAME=", | ||||||
| 	) | 	) | ||||||
|  | 	cmd.Env = append(cmd.Env, envs...) | ||||||
| 	var out bytes.Buffer | 	var out bytes.Buffer | ||||||
| 	var stderr bytes.Buffer | 	var stderr bytes.Buffer | ||||||
| 	cmd.Stdout = &out | 	cmd.Stdout = &out | ||||||
| @@ -66,6 +67,7 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir | |||||||
| 		slog.Error(stderr.String()) | 		slog.Error(stderr.String()) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | 	slog.Debug(stderr.String()) | ||||||
| 
 | 
 | ||||||
| 	dependencies := strings.Split(strings.TrimSpace(out.String()), "\n") | 	dependencies := strings.Split(strings.TrimSpace(out.String()), "\n") | ||||||
| 	for _, dep := range dependencies { | 	for _, dep := range dependencies { | ||||||
| @@ -77,15 +79,17 @@ func rpmFindDependencies(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Dir | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func rpmFindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories) error { | type ALTLinuxFindProvReq struct{} | ||||||
| 	return rpmFindDependencies(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-provides", func(dep string) { | 
 | ||||||
|  | func (o *ALTLinuxFindProvReq) FindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
|  | 	return rpmFindDependenciesALTLinux(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-provides", []string{"RPM_FINDPROV_SKIPLIST=" + strings.Join(skiplist, "\n")}, func(dep string) { | ||||||
| 		slog.Info(gotext.Get("Provided dependency found"), "dep", dep) | 		slog.Info(gotext.Get("Provided dependency found"), "dep", dep) | ||||||
| 		pkgInfo.Overridables.Provides = append(pkgInfo.Overridables.Provides, dep) | 		pkgInfo.Overridables.Provides = append(pkgInfo.Overridables.Provides, dep) | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func rpmFindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories) error { | func (o *ALTLinuxFindProvReq) FindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
| 	return rpmFindDependencies(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-requires", func(dep string) { | 	return rpmFindDependenciesALTLinux(ctx, pkgInfo, dirs, "/usr/lib/rpm/find-requires", []string{"RPM_FINDREQ_SKIPLIST=" + strings.Join(skiplist, "\n")}, func(dep string) { | ||||||
| 		slog.Info(gotext.Get("Required dependency found"), "dep", dep) | 		slog.Info(gotext.Get("Required dependency found"), "dep", dep) | ||||||
| 		pkgInfo.Overridables.Depends = append(pkgInfo.Overridables.Depends, dep) | 		pkgInfo.Overridables.Depends = append(pkgInfo.Overridables.Depends, dep) | ||||||
| 	}) | 	}) | ||||||
							
								
								
									
										39
									
								
								pkg/build/find_deps/empty.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								pkg/build/find_deps/empty.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | // ALR - Any Linux Repository | ||||||
|  | // Copyright (C) 2025 Евгений Храмов | ||||||
|  | // | ||||||
|  | // 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/>. | ||||||
|  |  | ||||||
|  | package finddeps | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"log/slog" | ||||||
|  |  | ||||||
|  | 	"github.com/goreleaser/nfpm/v2" | ||||||
|  | 	"github.com/leonelquinteros/gotext" | ||||||
|  |  | ||||||
|  | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type EmptyFindProvReq struct{} | ||||||
|  |  | ||||||
|  | func (o *EmptyFindProvReq) FindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
|  | 	slog.Info(gotext.Get("AutoProv is not implemented for this package format, so it's skipped")) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (o *EmptyFindProvReq) FindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
|  | 	slog.Info(gotext.Get("AutoReq is not implemented for this package format, so it's skipped")) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										118
									
								
								pkg/build/find_deps/fedora.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								pkg/build/find_deps/fedora.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,118 @@ | |||||||
|  | // ALR - Any Linux Repository | ||||||
|  | // Copyright (C) 2025 Евгений Храмов | ||||||
|  | // | ||||||
|  | // 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/>. | ||||||
|  |  | ||||||
|  | package finddeps | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | 	"log/slog" | ||||||
|  | 	"os/exec" | ||||||
|  | 	"path" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
|  | 	"github.com/goreleaser/nfpm/v2" | ||||||
|  | 	"github.com/leonelquinteros/gotext" | ||||||
|  |  | ||||||
|  | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type FedoraFindProvReq struct{} | ||||||
|  |  | ||||||
|  | func rpmFindDependenciesFedora(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, command string, args []string, updateFunc func(string)) error { | ||||||
|  | 	if _, err := exec.LookPath(command); err != nil { | ||||||
|  | 		slog.Info(gotext.Get("Command not found on the system"), "command", command) | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var paths []string | ||||||
|  | 	for _, content := range pkgInfo.Contents { | ||||||
|  | 		if content.Type != "dir" { | ||||||
|  | 			paths = append(paths, | ||||||
|  | 				path.Join(dirs.PkgDir, content.Destination), | ||||||
|  | 			) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(paths) == 0 { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	cmd := exec.CommandContext(ctx, command, args...) | ||||||
|  | 	cmd.Stdin = bytes.NewBufferString(strings.Join(paths, "\n") + "\n") | ||||||
|  | 	cmd.Env = append(cmd.Env, | ||||||
|  | 		"RPM_BUILD_ROOT="+dirs.PkgDir, | ||||||
|  | 	) | ||||||
|  | 	var out bytes.Buffer | ||||||
|  | 	var stderr bytes.Buffer | ||||||
|  | 	cmd.Stdout = &out | ||||||
|  | 	cmd.Stderr = &stderr | ||||||
|  | 	if err := cmd.Run(); err != nil { | ||||||
|  | 		slog.Error(stderr.String()) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	slog.Debug(stderr.String()) | ||||||
|  |  | ||||||
|  | 	dependencies := strings.Split(strings.TrimSpace(out.String()), "\n") | ||||||
|  | 	for _, dep := range dependencies { | ||||||
|  | 		if dep != "" { | ||||||
|  | 			updateFunc(dep) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (o *FedoraFindProvReq) FindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
|  | 	return rpmFindDependenciesFedora( | ||||||
|  | 		ctx, | ||||||
|  | 		pkgInfo, | ||||||
|  | 		dirs, | ||||||
|  | 		"/usr/lib/rpm/rpmdeps", | ||||||
|  | 		[]string{ | ||||||
|  | 			"--define=_use_internal_dependency_generator 1", | ||||||
|  | 			"--provides", | ||||||
|  | 			fmt.Sprintf( | ||||||
|  | 				"--define=__provides_exclude_from %s\"", | ||||||
|  | 				strings.Join(skiplist, "|"), | ||||||
|  | 			), | ||||||
|  | 		}, | ||||||
|  | 		func(dep string) { | ||||||
|  | 			slog.Info(gotext.Get("Provided dependency found"), "dep", dep) | ||||||
|  | 			pkgInfo.Overridables.Provides = append(pkgInfo.Overridables.Provides, dep) | ||||||
|  | 		}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (o *FedoraFindProvReq) FindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
|  | 	return rpmFindDependenciesFedora( | ||||||
|  | 		ctx, | ||||||
|  | 		pkgInfo, | ||||||
|  | 		dirs, | ||||||
|  | 		"/usr/lib/rpm/rpmdeps", | ||||||
|  | 		[]string{ | ||||||
|  | 			"--define=_use_internal_dependency_generator 1", | ||||||
|  | 			"--requires", | ||||||
|  | 			fmt.Sprintf( | ||||||
|  | 				"--define=__requires_exclude_from %s", | ||||||
|  | 				strings.Join(skiplist, "|"), | ||||||
|  | 			), | ||||||
|  | 		}, | ||||||
|  | 		func(dep string) { | ||||||
|  | 			slog.Info(gotext.Get("Required dependency found"), "dep", dep) | ||||||
|  | 			pkgInfo.Overridables.Depends = append(pkgInfo.Overridables.Depends, dep) | ||||||
|  | 		}) | ||||||
|  | } | ||||||
							
								
								
									
										58
									
								
								pkg/build/find_deps/find_deps.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								pkg/build/find_deps/find_deps.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | // ALR - Any Linux Repository | ||||||
|  | // Copyright (C) 2025 Евгений Храмов | ||||||
|  | // | ||||||
|  | // 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/>. | ||||||
|  |  | ||||||
|  | package finddeps | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  |  | ||||||
|  | 	"github.com/goreleaser/nfpm/v2" | ||||||
|  |  | ||||||
|  | 	"gitea.plemya-x.ru/Plemya-x/ALR/internal/types" | ||||||
|  | 	"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type ProvReqFinder interface { | ||||||
|  | 	FindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error | ||||||
|  | 	FindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ProvReqService struct { | ||||||
|  | 	finder ProvReqFinder | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func New(info *distro.OSRelease, pkgFormat string) *ProvReqService { | ||||||
|  | 	s := &ProvReqService{ | ||||||
|  | 		finder: &EmptyFindProvReq{}, | ||||||
|  | 	} | ||||||
|  | 	if pkgFormat == "rpm" { | ||||||
|  | 		switch info.ID { | ||||||
|  | 		case "altlinux": | ||||||
|  | 			s.finder = &ALTLinuxFindProvReq{} | ||||||
|  | 		case "fedora": | ||||||
|  | 			s.finder = &FedoraFindProvReq{} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *ProvReqService) FindProvides(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
|  | 	return s.finder.FindProvides(ctx, pkgInfo, dirs, skiplist) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s *ProvReqService) FindRequires(ctx context.Context, pkgInfo *nfpm.Info, dirs types.Directories, skiplist []string) error { | ||||||
|  | 	return s.finder.FindRequires(ctx, pkgInfo, dirs, skiplist) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user