summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/get.sh31
-rw-r--r--src/install.sh8
-rw-r--r--src/query.sh18
-rw-r--r--src/remove.sh8
-rwxr-xr-xsrc/xi.sh10
5 files changed, 59 insertions, 16 deletions
diff --git a/src/get.sh b/src/get.sh
index a6821a1..3e23f78 100755
--- a/src/get.sh
+++ b/src/get.sh
@@ -78,7 +78,7 @@ download_packages () {
local output="${out_dir}/${checksum}.${package}.xipkg"
local output_info="${output}.info"
- if validate_checksum $output $checksum; then
+ if ${UNSAFE} || validate_checksum $output $checksum; then
${VERBOSE} && printf "${LIGHT_BLACK}skipping download for %s already exists with checksum %s${RESET}\n" $package $checksum
else
${VERBOSE} && printf "${LIGHT_BLACK}downloading $package from $url\n" $package $checksum
@@ -94,22 +94,23 @@ download_packages () {
wait_for_download $total_download ${outputs}
echo
- local i=0
- set -- $outputs
- for pkg_file in ${outputs}; do
+ if ! ${UNSAFE}; then
+ local i=0
+ set -- $outputs
+ for pkg_file in ${outputs}; do
- ${QUIET} || hbar -T "${LARGE_CIRCLE} validating downloads..." $i $#
-
- info_file="${pkg_file}.info"
- if ! validate_sig $pkg_file $info_file; then
- printf "${RED}Failed to verify signature for ${LIGHT_RED}%s${RED}\n" $(basename -s .xipkg $pkg_file)
- mv "$pkg_file" "${pkg_file}.invalid"
- else
- i=$((i+1))
- fi
- done
- ${QUIET} || hbar -t ${HBAR_COMPLETE} -T "${CHECKMARK} validated downloads" $i $#
+ ${QUIET} || hbar -T "${LARGE_CIRCLE} validating downloads..." $i $#
+ info_file="${pkg_file}.info"
+ if ! validate_sig $pkg_file $info_file; then
+ printf "${RED}Failed to verify signature for ${LIGHT_RED}%s${RED}\n" $(basename -s .xipkg $pkg_file)
+ mv "$pkg_file" "${pkg_file}.invalid"
+ else
+ i=$((i+1))
+ fi
+ done
+ ${QUIET} || hbar -t ${HBAR_COMPLETE} -T "${CHECKMARK} validated downloads" $i $#
+ fi
install $@
}
diff --git a/src/install.sh b/src/install.sh
index 432af27..6c02fab 100644
--- a/src/install.sh
+++ b/src/install.sh
@@ -15,10 +15,18 @@ install_package () {
local checksum="$installed_dir/checksum"
mkdir -p "$installed_dir"
+ [ -f $files ] && mv $files $files.old
extract $1 > $files
cp $info_file $info
md5sum $pkg_file | cut -d' ' -f1 > $checksum
+
+ if [ -f "$files.old" ]; then
+ for file in $(diff $files $files.old | grep ^\> | cut -d' ' -f2); do
+ rm -f ${SYSROOT}$file
+ done
+ rm $files.old
+ fi
}
get_package_filecount() {
diff --git a/src/query.sh b/src/query.sh
index 7e66b7c..0697005 100644
--- a/src/query.sh
+++ b/src/query.sh
@@ -3,3 +3,21 @@
search () {
find ${PACKAGES_DIR} -type f | sed "s,${PACKAGES_DIR}/,," | grep$(echo $@ | sed "s/ /\\|/g")
}
+
+files () {
+ for package in $@; do
+ local file="${INSTALLED_DIR}/$package/files"
+ [ -f $file ] && cat $file || >&2 printf "${RED}Package ${LIGHT_RED}$package${RED} is not installed"
+ done
+}
+
+file () {
+ for file in $@; do
+ [ ! -f ${SYSROOT}$file ] && file=$(realpath $file)
+ for list in ${INSTALLED_DIR}/*/files; do
+ package=$(dirname $list | xargs basename)
+ grep -q $file $list &&
+ printf "${LIGHT_BLUE}%s${BLUE} belongs to ${LIGHT_BLUE}%s${RESET}\n" $file $package
+ done
+ done
+}
diff --git a/src/remove.sh b/src/remove.sh
new file mode 100644
index 0000000..727bcec
--- /dev/null
+++ b/src/remove.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+remove () {
+
+ # TODO ask to remove package
+ # TODO calculate broken dependencies
+ # TODO
+}
diff --git a/src/xi.sh b/src/xi.sh
index 0311a56..afff70f 100755
--- a/src/xi.sh
+++ b/src/xi.sh
@@ -14,7 +14,7 @@ export NOCONFIRM=false
while getopts ":r:c:qnluyv" opt; do
case "${opt}" in
r)
- SYSROOT="${OPTARG}"
+ SYSROOT=$(realpath ${OPTARG})
;;
c)
CONF_FILE="${OPTARG}"
@@ -66,6 +66,14 @@ else
shift
search $@
;;
+ "files")
+ shift
+ files $@
+ ;;
+ "file")
+ shift
+ file $@
+ ;;
*)
$DO_SYNC && sync
fetch $@