Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pkg unlock -a does not work #2278

Open
dearblue opened this issue Apr 26, 2024 · 0 comments
Open

pkg unlock -a does not work #2278

dearblue opened this issue Apr 26, 2024 · 0 comments

Comments

@dearblue
Copy link

The unlock command with the -a switch will terminate with failure if it encounters the first package that is not unlocked.

The following is an example using the "ruby" package.

# pkg lock -y ruby
Locking ruby-3.2.3,1
# pkg unlock -ay
0ad-0.0.26_23: already unlocked
# pkg unlock -y ruby
Unlocking ruby-3.2.3,1

I expected the following.

# pkg lock -y ruby
Locking ruby-3.2.3,1
# pkg unlock -ay
Unlocking ruby-3.2.3,1

I don't know what behavior is preferable, so here is a patch I wrote anyway.

diff --git a/src/lock.c b/src/lock.c
index fdcf629ef..6120ae489 100644
--- a/src/lock.c
+++ b/src/lock.c
@@ -42,8 +42,8 @@ enum action {
 };
 
 static int exec_lock_unlock(int, char**, enum action);
-static int do_lock(struct pkgdb *db, struct pkg *pkg);
-static int do_unlock(struct pkgdb *db, struct pkg *pkg);
+static int do_lock(struct pkgdb *db, struct pkg *pkg, int match);
+static int do_unlock(struct pkgdb *db, struct pkg *pkg, int match);
 
 void
 usage_lock(void)
@@ -55,9 +55,11 @@ usage_lock(void)
 }
 
 static int
-do_lock(struct pkgdb *db, struct pkg *pkg)
+do_lock(struct pkgdb *db, struct pkg *pkg, int match)
 {
 	if (pkg_is_locked(pkg)) {
+		if (match == MATCH_ALL)
+			return (EPKG_OK);
 		if (!quiet)
 			pkg_printf("%n-%v: already locked\n",
 			       pkg, pkg);
@@ -76,9 +78,11 @@ do_lock(struct pkgdb *db, struct pkg *pkg)
 
 
 static int
-do_unlock(struct pkgdb *db, struct pkg *pkg)
+do_unlock(struct pkgdb *db, struct pkg *pkg, int match)
 {
 	if (!pkg_is_locked(pkg)) {
+		if (match == MATCH_ALL)
+			return (EPKG_OK);
 		if (!quiet)
 			pkg_printf("%n-%v: already unlocked\n", pkg, pkg);
 		return (EPKG_FATAL);
@@ -124,9 +128,9 @@ do_lock_unlock(struct pkgdb *db, int match, const char *pkgname,
 	}
 	tll_foreach(pkgs, p) {
 		if (action == LOCK)
-			retcode = do_lock(db, p->item);
+			retcode = do_lock(db, p->item, match);
 		else
-			retcode = do_unlock(db, p->item);
+			retcode = do_unlock(db, p->item, match);
 
 		if (retcode != EPKG_OK) {
 			exitcode = EXIT_FAILURE;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant