]> pd.if.org Git - zpackage/blobdiff - zpm-install
expand install
[zpackage] / zpm-install
index 487740ddc4dbca063b3cbab96d1177dfa7a60bab..5c23bdeb889a25e9d37fb2a34fec3bb31b9a66ba 100755 (executable)
@@ -1,12 +1,22 @@
 #!/bin/sh
 
-#package=${1:-$ZPMPACKAGE}
+# what we need to install a package:
+
+# recording repo: where we record what we've done
+# source: where we get the package and files from
+# install root: really just a prefix, but thought about differently,
+#    and we might need to do a chroot
+
+# zpm install [options] <package ...>
+
 pkgver=${ZPMPACKAGEVER:-1.0}
 pkgrel=${ZPMPACKAGEREL:-1}
 
 pkgroot=/
 
 # allocate an install id, perhaps hash package and timestamp
+# installid=$(echo $(date) $pkglist | zpm hash)
+
 # extract pre-scripts and run them
 # get list of paths to install
 # for each path, if directory, create and set mode
@@ -18,40 +28,58 @@ pkgroot=/
 # move into place
 # after all the files, extract post scripts and run them
 
+# also need to mark package as installing so if it fails part way
+# through, it can be finished later
+# probably also want an option to "backup" any packages being upgraded
+# so it's trivial to downgrade or to revert if the install fails
+
 # 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:R: opt; do
+# TODO what's the difference between prefix and pkgroot
+# need an option to not chown the files
+# option to install but not merge/track
+
+# options
+# -R install root, if installing as root, will chroot?
+# -C no chroot, even if root
+# -N no pre-scripts
+# -X no post-scripts
+# -f source repository file
+# -d local (recording) repository database
+# -D don't locally record
+# -t only files matching tags
+# -T exclude files matching tags
+
+chroot=1
+
+while getopts :R:CNXf:d:Dt:T: opt; do
        case $opt in
                R) pkgroot="$OPTARG" ;;
+               C) chroot=0 ;;
                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" ;;
        esac
 done
+
 shift $((OPTIND - 1))
 
-set -e
+die() {
+       echo $* 1>&2
+       exit 1
+}
+
 if [ -z "$pkgfile" ]; then
        # actually, if no pkgfile, get pkgfile from repo
+       # but need to loop over finding package files then
+       # so this program probably needs to be "install from pkgfile"
+       # and a separate one that will loop over a package
+       # spec list and find from repos
+       die "must specify package file" 
        pkgfile="$package-$pkgver-$pkgrel.zpm"
 fi
 
-die() {
-       echo $* 1&>2
-       exit 1
-}
-
 set -e
 zpm test -v $pkgfile
-set +e
 
 if [ $# -gt 0 ]; then
        pkglist="$@"
@@ -60,13 +88,22 @@ else
 fi
 
 pathlist() {
-       sqlite3 $pkgfile<<EOS
+       zpm shell $pkgfile<<EOS
 select path from packagefiles
        where package||'-'||version||'-'||release = '$pkg'
        ;
 EOS
 }
 
+# find a repo file for a given package
+findrepofor() {
+       false
+}
+
+installpkg() (
+       package="$1"
+)
+
 for pkg in $pkglist; do
        # TODO find scripts marked as pre-install
        # TODO if this is an upgrade, run pre-upgrade
@@ -75,11 +112,16 @@ for pkg in $pkglist; do
 
        # add package info to local package db
        # zpm merge -L -f $pkgfile $pkg
+       # check for conflicts
        # mark package in localdb as installing
        # zpm setmark installing $pkg
        # install all the files for a package
        # TODO install directories first in order of path length
-       pathlist | xargs zpm ipkgfile -R "$pkgroot" -f $pkgfile -- $pkg 
+       echo installing $pkglist
+       filecount=$(pathlist | wc -l)
+       echo $filecount files
+       #pathlist
+       pathlist | xargs zpm ipkgfile -R "$pkgroot" -f $pkgfile -- $pkg
 
        # TODO find scripts marked as post-install
        # TODO if this is an upgrade, run post-upgrade