From 99ace5d5b81660af343d1b76a7e2f5c236635013 Mon Sep 17 00:00:00 2001
From: rhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58>
Date: Fri, 5 Jan 2007 03:58:36 +0000
Subject: simplaret: added --install

git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@80 04377dda-e619-0410-9926-eae83683ac58
---
 doc/CHANGELOG |  1 +
 src/simplaret | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 2 files changed, 53 insertions(+), 12 deletions(-)

diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index 7ec3a65..d594bf7 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -20,6 +20,7 @@ simplepkg changelog
                 the new one.
               - fixed --get-paches
               - added --upgrade option
+              - added --install
 
 0.4.9: released 0.4.9pre6 as 0.4.9
 
diff --git a/src/simplaret b/src/simplaret
index 1cef677..9a7a64c 100755
--- a/src/simplaret
+++ b/src/simplaret
@@ -92,7 +92,7 @@ function simplaret_check_index {
 
 function simplaret_download {
 
-  # downloads a file from a repo to a folder
+  # download a file from a repo to a folder
   # usage: simplaret <repository_url> <package> <destination-folder>
 
   protocol="`echo $1 | cut -d : -f 1`"
@@ -379,6 +379,9 @@ function simplaret_purge {
 
 function simplaret_get {
 
+  # get a package
+  # usage: simplaret_get <package-name> [--silent]
+
   # prevent user to stay in $storage
   cd 
 
@@ -395,7 +398,10 @@ function simplaret_get {
           if [ "`package_name $candidate`" == "`package_name $result`" ] &&       \
              [ "`package_version $candidate`" == "`package_version $result`" ] && \
              [ "`package_build $candidate`" == "`package_build $result`" ]; then
-            echo package $candidate already downloaded and stored at `dirname $file`
+            if [ "$2" != "--silent" ]; then
+              echo package $candidate already downloaded and stored at `dirname $file`
+            else echo $file
+            fi
             return 0
           else
             rm $file
@@ -422,12 +428,17 @@ function simplaret_get {
       simplaret_repository_url
       simplaret_download $repository_url $file $storage/$repository_name
       if [ ! -f "$storage/$repository_name/$candidate" ]; then
-        echo error downloading $candidate from $repos_type repository $repository_url, please check your settings
+        if [ "$2" != "--silent" ]; then
+          echo error downloading $candidate from $repos_type repository $repository_url, please check your settings
+        fi
         return 1
       else
-        echo package $candidate stored at $storage/$repository_name
-        simplaret_checksum $storage/$repository_name/CHECKSUMS.md5 $storage/$repository_name/$candidate
-        return 0
+        if [ "$2" != "--silent" ]; then
+          echo package $candidate stored at $storage/$repository_name
+        else echo $storage/$repository_name/$candidate
+        fi
+        simplaret_checksum $storage/$repository_name/CHECKSUMS.md5 $storage/$repository_name/$candidate --silent
+        return $?
       fi
     fi
 
@@ -548,11 +559,13 @@ function simplaret_get_patches {
 
 function simplaret_checksum {
 
-  # simplaret_checksum <md5file> <file-name>
+  # simplaret_checksum <md5file> <file-name> [--silent]
 
   if [ ! -f "$1" ] || [ ! -f "$2" ]; then
-    echo checksum error: file not found
-    exit 1
+    if [ "$3" != "--silent" ]; then
+      echo checksum error: file not found
+    fi
+    return 1
   fi
 
   pack="`basename $2`"
@@ -560,11 +573,37 @@ function simplaret_checksum {
 
   if [ -z "$checksum" ]; then
     echo file $2 not in checksum $1
-    exit 1
+    return 1
   elif [ "$checksum" != "`md5sum $2 | awk '{ print $1 }'`" ]; then
-    echo checksum mismatch for file `basename $file`
+    if [ "$3" != "--silent" ]; then
+      echo checksum mismatch for file `basename $file`
+    fi
+    return 1
   else
-    echo checksum ok for file `basename $file`
+    if [ "$3" != "--silent" ]; then
+      echo checksum ok for file `basename $file`
+    fi
+    return 0
+  fi
+
+}
+
+function simplaret_install {
+
+  # download and install a package
+  # TODO: dependency checking
+
+  local package root
+
+  if [ ! -x "$ROOT" ]; then
+    root="ROOT=/$ROOT"
+  else root=""
+  fi
+
+  package="`simplaret_get $1 --silent`"
+
+  if [ "$?" == "0" ]; then
+    $root upgradepkg --install-new $package
   fi
 
 }
@@ -626,6 +665,7 @@ case $1 in
   --get) simplaret_get $2 ;;
   --get-patches) simplaret_get_patches ;;
   --purge) shift ; simplaret_purge $* ;;
+  --install) simplaret_install $2 ;;
   --upgrade) simplaret_get_patches ; jail-upgrade ;;
   *) simplaret_usage ;;
 esac
-- 
cgit v1.2.3