aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremmett1 <emmett1.2miligrams@protonmail.com>2024-04-15 11:38:09 +0800
committeremmett1 <emmett1.2miligrams@protonmail.com>2024-04-15 11:38:09 +0800
commitcf7e15afc0af0b15436a79d125703af5105be67b (patch)
treebe3179eb36c5da9bd8f65c0f5da580d534d6289f
parentcf41ee19b9776b02b814dfde6bcd5051481d04c2 (diff)
downloadautils-cf7e15afc0af0b15436a79d125703af5105be67b.tar.gz
autils-cf7e15afc0af0b15436a79d125703af5105be67b.zip
updated
-rwxr-xr-xapkg223
-rwxr-xr-xupdateconf64
2 files changed, 213 insertions, 74 deletions
diff --git a/apkg b/apkg
index 776447f..f64e6d0 100755
--- a/apkg
+++ b/apkg
@@ -12,7 +12,7 @@ fetch_src() {
http://*|https://*|ftp://*)
if [ ! -f $APKG_SOURCE_DIR/$sn ]; then
[ -f $APKG_SOURCE_DIR/$sn.tmp ] && resume="-C -"
- msg "fetching ${i#*::} to $APKG_SOURCE_DIR/$sn.tmp"
+ msg "fetching ${i#*::}"
curl $resume -L -o $APKG_SOURCE_DIR/$sn.tmp ${i#*::} || {
msg "Failed downloading source '$sn'."
exit 1
@@ -67,7 +67,7 @@ detect_buildtype() {
elif [ -f CMakeLists.txt ]; then
build_type=cmake_build
elif [ -f setup.py ]; then
- build_type=python3_build
+ build_type=python_build
elif [ -f Makefile.PL ]; then
build_type=perlmodule_build
elif [ -f Makefile ] || [ -f makefile ]; then
@@ -121,7 +121,7 @@ _cmake_build() {
fi
}
-_python3_build() {
+_python_build() {
python3 setup.py build
python3 setup.py install --prefix=/usr --root=$PKG --optimize=1
}
@@ -229,22 +229,22 @@ build_src() {
if [ ! "$source" ]; then
# dummy pkg
mkdir -p $PKG/usr
- elif [ "$(command -v pkg_build)" ]; then
- (set -e -x; pkg_build)
- buildstatus pkg_build
+ elif [ -s $HERE/build ]; then
+ sh -e -x $HERE/build
+ buildstatus build
else
- if [ "$(command -v pre_build)" ]; then
- (set -e -x; pre_build)
- buildstatus pre_build
+ if [ -s $HERE/prebuild ]; then
+ sh -e -x $HERE/prebuild
+ buildstatus prebuild
fi
if [ ! "${build_type}" ]; then
detect_buildtype
fi
(set -e -x; _${build_type})
buildstatus _${build_type}
- if [ "$(command -v post_build)" ]; then
- (set -e -x; post_build)
- buildstatus post_build
+ if [ -s $HERE/postbuild ]; then
+ sh -e -x $HERE/postbuild
+ buildstatus postbuild
fi
fi
@@ -328,7 +328,7 @@ build_src() {
exit 1
}
- if [ ! -f "$HERE"/.files ]; then
+ if [ ! -f "$HERE"/.files ] || [ "$HERE"/info -nt "$HERE"/.files ]; then
pkg_updatefiles
fi
@@ -341,13 +341,13 @@ pkg_updatefiles() {
msg "Package '$packagefile' not found."
exit 1
fi
- msg "'.files' updated."
+ msg "filelist updated."
tar -tvf $packagefile | awk '{$3=$4=$5=""; print $0}' | sort -k 3 > "$HERE"/.files
}
pkg_path() {
for r in $APKG_REPO; do
- [ -f $r/$1/abuild ] && {
+ [ -f $r/$1/info ] && {
echo $r/$1
break
}
@@ -355,7 +355,7 @@ pkg_path() {
}
die() {
- echo "error: $1"
+ [ "$1" ] && echo "error: $1"
exit 1
}
@@ -389,7 +389,8 @@ pkg_deplist() {
pkg_depends() {
_path=$(pkg_path $1) >/dev/null || return 1
- grep '# Depends' $_path/abuild | awk -F : '{print $2}' | tr ' ' '\n' | sed '/^$/d'
+ [ -s $_path/depends ] || return
+ grep -Ev ^'(#|$)' $_path/depends | awk '{print $1}'
}
parsesubopt() {
@@ -406,7 +407,7 @@ parsesubopt() {
pkg_outdate() {
spm -a | while read -r n v; do
[ "$(pkg_path $n)" ] || continue
- nv="$(grep ^version= $(pkg_path $n)/abuild | awk -F = '{print $2}')-$(grep ^release= $(pkg_path $n)/abuild | awk -F = '{print $2}')"
+ nv="$(grep ^version= $(pkg_path $n)/info | awk -F = '{print $2}')-$(grep ^release= $(pkg_path $n)/info | awk -F = '{print $2}')"
[ "$nv" ] || continue
[ "$v" = "$nv" ] || echo "$n $v -> $nv"
done
@@ -418,55 +419,39 @@ pkg_sysup() {
if [ ! "$od" ]; then
msg "No outdated packages."
exit 0
- else
- totalpkg=$(echo $od | tr ' ' '\n' | wc -l)
+ else
+ msg "Solving dependencies..."
+ for p in $(pkg_deplist $od); do
+ [ -s $SPM_PKGDB/$p ] || ni="$ni $p"
+ echo $od | tr ' ' '\n' | grep -qx $p && pu="$pu $p"
+ done
+ if [ "$ni" ]; then
+ newpkg=$(echo $ni | tr ' ' '\n' | wc -l)
+ msg "Installing $newpkg new package(s)."
+ echo
+ echo $ni
+ echo
+ fi
+ totalpkg=$(echo $pu | tr ' ' '\n' | wc -l)
+ msg "Upgrading $totalpkg package(s)."
echo
- echo $od
+ echo $pu
echo
- msg "Press ENTER to continue upgrade $totalpkg packages."
- msg "Press Ctrl + C to abort."
- read -r null
- apkg -u $od || die
+ prompt_user
+ if [ "$ni" ]; then
+ $APKG -i $ni || die
+ fi
+ $APKG -u $pu || die
fi
}
-parseopts() {
- while [ "$1" ]; do
- case $1 in
- -I) pkg_depinstalll $(parsesubopt $@); exit 0;;
- -D) pkg_deplist $(parsesubopt $@); exit 0;;
- -f) forcerebuild=1;;
- -i) install=1;;
- -u) upgrade=1;;
- -o) downloadonly=1;;
- -U) pkg_sysup; exit 0;;
- -d) pkg_depends $2; exit 0;;
- -p) pkg_path $2; exit 0;;
- -s) pkg_search $2; exit 0;;
- -*) msg "invalid option '$1'"; exit 1;;
- *) pkg="$pkg $1";;
- esac
- shift
- done
-}
-
-updateopts() {
- while [ "$1" ]; do
- case $1 in
- -*) newopt="$newopt $1";;
- esac
- shift
- done
- echo $newopt
-}
-
pkg_search() {
if [ ! "$APKG_REPO" ]; then
msg "No repo configured."
exit 1
fi
[ "$1" ] && grep=grep || grep=cat
- find $APKG_REPO -type f -name abuild -printf '%h\n' | rev | awk -F / '{print $1}' | rev | $grep $1
+ find $APKG_REPO -type f -name info -printf '%h\n' | rev | awk -F / '{print $1}' | rev | $grep $1
}
pkg_depinstalll() {
@@ -485,29 +470,94 @@ pkg_depinstalll() {
exit 0
fi
totalpkg=$(echo $installthis | tr ' ' '\n' | wc -l)
+ msg "Installing $totalpkg package(s)."
echo
echo $installthis
echo
- msg "Press ENTER to continue install $totalpkg packages."
- msg "Press Ctrl + C to abort."
- read -r null
- apkg -i $installthis || die
+ prompt_user
+ $APKG -i $installthis || die
+}
+
+prompt_user() {
+ if [ ! "$APKG_NOPROMPT" ]; then
+ msg "Press ENTER to continue operation."
+ msg "Press Ctrl + C to abort."
+ read -r null
+ fi
}
runscript() {
if [ -x ./$1-install ]; then
msg "Running $1-install script..."
- if [ "$ROOT" ]; then
- cat ./$1-install > "$ROOT"/.runscript
- chmod +x "$ROOT"/.runscript
- chroot "$ROOT" /.runscript
- rm -f "$ROOT"/.runscript
+ if [ "$APKG_ROOT" ]; then
+ cat ./$1-install > "$APKG_ROOT"/.runscript
+ chmod +x "$APKG_ROOT"/.runscript
+ chroot "$APKG_ROOT" /.runscript
+ rm -f "$APKG_ROOT"/.runscript
else
./$1-install
fi
fi
}
+parseopts() {
+ while [ "$1" ]; do
+ case $1 in
+ -I) pkg_depinstalll $(parsesubopt $@); exit 0;;
+ -D) pkg_deplist $(parsesubopt $@); exit 0;;
+ -U) pkg_sysup; exit 0;;
+ -d) pkg_depends $2; exit 0;;
+ -p) pkg_path $2; exit 0;;
+ -s) pkg_search $2; exit 0;;
+ -h) apkg_help; exit 0;;
+ -l) pkg_outdate; exit 0;;
+ -k) updatefiles=1;;
+ -f) forcerebuild=1;;
+ -i) install=1;;
+ -u) upgrade=1;;
+ -o) downloadonly=1;;
+ -*) msg "invalid option '$1'"; exit 1;;
+ *) pkg="$pkg $1";;
+ esac
+ shift
+ done
+}
+
+updateopts() {
+ while [ "$1" ]; do
+ case $1 in
+ -*) newopt="$newopt $1";;
+ esac
+ shift
+ done
+ echo $newopt
+}
+
+apkg_help() {
+ cat << EOF
+usage: ${0##*/} <option> <arg(s)>
+
+options:
+ -i <pkg(s)> install package(s)
+ -I <pkg(s)> install packages(s) with dependencies
+ -d <pkg> list <pkg> dependencies
+ -D <pkg(s)> list all dependencies
+ -u <pkg(s)> upgrade package(s)
+ -U update system
+ -f force rebuild
+ -o <pkg(s)> download source
+ -p <pkg> print package path
+ -s <pattern> search packages
+ -h print this help message
+
+environments:
+ APKG_ROOT override default root (${APKG_ROOT:-/}) location
+ APKG_CONF override default $APKG_CONF location
+
+EOF
+exit 0
+}
+
main() {
parseopts $@
set -- $(updateopts $@)
@@ -521,7 +571,7 @@ main() {
for p in $pkg; do
pkg_path $p >/dev/null || continue
#echo "[$p] package build starts..."
- (cd $(pkg_path $p) && apkg $@)
+ (cd $(pkg_path $p) && $APKG $@)
[ "$?" = 0 ] || exit 1
done
exit 0
@@ -537,15 +587,16 @@ main() {
exit 0
fi
- if [ ! -f ./abuild ]; then
- msg "'abuild' not found."
+ if [ ! -f ./info ]; then
+ msg "'info' not found."
exit 1
fi
- . ./abuild
+ . ./info
[ "$name" ] || die "name is empty"
[ "$version" ] || die "version is empty"
[ "$release" ] || die "release is empty"
+ export name version release
packagefile=$APKG_PACKAGE_DIR/$name#$version-$release.spm
@@ -553,6 +604,11 @@ main() {
fetch_src
exit 0
fi
+
+ if [ "$updatefiles" ]; then
+ pkg_updatefiles
+ exit 0
+ fi
if [ -f "$packagefile" ] && [ ! "$forcerebuild" ]; then
if [ ! "$install" ] && [ ! "$upgrade" ]; then
@@ -566,11 +622,11 @@ main() {
if [ "$install" ]; then
runscript pre
- SPM_ROOT=${ROOT%/} spm -i "$packagefile" || exit $?
+ SPM_ROOT=${APKG_ROOT%/} spm -i "$packagefile" || exit $?
runscript post
elif [ "$upgrade" ]; then
runscript pre
- SPM_ROOT=${ROOT%/} spm -u "$packagefile" || exit $?
+ SPM_ROOT=${APKG_ROOT%/} spm -u "$packagefile" || exit $?
runscript post
fi
}
@@ -579,17 +635,36 @@ umask 022
export HERE=$PWD
-APKG_REPO=""
-APKG_CONF="/etc/apkg.conf"
+APKG=$0
+SPM_PKGDB="${APKG_ROOT%/}/var/lib/spm/db"
+
+# for apkg config, either override or default
+APKG_CONF="${APKG_CONF:-/etc/apkg.conf}"
+
+## NEED BETTER WAY TO DO THIS?
+# environment override
+O_APKG_REPO=$APKG_REPO
+O_APKG_PACKAGE_DIR=$APKG_PACKAGE_DIR
+O_APKG_SOURCE_DIR=$APKG_SOURCE_DIR
+O_APKG_WORK_DIR=$APKG_WORK_DIR
+
+# default value
+APKG_REPO="$PWD"
APKG_PACKAGE_DIR="$PWD"
APKG_SOURCE_DIR="$PWD"
APKG_WORK_DIR="$PWD"
-SPM_PKGDB="${ROOT%/}/var/lib/spm/db"
+# source config
if [ -f $APKG_CONF ]; then
. $APKG_CONF
fi
+# reset value, use override first, else either from config or use default
+APKG_REPO=${O_APKG_REPO:-$APKG_REPO}
+APKG_PACKAGE_DIR=${O_APKG_PACKAGE_DIR:-$APKG_PACKAGE_DIR}
+APKG_SOURCE_DIR=${O_APKG_SOURCE_DIR:-$APKG_SOURCE_DIR}
+APKG_WORK_DIR=${O_APKG_WORK_DIR:-$APKG_WORK_DIR}
+
export SRC=$APKG_WORK_DIR/apkg-src-${PWD##*/}
export PKG=$APKG_WORK_DIR/apkg-pkg-${PWD##*/}
diff --git a/updateconf b/updateconf
new file mode 100755
index 0000000..330c93c
--- /dev/null
+++ b/updateconf
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+EDITOR=${EDITOR:-vi}
+
+command -v $EDITOR >/dev/null || {
+ echo "Editor '$EDITOR' not exist. Append 'EDITOR=<your editor>' to ${0##*/}."
+ exit 2
+}
+
+[ "$(id -u)" = 0 ] || {
+ echo "This operation need root access. Exiting..."
+ exit 1
+}
+
+spkgnew=$(find /etc -regextype posix-extended -regex ".+\.new" 2> /dev/null)
+
+[ "$spkgnew" ] || {
+ echo "Nothing to do. Exiting..."
+ exit 0
+}
+
+for file in $spkgnew; do
+ currentfile=${file%.*}
+ if [ ! -e "$currentfile" ]; then
+ echo "Remove '$file', '$currentfile' not exist."
+ rm -f "$file"
+ sleep 0.5
+ continue
+ fi
+ while true; do
+ clear
+ diff -u $currentfile $file --color=always
+ if [ $? = 0 ]; then
+ echo "Remove '$file', no diff found."
+ rm -f "$file"
+ sleep 1
+ break
+ fi
+ echo
+ echo "File: $currentfile"
+ echo
+ printf "[U]pdate [D]iscard [E]dit [K]eep ?: "
+ read ACTION
+ echo
+ case $ACTION in
+ U|u) echo "Replace '$currentfile' with '$file'."
+ mv -f "$file" "$currentfile"
+ break;;
+ D|d) echo "Remove '$file'."
+ rm -f "$file"
+ break;;
+ E|e) vim "$currentfile";;
+ K|k) echo "Keeping both."
+ break;;
+ esac
+ done
+ sleep 0.5
+done
+
+clear
+
+echo "Done updating package's configuration files."
+
+exit 0