add set-ref command and refactor tests #92
| @@ -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">17.0%</text> | ||||
|         <text x="86" y="14">17.0%</text> | ||||
|         <text x="86" y="15" fill="#010101" fill-opacity=".3">16.9%</text> | ||||
|         <text x="86" y="14">16.9%</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">96.00%</text> | ||||
|         <text x="100" y="14">96.00%</text> | ||||
|         <text x="100" y="15" fill="#010101" fill-opacity=".3">100.00%</text> | ||||
|         <text x="100" y="14">100.00%</text> | ||||
|     </g> | ||||
| </svg> | ||||
|   | ||||
| Before Width: | Height: | Size: 940 B After Width: | Height: | Size: 942 B | 
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,10 +30,7 @@ func TestE2EBashCompletion(t *testing.T) { | ||||
| 		"bash-completion", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			err := r.Exec(e2e.NewCommand( | ||||
| 				"alr", "install", "--generate-bash-completion", | ||||
| 			)) | ||||
| 			assert.NoError(t, err) | ||||
| 			execShouldNoError(t, r, "alr", "install", "--generate-bash-completion") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -159,9 +159,12 @@ func dockerMultipleRun(t *testing.T, name string, ids []string, f func(t *testin | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func simpleExec(t *testing.T, r e2e.Runnable, cmd string, args ...string) { | ||||
| 	err := r.Exec(e2e.NewCommand(cmd, args...)) | ||||
| 	assert.NoError(t, err) | ||||
| 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 runTestCommands(t *testing.T, r e2e.Runnable, timeout time.Duration, expects []expect.Batcher) { | ||||
| @@ -178,4 +181,22 @@ func runTestCommands(t *testing.T, r e2e.Runnable, timeout time.Duration, expect | ||||
| 	assert.NoError(t, err) | ||||
| } | ||||
|  | ||||
| const REPO_FOR_E2E_TESTS = "https://gitea.plemya-x.ru/Maks1mS/repo-for-tests.git" | ||||
| 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", | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,26 +30,9 @@ func TestE2EGroupAndSummaryField(t *testing.T) { | ||||
| 		"group-and-summary-field", | ||||
| 		RPM_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			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$\"") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,25 +30,11 @@ func TestE2EIssue32Interactive(t *testing.T) { | ||||
| 		"issue-32-interactive", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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", "apt-get", "update", | ||||
| 			))) | ||||
|  | ||||
| 			assert.NoError(t, r.Exec(e2e.NewCommand( | ||||
| 				"sudo", "alr", "--interactive=false", "install", "ca-certificates", | ||||
| 			))) | ||||
| 			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") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,51 +30,11 @@ func TestE2EIssue41AutoreqSkiplist(t *testing.T) { | ||||
| 		"issue-41-autoreq-skiplist", | ||||
| 		AUTOREQ_AUTOPROV_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			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$\"") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,26 +30,10 @@ func TestE2EIssue50InstallMultiple(t *testing.T) { | ||||
| 		"issue-50-install-multiple", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			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") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,23 +30,8 @@ func TestE2EIssue53LcAllCInfo(t *testing.T) { | ||||
| 		"issue-53-lc-all-c-info", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "bash", "-c", "LANG=C alr info foo-pkg") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,28 +30,11 @@ func TestE2EIssue59RmCompletion(t *testing.T) { | ||||
| 		"issue-59-rm-completion", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			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$") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,21 +30,8 @@ func TestE2EIssue72InstallWithDeps(t *testing.T) { | ||||
| 		"issue-72-install-with-deps", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "test-app-with-lib") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -30,21 +30,14 @@ func TestE2EIssue74Upgradable(t *testing.T) { | ||||
| 		"issue-74-upgradable", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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") | ||||
| 			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") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -21,7 +21,6 @@ package e2etests_test | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/alecthomas/assert/v2" | ||||
| 	"github.com/efficientgo/e2e" | ||||
| ) | ||||
|  | ||||
| @@ -31,32 +30,9 @@ func TestE2EIssue75InstallWithDeps(t *testing.T) { | ||||
| 		"issue-75-ref-specify", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			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") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -22,7 +22,6 @@ import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/efficientgo/e2e" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
|  | ||||
| func TestE2EIssue81MultiplePackages(t *testing.T) { | ||||
| @@ -31,29 +30,9 @@ func TestE2EIssue81MultiplePackages(t *testing.T) { | ||||
| 		"issue-81-multiple-packages", | ||||
| 		COMMON_SYSTEMS, | ||||
| 		func(t *testing.T, r e2e.Runnable) { | ||||
| 			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) | ||||
| 			defaultPrepare(t, r) | ||||
| 			execShouldNoError(t, r, "sudo", "alr", "in", "first-package-with-dashes") | ||||
| 			execShouldNoError(t, r, "cat", "/opt/first-package") | ||||
| 		}, | ||||
| 	) | ||||
| } | ||||
|   | ||||
							
								
								
									
										40
									
								
								e2e-tests/issue_91_set_repo_ref_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								e2e-tests/issue_91_set_repo_ref_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| // 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,51 +465,59 @@ msgstr "" | ||||
| msgid "Manage repos" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:50 repo.go:220 | ||||
| #: repo.go:51 repo.go:269 | ||||
| msgid "Remove an existing repository" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:52 | ||||
| #: repo.go:53 | ||||
| msgid "<name>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:82 | ||||
| #: repo.go:83 | ||||
| msgid "Repo \"%s\" does not exist" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:89 | ||||
| #: repo.go:90 | ||||
| msgid "Error removing repo directory" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:93 repo.go:160 | ||||
| #: repo.go:94 repo.go:161 repo.go:219 | ||||
| msgid "Error saving config" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:112 | ||||
| #: repo.go:113 | ||||
| msgid "Error removing packages from database" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:123 repo.go:190 | ||||
| #: repo.go:124 repo.go:239 | ||||
| msgid "Add a new repository" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:124 | ||||
| #: repo.go:125 | ||||
| msgid "<name> <url>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:149 | ||||
| #: repo.go:150 | ||||
| msgid "Repo \"%s\" already exists" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:197 | ||||
| #: repo.go:187 | ||||
| msgid "Set the reference of the repository" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:188 | ||||
| msgid "<name> <ref>" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:246 | ||||
| msgid "Name of the new repo" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:203 | ||||
| #: repo.go:252 | ||||
| msgid "URL of the new repo" | ||||
| msgstr "" | ||||
|  | ||||
| #: repo.go:227 | ||||
| #: repo.go:276 | ||||
| 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-13 23:24+0300\n" | ||||
| "PO-Revision-Date: 2025-05-16 20:47+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,6 +290,8 @@ 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" | ||||
| @@ -477,53 +479,61 @@ msgstr "Скачать все изменённые репозитории" | ||||
|  | ||||
| #: repo.go:39 | ||||
| msgid "Manage repos" | ||||
| msgstr "" | ||||
| msgstr "Управление репозиториями" | ||||
|  | ||||
| #: repo.go:50 repo.go:220 | ||||
| #: repo.go:51 repo.go:269 | ||||
| msgid "Remove an existing repository" | ||||
| msgstr "Удалить существующий репозиторий" | ||||
|  | ||||
| #: repo.go:52 | ||||
| #: repo.go:53 | ||||
| msgid "<name>" | ||||
| msgstr "" | ||||
| msgstr "<имя>" | ||||
|  | ||||
| #: repo.go:82 | ||||
| #: repo.go:83 | ||||
| msgid "Repo \"%s\" does not exist" | ||||
| msgstr "Репозитория \"%s\" не существует" | ||||
|  | ||||
| #: repo.go:89 | ||||
| #: repo.go:90 | ||||
| msgid "Error removing repo directory" | ||||
| msgstr "Ошибка при удалении каталога репозитория" | ||||
|  | ||||
| #: repo.go:93 repo.go:160 | ||||
| #: repo.go:94 repo.go:161 repo.go:219 | ||||
| msgid "Error saving config" | ||||
| msgstr "Ошибка при сохранении конфигурации" | ||||
|  | ||||
| #: repo.go:112 | ||||
| #: repo.go:113 | ||||
| msgid "Error removing packages from database" | ||||
| msgstr "Ошибка при удалении пакетов из базы данных" | ||||
|  | ||||
| #: repo.go:123 repo.go:190 | ||||
| #: repo.go:124 repo.go:239 | ||||
| msgid "Add a new repository" | ||||
| msgstr "Добавить новый репозиторий" | ||||
|  | ||||
| #: repo.go:124 | ||||
| #: repo.go:125 | ||||
| msgid "<name> <url>" | ||||
| msgstr "" | ||||
| msgstr "<имя> <url>" | ||||
|  | ||||
| #: repo.go:149 | ||||
| #: repo.go:150 | ||||
| msgid "Repo \"%s\" already exists" | ||||
| msgstr "Репозиторий \"%s\" уже существует" | ||||
|  | ||||
| #: repo.go:197 | ||||
| #: repo.go:187 | ||||
| msgid "Set the reference of the repository" | ||||
| msgstr "Установить ссылку на версию репозитория" | ||||
|  | ||||
| #: repo.go:188 | ||||
| msgid "<name> <ref>" | ||||
| msgstr "<имя> <ссылка_на_версию>" | ||||
|  | ||||
| #: repo.go:246 | ||||
| msgid "Name of the new repo" | ||||
| msgstr "Название нового репозитория" | ||||
|  | ||||
| #: repo.go:203 | ||||
| #: repo.go:252 | ||||
| msgid "URL of the new repo" | ||||
| msgstr "URL-адрес нового репозитория" | ||||
|  | ||||
| #: repo.go:227 | ||||
| #: repo.go:276 | ||||
| msgid "Name of the repo to be deleted" | ||||
| msgstr "Название репозитория  удалён" | ||||
|  | ||||
|   | ||||
							
								
								
									
										49
									
								
								repo.go
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								repo.go
									
									
									
									
									
								
							| @@ -40,6 +40,7 @@ func RepoCmd() *cli.Command { | ||||
| 		Subcommands: []*cli.Command{ | ||||
| 			RemoveRepoCmd(), | ||||
| 			AddRepoCmd(), | ||||
| 			SetRepoRefCmd(), | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| @@ -180,6 +181,54 @@ 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