|
1 |
| -#!/bin/sh |
| 1 | +#!/bin/sh -e |
2 | 2 | # usage: iglu [ add | del | has ] <pkg>
|
3 |
| -# |
4 |
| -# WONTFIX: |
5 |
| -# - circular deps shall not be handled |
6 |
| - |
7 |
| -set -e |
8 |
| - |
9 |
| -usage() { |
10 |
| - if [ ! -z "$1" ]; then |
11 |
| - echo "FATAL: $@" |
12 |
| - fi |
13 |
| - echo "usage: $(basename $0) [add | del | has | b | ba] <pkg>" |
14 |
| - echo "version: 0.2.0" |
15 |
| - exit 1 |
16 |
| -} |
17 | 3 |
|
18 | 4 | fatal() {
|
19 |
| - echo "ERROR: $@" |
| 5 | + printf "ERROR: %s\n" "$@" |
20 | 6 | exit 1
|
21 | 7 | }
|
22 | 8 |
|
23 | 9 | warn() {
|
24 |
| - echo "WARNING: $@" |
25 |
| -} |
26 |
| - |
27 |
| -chop_fs() { |
28 |
| - sed -n '/\[fs\]/,/\[backup\]/{/\[fs\]\|\[backup\]/!p}' "$1" \ |
29 |
| - | awk '{print length, $0}' | sort -rn | cut -d' ' -f2- |
| 10 | + printf "WARNING: %s\n" "$@" |
30 | 11 | }
|
31 | 12 |
|
32 |
| -continue_interactive() { |
33 |
| - printf '%s' "Do you wish to proceed?: " |
34 |
| - read yn |
35 |
| - case $yn in |
36 |
| - [Yy]* ) echo "Proceeding";; |
37 |
| - [Nn]* ) exit;; |
38 |
| - * ) exit;; |
39 |
| - esac |
40 |
| -} |
41 |
| - |
42 |
| -remove() { |
43 |
| - set +e |
44 |
| - rm -f "$@" 2> /dev/null |
45 |
| - while shift 2> /dev/null; do |
46 |
| - if [ -d "/$1" ]; then |
47 |
| - rmdir "/$1" 2> /dev/null |
48 |
| - elif [ -f "/$1" ]; then |
49 |
| - rm -f "/$1" 2> /dev/null |
50 |
| - fi |
51 |
| - done |
52 |
| - set -e |
53 |
| -} |
54 |
| - |
55 |
| -assert_deps() { |
56 |
| - for dep in $(grep '^deps=' "$1" | cut -d'=' -f2- | tr ':' '\n'); do |
57 |
| - [ -f "/usr/share/iglupkg/$dep" ] || fatal "Missing dep $dep" |
58 |
| - done |
59 |
| -} |
60 |
| - |
61 |
| -CMD=$1 |
62 |
| -PKG=$2 |
63 |
| - |
64 |
| -[ -z "$1" ] && usage |
65 |
| - |
66 |
| -root_req() { |
67 |
| - [ $(id -u) -eq 0 ] || fatal "root permissions needed" |
68 |
| -} |
69 |
| - |
70 |
| -has() { |
71 |
| - while [ ! -z "$1" ]; do |
72 |
| - >&2 echo "checking dep $1" |
73 |
| - [ -f "/usr/share/iglupkg/$1" ] |
74 |
| - shift |
75 |
| - done |
76 |
| -} |
77 |
| - |
78 |
| -iglupkg_check() { |
79 |
| - if ! command -v iglupkg > /dev/null 2>&1; then |
80 |
| - echo "iglupkg is missing??!!" |
81 |
| - exit 1 |
| 13 | +usage() { |
| 14 | + if [ ! -z "$1" ]; then |
| 15 | + fatal "$@" |
82 | 16 | fi
|
| 17 | + printf "usage: %s [add | del | has] <pkg>\n" $(basename "$0") |
| 18 | + printf "version: 0.3.0\n" |
| 19 | + exit 1 |
83 | 20 | }
|
84 | 21 |
|
85 |
| - |
86 |
| -if [ "$CMD" = "add" ]; then |
87 |
| - root_req |
88 |
| - META_PATH=$(tar -I zstd -tf "$PKG" | grep 'usr/share/iglupkg/' | tail -n1) |
89 |
| - PKGNAME=$(basename "$META_PATH") |
90 |
| - |
91 |
| - TMP_DIR=$(mktemp -d) |
92 |
| - tar -I zstd -C "$TMP_DIR" -xf "$PKG" "$META_PATH" |
93 |
| - assert_deps "$TMP_DIR/$META_PATH" |
94 |
| - |
95 |
| - if [ -f "/$META_PATH" ]; then |
96 |
| - warn "package $PKGNAME already installed. upgrading ..." |
97 |
| - |
98 |
| - chop_fs "$TMP_DIR/$META_PATH" > "$TMP_DIR/new" |
99 |
| - chop_fs "/$META_PATH" > "$TMP_DIR/old" |
100 |
| - |
101 |
| - |
102 |
| - warn "removing duplicate files ..." |
103 |
| - TO_REMOVE=$(diff -u "$TMP_DIR/old" "$TMP_DIR/new" | grep -v '^---' | grep -E '^\-' | cut -d'-' -f2- | awk '{ print "/"$1 }') |
104 |
| - |
105 |
| - [ -z "$TO_REMOVE" ] || warn "will remove $TO_REMOVE" |
106 |
| - continue_interactive |
107 |
| - |
108 |
| - remove $TO_REMOVE |
109 |
| - else |
110 |
| - warn "installing $PKGNAME ..." |
111 |
| - continue_interactive |
112 |
| - fi |
113 |
| - tar -I zstd -C / -xf "$PKG" |
114 |
| - rm -rf "$TMP_DIR" |
115 |
| -elif [ "$CMD" = "del" ]; then |
116 |
| - root_req |
117 |
| - META_PATH="/usr/share/iglupkg/$PKG" |
118 |
| - [ -f "$META_PATH" ] || fatal "package $PKG not installed" |
119 |
| - TO_REMOVE=$(chop_fs $META_PATH | awk '{ print "/"$1 }') |
120 |
| - [ -z "$TO_REMOVE" ] || warn "will remove $TO_REMOVE" |
121 |
| - continue_interactive |
122 |
| - |
123 |
| - remove $TO_REMOVE |
124 |
| -elif [ "$CMD" = "has" ]; then |
125 |
| - shift |
126 |
| - has $@ |
127 |
| -elif [ "$CMD" = "b" ]; then |
128 |
| - #BUILD |
129 |
| - iglupkg_check |
130 |
| - iglupkg || exit 1 |
131 |
| -elif [ "$CMD" = "ba" ]; then |
132 |
| - #BUILD INSTALL |
133 |
| - iglupkg_check |
134 |
| - iglupkg || exit 1 |
135 |
| - cd out/ |
136 |
| - for pkg in *.tar.*; do |
137 |
| - iglu add "$pkg" |
138 |
| - done |
139 |
| -else |
140 |
| - usage "unknown command $CMD" |
| 22 | +if [ -z "$1" ] |
| 23 | +then |
| 24 | + usage |
141 | 25 | fi
|
| 26 | + |
| 27 | +case "$1" in |
| 28 | + add) |
| 29 | + case "$2" in |
| 30 | + *.xbps) |
| 31 | + REPO=/var/lib/iglu |
| 32 | + cp "$2" "$REPO" |
| 33 | + cd "$REPO" |
| 34 | + rm -f *-repodata |
| 35 | + xbps-rindex -a *.xbps |
| 36 | + cd - |
| 37 | + b_name=$(basename "$2" | cut -d'.' -f1 | rev | cut -d'-' -f2- | rev) |
| 38 | + xbps-install --repository="$REPO" "$b_name" -f |
| 39 | + ;; |
| 40 | + *) |
| 41 | + xbps-install "$2" |
| 42 | + ;; |
| 43 | + esac |
| 44 | + ;; |
| 45 | + del) |
| 46 | + xbps-remove -R "$2" |
| 47 | + ;; |
| 48 | + has) |
| 49 | + xbps-query "$2" |
| 50 | + ;; |
| 51 | + *) |
| 52 | + usage "unknown sub command: $1" |
| 53 | + ;; |
| 54 | +esac |
0 commit comments