tazpkg annotate modules/recharge @ rev 846

Remove "busybox" "prefixes" (thanks llev)
We used "busybox wget", etc. to be sure we called Busybox's "wget", not any other "wget". Workaround already done in "getenv" module.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Oct 09 13:14:01 2015 +0300 (2015-10-09)
parents a02e36d44d06
children d62dc010e0ee
rev   line source
al@834 1 #!/bin/sh
al@834 2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
al@834 3 # recharge - TazPkg module
al@834 4 # Recharge packages databases from a mirror
al@834 5
al@834 6
al@834 7 # Options:
al@834 8 # [main|<repository>] Repository name to recharge (all if empty)
al@834 9
al@834 10 # Environment variables:
al@834 11 # root Root of the packages DB
al@834 12 # UA User Agent string ("TazPkg-<version>")
al@834 13
al@834 14
al@834 15 # Connect function libraries
al@834 16 . /lib/libtaz.sh
al@834 17
al@836 18 # Get TazPkg working environment
al@840 19 . @@MODULES@@/getenv
al@834 20
al@834 21
al@836 22
al@836 23
al@834 24 # Functions
al@834 25 # ---------
al@834 26
al@834 27 # Download a file from specified mirror
al@834 28
al@836 29 get_from_mirror() {
al@836 30 case "$mirror" in
al@836 31 http://* | https://* | ftp://*)
al@846 32 wget -c -q -T 30 -U "$UA" "$mirror$1" 2>/dev/null;;
al@836 33 *)
al@836 34 ln -sf "$mirror$1" .;;
al@836 35 esac
al@836 36 status
al@834 37 }
al@834 38
al@834 39
al@834 40 # When recharging errors occur
al@834 41
al@834 42 recharging_failed() {
al@834 43 # Restore database from bak files
al@834 44 action 'Restoring database files...'
al@834 45 [ -e 'ID' -a ! -e 'ID.bak' ] && rm ID
al@834 46 [ -e 'IDs' -a ! -e 'IDs.bak' ] && rm IDs
al@840 47 for file in $(ls "$1"/*.bak); do
al@840 48 mv -f "$file" "${file%.bak}"
al@834 49 done
al@834 50 status
al@834 51
al@834 52 footer "$(colorize 31 "$(_ 'Recharging failed')")"
al@834 53 }
al@834 54
al@834 55
al@834 56
al@834 57
al@834 58 REPO="$1"
al@834 59
al@834 60 # What to recharge: main, or all, or selected undigest
al@834 61 case "$REPO" in
al@834 62 main) repo_to_recharge="$PKGS_DB";;
al@834 63 '') repo_to_recharge="$PKGS_DB $PKGS_DB/undigest/*";;
al@834 64 *) repo_to_recharge="$PKGS_DB/undigest/$REPO"
al@834 65 if [ ! -d "$repo_to_recharge" ]; then
al@834 66 _ "Repository \"%s\" doesn't exist." "$repo_to_recharge" >&2
al@834 67 exit 1
al@834 68 fi
al@834 69 ;;
al@834 70 esac
al@834 71
al@834 72 for path in $repo_to_recharge; do
al@846 73 [ ! -s "$path/mirror" ] && continue # skip
al@840 74 cd "$path"
al@836 75 # Mirror URL will have a trailing slash
al@840 76 mirror=$(cat mirror); mirror="${mirror%/}/"
al@834 77
al@834 78 # Repository name
al@834 79 if [ "$path" == "$PKGS_DB" ]; then
al@834 80 repo_name='Main'
al@834 81 else
al@834 82 repo_name="$(_n 'Undigest %s' "$(basename "$path")")"
al@834 83 fi
al@834 84
al@834 85 title 'Recharging repository "%s"' "$repo_name"
al@834 86
al@834 87 # Don't let ID be a symlink when using local repository.
al@834 88 if [ -h ID ]; then mv -f ID ID.lnk; cat ID.lnk > ID; rm ID.lnk; fi
al@834 89 if [ -h IDs ]; then mv -f IDs IDs.lnk; cat IDs.lnk > IDs; rm IDs.lnk; fi
al@834 90
al@834 91 [ -f ID ] && mv ID ID.bak # Compatibility with "old" ID
al@834 92 [ -f IDs ] && mv IDs IDs.bak
al@836 93 action 'Checking...'
al@836 94 get_from_mirror IDs
al@836 95
al@834 96 [ -e 'IDs' ] && awk '{print $1}' IDs > ID # Compatibility with "old" ID
al@836 97 [ -e 'IDs' ] && _ 'Database timestamp: %s' "$(date -d "@$(awk '{print $2}' IDs)" "+%x %R")"
al@834 98
al@834 99 # Check if recharging is needed
al@840 100 if [ -f 'IDs' ] && [ -f 'packages.info' ] && [ -f 'files.list.lzma' ] && \
al@840 101 cmp -s IDs IDs.bak; then
al@834 102 footer "$(_ 'Repository "%s" is up to date.' "$repo_name")"
al@834 103 rm IDs.bak ID.bak
al@834 104 continue
al@834 105 fi
al@834 106 rm IDs.bak ID.bak 2>/dev/null
al@834 107
al@834 108 action 'Creating backup of the last packages list...'
al@834 109 for i in packages.desc packages.$SUM packages.txt packages.list \
al@834 110 packages.equiv files.list.lzma extra.list mirrors packages.info; do
al@834 111 [ -f "$i" ] && mv -f $i $i.bak 2>/dev/null
al@834 112 done
al@840 113 # Always "[ Done ]"
al@840 114 :; status
al@834 115
al@834 116 # Download and extract bundle: extra.list, mirrors, files-list.md5,
al@834 117 # packages.{info,desc,md5,txt,list,equiv}
al@834 118 bundle='bundle.tar.lzma'
al@840 119 action 'Getting "%s"...' "$bundle"
al@840 120 get_from_mirror "$bundle"
al@834 121 if [ -f "$bundle" ]; then
al@846 122 tar -xaf "$bundle"; rm "$bundle"
al@834 123 else
al@840 124 recharging_failed "$path"; continue
al@834 125 fi
al@834 126
al@834 127 # Download files.list.lzma
al@834 128 files_local='files.list.lzma'; files_remote='files-list.lzma'
al@834 129 if [ -e "$files_local.bak" ]; then
al@840 130 md5sum "$files_local.bak" | awk '{printf $1}' > files-list.md5.bak
al@834 131 if cmp -s files-list.md5 files-list.md5.bak; then
al@840 132 mv "$files_local.bak" "$files_remote"
al@834 133 else
al@840 134 action 'Getting "%s"...' "$files_remote"
al@840 135 get_from_mirror "$files_remote"
al@834 136 fi
al@834 137 else
al@840 138 action 'Getting "%s"...' "$files_remote"
al@840 139 get_from_mirror "$files_remote"
al@834 140 fi
al@834 141
al@834 142 if [ ! -e "$files_remote" ]; then
al@840 143 recharging_failed "$path"; continue
al@834 144 fi
al@840 145 mv -f "$files_remote" "$files_local"
al@834 146
al@834 147 # Remove old database files (but packages.list.bak, extra.list.bak)
al@834 148 for i in packages.desc packages.$SUM packages.txt packages.equiv \
al@834 149 files.list.lzma mirrors packages.info files-list.md5; do
al@834 150 [ -f "$i.bak" ] && rm $i.bak 2>/dev/null
al@834 151 done
al@834 152
al@834 153 footer "$(_ 'Last database is ready to use.')"
al@834 154
al@834 155 # Check diff
al@834 156 if [ -f 'packages.list.bak' ]; then
al@834 157 diff -u packages.list.bak packages.list | grep ^+[a-z] > packages.diff
al@834 158 rm packages.list.bak
al@834 159 if [ -f 'extra.list.bak' ]; then
al@834 160 if [ -f 'extra.list' ]; then
al@840 161 awk -F'|' '{print $1 " (extra)"}' extra.list > extra.list1
al@834 162 awk -F'|' '{print $1 " (extra)"}' extra.list.bak > extra.list1.bak
al@834 163 diff -u extra.list1.bak extra.list1 | grep ^+[a-z] >> packages.diff
al@834 164 rm extra.list.bak extra.list1 extra.list1.bak
al@834 165 else
al@834 166 mv extra.list.bak extra.list
al@834 167 fi
al@834 168 fi
al@834 169 sed -i s/+// packages.diff
al@834 170
al@834 171 new_pkgs=$(wc -l < packages.diff)
al@834 172 if [ "$new_pkgs" -gt 0 ]; then
al@834 173 title 'Mirrored packages diff'
al@834 174 cat packages.diff
al@834 175 footer "$(emsg "$(_p \
al@834 176 '%s new package on the mirror.' \
al@840 177 '%s new packages on the mirror.' "$new_pkgs" \
al@834 178 "<c 32>$new_pkgs</c>")")"
al@834 179 fi
al@834 180 else
al@834 181 longline "$(_ "Note that next time you recharge the list, a list of \
al@834 182 differences will be displayed to show new and upgradeable packages.")"
al@834 183 fi
al@834 184 done
al@834 185 newline
al@840 186
al@840 187 # Close tazpkg-notify
al@840 188 echo "quit" > /tmp/tazpkg-notify.fifo