Compare commits
	
		
			1 Commits
		
	
	
		
			v0.0.14
			...
			686da3e036
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 686da3e036 | 
| @@ -27,31 +27,26 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|  |  | ||||||
|     container: |     container: | ||||||
|       image: altlinux.space/maks1ms/actions-container-runner:latest |       image: registry.altlinux.org/p11/node:latest | ||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: https://github.com/actions/checkout@v4 |         uses: https://github.com/actions/checkout@v4 | ||||||
|         with: |  | ||||||
|           fetch-depth: 0 |  | ||||||
|        |        | ||||||
|       - name: Set up Go |       - name: Set up Go | ||||||
|         uses: https://github.com/actions/setup-go@v5 |         uses: https://github.com/actions/setup-go@v5 | ||||||
|         with: |         with: | ||||||
|           go-version: '1.24'         |           go-version: '1.24'         | ||||||
|        |        | ||||||
|       - name: Cache Podman images |       - name: Install deps | ||||||
|         uses: actions/cache@v4 |         run: apt-get update && apt-get install -y podman podman-docker | ||||||
|         with: |  | ||||||
|           path: | |       - name: Start Podman service | ||||||
|             ~/.local/share/containers/storage |         run: nohup podman system service -t 0 unix:/tmp/podman.sock & | ||||||
|             /var/lib/containers/storage |  | ||||||
|           key: ${{ runner.os }}-primes             |  | ||||||
|  |  | ||||||
|       - name: Run E2E tests |       - name: Run E2E tests | ||||||
|         env: |         env: | ||||||
|           DOCKER_HOST: unix:///tmp/podman.sock |           DOCKER_HOST: unix:/tmp/podman.sock | ||||||
|           IGNORE_ROOT_CHECK: 1 |           IGNORE_ROOT_CHECK: 1 | ||||||
|         run: | |         run: | | ||||||
|           podman system service -t 0 unix:///tmp/podman.sock & |  | ||||||
|           make e2e-test |           make e2e-test | ||||||
|   | |||||||
| @@ -1,67 +0,0 @@ | |||||||
| # 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/>. |  | ||||||
|  |  | ||||||
| name: Create Release |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     tags: |  | ||||||
|       - 'v[0-9]+.[0-9]+.[0-9]+' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   changelog: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout this repository |  | ||||||
|         uses: actions/checkout@v4 |  | ||||||
|         with: |  | ||||||
|           fetch-depth: 0 |  | ||||||
|  |  | ||||||
|       - name: Set up Go |  | ||||||
|         uses: actions/setup-go@v5 |  | ||||||
|         with: |  | ||||||
|           go-version: '1.24' |  | ||||||
|  |  | ||||||
|       - name: Get Changes between Tags |  | ||||||
|         id: changes |  | ||||||
|         uses: simbo/changes-between-tags-action@v1 |  | ||||||
|  |  | ||||||
|       - name: Set version |  | ||||||
|         run: | |  | ||||||
|           version=$(echo "${GITHUB_REF##*/}" | sed 's/^v//') |  | ||||||
|           echo "Version - $version" |  | ||||||
|           echo "VERSION=$version" >> $GITHUB_ENV |  | ||||||
|  |  | ||||||
|       - name: Build alr binary |  | ||||||
|         run: | |  | ||||||
|           CGO_ENABLED=0 go build -ldflags "-X gitea.plemya-x.ru/Plemya-x/ALR/internal/config.Version=${{ env.VERSION }}" -o alr |  | ||||||
|  |  | ||||||
|       - name: Create tar.gz |  | ||||||
|         run: | |  | ||||||
|           mkdir -p ./out/completion |  | ||||||
|           cp alr ./out |  | ||||||
|           cp scripts/completion/bash ./out/completion/alr |  | ||||||
|           cp scripts/completion/zsh ./out/completion/_alr |  | ||||||
|  |  | ||||||
|           ( cd out && tar -czvf ../alr-${{ env.VERSION }}-linux-x86_64.tar.gz * ) |  | ||||||
|  |  | ||||||
|       - name: Release |  | ||||||
|         uses: akkuman/gitea-release-action@v1 |  | ||||||
|         with: |  | ||||||
|           body: ${{ steps.changes.outputs.changes }} |  | ||||||
|           files: |- |  | ||||||
|             alr-${{ env.VERSION }}-linux-x86_64.tar.gz |  | ||||||
|              |  | ||||||
| @@ -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">16.9%</text> |         <text x="86" y="15" fill="#010101" fill-opacity=".3">17.0%</text> | ||||||
|         <text x="86" y="14">16.9%</text> |         <text x="86" y="14">17.0%</text> | ||||||
|     </g> |     </g> | ||||||
| </svg> | </svg> | ||||||
|   | |||||||
| Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 926 B | 
| @@ -12,7 +12,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="37" y="15" fill="#010101" fill-opacity=".3">ru translate</text> |         <text x="37" y="15" fill="#010101" fill-opacity=".3">ru translate</text> | ||||||
|         <text x="37" y="14">ru translate</text> |         <text x="37" y="14">ru translate</text> | ||||||
|         <text x="100" y="15" fill="#010101" fill-opacity=".3">100.00%</text> |         <text x="100" y="15" fill="#010101" fill-opacity=".3">96.00%</text> | ||||||
|         <text x="100" y="14">100.00%</text> |         <text x="100" y="14">96.00%</text> | ||||||
|     </g> |     </g> | ||||||
| </svg> | </svg> | ||||||
|   | |||||||
| Before Width: | Height: | Size: 942 B After Width: | Height: | Size: 940 B | 
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,7 +31,10 @@ func TestE2EBashCompletion(t *testing.T) { | |||||||
| 		"bash-completion", | 		"bash-completion", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			execShouldNoError(t, r, "alr", "install", "--generate-bash-completion") | 			err := r.Exec(e2e.NewCommand( | ||||||
|  | 				"alr", "install", "--generate-bash-completion", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ import ( | |||||||
| 	"io" | 	"io" | ||||||
| 	"log" | 	"log" | ||||||
| 	"os" | 	"os" | ||||||
|  | 	"os/exec" | ||||||
| 	"testing" | 	"testing" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @@ -120,6 +121,29 @@ var COMMON_SYSTEMS []string = []string{ | |||||||
| 	"ubuntu-24.04", | 	"ubuntu-24.04", | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	for _, id := range ALL_SYSTEMS { | ||||||
|  | 		buildAlrTestImage(id) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func buildAlrTestImage(id string) { | ||||||
|  | 	cmd := exec.Command( | ||||||
|  | 		"docker", | ||||||
|  | 		"build", | ||||||
|  | 		"-t", fmt.Sprintf("alr-testimage-%s", id), | ||||||
|  | 		"-f", fmt.Sprintf("images/Dockerfile.%s", id), | ||||||
|  | 		".", | ||||||
|  | 	) | ||||||
|  | 	cmd.Stdout = os.Stdout | ||||||
|  | 	cmd.Stderr = os.Stderr | ||||||
|  | 	err := cmd.Run() | ||||||
|  | 	if err != nil { | ||||||
|  | 		fmt.Println("Error:", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| func dockerMultipleRun(t *testing.T, name string, ids []string, f func(t *testing.T, runnable e2e.Runnable)) { | func dockerMultipleRun(t *testing.T, name string, ids []string, f func(t *testing.T, runnable e2e.Runnable)) { | ||||||
| 	t.Run(name, func(t *testing.T) { | 	t.Run(name, func(t *testing.T) { | ||||||
| 		for _, id := range ids { | 		for _, id := range ids { | ||||||
| @@ -134,37 +158,26 @@ func dockerMultipleRun(t *testing.T, name string, ids []string, f func(t *testin | |||||||
| 				e, err := e2e.New(e2e.WithVerbose(), e2e.WithName(fmt.Sprintf("alr-%s", truncatedHash))) | 				e, err := e2e.New(e2e.WithVerbose(), e2e.WithName(fmt.Sprintf("alr-%s", truncatedHash))) | ||||||
| 				assert.NoError(t, err) | 				assert.NoError(t, err) | ||||||
| 				t.Cleanup(e.Close) | 				t.Cleanup(e.Close) | ||||||
| 				imageId := fmt.Sprintf("ghcr.io/maks1ms/alr-e2e-test-image-%s", id) | 				imageId := fmt.Sprintf("alr-testimage-%s", id) | ||||||
| 				runnable := e.Runnable(dockerName).Init( | 				runnable := e.Runnable(dockerName).Init( | ||||||
| 					e2e.StartOptions{ | 					e2e.StartOptions{ | ||||||
| 						Image: imageId, | 						Image:   imageId, | ||||||
| 						Volumes: []string{ | 						Volumes: []string{ | ||||||
| 							"./alr:/tmp/alr", | 							// "./alr:/usr/bin/alr", | ||||||
| 						}, | 						}, | ||||||
| 						Privileged: true, | 						Privileged: true, | ||||||
| 					}, | 					}, | ||||||
| 				) | 				) | ||||||
| 				assert.NoError(t, e2e.StartAndWaitReady(runnable)) | 				assert.NoError(t, e2e.StartAndWaitReady(runnable)) | ||||||
| 				err = runnable.Exec(e2e.NewCommand("/bin/alr-test-setup", "alr-install")) |  | ||||||
| 				if err != nil { |  | ||||||
| 					panic(err) |  | ||||||
| 				} |  | ||||||
| 				err = runnable.Exec(e2e.NewCommand("/bin/alr-test-setup", "passwordless-sudo-setup")) |  | ||||||
| 				if err != nil { |  | ||||||
| 					panic(err) |  | ||||||
| 				} |  | ||||||
| 				f(t, runnable) | 				f(t, runnable) | ||||||
| 			}) | 			}) | ||||||
| 		} | 		} | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| func execShouldNoError(t *testing.T, r e2e.Runnable, cmd string, args ...string) { | func simpleExec(t *testing.T, r e2e.Runnable, cmd string, args ...string) { | ||||||
| 	assert.NoError(t, r.Exec(e2e.NewCommand(cmd, args...))) | 	err := r.Exec(e2e.NewCommand(cmd, args...)) | ||||||
| } | 	assert.NoError(t, err) | ||||||
|  |  | ||||||
| func execShouldError(t *testing.T, r e2e.Runnable, cmd string, args ...string) { |  | ||||||
| 	assert.Error(t, r.Exec(e2e.NewCommand(cmd, args...))) |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func runTestCommands(t *testing.T, r e2e.Runnable, timeout time.Duration, expects []expect.Batcher) { | func runTestCommands(t *testing.T, r e2e.Runnable, timeout time.Duration, expects []expect.Batcher) { | ||||||
| @@ -181,22 +194,4 @@ func runTestCommands(t *testing.T, r e2e.Runnable, timeout time.Duration, expect | |||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| } | } | ||||||
|  |  | ||||||
| const REPO_NAME_FOR_E2E_TESTS = "alr-repo" | const REPO_FOR_E2E_TESTS = "https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git" | ||||||
| const REPO_URL_FOR_E2E_TESTS = "https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git" |  | ||||||
|  |  | ||||||
| func defaultPrepare(t *testing.T, r e2e.Runnable) { |  | ||||||
| 	execShouldNoError(t, r, |  | ||||||
| 		"sudo", |  | ||||||
| 		"alr", |  | ||||||
| 		"repo", |  | ||||||
| 		"add", |  | ||||||
| 		REPO_NAME_FOR_E2E_TESTS, |  | ||||||
| 		REPO_URL_FOR_E2E_TESTS, |  | ||||||
| 	) |  | ||||||
|  |  | ||||||
| 	execShouldNoError(t, r, |  | ||||||
| 		"sudo", |  | ||||||
| 		"alr", |  | ||||||
| 		"ref", |  | ||||||
| 	) |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,9 +31,26 @@ func TestE2EGroupAndSummaryField(t *testing.T) { | |||||||
| 		"group-and-summary-field", | 		"group-and-summary-field", | ||||||
| 		RPM_SYSTEMS, | 		RPM_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "alr search --name test-group-and-summary --format \"{{.Group}}\" | grep ^System/Base$") | 				"sudo", | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "alr search --name test-group-and-summary --format \"{{.Summary}}\" | grep \"^Custom summary$\"") | 				"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( | ||||||
|  | 				"sh", "-c", "alr search --name test-group-and-summary --format \"{{.Group}}\" | grep ^System/Base$", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sh", "-c", "alr search --name test-group-and-summary --format \"{{.Summary}}\" | grep \"^Custom summary$\"", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								e2e-tests/images/Dockerfile.alpine
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								e2e-tests/images/Dockerfile.alpine
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | FROM alpine:latest | ||||||
|  | RUN adduser -s /bin/bash alr-user | ||||||
|  | USER alr-user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										6
									
								
								e2e-tests/images/Dockerfile.alt-sisyphus
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								e2e-tests/images/Dockerfile.alt-sisyphus
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | FROM registry.altlinux.org/sisyphus/alt:latest | ||||||
|  | RUN apt-get update && apt-get install -y ca-certificates rpm-build | ||||||
|  | RUN useradd -m -s /bin/bash alr-user | ||||||
|  | USER alr-user | ||||||
|  | WORKDIR /home/alr-user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										4
									
								
								e2e-tests/images/Dockerfile.archlinux
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								e2e-tests/images/Dockerfile.archlinux
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | FROM archlinux:latest | ||||||
|  | RUN useradd -m -s /bin/bash alr-user | ||||||
|  | USER alr-user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										18
									
								
								e2e-tests/images/Dockerfile.fedora-41
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								e2e-tests/images/Dockerfile.fedora-41
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | FROM fedora:41 | ||||||
|  | RUN dnf install -y ca-certificates sudo rpm-build bindfs | ||||||
|  | RUN <<EOF | ||||||
|  |     useradd -m -s /bin/bash -G wheel user | ||||||
|  |     echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/user | ||||||
|  |     chmod 0440 /etc/sudoers.d/user | ||||||
|  |  | ||||||
|  |     useradd -m -s /bin/bash alr | ||||||
|  |     mkdir -p /var/cache/alr /etc/alr | ||||||
|  |     chown alr:alr /var/cache/alr /etc/alr | ||||||
|  | EOF | ||||||
|  | COPY ./alr /usr/bin | ||||||
|  | RUN <<EOF | ||||||
|  |     setcap cap_setuid,cap_setgid+ep /usr/bin/alr | ||||||
|  | EOF | ||||||
|  | USER user | ||||||
|  | WORKDIR /home/user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										4
									
								
								e2e-tests/images/Dockerfile.opensuse-leap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								e2e-tests/images/Dockerfile.opensuse-leap
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | FROM opensuse/leap:latest | ||||||
|  | RUN useradd -m -s /bin/bash alr-user | ||||||
|  | USER alr-user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										4
									
								
								e2e-tests/images/Dockerfile.redos-8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								e2e-tests/images/Dockerfile.redos-8
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | FROM registry.red-soft.ru/ubi8/ubi:latest | ||||||
|  | RUN useradd -m -s /bin/bash alr-user | ||||||
|  | USER alr-user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
							
								
								
									
										17
									
								
								e2e-tests/images/Dockerfile.ubuntu-24.04
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								e2e-tests/images/Dockerfile.ubuntu-24.04
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | FROM ubuntu:24.10 | ||||||
|  | RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates sudo libcap2-bin | ||||||
|  | RUN <<EOF | ||||||
|  |     useradd -m -s /bin/bash user | ||||||
|  |     echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/user | ||||||
|  |     chmod 0440 /etc/sudoers.d/user  | ||||||
|  |      | ||||||
|  |     useradd -m -s /bin/bash alr | ||||||
|  |     mkdir -p /var/cache/alr /etc/alr | ||||||
|  |     chown alr:alr /var/cache/alr /etc/alr | ||||||
|  | EOF | ||||||
|  | COPY ./alr /usr/bin | ||||||
|  | RUN <<EOF | ||||||
|  |     setcap cap_setuid,cap_setgid+ep /usr/bin/alr | ||||||
|  | EOF | ||||||
|  | USER user | ||||||
|  | ENTRYPOINT ["tail", "-f", "/dev/null"] | ||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,11 +31,21 @@ func TestE2EIssue32Interactive(t *testing.T) { | |||||||
| 		"issue-32-interactive", | 		"issue-32-interactive", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			execShouldNoError(t, r, "alr", "--interactive=false", "remove", "ca-certificates") | 			assert.NoError(t, r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "--interactive=false", "remove", "openssl") | 				"sudo", "alr", "--interactive=false", "remove", "ca-certificates", | ||||||
| 			execShouldNoError(t, r, "alr", "fix") | 			))) | ||||||
| 			execShouldNoError(t, r, "sudo", "apt-get", "update") |  | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "--interactive=false", "install", "ca-certificates") | 			assert.NoError(t, r.Exec(e2e.NewCommand( | ||||||
|  | 				"sudo", "alr", "--interactive=false", "remove", "openssl", | ||||||
|  | 			))) | ||||||
|  |  | ||||||
|  | 			assert.NoError(t, r.Exec(e2e.NewCommand( | ||||||
|  | 				"alr", "fix", | ||||||
|  | 			))) | ||||||
|  |  | ||||||
|  | 			assert.NoError(t, r.Exec(e2e.NewCommand( | ||||||
|  | 				"sudo", "alr", "--interactive=false", "install", "ca-certificates", | ||||||
|  | 			))) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,11 +31,51 @@ func TestE2EIssue41AutoreqSkiplist(t *testing.T) { | |||||||
| 		"issue-41-autoreq-skiplist", | 		"issue-41-autoreq-skiplist", | ||||||
| 		AUTOREQ_AUTOPROV_SYSTEMS, | 		AUTOREQ_AUTOPROV_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "alr", "build", "-p", "alr-repo/test-autoreq-autoprov") | 				"sudo", | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "rpm -qp --requires *.rpm | grep \"^/bin/sh$\"") | 				"alr", | ||||||
| 			execShouldError(t, r, "sh", "-c", "rpm -qp --requires *.rpm | grep \"^/bin/bash$\"") | 				"addrepo", | ||||||
| 			execShouldError(t, r, "sh", "-c", "rpm -qp --requires *.rpm | grep \"^/bin/zsh$\"") | 				"--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) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,10 +31,26 @@ func TestE2EIssue50InstallMultiple(t *testing.T) { | |||||||
| 		"issue-50-install-multiple", | 		"issue-50-install-multiple", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "foo-pkg", "bar-pkg") | 				"sudo", | ||||||
| 			execShouldNoError(t, r, "cat", "/opt/foo") | 				"alr", | ||||||
| 			execShouldNoError(t, r, "cat", "/opt/bar") | 				"addrepo", | ||||||
|  | 				"--name", | ||||||
|  | 				"alr-repo", | ||||||
|  | 				"--url", | ||||||
|  | 				"https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sudo", "alr", "in", "foo-pkg", "bar-pkg", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand("cat", "/opt/foo")) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  | 			err = r.Exec(e2e.NewCommand("cat", "/opt/bar")) | ||||||
|  | 			assert.NoError(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,8 +31,23 @@ func TestE2EIssue53LcAllCInfo(t *testing.T) { | |||||||
| 		"issue-53-lc-all-c-info", | 		"issue-53-lc-all-c-info", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "bash", "-c", "LANG=C alr info foo-pkg") | 				"sudo", | ||||||
|  | 				"alr", | ||||||
|  | 				"addrepo", | ||||||
|  | 				"--name", | ||||||
|  | 				"alr-repo", | ||||||
|  | 				"--url", | ||||||
|  | 				"https://gitea.plemya-x.ru/Plemya-x/alr-repo.git", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"bash", | ||||||
|  | 				"-c", | ||||||
|  | 				"LANG=C alr info alr-bin", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,11 +31,28 @@ func TestE2EIssue59RmCompletion(t *testing.T) { | |||||||
| 		"issue-59-rm-completion", | 		"issue-59-rm-completion", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "foo-pkg", "bar-pkg") | 				"sudo", | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "alr rm --generate-bash-completion | grep ^foo-pkg$") | 				"alr", | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "alr rm --generate-bash-completion | grep ^bar-pkg$") | 				"addrepo", | ||||||
| 			execShouldError(t, r, "sh", "-c", "alr rm --generate-bash-completion | grep ^test-autoreq-autoprov$") | 				"--name", | ||||||
|  | 				"alr-repo", | ||||||
|  | 				"--url", | ||||||
|  | 				"https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sudo", "alr", "in", "foo-pkg", "bar-pkg", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand("sh", "-c", "alr rm --generate-bash-completion | grep ^foo-pkg$")) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  | 			err = r.Exec(e2e.NewCommand("sh", "-c", "alr rm --generate-bash-completion | grep ^bar-pkg$")) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  | 			err = r.Exec(e2e.NewCommand("sh", "-c", "alr rm --generate-bash-completion | grep ^test-autoreq-autoprov$")) | ||||||
|  | 			assert.Error(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,8 +31,21 @@ func TestE2EIssue72InstallWithDeps(t *testing.T) { | |||||||
| 		"issue-72-install-with-deps", | 		"issue-72-install-with-deps", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "test-app-with-lib") | 				"sudo", | ||||||
|  | 				"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( | ||||||
|  | 				"sudo", "alr", "in", "test-app-with-lib", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -30,14 +30,21 @@ func TestE2EIssue74Upgradable(t *testing.T) { | |||||||
| 		"issue-74-upgradable", | 		"issue-74-upgradable", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			simpleExec(t, r, "sudo", | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "repo", "set-ref", "alr-repo", "bd26236cd7") | 				"alr", | ||||||
| 			execShouldNoError(t, r, "alr", "ref") | 				"addrepo", | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "bar-pkg") | 				"--name", | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "test $(alr list -U | wc -l) -eq 0 || exit 1") | 				"alr-repo", | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "repo", "set-ref", "alr-repo", "d9a3541561") | 				"--url", | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "ref") | 				REPO_FOR_E2E_TESTS, | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "test $(alr list -U | wc -l) -eq 1 || exit 1") | 			) | ||||||
|  | 			simpleExec(t, r, "sudo", "sh", "-c", "sed -i 's/ref = .*/ref = \"bd26236cd7\"/' /etc/alr/alr.toml") | ||||||
|  | 			simpleExec(t, r, "alr", "ref") | ||||||
|  | 			simpleExec(t, r, "sudo", "alr", "in", "bar-pkg") | ||||||
|  | 			simpleExec(t, r, "sh", "-c", "test $(alr list -U | wc -l) -eq 0 || exit 1") | ||||||
|  | 			simpleExec(t, r, "sudo", "sh", "-c", "sed -i 's/ref = .*/ref = \"d9a3541561\"/' /etc/alr/alr.toml") | ||||||
|  | 			simpleExec(t, r, "sudo", "alr", "ref") | ||||||
|  | 			simpleExec(t, r, "sh", "-c", "test $(alr list -U | wc -l) -eq 1 || exit 1") | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package e2etests_test | |||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/alecthomas/assert/v2" | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -30,9 +31,32 @@ func TestE2EIssue75InstallWithDeps(t *testing.T) { | |||||||
| 		"issue-75-ref-specify", | 		"issue-75-ref-specify", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "repo", "set-ref", "alr-repo", "bd26236cd7") | 				"sudo", | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "test $(alr list | wc -l) -eq 2 || exit 1") | 				"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( | ||||||
|  | 				"sudo", "alr", "ref", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			// TODO: replace with alr command when it be added | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sudo", "sh", "-c", "sed -i 's/ref = .*/ref = \"bd26236cd7\"/' /etc/alr/alr.toml", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sh", "-c", "test $(alr list | wc -l) -eq 2 || exit 1", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ import ( | |||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
| 	"github.com/efficientgo/e2e" | 	"github.com/efficientgo/e2e" | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func TestE2EIssue81MultiplePackages(t *testing.T) { | func TestE2EIssue81MultiplePackages(t *testing.T) { | ||||||
| @@ -30,9 +31,29 @@ func TestE2EIssue81MultiplePackages(t *testing.T) { | |||||||
| 		"issue-81-multiple-packages", | 		"issue-81-multiple-packages", | ||||||
| 		COMMON_SYSTEMS, | 		COMMON_SYSTEMS, | ||||||
| 		func(t *testing.T, r e2e.Runnable) { | 		func(t *testing.T, r e2e.Runnable) { | ||||||
| 			defaultPrepare(t, r) | 			err := r.Exec(e2e.NewCommand( | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "first-package-with-dashes") | 				"sudo", | ||||||
| 			execShouldNoError(t, r, "cat", "/opt/first-package") | 				"alr", | ||||||
|  | 				"addrepo", | ||||||
|  | 				"--name", | ||||||
|  | 				"alr-repo", | ||||||
|  | 				"--url", | ||||||
|  | 				REPO_FOR_E2E_TESTS, | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sudo", "alr", "ref", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand( | ||||||
|  | 				"sudo", "alr", "in", "first-package-with-dashes", | ||||||
|  | 			)) | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  |  | ||||||
|  | 			err = r.Exec(e2e.NewCommand("cat", "/opt/first-package")) | ||||||
|  | 			assert.NoError(t, err) | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,40 +0,0 @@ | |||||||
| // 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/>. |  | ||||||
|  |  | ||||||
| //go:build e2e |  | ||||||
|  |  | ||||||
| package e2etests_test |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
|  |  | ||||||
| 	"github.com/efficientgo/e2e" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func TestE2EIssue91MultiplePackages(t *testing.T) { |  | ||||||
| 	dockerMultipleRun( |  | ||||||
| 		t, |  | ||||||
| 		"issue-91-set-repo-ref", |  | ||||||
| 		COMMON_SYSTEMS, |  | ||||||
| 		func(t *testing.T, r e2e.Runnable) { |  | ||||||
| 			defaultPrepare(t, r) |  | ||||||
| 			execShouldError(t, r, "sudo", "alr", "repo", "set-ref") |  | ||||||
| 			execShouldError(t, r, "sudo", "alr", "repo", "set-ref", "alr-repo") |  | ||||||
| 			execShouldNoError(t, r, "sudo", "alr", "repo", "set-ref", "alr-repo", "bd26236cd7") |  | ||||||
| 			execShouldNoError(t, r, "sh", "-c", "test $(alr list | wc -l) -eq 2 || exit 1") |  | ||||||
| 		}, |  | ||||||
| 	) |  | ||||||
| } |  | ||||||
| @@ -465,59 +465,51 @@ msgstr "" | |||||||
| msgid "Manage repos" | msgid "Manage repos" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:51 repo.go:269 | #: repo.go:50 repo.go:220 | ||||||
| msgid "Remove an existing repository" | msgid "Remove an existing repository" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:53 | #: repo.go:52 | ||||||
| msgid "<name>" | msgid "<name>" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:83 | #: repo.go:82 | ||||||
| msgid "Repo \"%s\" does not exist" | msgid "Repo \"%s\" does not exist" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:90 | #: repo.go:89 | ||||||
| msgid "Error removing repo directory" | msgid "Error removing repo directory" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:94 repo.go:161 repo.go:219 | #: repo.go:93 repo.go:160 | ||||||
| msgid "Error saving config" | msgid "Error saving config" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:113 | #: repo.go:112 | ||||||
| msgid "Error removing packages from database" | msgid "Error removing packages from database" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:124 repo.go:239 | #: repo.go:123 repo.go:190 | ||||||
| msgid "Add a new repository" | msgid "Add a new repository" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:125 | #: repo.go:124 | ||||||
| msgid "<name> <url>" | msgid "<name> <url>" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:150 | #: repo.go:149 | ||||||
| msgid "Repo \"%s\" already exists" | msgid "Repo \"%s\" already exists" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:187 | #: repo.go:197 | ||||||
| msgid "Set the reference of the repository" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: repo.go:188 |  | ||||||
| msgid "<name> <ref>" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: repo.go:246 |  | ||||||
| msgid "Name of the new repo" | msgid "Name of the new repo" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:252 | #: repo.go:203 | ||||||
| msgid "URL of the new repo" | msgid "URL of the new repo" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:276 | #: repo.go:227 | ||||||
| msgid "Name of the repo to be deleted" | msgid "Name of the repo to be deleted" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,15 +5,15 @@ | |||||||
| msgid "" | msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: unnamed project\n" | "Project-Id-Version: unnamed project\n" | ||||||
| "PO-Revision-Date: 2025-05-16 20:47+0300\n" | "PO-Revision-Date: 2025-05-13 23:24+0300\n" | ||||||
| "Last-Translator: Maxim Slipenko <maks1ms@alt-gnome.ru>\n" | "Last-Translator: Maxim Slipenko <maks1ms@alt-gnome.ru>\n" | ||||||
| "Language-Team: Russian\n" | "Language-Team: Russian\n" | ||||||
| "Language: ru\n" | "Language: ru\n" | ||||||
| "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 48.0\n" | "X-Generator: Gtranslator 48.0\n" | ||||||
|  |  | ||||||
| #: build.go:42 | #: build.go:42 | ||||||
| @@ -290,8 +290,6 @@ msgid "" | |||||||
| "This command is deprecated and would be removed in the future, use \"%s\" " | "This command is deprecated and would be removed in the future, use \"%s\" " | ||||||
| "instead!" | "instead!" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Эта команда устарела и будет удалена в будущем, используйте вместо нее " |  | ||||||
| "\"%s\"!" |  | ||||||
|  |  | ||||||
| #: internal/db/db.go:137 | #: internal/db/db.go:137 | ||||||
| msgid "Database version mismatch; resetting" | msgid "Database version mismatch; resetting" | ||||||
| @@ -479,61 +477,53 @@ msgstr "Скачать все изменённые репозитории" | |||||||
|  |  | ||||||
| #: repo.go:39 | #: repo.go:39 | ||||||
| msgid "Manage repos" | msgid "Manage repos" | ||||||
| msgstr "Управление репозиториями" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:51 repo.go:269 | #: repo.go:50 repo.go:220 | ||||||
| msgid "Remove an existing repository" | msgid "Remove an existing repository" | ||||||
| msgstr "Удалить существующий репозиторий" | msgstr "Удалить существующий репозиторий" | ||||||
|  |  | ||||||
| #: repo.go:53 | #: repo.go:52 | ||||||
| msgid "<name>" | msgid "<name>" | ||||||
| msgstr "<имя>" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:83 | #: repo.go:82 | ||||||
| msgid "Repo \"%s\" does not exist" | msgid "Repo \"%s\" does not exist" | ||||||
| msgstr "Репозитория \"%s\" не существует" | msgstr "Репозитория \"%s\" не существует" | ||||||
|  |  | ||||||
| #: repo.go:90 | #: repo.go:89 | ||||||
| msgid "Error removing repo directory" | msgid "Error removing repo directory" | ||||||
| msgstr "Ошибка при удалении каталога репозитория" | msgstr "Ошибка при удалении каталога репозитория" | ||||||
|  |  | ||||||
| #: repo.go:94 repo.go:161 repo.go:219 | #: repo.go:93 repo.go:160 | ||||||
| msgid "Error saving config" | msgid "Error saving config" | ||||||
| msgstr "Ошибка при сохранении конфигурации" | msgstr "Ошибка при сохранении конфигурации" | ||||||
|  |  | ||||||
| #: repo.go:113 | #: repo.go:112 | ||||||
| msgid "Error removing packages from database" | msgid "Error removing packages from database" | ||||||
| msgstr "Ошибка при удалении пакетов из базы данных" | msgstr "Ошибка при удалении пакетов из базы данных" | ||||||
|  |  | ||||||
| #: repo.go:124 repo.go:239 | #: repo.go:123 repo.go:190 | ||||||
| msgid "Add a new repository" | msgid "Add a new repository" | ||||||
| msgstr "Добавить новый репозиторий" | msgstr "Добавить новый репозиторий" | ||||||
|  |  | ||||||
| #: repo.go:125 | #: repo.go:124 | ||||||
| msgid "<name> <url>" | msgid "<name> <url>" | ||||||
| msgstr "<имя> <url>" | msgstr "" | ||||||
|  |  | ||||||
| #: repo.go:150 | #: repo.go:149 | ||||||
| msgid "Repo \"%s\" already exists" | msgid "Repo \"%s\" already exists" | ||||||
| msgstr "Репозиторий \"%s\" уже существует" | msgstr "Репозиторий \"%s\" уже существует" | ||||||
|  |  | ||||||
| #: repo.go:187 | #: repo.go:197 | ||||||
| msgid "Set the reference of the repository" |  | ||||||
| msgstr "Установить ссылку на версию репозитория" |  | ||||||
|  |  | ||||||
| #: repo.go:188 |  | ||||||
| msgid "<name> <ref>" |  | ||||||
| msgstr "<имя> <ссылка_на_версию>" |  | ||||||
|  |  | ||||||
| #: repo.go:246 |  | ||||||
| msgid "Name of the new repo" | msgid "Name of the new repo" | ||||||
| msgstr "Название нового репозитория" | msgstr "Название нового репозитория" | ||||||
|  |  | ||||||
| #: repo.go:252 | #: repo.go:203 | ||||||
| msgid "URL of the new repo" | msgid "URL of the new repo" | ||||||
| msgstr "URL-адрес нового репозитория" | msgstr "URL-адрес нового репозитория" | ||||||
|  |  | ||||||
| #: repo.go:276 | #: repo.go:227 | ||||||
| msgid "Name of the repo to be deleted" | msgid "Name of the repo to be deleted" | ||||||
| msgstr "Название репозитория  удалён" | msgstr "Название репозитория  удалён" | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										49
									
								
								repo.go
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								repo.go
									
									
									
									
									
								
							| @@ -40,7 +40,6 @@ func RepoCmd() *cli.Command { | |||||||
| 		Subcommands: []*cli.Command{ | 		Subcommands: []*cli.Command{ | ||||||
| 			RemoveRepoCmd(), | 			RemoveRepoCmd(), | ||||||
| 			AddRepoCmd(), | 			AddRepoCmd(), | ||||||
| 			SetRepoRefCmd(), |  | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -181,54 +180,6 @@ func AddRepoCmd() *cli.Command { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func SetRepoRefCmd() *cli.Command { |  | ||||||
| 	return &cli.Command{ |  | ||||||
| 		Name:      "set-ref", |  | ||||||
| 		Usage:     gotext.Get("Set the reference of the repository"), |  | ||||||
| 		ArgsUsage: gotext.Get("<name> <ref>"), |  | ||||||
| 		Action: utils.RootNeededAction(func(c *cli.Context) error { |  | ||||||
| 			if c.Args().Len() < 2 { |  | ||||||
| 				return cliutils.FormatCliExit("missing args", nil) |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			name := c.Args().Get(0) |  | ||||||
| 			ref := c.Args().Get(1) |  | ||||||
|  |  | ||||||
| 			deps, err := appbuilder. |  | ||||||
| 				New(c.Context). |  | ||||||
| 				WithConfig(). |  | ||||||
| 				WithDB(). |  | ||||||
| 				WithReposNoPull(). |  | ||||||
| 				Build() |  | ||||||
| 			if err != nil { |  | ||||||
| 				return err |  | ||||||
| 			} |  | ||||||
| 			defer deps.Defer() |  | ||||||
|  |  | ||||||
| 			repos := deps.Cfg.Repos() |  | ||||||
| 			newRepos := []types.Repo{} |  | ||||||
| 			for _, repo := range repos { |  | ||||||
| 				if repo.Name == name { |  | ||||||
| 					repo.Ref = ref |  | ||||||
| 				} |  | ||||||
| 				newRepos = append(newRepos, repo) |  | ||||||
| 			} |  | ||||||
| 			deps.Cfg.SetRepos(newRepos) |  | ||||||
| 			err = deps.Cfg.SaveUserConfig() |  | ||||||
| 			if err != nil { |  | ||||||
| 				return cliutils.FormatCliExit(gotext.Get("Error saving config"), err) |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			err = deps.Repos.Pull(c.Context, newRepos) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return cliutils.FormatCliExit(gotext.Get("Error pulling repositories"), err) |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			return nil |  | ||||||
| 		}), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // TODO: remove | // TODO: remove | ||||||
| // | // | ||||||
| // Deprecated: use "alr repo add" | // Deprecated: use "alr repo add" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user