Compare commits
	
		
			1 Commits
		
	
	
		
			v0.0.14
			...
			686da3e036
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 686da3e036 | 
| @@ -27,31 +27,26 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     container: | ||||
|       image: altlinux.space/maks1ms/actions-container-runner:latest | ||||
|       image: registry.altlinux.org/p11/node:latest | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: https://github.com/actions/checkout@v4 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|        | ||||
|       - name: Set up Go | ||||
|         uses: https://github.com/actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: '1.24'         | ||||
|        | ||||
|       - name: Cache Podman images | ||||
|         uses: actions/cache@v4 | ||||
|         with: | ||||
|           path: | | ||||
|             ~/.local/share/containers/storage | ||||
|             /var/lib/containers/storage | ||||
|           key: ${{ runner.os }}-primes             | ||||
|       - name: Install deps | ||||
|         run: apt-get update && apt-get install -y podman podman-docker | ||||
|  | ||||
|       - name: Start Podman service | ||||
|         run: nohup podman system service -t 0 unix:/tmp/podman.sock & | ||||
|  | ||||
|       - name: Run E2E tests | ||||
|         env: | ||||
|           DOCKER_HOST: unix:///tmp/podman.sock | ||||
|           DOCKER_HOST: unix:/tmp/podman.sock | ||||
|           IGNORE_ROOT_CHECK: 1 | ||||
|         run: | | ||||
|           podman system service -t 0 unix:///tmp/podman.sock & | ||||
|           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"> | ||||
|         <text x="33.5" y="15" fill="#010101" fill-opacity=".3">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="14">16.9%</text> | ||||
|         <text x="86" y="15" fill="#010101" fill-opacity=".3">17.0%</text> | ||||
|         <text x="86" y="14">17.0%</text> | ||||
|     </g> | ||||
| </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"> | ||||
|         <text x="37" y="15" fill="#010101" fill-opacity=".3">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="14">100.00%</text> | ||||
|         <text x="100" y="15" fill="#010101" fill-opacity=".3">96.00%</text> | ||||
|         <text x="100" y="14">96.00%</text> | ||||
|     </g> | ||||
| </svg> | ||||
|   | ||||
| Before Width: | Height: | Size: 942 B After Width: | Height: | Size: 940 B | 
| @@ -21,6 +21,7 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,7 +31,10 @@ func TestE2EBashCompletion(t *testing.T) { | ||||
| 		"bash-completion", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		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" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| @@ -120,6 +121,29 @@ var COMMON_SYSTEMS []string = []string{ | ||||
| 	"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)) { | ||||
| 	t.Run(name, func(t *testing.T) { | ||||
| 		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))) | ||||
| 				assert.NoError(t, err) | ||||
| 				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( | ||||
| 					e2e.StartOptions{ | ||||
| 						Image:   imageId, | ||||
| 						Volumes: []string{ | ||||
| 							"./alr:/tmp/alr", | ||||
| 							// "./alr:/usr/bin/alr", | ||||
| 						}, | ||||
| 						Privileged: true, | ||||
| 					}, | ||||
| 				) | ||||
| 				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) | ||||
| 			}) | ||||
| 		} | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func execShouldNoError(t *testing.T, r e2e.Runnable, cmd string, args ...string) { | ||||
| 	assert.NoError(t, r.Exec(e2e.NewCommand(cmd, args...))) | ||||
| } | ||||
|  | ||||
| func execShouldError(t *testing.T, r e2e.Runnable, cmd string, args ...string) { | ||||
| 	assert.Error(t, r.Exec(e2e.NewCommand(cmd, args...))) | ||||
| func simpleExec(t *testing.T, r e2e.Runnable, cmd string, args ...string) { | ||||
| 	err := r.Exec(e2e.NewCommand(cmd, args...)) | ||||
| 	assert.NoError(t, err) | ||||
| } | ||||
|  | ||||
| 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) | ||||
| } | ||||
|  | ||||
| const REPO_NAME_FOR_E2E_TESTS = "alr-repo" | ||||
| 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", | ||||
| 	) | ||||
| } | ||||
| const REPO_FOR_E2E_TESTS = "https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git" | ||||
|   | ||||
| @@ -21,6 +21,7 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,9 +31,26 @@ func TestE2EGroupAndSummaryField(t *testing.T) { | ||||
| 		"group-and-summary-field", | ||||
| 		RPM_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sh", "-c", "alr search --name test-group-and-summary --format \"{{.Group}}\" | grep ^System/Base$") | ||||
| 			execShouldNoError(t, r, "sh", "-c", "alr search --name test-group-and-summary --format \"{{.Summary}}\" | grep \"^Custom summary$\"") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"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( | ||||
| 				"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 ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,11 +31,21 @@ func TestE2EIssue32Interactive(t *testing.T) { | ||||
| 		"issue-32-interactive", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			execShouldNoError(t, r, "alr", "--interactive=false", "remove", "ca-certificates") | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "--interactive=false", "remove", "openssl") | ||||
| 			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", "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 ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,11 +31,51 @@ func TestE2EIssue41AutoreqSkiplist(t *testing.T) { | ||||
| 		"issue-41-autoreq-skiplist", | ||||
| 		AUTOREQ_AUTOPROV_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "alr", "build", "-p", "alr-repo/test-autoreq-autoprov") | ||||
| 			execShouldNoError(t, r, "sh", "-c", "rpm -qp --requires *.rpm | grep \"^/bin/sh$\"") | ||||
| 			execShouldError(t, r, "sh", "-c", "rpm -qp --requires *.rpm | grep \"^/bin/bash$\"") | ||||
| 			execShouldError(t, r, "sh", "-c", "rpm -qp --requires *.rpm | grep \"^/bin/zsh$\"") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"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( | ||||
| 				"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 ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,10 +31,26 @@ func TestE2EIssue50InstallMultiple(t *testing.T) { | ||||
| 		"issue-50-install-multiple", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "foo-pkg", "bar-pkg") | ||||
| 			execShouldNoError(t, r, "cat", "/opt/foo") | ||||
| 			execShouldNoError(t, r, "cat", "/opt/bar") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"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", "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 ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,8 +31,23 @@ func TestE2EIssue53LcAllCInfo(t *testing.T) { | ||||
| 		"issue-53-lc-all-c-info", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "bash", "-c", "LANG=C alr info foo-pkg") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"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 ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,11 +31,28 @@ func TestE2EIssue59RmCompletion(t *testing.T) { | ||||
| 		"issue-59-rm-completion", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "foo-pkg", "bar-pkg") | ||||
| 			execShouldNoError(t, r, "sh", "-c", "alr rm --generate-bash-completion | grep ^foo-pkg$") | ||||
| 			execShouldNoError(t, r, "sh", "-c", "alr rm --generate-bash-completion | grep ^bar-pkg$") | ||||
| 			execShouldError(t, r, "sh", "-c", "alr rm --generate-bash-completion | grep ^test-autoreq-autoprov$") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"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", "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 ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,8 +31,21 @@ func TestE2EIssue72InstallWithDeps(t *testing.T) { | ||||
| 		"issue-72-install-with-deps", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "test-app-with-lib") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"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", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "repo", "set-ref", "alr-repo", "bd26236cd7") | ||||
| 			execShouldNoError(t, r, "alr", "ref") | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "bar-pkg") | ||||
| 			execShouldNoError(t, r, "sh", "-c", "test $(alr list -U | wc -l) -eq 0 || exit 1") | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "repo", "set-ref", "alr-repo", "d9a3541561") | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "ref") | ||||
| 			execShouldNoError(t, r, "sh", "-c", "test $(alr list -U | wc -l) -eq 1 || exit 1") | ||||
| 			simpleExec(t, r, "sudo", | ||||
| 				"alr", | ||||
| 				"addrepo", | ||||
| 				"--name", | ||||
| 				"alr-repo", | ||||
| 				"--url", | ||||
| 				REPO_FOR_E2E_TESTS, | ||||
| 			) | ||||
| 			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 ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -30,9 +31,32 @@ func TestE2EIssue75InstallWithDeps(t *testing.T) { | ||||
| 		"issue-75-ref-specify", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			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") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"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", "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" | ||||
|  | ||||
| 	"github.com/efficientgo/e2e" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
|  | ||||
| func TestE2EIssue81MultiplePackages(t *testing.T) { | ||||
| @@ -30,9 +31,29 @@ func TestE2EIssue81MultiplePackages(t *testing.T) { | ||||
| 		"issue-81-multiple-packages", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "first-package-with-dashes") | ||||
| 			execShouldNoError(t, r, "cat", "/opt/first-package") | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"sudo", | ||||
| 				"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" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:51 repo.go:269 | ||||
| #: repo.go:50 repo.go:220 | ||||
| msgid "Remove an existing repository" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:53 | ||||
| #: repo.go:52 | ||||
| msgid "<name>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:83 | ||||
| #: repo.go:82 | ||||
| msgid "Repo \"%s\" does not exist" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:90 | ||||
| #: repo.go:89 | ||||
| msgid "Error removing repo directory" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:94 repo.go:161 repo.go:219 | ||||
| #: repo.go:93 repo.go:160 | ||||
| msgid "Error saving config" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:113 | ||||
| #: repo.go:112 | ||||
| msgid "Error removing packages from database" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:124 repo.go:239 | ||||
| #: repo.go:123 repo.go:190 | ||||
| msgid "Add a new repository" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:125 | ||||
| #: repo.go:124 | ||||
| msgid "<name> <url>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:150 | ||||
| #: repo.go:149 | ||||
| msgid "Repo \"%s\" already exists" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:187 | ||||
| msgid "Set the reference of the repository" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:188 | ||||
| msgid "<name> <ref>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:246 | ||||
| #: repo.go:197 | ||||
| msgid "Name of the new repo" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:252 | ||||
| #: repo.go:203 | ||||
| msgid "URL of the new repo" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:276 | ||||
| #: repo.go:227 | ||||
| msgid "Name of the repo to be deleted" | ||||
| msgstr "" | ||||
|  | ||||
|   | ||||
| @@ -5,15 +5,15 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "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" | ||||
| "Language-Team: Russian\n" | ||||
| "Language: ru\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " | ||||
| "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | ||||
| "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" | ||||
| "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | ||||
| "X-Generator: Gtranslator 48.0\n" | ||||
|  | ||||
| #: build.go:42 | ||||
| @@ -290,8 +290,6 @@ msgid "" | ||||
| "This command is deprecated and would be removed in the future, use \"%s\" " | ||||
| "instead!" | ||||
| msgstr "" | ||||
| "Эта команда устарела и будет удалена в будущем, используйте вместо нее " | ||||
| "\"%s\"!" | ||||
|  | ||||
| #: internal/db/db.go:137 | ||||
| msgid "Database version mismatch; resetting" | ||||
| @@ -479,61 +477,53 @@ msgstr "Скачать все изменённые репозитории" | ||||
|  | ||||
| #: repo.go:39 | ||||
| msgid "Manage repos" | ||||
| msgstr "Управление репозиториями" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:51 repo.go:269 | ||||
| #: repo.go:50 repo.go:220 | ||||
| msgid "Remove an existing repository" | ||||
| msgstr "Удалить существующий репозиторий" | ||||
|  | ||||
| #: repo.go:53 | ||||
| #: repo.go:52 | ||||
| msgid "<name>" | ||||
| msgstr "<имя>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:83 | ||||
| #: repo.go:82 | ||||
| msgid "Repo \"%s\" does not exist" | ||||
| msgstr "Репозитория \"%s\" не существует" | ||||
|  | ||||
| #: repo.go:90 | ||||
| #: repo.go:89 | ||||
| msgid "Error removing repo directory" | ||||
| msgstr "Ошибка при удалении каталога репозитория" | ||||
|  | ||||
| #: repo.go:94 repo.go:161 repo.go:219 | ||||
| #: repo.go:93 repo.go:160 | ||||
| msgid "Error saving config" | ||||
| msgstr "Ошибка при сохранении конфигурации" | ||||
|  | ||||
| #: repo.go:113 | ||||
| #: repo.go:112 | ||||
| msgid "Error removing packages from database" | ||||
| msgstr "Ошибка при удалении пакетов из базы данных" | ||||
|  | ||||
| #: repo.go:124 repo.go:239 | ||||
| #: repo.go:123 repo.go:190 | ||||
| msgid "Add a new repository" | ||||
| msgstr "Добавить новый репозиторий" | ||||
|  | ||||
| #: repo.go:125 | ||||
| #: repo.go:124 | ||||
| msgid "<name> <url>" | ||||
| msgstr "<имя> <url>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:150 | ||||
| #: repo.go:149 | ||||
| msgid "Repo \"%s\" already exists" | ||||
| msgstr "Репозиторий \"%s\" уже существует" | ||||
|  | ||||
| #: repo.go:187 | ||||
| msgid "Set the reference of the repository" | ||||
| msgstr "Установить ссылку на версию репозитория" | ||||
|  | ||||
| #: repo.go:188 | ||||
| msgid "<name> <ref>" | ||||
| msgstr "<имя> <ссылка_на_версию>" | ||||
|  | ||||
| #: repo.go:246 | ||||
| #: repo.go:197 | ||||
| msgid "Name of the new repo" | ||||
| msgstr "Название нового репозитория" | ||||
|  | ||||
| #: repo.go:252 | ||||
| #: repo.go:203 | ||||
| msgid "URL of the new repo" | ||||
| msgstr "URL-адрес нового репозитория" | ||||
|  | ||||
| #: repo.go:276 | ||||
| #: repo.go:227 | ||||
| msgid "Name of the repo to be deleted" | ||||
| msgstr "Название репозитория  удалён" | ||||
|  | ||||
|   | ||||
							
								
								
									
										49
									
								
								repo.go
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								repo.go
									
									
									
									
									
								
							| @@ -40,7 +40,6 @@ func RepoCmd() *cli.Command { | ||||
| 		Subcommands: []*cli.Command{ | ||||
| 			RemoveRepoCmd(), | ||||
| 			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 | ||||
| // | ||||
| // Deprecated: use "alr repo add" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user