apt does not accept globs and regexes in some cases
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
apt (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Focal |
Fix Released
|
Undecided
|
Unassigned | ||
Groovy |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
[Impact]
Users can't use * wildcards anymore in focal, except by accident in apt list.
For apt list, we now start restricting wildcard syntax to the same syntax install now accepts, and at the same time we remove the restrictions on which patterns are accepted (which only accepted patterns starting in ~ or ?), so !~napt now works, and does not accidentally match as a wildcard.
[Test case]
Test that * wildcards work for both install and list, and test that a ? wildcard does not.
We included autopkgtests for those:
#### BEGIN TESTS #####
# * wildcards should still work
testsuccessequal "Listing...
automatic1/now 1.0 i386 [installed,local]
automatic2/now 1.0 i386 [installed,local]" apt list 'automatic*'
testfailureequal "Reading package lists...
Building dependency tree...
Reading state information...
Note, selecting 'automatic1' for glob 'automatic*'
Note, selecting 'automatic2' for glob 'automatic*'
automatic1 is already the newest version (1.0).
automatic1 set to manually installed.
automatic2 is already the newest version (1.0).
automatic2 set to manually installed.
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
broken : Depends: does-not-exist but it is not installable
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution)." apt install -s 'automatic*'
# other wildcards should fail
testfailureequal "Listing...
E: input:0-10: error: Expected pattern
automatic?
^^^^^^^^^^" apt list 'automatic?'
testfailureequal "Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package automatic?" apt install -s 'automatic?'
#### END TESTS #####
Also it might be worth checking that apt list !~napt works. This used to produce an empty list, as it was accidentally matched as a wildcard and produced no result - now it produces every package whose name does not contain "apt".
[Regression potential]
The changes only affect interactive users, as apt(8) is not stable for in-script use, hence they can fix up their command-line if it stops working for them (though, really, more should work now).
No scripts will be broken :)
[Squashed in changes]
The SRU also fixes potential build failures by correctly prefxing nullptr_t with the std:: namespace, and includes updated Dutch documentation.
[Original bug report]
Observed with Ubuntu 20.04 Beta.
apt remove 'mypackage*' does not remove all installed packages starting with “mypackage”. Instead:
$ sudo apt remove 'mypackage*'
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package mypackage*
However:
$ sudo apt list --installed 'mypackage*'
Listing... Done
mypackage-
mypackage1/
description: | updated |
Changed in apt (Ubuntu Focal): | |
status: | New → Triaged |
tags: | added: block-proposed-focal |
Changed in apt (Ubuntu Focal): | |
status: | Won't Fix → Triaged |
Hmm seems I missed disabling that in apt list, good catch.