[pacman-dev] [PATCH] repo-add: use more libmakepkg to handle common compression routines

Eli Schwartz eschwartz at archlinux.org
Tue Mar 12 14:57:27 UTC 2019


On 3/12/19 2:32 AM, Allan McRae wrote:
> On 3/8/19 2:32 PM, Eli Schwartz wrote:
>> Currently the list of supported formats for an archive, is maintained in
>> two places. And repo-add does not actually get updated. :(
>>
>> In the process, remove some of the logical duplication when calling
>> bsdtar/compress_as.
>>
>> Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
>> ---
>>  scripts/repo-add.sh.in | 27 +++++++++------------------
>>  1 file changed, 9 insertions(+), 18 deletions(-)
>>
>> diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
>> index 57413df5..0f9628ad 100644
>> --- a/scripts/repo-add.sh.in
>> +++ b/scripts/repo-add.sh.in
>> @@ -44,6 +44,7 @@ CLEAN_LOCK=0
>>  USE_COLOR='y'
>>  
>>  # Import libmakepkg
>> +source "$LIBRARY"/util/compress.sh
>>  source "$LIBRARY"/util/message.sh
>>  
>>  # ensure we have a sane umask set
>> @@ -188,21 +189,12 @@ verify_signature() {
>>  }
>>  
>>  verify_repo_extension() {
>> -	local repofile=$1
>> -
>> -	case $repofile in
>> -		*.db.tar.gz)  TAR_OPT="z" ;;
>> -		*.db.tar.bz2) TAR_OPT="j" ;;
>> -		*.db.tar.xz)  TAR_OPT="J" ;;
>> -		*.db.tar.zst) TAR_OPT="--zstd" ;;
>> -		*.db.tar.Z)   TAR_OPT="Z" ;;
>> -		*.db.tar)     TAR_OPT="" ;;
>> +	case $1 in
>> +		*.db.tar.*|*.db.tar)   ;;
> 
> repo-add mydb.tar.badext ...
> 
> This does no checking at all.

It does. It continues to fail hard if the extension is not .db.tar with
an optional additional extension, and instead of failing hard when
specifying an unknown compression type, it reuses the existing
libmakepkg infrastructure to use "cat" as the compressor, but emit a
warning when an invalid archive extension is shown.

IMHO it is more reasonable to allow it but warn about it, like makepkg
itself does.

I can send in a v2 with a modified commit message specifying that (but
also I need to fix compress_as slightly).

>>  		*) error "$(gettext "'%s' does not have a valid database archive extension.")" \
>> -				"$repofile"
>> +				"$1"
>>  			exit 1 ;;
>>  	esac
>> -
>> -	printf '%s' "$TAR_OPT"
>>  }
>>  
>>  # write an entry to the pacman database
>> @@ -513,7 +505,6 @@ rotate_db() {
>>  }
>>  
>>  create_db() {
>> -	TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE")
>>  	# $LOCKFILE is already guaranteed to be absolute so this is safe
>>  	dirname=${LOCKFILE%/*}
>>  
>> @@ -523,13 +514,13 @@ create_db() {
>>  		tempname=$dirname/.tmp.$filename
>>  
>>  		pushd "$tmpdir/$repo" >/dev/null
>> -		if ( shopt -s nullglob; files=(*); (( ${#files[*]} )) ); then
>> -			bsdtar -c${TAR_OPT}f "$tempname" *
>> -		else
>> +		local files=(*)
>> +		if [[ ${files[*]} = '*' ]]; then
>>  			# we have no packages remaining? zip up some emptyness
>>  			warning "$(gettext "No packages remain, creating empty database.")"
>> -			bsdtar -c${TAR_OPT}f "$tempname" -T /dev/null
>> +			files=(-T /dev/null)
>>  		fi
>> +		bsdtar -cf - "${files[@]}" | compress_as "$REPO_DB_SUFFIX" > "$tempname"
>>  		popd >/dev/null
>>  
>>  		create_signature "$tempname"
>> @@ -644,7 +635,7 @@ else
>>  	LOCKFILE=$PWD/$REPO_DB_FILE.lck
>>  fi
>>  
>> -verify_repo_extension "$REPO_DB_FILE" >/dev/null
>> +verify_repo_extension "$REPO_DB_FILE"
>>  
>>  REPO_DB_PREFIX=${REPO_DB_FILE##*/}
>>  REPO_DB_PREFIX=${REPO_DB_PREFIX%.db.*}
>>


-- 
Eli Schwartz
Bug Wrangler and Trusted User

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 1601 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/pacman-dev/attachments/20190312/d90a9396/attachment.sig>


More information about the pacman-dev mailing list