diff --git a/README.md b/README.md index 7fffab3..6761b2f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Basic and simple packaging system Designed to be used by anyone and deployed anywhere, -it is a very basic packaging system without much functionnality but very portable +it is a very basic packaging system with basic functionnality but very portable Official repo: [http://zpkg.zawz.net](http://zpkg.zawz.net) diff --git a/src/install.sh b/src/install.sh index d173978..0107b4a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -21,26 +21,14 @@ add_package_entry() } # $1 = source_dir, $2 = dest_dir, $3 = prefix for exec -move_files() -{ - # create dirs - FOLDERS=$(find "$1" -mindepth 1 -type d | sed "s|^$1/||g") - echo "$FOLDERS" | while read -r I - do - $3 mkdir -p "$2/$I" - done - - # move files - FILES=$(find "$1" -mindepth 1 ! -type d | sed "s|^$1/||g") - echo "$FILES" | while read -r I - do - $3 mv "$1/$I" "$2/$I" - done +copy_files() { + $3 cp -r "$1/." "$2" } # $1 = package , $2 = prefix install_package() { + echo "Installing $1" tmpdir="/tmp/zpkg_$(random_string 5)" mkdir -p "$tmpdir" ( @@ -48,8 +36,8 @@ install_package() fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; } $2 cp "$1.tar.$extension" "$PKG_PATH" unpack "$1.tar.$extension" || return $? - move_files ROOT / $2 2>/dev/null - move_files HOME "$HOME" 2>/dev/null + copy_files ROOT / $2 2>/dev/null + copy_files HOME "$HOME" 2>/dev/null add_package_entry "$1" $2 ) ret=$? diff --git a/src/main.sh b/src/main.sh index 56061ea..ac99712 100644 --- a/src/main.sh +++ b/src/main.sh @@ -66,8 +66,10 @@ install) echo "Installing packages: $pkglist" for I in $pkglist do - is_installed $I && remove_package $I $sudo - install_package $I $sudo + if is_installed $I + then upgrade_package $I $sudo + else install_package $I $sudo + fi done fi ;; @@ -89,7 +91,7 @@ update) o_pkg=$(outdated_packages) if [ -n "$r_pkg" ] then - echo "Removing packages: "$r_pkg + echo "Packages to remove: "$r_pkg for I in $r_pkg do remove_package $I $sudo @@ -97,11 +99,10 @@ update) fi if [ -n "$o_pkg" ] then - echo "Updating packages: "$o_pkg + echo "Packages to update: "$o_pkg for I in $o_pkg do - remove_package $I $sudo - install_package $I $sudo + upgrade_package $I $sudo done fi ;; diff --git a/src/remove.sh b/src/remove.sh index f7fce64..707b182 100644 --- a/src/remove.sh +++ b/src/remove.sh @@ -1,12 +1,13 @@ #!/bin/sh # files from stdin -# $1 = prefix +# $1 = from where , $2 = prefix delete_files() { + cd "$1" || return $? while read -r in do - [ -n "$in" ] && $1 rm -d "$in" 2>/dev/null + [ -n "$in" ] && $2 rm -d "$in" 2>/dev/null done } @@ -22,14 +23,10 @@ remove_package() fi echo "Removing $1" - ( # delete root files - cd / - $pcompress -dc "$archive" | tar -tf - ROOT 2>/dev/null | sed 's|^ROOT/||g' | tac | delete_files $2 - ) - ( # delete home files - cd "$HOME" - $pcompress -dc "$archive" | tar -tf - HOME 2>/dev/null | sed 's|^HOME/||g' | tac | delete_files - ) + list=$($pcompress -dc "$archive" | tar -tf - 2>/dev/null) + + echo "$list" | grep "^ROOT/" | sed 's|^ROOT/||g' | tac | delete_files / $2 + echo "$list" | grep "^HOME/" | sed 's|^HOME/||g' | tac | delete_files "$HOME" $2 rm "$archive" 2>/dev/null $2 sed -i "/^$1 /d" installed diff --git a/src/upgrade.sh b/src/upgrade.sh new file mode 100644 index 0000000..6f92223 --- /dev/null +++ b/src/upgrade.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +# stdin: old list +# $1 = old list , $1 = new path +to_delete() +{ + find "$2" -type d 2>/dev/null | sed 's|$|/|g' > tmplist + find "$2" -type f 2>/dev/null >> tmplist + sort tmplist > list + diff --new-line-format="" --unchanged-line-format="" "$1" list + rm tmplist list +} + +# $1 = package , $2 = prefix +upgrade_package() +{ + echo "Updating $1" + tmpdir="/tmp/zpkg_$(random_string 5)" + mkdir -p "$tmpdir" + ( + # fetch package + cd "$tmpdir" + fetch_package "$1" || { echo "Package '$1' not found" >&2 && return 1; } + unpack "$1.tar.$extension" || return $? + + oldlist=$($pcompress -dc "$PKG_PATH/$1.tar.$extension" | tar -tf - 2>/dev/null | sort) + echo "$oldlist" | grep "^ROOT/" | to_delete - ROOT | sed 's|^ROOT/||g' | tac | delete_files / $2 + echo "$oldlist" | grep "^HOME/" | to_delete - HOME | sed 's|^HOME/||g' | tac | delete_files "$HOME" + + copy_files ROOT / $2 2>/dev/null + copy_files HOME "$HOME" 2>/dev/null + $2 cp "$1.tar.$extension" "$PKG_PATH" + add_package_entry "$1" $2 + ) + ret=$? + rm -rd "$tmpdir" 2>/dev/null + return $ret +}