]> gitweb.fluxo.info Git - simplepkg.git/commitdiff
merging with changes made since 21th May
authorrhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58>
Wed, 3 Sep 2008 23:56:27 +0000 (23:56 +0000)
committerrhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58>
Wed, 3 Sep 2008 23:56:27 +0000 (23:56 +0000)
git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@514 04377dda-e619-0410-9926-eae83683ac58

trunk/Makefile
trunk/doc/CHANGELOG
trunk/lib/common.sh
trunk/mkbuild/generic.mkSlackBuild
trunk/mkbuild/model.mkbuild
trunk/src/createpkg
trunk/src/jail-update
trunk/src/lspkg
trunk/src/mkbuild
trunk/src/simplaret
trunk/src/templatepkg

index 3dd668e1e2084e96e388d95b1f468df41b17ca55..ff0583c7a6101c1bd4c79eb73c565c4ac1059a14 100644 (file)
@@ -14,7 +14,7 @@
 #  Place - Suite 330, Boston, MA 02111-1307, USA
 #
 
-VERSION = 0.6pre28
+VERSION = 0.6pre31
 BUILD = 1rha
 PREFIX = /usr
 INSTALL = /usr/bin/install
index 6202072a8a335568ace5261de67ee0c7f28a5d1d..115959dc2ab74737daefe9f95ce8fd8eee45603d 100644 (file)
@@ -1,13 +1,41 @@
 simplepkg changelog
 ===================
 
+0.6pre31
+========
+
+    - generic.mkSlackBuild: config() on postinstall_script now accepts .dist
+      and .sample config file extensions.
+    - createpkg:
+      - most clean -s option output
+    - lspkg: fix on package search routine
+
+0.6pre30
+========
+
+    - common.sh: fixed package_name when dealing with files under /var/log/packages
+
+0.6pre29
+========
+
+    - templatepkg: fixed issue on adding files in a template.
+    - simplaret: "--sync" and "sync" now synonyms to "--update" and "update".
+
 0.6pre28
 ========
 
+    - generic.mkSlackBuild: new section copy_config_files
+    - lspkg: change ls /var/log/packages/$1 to ...$1-[0-9]
+    - mkjail: fixed #27
+    - jail-update: installs/remove packages according the template (closes #10)
+    - simplaret:
+      - option --install working for multiple packages (closes #1)
+      - option --remove working for multiple packages
     - mkpatch: fixed infinite loop on invalid diff action
     - mkbuild 1.2.7:
       - new ACTION bugfix
       - search result bugfix
+      - protect MKBUILD_NAME and ACTION variables with "" in line 266
     - createpkg 1.1.13:
       - severals EXIT_CODE corrections
       - search result bugfix
index 0fe546c0aa518a593331b6e312ddbd22fa60e0d2..06c19d70e875ab875ea7af64cf8bbeb002557c80 100644 (file)
@@ -27,7 +27,11 @@ SIMPLARET="simplaret"
 
 function package_name {
 
-  basename $1 .tgz | sed -e 's/-[^-]*-[^-]*-[^-]*$//'
+  # get the package name
+  # in some places (like in /var/log/packages), the package name is appended with
+  # an -upgrade information that should be striped
+  basename $1 .tgz | sed -e 's/-upgraded-[0-9]*-[0-9]*-[0-9]*,[0-9]*:[0-9]*:[0-9]*$//' \
+                         -e 's/-[^-]*-[^-]*-[^-]*$//'
 
 }
 
@@ -77,6 +81,7 @@ function install_packages {
   fi
 
   root="$JAIL_ROOT/$server"
+  mkdir -p $root/var/log/packages
 
   # now tries to install each package listed in the template
   for pack in `cat $TEMPLATE | grep -v -e "^#" | cut -d : -f 1 | awk '{ print $1 }'`; do
@@ -521,6 +526,35 @@ function update_template_files {
 
 }
 
+function update_jail_packages {
+
+  # update jail packages according the template
+  # usage: update_jail_packages <jail-path>
+
+  # check if installed packages are listed in the template
+  for pack in `ls -1 $1/var/log/packages/`; do
+    pack=`package_name $pack`
+    if ! `grep -v -e "^#" $TEMPLATE_BASE.template | cut -d : -f 1 | awk '{ print $1 }' | grep -q -e "^$pack\$"`; then
+      ROOT=$1 removepkg $pack
+    fi
+  done
+
+  # check if each package from the template is installed
+  grep -v -e "^#" $TEMPLATE_BASE.template | cut -d : -f 1 | awk '{ print $1 }' | while read pack; do
+
+    # check if the package is installed
+    pack="`echo $pack | sed -e 's/\+/\\\+/'`"
+    installed=`eval "ls /$1/var/log/packages/ | egrep -E '^$pack-[^-]+-[^-]+-[^-]+$'"`
+    check=$?
+
+    if [ -z "$installed" ] || [ "$check" != "0" ]; then
+      # the package isn't installed
+      ROOT=$1 simplaret install $pack
+    fi
+  done
+
+}
+
 function copy_template_files {
 
   # copy template files into jail
@@ -735,6 +769,7 @@ function error_codes {
   ERROR_MKBUILD_CONSTRUCTION=501
   ERROR_MKBUILD_PROGRAM=502
   ERROR_MKBUILD_INPUT_PAR=503
+  ERROR_MKBUILD_SVN=504
 
   # Mkpatch error codes
   ERROR_MKPATCH=600
@@ -815,9 +850,11 @@ function handle_error {
       eecho $error "$BASENAME: Program logical error." ;;
     $ERROR_MKBUILD_INPUT_PAR)
       eecho $error "$BASENAME: Input parameter $2 error. See \"mkbuild --help\"." ;;
-
     $ERROR_MKPATCH)
       eecho $error "$BASENAME: Mkpatch error. Check .mkbuild file." ;;
+    $ERROR_MKBUILD_SVN)
+      eecho $error "$BASENAME: SVN or empty URL. Disable this sections in .mkbuild file:\n - download_source;\n - md5sum_download_and_check_0;\n - md5sum_download_and_check_1;\n - gpg_signature_check\n - untar_source"
+      ;;
     #
     # Others errors
     *)
@@ -953,4 +990,5 @@ function is_number {
         (let int=$1)  2>/dev/null
         return $? # Exit status of the let thread
     fi
+
 }
index 133c8517fdd2e4b2e32a9a87699a70785cfaf451..67776ea41987c92c6f30e67d8ebcf9c28298af00 100644 (file)
@@ -305,6 +305,21 @@ mkdir -p $PKG/etc/rc.d
 cp $CWD/rc.* $PKG/etc/rc.d/
 </copy_init_scripts>
 
+<copy_config_files> off
+# Copy config files
+mkdir -p $PKG/etc
+for conf in [[CONFIG FILES]]; do
+  mkdir -p $PKG/etc/`dirname $conf`
+  if [ -e "$CWD/conf/$conf" ]; then
+    cp -a $CWD/conf/$conf $PKG/etc/$conf
+  elif [ -e "$CWD/$conf" ]; then
+    cp -a $CWD/$conf $PKG/etc/$conf
+  elif [ -e "$conf" ]; then
+    cp -a $conf $PKG/etc/$conf
+  fi
+done
+</copy_config_files>
+
 <install_documentation> off
 # Install documentation
 DOCS="[[DOCUMENTATION FILES]]"
@@ -345,6 +360,9 @@ cat << EOSCRIPT > "$PKG/install/doinst.sh"
 config() {
   NEW="\$1"
   OLD="\$(dirname \$NEW)/\$(basename \$NEW .new)"
+  OLD="\$(dirname \$NEW)/\$(basename \$OLD .sample)"
+  OLD="\$(dirname \$NEW)/\$(basename \$OLD .dist)"
+
   # If there's no config file by that name, mv it over:
   if [ ! -r \$OLD ]; then
     mv \$NEW \$OLD
index d030ea4468b81f67c1098dfaee6b9aeee1f31648..391b750a7a5945b91ea6ace267adfb8f7c65c48a 100644 (file)
 #[[SIGNING KEY]]=""
 #[[SIGNING KEY URL]]=""
 #[[SIGNING KEY ID]]=""
+#[[SIGNING URL]]=""
 #[[CONFIG FILES]]=""
 #[[PATCH URLS]]=""
 [[PATCH FILES]]=""
@@ -141,6 +142,7 @@ off: patch_source
 off: compress_manpages
 off: compress_info_files
 off: copy_init_scripts
+off: copy_config_files
  on: install_documentation
  on: slackdesc
 off: move_config_files
index 1dd568eefa37ac6655a3e9859f540b7dd3e901c3..cf8e5151abbe160ba4fea25f5a0781fdeadbf19a 100644 (file)
@@ -27,7 +27,7 @@
 #               Createpkg functions
 #---------------------------------------------------
 
-CREATEPKG_VERSION="1.1.13"
+CREATEPKG_VERSION="1.1.15"
 
 function usage {
 
@@ -308,7 +308,10 @@ case $1 in
   ;;
   '--search'|'-s')
     [ $# -ne 2 ] && usage   # two parameters is required
-    find_slackbuild $2
+    LIST=`find_slackbuild $2`
+    for i in $LIST; do
+        echo $i | sed 's/.*\/\([^\/]\+\)\.[Ss]lack[Bb]uild$/  \1/'
+    done
     exit $EXIT_CODE
   ;;
   '--info'|'-f')
@@ -424,29 +427,17 @@ eecho $messag "$BASENAME: processing $SCRIPT_NAME"
 cd $SCRIPT_BASE
 
 # Run SlackBuild script
-if [ $DEBUG -eq $off ]; then
-  (
-    LANG=en_US \
-    SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \
-    SRC=${SRC_DIR:=$SOURCE_DIR} \
-    ARCH=${ARCH:=$CREATE_ARCH} \
-    COLOR=${COLOR:=$COLOR_MODE} \
-    REPOS=${REPOS:=$MAKEPKG_REPOS} \
-    CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \
-    INTERACT=no sh +x ./$SCRIPT_NAME
-  )
-else
-  (
-    LANG=en_US \
-    SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \
-    SRC=${SRC_DIR:=$SOURCE_DIR} \
-    ARCH=${ARCH:=$CREATE_ARCH} \
-    COLOR=${COLOR:=$COLOR_MODE} \
-    REPOS=${REPOS:=$MAKEPKG_REPOS} \
-    CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \
-    INTERACT=no sh -x ./$SCRIPT_NAME
-  )
-fi
+[ $DEBUG -eq $off ] && SHELL_FLAG="+x" || SHELL_FLAG="-x"
+(
+  LANG=en_US \
+  SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \
+  SRC=${SRC_DIR:=$SOURCE_DIR} \
+  ARCH=${ARCH:=$CREATE_ARCH} \
+  COLOR=${COLOR:=$COLOR_MODE} \
+  REPOS=${REPOS:=$MAKEPKG_REPOS} \
+  CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \
+  INTERACT=no sh $SHELL_FLAG ./$SCRIPT_NAME
+)
 
 # Check if package was built
 handle_error $? $PACKAGE
index c5a008fc5a114914207223c75ef1644a2dda3017..ce2d165f2ed69af893ec5851efed2995f9a8a732 100755 (executable)
@@ -56,6 +56,7 @@ elif [ ! -d "$1" ]; then
 fi
 
 update_template_files
+update_jail_packages $1
 copy_template_files $1
 set_jail_perms $1
 
index e772fb300dc7fd474b48ce2a9199c01540409532..ce7b3b96f10082a011313ddf41469d15c2746772 100755 (executable)
@@ -18,6 +18,7 @@
 #
 
 COMMON="/usr/libexec/simplepkg/common.sh"
+PKG_LIST_DIR="var/log/packages"
 
 if [ -f "$COMMON" ]; then
     source $COMMON
@@ -48,17 +49,22 @@ options are:
 # -----------------------------------------------------
 
 if [ $# -eq 2 ]; then
-    LIST_PKGS="`ls /$ROOT/var/log/packages/$2-[0-9]* 2> /dev/null`"
-    if [ -z "$LIST_PKGS" ]; then
-        LIST_PKGS="`ls /$ROOT/var/log/packages/$2* 2> /dev/null`"
-    fi
+  pack=$2
 elif [ $# -eq 1 ]; then
-    LIST_PKGS="`ls /$ROOT/var/log/packages/$1-[0-9]* 2> /dev/null`"
-    if [ -z "$LIST_PKGS" ]; then
-        LIST_PKGS="`ls /$ROOT/var/log/packages/$1* 2> /dev/null`"
-    fi
+  pack=$1
 else
-    LIST_PKGS="`ls /$ROOT/var/log/packages/ 2> /dev/null`"
+  pack=""
+fi
+
+if [ ! -z "$pack" ]; then
+  if echo $pack | grep -q "*"; then
+    LIST_PKGS="`ls -1 /$ROOT/$PKG_LIST_DIR/$pack 2> /dev/null`"
+  else
+    pack="`echo $pack | sed -e 's/\+/\\\+/'`"
+    LIST_PKGS=`eval "ls -1 /$ROOT/$PKG_LIST_DIR/ 2> /dev/null | egrep -E '^$pack-[^-]+-[^-]+-[^-]+$'"`
+  fi
+else
+  LIST_PKGS="`ls /$ROOT/$PKG_LIST_DIR/ 2> /dev/null`"
 fi
 
 LIST_PKGS="`slash $LIST_PKGS`"
@@ -71,14 +77,14 @@ case $1 in
         if [ ! -z "$2" ]; then
             if [ ! -z "$LIST_PKGS" ]; then
                 for file in $LIST_PKGS; do
-                    less $file
+                    less /$PKG_LIST_DIR/$file
                 done
             else
                 if [ ! -z "$ROOT" ]; then
-                    echo "$2: package not found on /$ROOT/var/log/packages"
+                    echo "$2: package not found on /$ROOT/$PKG_LIST_DIR"
                     exit 1
                 else
-                    echo "$2: package not found on /var/log/packages"
+                    echo "$2: package not found on /$PKG_LIST_DIR"
                     exit 1
                 fi
             fi
@@ -97,13 +103,13 @@ case $1 in
     "-r"|"--remove")
         if [ ! -z "$2" ]; then
             if [ ! -z "$LIST_PKGS" ]; then
-                removepkg /$ROOT/var/log/packages/$1-[0-9]*
+                removepkg /$ROOT/$PKG_LIST_DIR/$1-[0-9]*
             fi
         fi
     ;;
     "-s"|"--search")
         if [ ! -z "$2" ]; then
-            eval "grep -l '\/$2$' /$ROOT/var/log/packages/*"
+            eval "grep -l '\/$2$' /$ROOT/$PKG_LIST_DIR/*"
         fi
     ;;
     "-d"|"--description")
@@ -125,12 +131,13 @@ case $1 in
             done
         else
             if [ ! -z "$ROOT" ]; then
-                echo "$1: package not found on /$ROOT/var/log/packages"
+                echo "$1: package not found on /$ROOT/$PKG_LIST_DIR"
                 exit 1
             else
-                echo "$1: package not found on /var/log/packages"
+                echo "$1: package not found on /$PKG_LIST_DIR"
                 exit 1
             fi
         fi
     ;;
 esac
+
index d961a530f39fdc7047cb5e76b9a7e73864baf8ed..d356d2330a3b233604df6a41ca556c49bacb3cb8 100755 (executable)
@@ -19,7 +19,7 @@
 # Based in model generic.SlackBuild of Luiz
 #
 # Version:
-PROG_VERSION=1.2.7
+PROG_VERSION=1.2.8
 PROG_NAME=`basename $0`
 
 #--------------------------------------------------------------------
@@ -263,7 +263,7 @@ function set_parameters {
     shift
   done
 
-  [ ! -e $MKBUILD_NAME -a $ACTION == "build" ] && ACTION='new'
+  [ ! -e "$MKBUILD_NAME" -a "$ACTION" == "build" ] && ACTION='new'
 
 }
 
@@ -367,6 +367,13 @@ function get_status {
 
 }
 
+function get_mkbuild_status {
+
+    # Get status from mkbuild file
+    # $1 section
+    eval "sed '/^#>>/,/<</ ! d; /^#/ d; /: *$1$/! d; s/^ *\(.*\):.*$/\1/' $MKBUILD_NAME"
+}
+
 function activate_sections {
 
   # Enable and desable sections
@@ -377,14 +384,14 @@ function activate_sections {
     set_status $SECTION $STATUS $SLACKBUILD_TEMP
   done
 
-  if [ $SVN_MOD -eq $on -o $URL == "" ]; then
-    LIST_OFF="download_source md5sum_download_and_check_0 md5sum_download_and_check_1 gpg_signature_check untar_source"
-    [ $VERBOSE -eq $on ] && echo -e "\nSubversion or empty URL changes:"
-    for i in $LIST_OFF; do
-      set_status $i "off" $SLACKBUILD_TEMP
-    done
-    [ $SVN_MOD -eq $on ] && set_status svn_source "on" $SLACKBUILD_TEMP
-  fi
+  #if [ $SVN_MOD -eq $on -o $URL == "" ]; then
+  #  LIST_OFF="download_source md5sum_download_and_check_0 md5sum_download_and_check_1 gpg_signature_check untar_source"
+  #  [ $VERBOSE -eq $on ] && echo -e "\nSubversion or empty URL changes:"
+  #  for i in $LIST_OFF; do
+  #    set_status $i "off" $SLACKBUILD_TEMP
+  #  done
+  #  [ $SVN_MOD -eq $on ] && set_status svn_source "on" $SLACKBUILD_TEMP
+  #fi
 
 }
 
@@ -778,7 +785,21 @@ if [ ! -z $MKBUILD_NAME ]; then
       # URL program
       URL=`validate_parameter "$URL" "DOWNLOAD FOLDER URL" ""` || handle_error $ERROR_MKBUILD_CONSTRUCTION "URL"
       [ $VERBOSE -eq $on ] && echo "[[URL]]=\"$URL\""
-      [ $URL == "" ] || echo $URL | grep '^svn:\/\/' >/dev/null && SVN_MOD=$on
+
+      AUX=`get_mkbuild_status "svn_source"`
+      SVN_MOD=`convert_boolean "$AUX"`
+      # Check sections
+      if [ $SVN_MOD -eq $on -o $URL == "" ]; then
+        LIST_OFF="download_source md5sum_download_and_check_0 md5sum_download_and_check_1 gpg_signature_check untar_source"
+        [ $VERBOSE -eq $on ] && echo -e "\nCheck subversion or empty URL"
+        for i in $LIST_OFF; do
+          if [ `get_mkbuild_status "$i"` != "off" ]; then
+            handle_error $ERROR_MKBUILD_SVN
+          else
+            [ $VERBOSE -eq $on ] && echo -e "off: $i is ok."
+          fi
+        done
+      fi
 
       STR_MOUNT="`echo $URL | sed 's/.*\.\([a-z0-9]\+\)$/\1/'`"
       if [ $STR_MOUNT = "gz" -o $STR_MOUNT = "tgz" -o $STR_MOUNT = "bz2" -o $STR_MOUNT = "zip" ]; then
@@ -789,7 +810,7 @@ if [ ! -z $MKBUILD_NAME ]; then
       fi
       [ $VERBOSE -eq $on ] && echo "[[DOWNLOAD FOLDER URL]]=\"$URL_BASE\""
 
-      if [ $SVN_MOD -ne $on ]; then
+      if [ $SVN_MOD -eq $off ]; then
         # Extension
         EXTENSION=`validate_parameter "$EXTENSION" "EXTENSION" "$STR_MOUNT"` || handle_error $ERROR_MKBUILD_CONSTRUCTION "EXTENSION"
          [ $VERBOSE -eq $on ] && echo "[[EXTENSION]]=\"$EXTENSION\""
index f0139c63089d3834accf1a4cd6c4124da86f91bc..66bb1e1fb0d067f7f41e323357de34db91ee7eca 100755 (executable)
@@ -30,7 +30,7 @@ fi
 function simplaret_usage {
 
   echo "usage: [ARCH=otherarch] [VERSION=otherversion] $BASENAME [OPTION] package-name"
-  echo -e "\t OPTIONS: --help, --install, --update, --upgrade, --search, --get, --get-patches, --purge, --remove"
+  echo -e "\t OPTIONS: --help, --install, --update (or --sync), --upgrade, --search, --get, --get-patches, --purge, --remove"
   exit 1
 
 }
@@ -907,70 +907,78 @@ function simplaret_checksum {
 function simplaret_install {
 
   # download and install a package
-  # usage: simplaret_install <package-name|package-file-name> [--skip-checks]
+  # usage: simplaret_install <package-name1|package-file-name1> ... [--skip-checks]
 
   local package root jail_arch jail_version slack_required dep dependency tmp
   local name version build
 
-  name="`package_name $1`"
-
-  root="/$ROOT"
-  mkdir -p $root/var/log/setup/tmp
+  for package in $*; do
 
-  if [ "`echo $1 | sed -e 's/\(..\).*/\1/g'`" == "--" ]; then
-    echo $BASENAME: install: syntax error: expected package name
-    return 1
-  fi
+    if [ "$package" == "--skip-checks" ]; then
+      continue
+    fi
 
-  # now we check if ARCH and VERSION from the
-  # repository are the same of the jail
-  if [ "$2" != "--skip-checks" ]; then
-    jail_arch="`default_arch $root`"
-    jail_version="`default_version $root`"
-    if [ "$ARCH" != "$jail_arch" ]; then
-      echo "$BASENAME: requested repository arch ($ARCH) doesn't match jail arch ($jail_arch)"
-      echo "$BASENAME: please use \"$BASENAME --get $1 --skip-checks\" to ignore this warning and install anyway"
-      return
-    elif [ "$VERSION" != "$jail_version" ]; then
-      echo "$BASENAME: requested repository version ($VERSION) doesn't match jail version ($jail_version)"
-      echo "$BASENAME: please use \"$BASENAME --get $1 --skip-checks\" to ignore this warning and install anyway"
+    name="`package_name $package`"
+  
+    root="/$ROOT"
+    mkdir -p $root/var/log/setup/tmp
+  
+    if [ "`echo $package | sed -e 's/\(..\).*/\1/g'`" == "--" ]; then
+      echo $BASENAME: install: syntax error: expected package name
       return 1
     fi
-  fi
-
-  # package="`simplaret_get $1 --silent`"
-  simplaret_get $1 --silent
-  package="$LAST_DOWNLOADED_PACKAGE"
-
-  if [ "$package" != "0" ] && [ ! -z "$package" ]; then
-    slack_required="`dirname $package`/$name.slack-required"
-    if [ -f "$package" ]; then
-
-      if [ -f "$slack_required" ] && [ "$DEPENDENCY_CHECKING" == "1" ]; then
-        # this routine checks for dependencies in package's slack-required
-        # procedure adapted from createpkg script
-        ( grep -v '^#' $slack_required | while read dep; do
-           if [ ! -z "$dep" ]; then
-            dependency="`echo $dep | awk '{ print $1 }'`"
-            simplaret_solve_dep $name $dependency $root
-           fi
-           true
-         done )
+  
+    # now we check if ARCH and VERSION from the
+    # repository are the same of the jail
+    if ! echo $* | grep -q -- "--skip-checks"; then
+      jail_arch="`default_arch $root`"
+      jail_version="`default_version $root`"
+      if [ "$ARCH" != "$jail_arch" ]; then
+        echo "$BASENAME: requested repository arch ($ARCH) doesn't match jail arch ($jail_arch)"
+        echo "$BASENAME: please use \"$BASENAME --get $package --skip-checks\" to ignore this warning and install anyway"
+        return
+      elif [ "$VERSION" != "$jail_version" ]; then
+        echo "$BASENAME: requested repository version ($VERSION) doesn't match jail version ($jail_version)"
+        echo "$BASENAME: please use \"$BASENAME --get $package --skip-checks\" to ignore this warning and install anyway"
+        return 1
+      fi
+    fi
+  
+    # package="`simplaret_get $package --silent`"
+    simplaret_get $package --silent
+    package="$LAST_DOWNLOADED_PACKAGE"
+  
+    if [ "$package" != "0" ] && [ ! -z "$package" ]; then
+      slack_required="`dirname $package`/$name.slack-required"
+      if [ -f "$package" ]; then
+  
+        if [ -f "$slack_required" ] && [ "$DEPENDENCY_CHECKING" == "1" ]; then
+          # this routine checks for dependencies in package's slack-required
+          # procedure adapted from createpkg script
+          ( grep -v '^#' $slack_required | while read dep; do
+             if [ ! -z "$dep" ]; then
+              dependency="`echo $dep | awk '{ print $package }'`"
+              simplaret_solve_dep $name $dependency $root
+             fi
+             true
+           done )
+        fi
+  
+        ROOT=$root upgradepkg --install-new $package
+        LAST_DOWNLOADED_PACKAGE="0"
+  
+      else
+        echo "Error: could not install package $package: file not found"
+        LAST_DOWNLOADED_PACKAGE="0"
+        return 1
       fi
-
-      ROOT=$root upgradepkg --install-new $package
-      LAST_DOWNLOADED_PACKAGE="0"
-
     else
-      echo "Error: could not install package $1: file not found"
+      echo "Error: could not install package $package"
       LAST_DOWNLOADED_PACKAGE="0"
       return 1
     fi
-  else
-    echo "Error: could not install package $1"
-    LAST_DOWNLOADED_PACKAGE="0"
-    return 1
-  fi
+
+  done
 
 }
 
@@ -1075,6 +1083,17 @@ function simplaret_solve_dep {
 
 }
 
+function simplaret_remove {
+
+  # remove packages
+  # usage: simplaret_remove <package1> [<package2> ... <packageN>]
+
+  for package in $*; do
+    ROOT=/$ROOT removepkg $package
+  done
+
+}
+
 function simplaret_req_arg {
 
   # requires arg
@@ -1102,14 +1121,14 @@ fi
 BASENAME="`basename $0`[$SIMPLARET_CHILD]"
 
 case $1 in
-  "--update" | "update") simplaret_update ;;
+  "--update" | "update" | "--sync" | "sync" ) simplaret_update ;;
   "--upgrade" | "upgrade") simplaret_get_patches --upgrade ;;
   "--get-patches" | "get-patches") simplaret_get_patches ;;
   "--search" | "search") shift ; simplaret_req_arg $1 ; simplaret_search $* ;;
   "--get" | "get") shift ; simplaret_req_arg $1 ; simplaret_get $* ;;
   "--purge" | "purge") shift ; simplaret_req_arg $1 simplaret_purge $* ;;
   "--install" | "install") shift ; simplaret_req_arg $1 ; simplaret_install $* ;;
-  "--remove" | "remove") simplaret_req_arg $2 ; ROOT=/$ROOT removepkg $2 ;;
+  "--remove" | "remove") shift ; simplaret_req_arg $1 ; simplaret_remove $* ;;
   "--help" | "help") simplaret_usage ;;
   *)
     if echo $1 | grep -q -v '^--'; then
index 4f2592f0e5168c607cdc87fa43eea4b7131939eb..a8045ee28508f2dd53c85382ce722c614dbcb2e0 100755 (executable)
@@ -479,10 +479,18 @@ function template_add {
 
       if use_svn && [ -d "$TEMPLATE_BASE.d/.svn" ]; then
 
-        if [ ! -d "$TEMPLATE_BASE.d/`dirname $file`/.svn" ]; then
-          mkdir -p $TEMPLATE_BASE.d/`dirname $file`/
-          svn add $TEMPLATE_BASE.d/`dirname $file`/
-        fi
+        candidate="./`dirname $file`"
+        mkdir -p $TEMPLATE_BASE.d/$candidate
+        cd $TEMPLATE_BASE.d/$candidate
+        while true; do
+          if [ -d ".svn" ]; then
+            svn add `basename $candidate`
+            break
+          else
+            candidate="`basename $(pwd)`"
+            cd ..
+          fi
+        done
 
         cp -a $jail/$file $destination