X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-add;h=68c986dbfc05a365a3dadce4c2804296efd683fe;hb=fc0e2fbaf7051e42be1a6449a5a004fb3e665d45;hp=2621b596cedf08bc7e391427932b7ce16c2374f6;hpb=bdaf2b364190e213f7aa67657c85e56a549ece11;p=zpackage diff --git a/zpm-add b/zpm-add index 2621b59..68c986d 100755 --- a/zpm-add +++ b/zpm-add @@ -32,12 +32,16 @@ cleanpath() { verbose=0 tags= isconfig=0 +addcontent=1 +complete=0 +mode= # 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 # TODO -l follow symlinks, -L follow symlinks, adding all, links and targets -while getopts :f:vr:l:P:S:cu:g: opt; do +while getopts :f:vr:l:P:S:cu:g:NC opt; do case $opt in + N) addcontent=0 ;; f) pkgfile="$OPTARG" ;; P) prefix="$OPTARG" ;; S) strip=$(cleanpath "$OPTARG"); ;; @@ -45,7 +49,9 @@ while getopts :f:vr:l:P:S:cu:g: opt; do c) isconfig=1 ;; u) username="$OPTARG" ;; g) groupname="$OPTARG" ;; - v) verbose=1 ;; + m) mode="$OPTARG" ;; + v) verbose=$((verbose + 1)) ;; + C) complete=1 ;; *) echo 'unknown option' $OPTARG; exit 1 ;; esac done @@ -55,7 +61,7 @@ if [ $isconfig -eq 1 ]; then tags="$tags configuration" fi -if [ $verbose -gt 1 ]; then +if [ $verbose -gt 2 ]; then set -x fi @@ -71,7 +77,7 @@ if [ -z "$release" ]; then if [ -z "$pkgfile" ]; then die "cannot determine package file" else - pkgstr=$(zpm findpkg $pkgfile $pkgid) + pkgstr=$(zpm findpkg -f $pkgfile $pkgid) if [ -z "$pkgstr" ]; then die "unable to find package id for $pkgid in $pkgfile" fi @@ -114,9 +120,16 @@ for path in $*; do mtime=$(zpm stat -f '%y' $path) uid=$(zpm stat -f '%u' $path) gid=$(zpm stat -f '%g' $path) + + if [ -z "$mode" ]; then + mode=$(zpm stat -f '%a' $path) + fi + + # only stat the file for the user and group name if not set on the + # command line : ${username:=$(zpm stat -f '%U' $path)} : ${groupname:=$(zpm stat -f '%G' $path)} - mode=$(zpm stat -f '%a' $path) + rpath="$path" rpath=$(cleanpath "$path") @@ -129,7 +142,6 @@ for path in $*; do fi if [ ! -z "$strip" ]; then - echo "stripping $strip" rpath=${rpath#$strip} rpath=${rpath#/} fi @@ -143,15 +155,22 @@ for path in $*; do rpath="$prefix/$rpath" fi + # ensure all paths are absolute + rpath=/${rpath#/} + filetype=$(zpm stat -l -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" + if [ $addcontent -eq 1 ]; then + hash=$(zpm addfile $pkgfile "$path") + if [ $? -ne 0 ]; then + die "zpm addfile failed ($?): $pkgfile $path" + fi + else + hash=$(zpm hash "$path") fi hash="'$hash'" ;; @@ -168,13 +187,24 @@ for path in $*; do # TODO check that we have such a package,version,release #cat < $target"} -printf "%s\n" $path +if [ $verbose -gt 1 ]; then + printf "%s%s %s:%s %s\n" $filetype $mode $username $groupname $path +elif [ $verbose -gt 0 ]; then + printf "%s\n" $path +fi + done + +if [ $complete -eq 1 ]; then + zpm pkg -f $pkgfile $pkgid build_time=$(date +'%s') + zpm packagehash -f $pkgfile -s -q $pkgid +else + zpm pkg -f $pkgfile $pkgid hash= +fi