exit 1
}
+changeall() {
+ for pkgid in $(zpm list -s $1); do
+ zpm pkg $pkgid status=$2
+ done
+}
+
dryrun=0
verbose=0
runscripts=1
overwrite=0
syncopts=''
installall=0
+mergefiles=0
# zpm-install [-SCn] [ -d localdb ] [ -f pkgfile ] [ -R installroot ] pkgstr ...
-while getopts f:d:R:nSCvAOa opt; do
+while getopts f:d:R:nSCvAOaF opt; do
case $opt in
f) pkgfile="$OPTARG" ;;
+ F) mergefiles=1 ;;
d) localdb="$OPTARG" ;;
R) rootdir="$OPTARG" ;;
S) runscripts=0 ;;
if [ $? -ne 0 ]; then
die "pre-install script for $pkgid failed"
fi
+ else
+ if zpm script -f $pkgfile -Fql -p pre-install $pkgid; then
+ zpm note -e -p $pkgid -m 'pre-install script not run'
+ fi
fi
# remove the package if it exists. can't be in an installed
if [ $verbose -gt 0 ]; then
echo merging $pkgid
fi
- zpm merge -u -F -f $pkgfile -s installing $pkgid
+ if [ $mergefiles -eq 1 ]; then
+ zpm merge -u -F -f $pkgfile -s installing $pkgid
+ else
+ zpm merge -u -f $pkgfile -s installing $pkgid
+ fi
if [ $? -ne 0 ]; then
die "merging $pkgid failed"
fi
else
zpm pkg $pkgid status=installing
fi
+
+ zpm shell "$ZPMDB" "update packages set status='updating' where status='installed' and package in (select package from packages where status = 'installing')"
done
# do the sync
syncopts="$syncopts -v"
fi
+if [ "$pkgfile" != "$ZPMDB" ]; then
+ syncopts="$syncopts -f $pkgfile"
+fi
+
+#zpm shell $ZPMDB 'select * from syncinfo'
+#zpm list -v
zpm syncfs $syncopts
syncrv=$?
-for pkgid in $pkglist; do
- zpm pkg $pkgid status=dryrun
-done
+if [ $dryrun -gt 0 ]; then
+ for pkgid in $pkglist; do
+ zpm pkg $pkgid status=dryrun
+ done
+fi
if [ $syncrv -ne 0 ]; then
zpm pkg $pkgid status=failed
for pkgid in $pkglist; do
package=$(zpm parse -n $pkgid)
- current=$(zpm list -s installed "$package")
+ current=$(zpm list -s updating "$package")
if [ $runscripts -gt 0 ]; then
- zpm script -f $pkgfile -p post-install $pkgid $current
+ zpm script -p post-install $pkgid $current
+ else
+ if zpm script -Fql -p post-install $pkgid; then
+ zpm note -e -p $pkgid -m 'post-install script not run'
+ fi
fi
if [ -n "$current" ]; then
# TODO skip configure if not on a terminal, regardless of settings
# TODO will need force option
if [ $runconfigure -gt 0 ]; then
- zpm script -f $pkgfile -p configure $pkgid
+ zpm script -p configure $pkgid
+ else
+ if zpm script -Fql -p configure $pkgid; then
+ zpm note -e -p $pkgid -m 'configure script not run'
+ fi
fi
+
done
+
+changeall updating updated