[pacman-dev] [PATCH] makepkg: fix bash 5 compatibility when packaging symlinks to a directory
In commit b5191ea140386dd9b73e4509ffa9a6d347c1b5fa we moved to using shell globbing to print package files for a couple of reasons including reproducible packaging of .METADATA files. Unfortunately, this only works reliably when the glob pattern does not resolve to a symlinked directory due to a change in the bash 5.0 release. Note that the previous, desired behavior was rather to merely refuse to recurse into symlinked directories, but due to an unrelated issue, the symlink handling for globstar was reworked in a way that had this side effect. See https://lists.gnu.org/archive/html/bug-bash/2019-04/msg00015.html for discussion; this may be fixed at some point, but bash 5.0 is broken either way. The appropriate way of handling this seems to be to use **/* to match instead; this produces the same results on both bash 4 and bash 5, as the ** matches any leading directory component (or none), and the * matches any file, directory, or symlink to either one. Fixes FS#62278 Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> --- scripts/makepkg.sh.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 4f096a36..fd06ce02 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -666,7 +666,8 @@ list_package_files() { ( export LC_COLLATE=C shopt -s dotglob globstar - printf '%s\0' ** + # bash 5.0 only works with combo directory + file globs + printf '%s\0' **/* ) } -- 2.21.0
On 10/4/19 3:50 pm, Eli Schwartz wrote:
In commit b5191ea140386dd9b73e4509ffa9a6d347c1b5fa we moved to using shell globbing to print package files for a couple of reasons including reproducible packaging of .METADATA files.
Unfortunately, this only works reliably when the glob pattern does not resolve to a symlinked directory due to a change in the bash 5.0 release. Note that the previous, desired behavior was rather to merely refuse to recurse into symlinked directories, but due to an unrelated issue, the symlink handling for globstar was reworked in a way that had this side effect. See https://lists.gnu.org/archive/html/bug-bash/2019-04/msg00015.html for discussion; this may be fixed at some point, but bash 5.0 is broken either way.
The appropriate way of handling this seems to be to use **/* to match instead; this produces the same results on both bash 4 and bash 5, as the ** matches any leading directory component (or none), and the * matches any file, directory, or symlink to either one.
Fixes FS#62278
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
OK.
--- scripts/makepkg.sh.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 4f096a36..fd06ce02 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -666,7 +666,8 @@ list_package_files() { ( export LC_COLLATE=C shopt -s dotglob globstar - printf '%s\0' ** + # bash 5.0 only works with combo directory + file globs + printf '%s\0' **/* ) }
participants (2)
-
Allan McRae
-
Eli Schwartz