From f92bd7089ad42d0b10d86e1dfc1d3167139696db Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Fri, 16 May 2025 20:48:14 +0300 Subject: [PATCH] add set-ref command and refactor tests --- assets/coverage-badge.svg | 4 +- assets/i18n-ru-badge.svg | 4 +- e2e-tests/bash_completion_test.go | 6 +-- e2e-tests/common_test.go | 29 +++++++++-- e2e-tests/group_and_summary_field_test.go | 24 ++------- e2e-tests/issue_32_interactive_test.go | 25 ++-------- e2e-tests/issue_41_autoreq_skiplist_test.go | 51 ++------------------ e2e-tests/issue_50_install_multiple_test.go | 25 ++-------- e2e-tests/issue_53_lc_all_c_info_test.go | 20 +------- e2e-tests/issue_59_rm_completion_test.go | 28 ++--------- e2e-tests/issue_72_install_with_deps_test.go | 18 +------ e2e-tests/issue_74_upgradable_test.go | 23 +++------ e2e-tests/issue_75_ref_specify_test.go | 30 ++---------- e2e-tests/issue_81_multiple_packages_test.go | 27 ++--------- e2e-tests/issue_91_set_repo_ref_test.go | 40 +++++++++++++++ internal/translations/default.pot | 32 +++++++----- internal/translations/po/ru/default.po | 46 +++++++++++------- repo.go | 49 +++++++++++++++++++ 18 files changed, 207 insertions(+), 274 deletions(-) create mode 100644 e2e-tests/issue_91_set_repo_ref_test.go diff --git a/assets/coverage-badge.svg b/assets/coverage-badge.svg index b891de3..a1f8f90 100644 --- a/assets/coverage-badge.svg +++ b/assets/coverage-badge.svg @@ -11,7 +11,7 @@ coverage coverage - 17.0% - 17.0% + 16.9% + 16.9% diff --git a/assets/i18n-ru-badge.svg b/assets/i18n-ru-badge.svg index 56d2e1c..2a5d418 100644 --- a/assets/i18n-ru-badge.svg +++ b/assets/i18n-ru-badge.svg @@ -12,7 +12,7 @@ ru translate ru translate - 96.00% - 96.00% + 100.00% + 100.00% diff --git a/e2e-tests/bash_completion_test.go b/e2e-tests/bash_completion_test.go index e5159e8..2291cb9 100644 --- a/e2e-tests/bash_completion_test.go +++ b/e2e-tests/bash_completion_test.go @@ -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") }, ) } diff --git a/e2e-tests/common_test.go b/e2e-tests/common_test.go index 90b4fb1..00bfe74 100644 --- a/e2e-tests/common_test.go +++ b/e2e-tests/common_test.go @@ -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", + ) +} diff --git a/e2e-tests/group_and_summary_field_test.go b/e2e-tests/group_and_summary_field_test.go index 6247566..ec9fb05 100644 --- a/e2e-tests/group_and_summary_field_test.go +++ b/e2e-tests/group_and_summary_field_test.go @@ -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$\"") }, ) } diff --git a/e2e-tests/issue_32_interactive_test.go b/e2e-tests/issue_32_interactive_test.go index e7b41b7..67df7d0 100644 --- a/e2e-tests/issue_32_interactive_test.go +++ b/e2e-tests/issue_32_interactive_test.go @@ -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") }, ) } diff --git a/e2e-tests/issue_41_autoreq_skiplist_test.go b/e2e-tests/issue_41_autoreq_skiplist_test.go index 7185bdd..3879aca 100644 --- a/e2e-tests/issue_41_autoreq_skiplist_test.go +++ b/e2e-tests/issue_41_autoreq_skiplist_test.go @@ -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$\"") }, ) } diff --git a/e2e-tests/issue_50_install_multiple_test.go b/e2e-tests/issue_50_install_multiple_test.go index 293e3ac..4cd0663 100644 --- a/e2e-tests/issue_50_install_multiple_test.go +++ b/e2e-tests/issue_50_install_multiple_test.go @@ -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") }, ) } diff --git a/e2e-tests/issue_53_lc_all_c_info_test.go b/e2e-tests/issue_53_lc_all_c_info_test.go index 80d5553..d37a14c 100644 --- a/e2e-tests/issue_53_lc_all_c_info_test.go +++ b/e2e-tests/issue_53_lc_all_c_info_test.go @@ -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") }, ) } diff --git a/e2e-tests/issue_59_rm_completion_test.go b/e2e-tests/issue_59_rm_completion_test.go index a94ede5..c7ca448 100644 --- a/e2e-tests/issue_59_rm_completion_test.go +++ b/e2e-tests/issue_59_rm_completion_test.go @@ -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$") }, ) } diff --git a/e2e-tests/issue_72_install_with_deps_test.go b/e2e-tests/issue_72_install_with_deps_test.go index f984c59..42289be 100644 --- a/e2e-tests/issue_72_install_with_deps_test.go +++ b/e2e-tests/issue_72_install_with_deps_test.go @@ -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") }, ) } diff --git a/e2e-tests/issue_74_upgradable_test.go b/e2e-tests/issue_74_upgradable_test.go index e04a825..ce23634 100644 --- a/e2e-tests/issue_74_upgradable_test.go +++ b/e2e-tests/issue_74_upgradable_test.go @@ -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") }, ) } diff --git a/e2e-tests/issue_75_ref_specify_test.go b/e2e-tests/issue_75_ref_specify_test.go index 623381c..a322df1 100644 --- a/e2e-tests/issue_75_ref_specify_test.go +++ b/e2e-tests/issue_75_ref_specify_test.go @@ -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") }, ) } diff --git a/e2e-tests/issue_81_multiple_packages_test.go b/e2e-tests/issue_81_multiple_packages_test.go index 2f6d13e..c766d3d 100644 --- a/e2e-tests/issue_81_multiple_packages_test.go +++ b/e2e-tests/issue_81_multiple_packages_test.go @@ -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") }, ) } diff --git a/e2e-tests/issue_91_set_repo_ref_test.go b/e2e-tests/issue_91_set_repo_ref_test.go new file mode 100644 index 0000000..fac44d5 --- /dev/null +++ b/e2e-tests/issue_91_set_repo_ref_test.go @@ -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 . + +//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") + }, + ) +} diff --git a/internal/translations/default.pot b/internal/translations/default.pot index c36c01d..67071f0 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -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 "" 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 " " 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 " " +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 "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index 26217bc..55606d0 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -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 \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 "" -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 " " -msgstr "" +msgstr "<имя> " -#: 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 " " +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 "Название репозитория удалён" diff --git a/repo.go b/repo.go index c6b25f5..e7e852b 100644 --- a/repo.go +++ b/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(" "), + 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"