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"
]