[arch-projects] [dbscripts] [PATCH 3/3] Update messages to make fuller use of printf formatters

Eli Schwartz eschwartz at archlinux.org
Thu Feb 22 21:44:20 UTC 2018


On 02/22/2018 03:43 PM, Luke Shumaker wrote:
> From: Luke Shumaker <lukeshu at parabola.nu>
> 
> These are things that were (IMO) missed in 5afac1e.  I found them using:
> 
>     git ls-files|xargs grep -E '(plain|msg|msg2|warning|error|die) "[^"]*\$'

Consider using git grep next time :p rather than piping through both
xargs and the inferior GNU grep.

> I went a little above-and-beyond for escaping strings for the error
> messages in db-functions' arch_repo_add and arch_repo_remove.  The
> code should explain itself, but I wanted to point it out, as it's more
> complex than the "slap %s in there, and move the ${...} to the right"
> that is used everywhere else.
>
> [...]
> index 8b71cae..6d02c50 100644
> --- a/db-functions
> +++ b/db-functions
> @@ -446,11 +446,13 @@ arch_repo_add() {
>  	local repo=$1
>  	local arch=$2
>  	local pkgs=(${@:3})
> +	local pkgs_str
>  
>  	# package files might be relative to repo dir
>  	pushd "${FTP_BASE}/${repo}/os/${arch}" >/dev/null
> +	printf -v pkgs_str -- '%q ' "${pkgs[@]}"
>  	/usr/bin/repo-add -q "${repo}${DBEXT}" ${pkgs[@]} \
> -		|| error "repo-add ${repo}${DBEXT} ${pkgs[@]}"
> +		|| error 'repo-add %q %s' "${repo}${DBEXT}" "${pkgs_str% }"
>  	popd >/dev/null
>  	set_repo_permission "${repo}" "${arch}"
>  
> @@ -462,13 +464,15 @@ arch_repo_remove() {
>  	local arch=$2
>  	local pkgs=(${@:3})
>  	local dbfile="${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT}"
> +	local pkgs_str
>  
>  	if [[ ! -f ${dbfile} ]]; then
>  		error "No database found at '%s'" "$dbfile"
>  		return 1
>  	fi
> +	printf -v pkgs_str -- '%q ' "${pkgs[@]}"
>  	/usr/bin/repo-remove -q "${dbfile}" ${pkgs[@]} \
> -		|| error "repo-remove ${dbfile} ${pkgs[@]}"
> +		|| error 'repo-remove %q %s' "$dbfile" "${pkgs_str% }"
>  	set_repo_permission "${repo}" "${arch}"

I do see what you're doing, I'm just not sure why. Is the whole idea
with this extra variable floating around, to avoid tokenizing
"${pkgs[@]}" as separate messages? That's why "${pkgs[*]}" tokenizes the
members of an array as one word by gluing the members together using the
first IFS character (which is a space). You'll note I used this in
testing2x.

As for using %q for filepaths that can theoretically contain spaces...
good point I guess.

-- 
Eli Schwartz
Bug Wrangler and Trusted User

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/arch-projects/attachments/20180222/1fe14ad3/attachment.asc>


More information about the arch-projects mailing list