]> pd.if.org Git - zpackage/blobdiff - zpm-addtopackage
cleanup package tests
[zpackage] / zpm-addtopackage
index 3833c00502a752bd76f013434b0f06609d6c4f61..81c1bcb5b1cbc9fe7f8417de6bd4e54cd238b672 100755 (executable)
 #!/bin/sh
 
-package=${1:-$ZPMPACKAGE}
-shift
-pkgver=${ZPMPACKAGEVER:-1.0}
-pkgrel=${ZPMPACKAGEREL:-1}
+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=$(stat -c '%Y' $path)
-       uid=$(stat -c '%u' $path)
-       gid=$(stat -c '%g' $path)
-       username=$(stat -c '%U' $path)
-       groupname=$(stat -c '%G' $path)
-       mode=$(stat -c '%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 <<EOS
+       zpm shell $pkgfile <<EOS
 PRAGMA foreign_keys = ON;
-insert or replace into packagefiles (package,version,release,path,mode,mtime,username,groupname,hash)
-values ('$package', '$pkgver', $pkgrel, '$rpath', '$mode',$mtime, '$username','$groupname','$hash')
-;
+begin;
+insert or replace into packagefiles (package,version,release,path,mode,mtime,username,groupname,filetype,hash,target)
+values ('$package', '$pkgver', $pkgrel, '$rpath', '$mode',$mtime, '$username','$groupname','$filetype',$hash,$target);
+commit;
 EOS
-elif [ -d "$path" ]; then
-sqlite3 $pkgfile <<EOS
-PRAGMA foreign_keys = ON;
-insert or replace into packagefiles (package,version,release,path,mode,mtime,username,groupname)
-values ('$package', '$pkgver', $pkgrel, '$rpath', '$mode',$mtime, '$username','$groupname')
-;
-EOS
-elif [ -l "$path" ]; then
-       target=$(readlink $path)
-sqlite3 $pkgfile <<EOS
-PRAGMA foreign_keys = ON;
-insert or replace into packagefiles (package,version,release,path,mode,mtime,username,groupname,target)
-values ('$package', '$pkgver', $pkgrel, '$rpath', '$mode',$mtime, '$username','$groupname','$target')
-;
-EOS
-fi
+
 #printf "%s %s%s\n" $path $rpath ${target:+" -> $target"}
 printf "%s\n" $path
 done