X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-addtopackage;h=81c1bcb5b1cbc9fe7f8417de6bd4e54cd238b672;hb=cd4fd08b5433d74d8ac33922a2f6cbf2f5a0c99f;hp=19db69baf815782966b84c7239aa1b17f5317489;hpb=0449ff362882dcd399c7d65ec8a40f8f0763b3ca;p=zpackage diff --git a/zpm-addtopackage b/zpm-addtopackage index 19db69b..81c1bcb 100755 --- a/zpm-addtopackage +++ b/zpm-addtopackage @@ -1,96 +1,141 @@ #!/bin/sh -package=${1:-$ZPMPACKAGE} -shift pkgver=${ZPMPKGVER:-1.0} pkgrel=${ZPMPKGREL:-1} +die() { + echo $* 1>&2 + exit 1 +} + +# basic cleanup on a path +cleanpath() { + clean="$1" + if [ -z "$clean" ]; then printf ''; fi + + # multiple slashes + clean=$(printf "%s" "$clean" | sed -e 's|/+|/|g') + # curdir + clean=$(printf "%s" "$clean" | sed -e 's|/\./|/|g') + # leading curdir + clean=${clean#./} + # trailing curdir + clean=${clean%/.} + # trailing slash + clean=${clean%/} + printf "%s" "$clean" +} + +tags= +create=0 # option for "multipackage" just to let the system know that's what you meant # option to take filenames from stdin # parse package, version, release from file if not given -while getopts :f:v:r:d:a:u:l:p:b:P: opt; do +while getopts :f:v:r:l:P:S:Cc opt; do case $opt in f) pkgfile="$OPTARG" ;; v) pkgver="$OPTARG" ;; r) pkgrel="$OPTARG" ;; - d) description="$OPTARG" ;; - a) arch="$OPTARG" ;; - u) url="$OPTARG" ;; l) licenses="$OPTARG" ;; - p) packager="$OPTARG" ;; - b) builddate="$OPTARG" ;; P) prefix="$OPTARG" ;; + S) strip=$(cleanpath "$OPTARG"); ;; + t) tags="$tags $OPTARG" ;; + c) tags="$tags configuration" ;; + C) create=1 ;; + *) echo 'unknown option'; exit 1 ;; esac done +shift $((OPTIND - 1)) + +package="$1" +shift +if [ -z "$package" ]; then + die "must specify package" +fi set -e if [ -z "$pkgfile" ]; then pkgfile="$package-$pkgver-$pkgrel.zpm" fi -if [ ! -f $pkgfile ]; then - zpm newpackage $package || exit 1 -else - appid=$(sqlite3 $pkgfile 'pragma application_id;' | ( echo obase = 16; cat - ) | bc) - if [ "$appid" != "5A504442" ]; then - echo $pkgfile does not appear to be a zpm package file +# check for package file +if [ ! -f "$pkgfile" ]; then + if [ $create -eq 1 ]; then + echo creating $pkgfile + zpm newpackage -I -f $pkgfile -v $pkgver -r $pkgrel $package || exit 1 + else + echo $pkgfile does not exist exit 1 fi fi +zpm test -v $pkgfile + +#strip=$(cleanpath "$strip") for path in $*; do - mtime=$(zpm stat -t '%y' $path) - uid=$(zpm stat -t '%u' $path) - gid=$(zpm stat -t '%g' $path) - username=$(zpm stat -t '%U' $path) - groupname=$(zpm stat -t '%G' $path) - mode=$(zpm stat -t '%a' $path) - - # strip off leading slashes - rpath=$(echo "$path" | sed -e 's|^/*||') - # and a leading ./ - rpath=${rpath#./} - rpath=$(echo "$rpath" | sed -e 's|^/*||') + echo adding $path + mtime=$(zpm stat -f '%y' $path) + uid=$(zpm stat -f '%u' $path) + gid=$(zpm stat -f '%g' $path) + username=$(zpm stat -f '%U' $path) + groupname=$(zpm stat -f '%G' $path) + mode=$(zpm stat -f '%a' $path) + rpath="$path" + + rpath=$(cleanpath "$path") + + # strip off leading slash + rpath=${rpath#/} if [ -z "$rpath" ] || [ "$rpath" = '.' ]; then continue fi - if [ ! -z "$prefix" ]; then - # trailing slashes on prefix - prefix=$(echo "$prefix" | sed -e 's|/*$||') - rpath="$prefix/$rpath" + if [ ! -z "$strip" ]; then + echo "stripping $strip" + rpath=${rpath#$strip} + rpath=${rpath#/} fi - if [ -f "$path" ]; then + if [ -z "$rpath" ]; then + die "$path resolves to nothing" + fi - hash=$(zpm addfile $pkgfile $path) + prefix=$(cleanpath "$prefix") + if [ ! -z "$prefix" ]; then + rpath="$prefix/$rpath" + fi -#if [ -z "$hash" ]; then continue; fi + filetype=$(zpm stat -f '%t' "$path") + hash='NULL' + target='NULL' + case "$filetype" in + regular) + filetype=r + hash=$(zpm addfile $pkgfile "$path") + if [ $? -ne 0 ]; then + die "zpm addfile failed ($?): $pkgfile $path" + fi + hash="'$hash'" + ;; + directory) + filetype=d + ;; + symlink) + filetype=l + target=$(readlink $path) + target="'$target'" + ;; + esac -# TODO mtime, mode -sqlite3 $pkgfile < $target"} printf "%s\n" $path done