From 87741dbd2118b0c90db6a37525b36c7bc93617ce Mon Sep 17 00:00:00 2001 From: Bob van der Linden Date: Thu, 7 Mar 2024 20:33:59 +0100 Subject: [PATCH] profile: add --regex option to match packages --- src/nix/profile-remove.md | 2 +- src/nix/profile-upgrade.md | 2 +- src/nix/profile.cc | 10 +++++++++- tests/functional/nix-profile.sh | 10 ++++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/nix/profile-remove.md b/src/nix/profile-remove.md index 1f6532250..e2dea3389 100644 --- a/src/nix/profile-remove.md +++ b/src/nix/profile-remove.md @@ -11,7 +11,7 @@ R""( * Remove all packages: ```console - # nix profile remove '.*' + # nix profile remove --regex '.*' ``` * Remove a package by store path: diff --git a/src/nix/profile-upgrade.md b/src/nix/profile-upgrade.md index 432b8fa94..e04ad109e 100644 --- a/src/nix/profile-upgrade.md +++ b/src/nix/profile-upgrade.md @@ -6,7 +6,7 @@ R""( reference: ```console - # nix profile upgrade '.*' + # nix profile upgrade --regex '.*' ``` * Upgrade a specific package by name: diff --git a/src/nix/profile.cc b/src/nix/profile.cc index d79f1158b..c08d02e70 100644 --- a/src/nix/profile.cc +++ b/src/nix/profile.cc @@ -508,7 +508,15 @@ public: MixProfileElementMatchers() { - expectArgs(ExpectedArg { + addFlag({ + .longName = "regex", + .description = "A regular expression to match one or more packages in the profile.", + .labels = {"pattern"}, + .handler = {[this](std::string arg) { + _matchers.push_back(createRegexMatcher(arg)); + }}, + }); + expectArgs({ .label = "elements", .optional = true, .handler = {[this](std::vector args) { diff --git a/tests/functional/nix-profile.sh b/tests/functional/nix-profile.sh index 88b713d53..274b72de2 100644 --- a/tests/functional/nix-profile.sh +++ b/tests/functional/nix-profile.sh @@ -71,6 +71,16 @@ nix profile upgrade flake1 [[ $($TEST_HOME/.nix-profile/bin/hello) = "Hello NixOS" ]] nix profile history | grep "packages.$system.default: 1.0, 1.0-man -> 2.0, 2.0-man" +# Test upgrading package using regular expression. +printf 2.1 > $flake1Dir/version +nix profile upgrade --regex '.*' +[[ $(readlink $TEST_HOME/.nix-profile/bin/hello) =~ .*-profile-test-2\.1/bin/hello ]] +nix profile rollback + +# Test removing all packages using regular expression. +nix profile remove --regex '.*' 2>&1 | grep "removed 2 packages, kept 0 packages" +nix profile rollback + # Test 'history', 'diff-closures'. nix profile diff-closures