[pacman-dev] [PATCH] makepkg: replace sed in-place with built-in substitution

Allan McRae allan at archlinux.org
Wed Nov 6 01:18:26 UTC 2019


On 6/11/19 10:18 am, Ethan Sommer wrote:
> Read PKGBUILD into an array and replace the pkgver and pkgrel with
> bash parameter substitution, then use shell redirection to write to to
> the file. Because shell redirection follows symlinks, this accomplishes
> the same thing as the previous default of using the GNU-specific
> --follow-symlinks sed flag.
> 
> Remove SEDPATH and SEDINPLACEFLAGS from the build systems as they are
> not used elsewhere.
> ---

I like the idea, but am concerned about unintended consequences...

I saw the following mentioned on IRC:
- potential for changed line endings
- added newline at the end of files without one
- removing any null characters

I'm leaning on the side of these being fine, but need to mull on it some
more.

Anything else I missed?

<snip>

> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index c49ac57a..b9e83458 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -199,13 +199,14 @@ update_pkgver() {
>  	fi
>  
>  	if [[ -n $newpkgver && $newpkgver != "$pkgver" ]]; then
> -		if [[ -f $BUILDFILE && -w $BUILDFILE ]]; then
> -			if ! @SEDPATH@ @SEDINPLACEFLAGS@ "s:^pkgver=[^ ]*:pkgver=$newpkgver:" "$BUILDFILE"; then
> +		if [[ -w $BUILDFILE ]]; then
> +			mapfile -t buildfile < "$BUILDFILE"
> +			buildfile=("${buildfile[@]/#pkgver=*([^ ])/pkgver=$newpkgver}")
> +			if ! printf '%s\n' "${buildfile[@]/#pkgrel=*([^ ])/pkgrel=1}" > "$BUILDFILE"; then

split into two lines:

buildfile=("${buildfile[@]/#pkgrel=*([^ ])/pkgrel=1}")
if ! print '%s\n" "${buildfile[@]}"...

>  				error "$(gettext "Failed to update %s from %s to %s")" \
>  						"pkgver" "$pkgver" "$newpkgver"
>  				exit $E_PKGBUILD_ERROR
>  			fi
> -			@SEDPATH@ @SEDINPLACEFLAGS@ "s:^pkgrel=[^ ]*:pkgrel=1:" "$BUILDFILE"
>  			source_safe "$BUILDFILE"
>  			local fullver=$(get_full_version)
>  			msg "$(gettext "Updated version: %s")" "$pkgbase $fullver"
> 


More information about the pacman-dev mailing list