#!/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
# 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="$@"
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
# 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