You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
9.2 KiB
253 lines
9.2 KiB
--- getdelta.sh 2007-07-13 16:30:26.000000000 +0000
|
|
+++ getdelta.sh 2010-08-27 17:23:31.692000002 +0000
|
|
@@ -25,6 +25,9 @@
|
|
VERSION="0.7"
|
|
|
|
# Changelog
|
|
+# version 0.7.9 2008/10/08
|
|
+# - add second parameter for destination name (EAPI=2)
|
|
+# - quote more carefully
|
|
# version 0.7.8 2007/07/13
|
|
# - added option -O to call of emerge when finding mirrors
|
|
# - replaced some calls of coreutils with bash-internals
|
|
@@ -326,13 +329,13 @@
|
|
|
|
remove() {
|
|
output "${GREEN}You have chosen to remove ${CYAN}$1\n"
|
|
- pushd ${DISTDIR} >/dev/null 2>&1
|
|
+ pushd -- "${DISTDIR}" >/dev/null 2>&1
|
|
removeme=true
|
|
for n in $(grep -v "^#" ${DO_NOT_REMOVE})
|
|
do
|
|
grep -q $n <<< "$1" && removeme=false && output "${CYAN}${1}${RED} is not deleted, since it matches ${n} in ${DO_NOT_REMOVE}"
|
|
done
|
|
- $removeme && rm -f $1
|
|
+ $removeme && rm -f -- "$1"
|
|
popd >/dev/null 2>&1
|
|
}
|
|
|
|
@@ -349,7 +352,7 @@
|
|
-e "s/src4/srcDDD/g" \
|
|
-e "s/src5/srcEEE/g" \
|
|
-e "s/src6/srcFFF/g" \
|
|
- -e "s/src7/srcGGG/g" <<< $MASK_FILENAME)
|
|
+ -e "s/src7/srcGGG/g" <<< "$MASK_FILENAME")
|
|
fi
|
|
|
|
# ignore PR for src-files of firefox
|
|
@@ -375,7 +378,7 @@
|
|
-e "s/rc//g" \
|
|
-e "s/[\._-]//g" \
|
|
-e "s/\+//g" \
|
|
- -e "s/ //g" <<< $MASK_FILENAME)
|
|
+ -e "s/ //g" <<< "$MASK_FILENAME")
|
|
}
|
|
|
|
# create or update a config-file
|
|
@@ -384,6 +387,7 @@
|
|
add_to_configfile LOCAL_MIRROR "" "set this to one or more (space separated) URI ending with '/' if you want to check one or more local mirror(s) first\n# most people just leave it empty."
|
|
add_to_configfile DELTUP_SERVER "http://linux01.gwdg.de/~nlissne/deltup.php" "deltup-server to use"
|
|
add_to_configfile FETCH "/usr/bin/wget -t 1 --passive-ftp" "command to use for downloading"
|
|
+add_to_configfile FETCHNAME "\$FETCH -O" "command to use for downloading; first parameter is the filename, second the url"
|
|
add_to_configfile QUEUERETRY 15 "number of seconds to wait before a queued request is retried"
|
|
add_to_configfile MAXIMUM_ACCEPTABLE_QUEUEPOS "15" "the maximum queuepos you would accept (if higher download full archive instead)"
|
|
add_to_configfile QUEUETIMEOUT 900 "when a dtu-request is queued - how long should we wait max. before downloading the original archive instead (in seconds)"
|
|
@@ -424,14 +428,14 @@
|
|
add_to_donotremove "^rp-pppoe"
|
|
|
|
|
|
-if [ -z $1 ]
|
|
+if [ -z "$1" ]
|
|
then
|
|
COLOR=true
|
|
echo -e "${YELLOW}getdelta.sh version ${VERSION}"
|
|
echo "This script has to be called like this:"
|
|
echo -e "${CYAN}$0 <URI>"
|
|
echo -e "\n${YELLOW}To use it, you should just put the following line into your /etc/make.conf"
|
|
- echo -e "${GREEN}FETCHCOMMAND=\"$0 \\\${URI}\""
|
|
+ echo -e "${GREEN}FETCHCOMMAND=\"$0 \\\"\\\${URI}\\\" \\\"\\\${FILE}\\\"\""
|
|
echo -e "\n${YELLOW}There is a config-file ${CYAN}${GETDELTA_CONFIGFILE}${YELLOW} with some variables to control the behaviour of this script."
|
|
echo -e "Edit it to your needs.${NORMAL}"
|
|
exit 1
|
|
@@ -464,10 +468,12 @@
|
|
output "use getdelta.sh for your FETCHCOMMAND, only." &&
|
|
sleep 5 && exit 1
|
|
|
|
-pushd $DISTDIR >/dev/null 2>/dev/null
|
|
+pushd -- "$DISTDIR" >/dev/null 2>/dev/null
|
|
ORIG_URI=$1
|
|
NEW_FILE=$(basename $ORIG_URI)
|
|
|
|
+[ -z "${NEW_FILE}" ] && NEW_FILE=${ORIG_URI##*/}
|
|
+
|
|
# repoman downloads metadata.dtd with FETCHCOMMAND
|
|
# this should not be done with getdelta - so just fetch the file and exit
|
|
|
|
@@ -475,7 +481,7 @@
|
|
# dtu files.
|
|
if [ "${NEW_FILE}" = "metadata.dtd" ] || [ "$GETDELTA" = "0" ]
|
|
then
|
|
- $FETCH $@
|
|
+ $FETCHNAME "$NEW_FILE" "$ORIG_URI"
|
|
exit $?
|
|
fi
|
|
|
|
@@ -516,7 +522,7 @@
|
|
#
|
|
output "${GREEN}Searching for a previously downloaded file in ${YELLOW}${DISTDIR}\n"
|
|
|
|
-first_chars=$(sed 's/[[:digit:]][[:print:]]*$//' <<< $NEW_FILE)
|
|
+first_chars=$(sed 's/[[:digit:]][[:print:]]*$//' <<< "$NEW_FILE")
|
|
length_first_chars=${#first_chars}
|
|
[ $length_first_chars -lt 3 ] && first_chars="${NEW_FILE:0:2}"
|
|
|
|
@@ -527,7 +533,7 @@
|
|
let len1=${#mask}
|
|
filelist=""
|
|
|
|
-for name in $( ls ${first_chars}* 2>/dev/null )
|
|
+for name in $( ls -- "${first_chars}"* 2>/dev/null )
|
|
do
|
|
mask2=$(mask_name "${name}")
|
|
# add any file, that results in the same mask or differ not more than two letters
|
|
@@ -582,7 +588,7 @@
|
|
|
|
# find matching part of filename - first: frontmatch
|
|
x=0;
|
|
- a=($NEW_FILE $filelist)
|
|
+ a=("$NEW_FILE" $filelist)
|
|
match=""
|
|
while [ -z "$match" ]
|
|
do
|
|
@@ -657,7 +663,7 @@
|
|
FILE_IS_CORRUPT=false
|
|
if $CHECK_OLD_FILE
|
|
then
|
|
- file_digest=$(grep -h ${best_candidate} ${FILESDIR}/digest-* | sed -n 1p)
|
|
+ file_digest=$(grep -h ${best_candidate} "${FILESDIR}"/digest-* | sed -n 1p)
|
|
if [ "$file_digest" ]
|
|
then
|
|
file_md5=$(cut -d ' ' -f2 <<< "$file_digest")
|
|
@@ -669,7 +675,7 @@
|
|
FILE_IS_CORRUPT=true
|
|
fi
|
|
else
|
|
- if [ $(rev <<< ${best_candidate} | cut -d. -f2 | rev) = "tar" ]
|
|
+ if [ $(rev <<< "${best_candidate}" | cut -d. -f2 | rev) = "tar" ]
|
|
then
|
|
output "${YELLOW}Could not find a digest-file for ${CYAN}${best_candidate}${YELLOW}. Testing file integrity with tar.\n"
|
|
if ! tar -tf ${best_candidate} >/dev/null
|
|
@@ -698,17 +704,16 @@
|
|
|
|
# Remember where we are, and go to a new dir there we can work
|
|
tmp_dwn_dest="${DISTDIR}/.getdelta-`date +%N`-tmp"
|
|
- mkdir ${tmp_dwn_dest}
|
|
+ mkdir -- "${tmp_dwn_dest}"
|
|
# If user abort Ctrl+C (signal 2), remove tmp-dir; enabable trap again and send it again to stop wget
|
|
- trap "rm -r ${tmp_dwn_dest}; trap 2; kill -2 $$" 2
|
|
- pushd ${tmp_dwn_dest} >/dev/null 2>&1
|
|
+ trap 'rm -r -- "${tmp_dwn_dest}"; trap 2; kill -2 '$$ 2
|
|
+ pushd -- "${tmp_dwn_dest}" >/dev/null 2>&1
|
|
|
|
# thanks to MATSUI Fe2+ Tetsushi for idea and patch
|
|
FILESIZE=$(stat -c %s "${DISTDIR}/${best_candidate}")
|
|
let TIMELIMIT=${FILESIZE}/${BANDWIDTH}
|
|
[[ $TIMELIMIT -lt $QUEUETIMEOUT ]] && QUEUETIMEOUT=$TIMELIMIT
|
|
-
|
|
- if $FETCH "${DELTUP_SERVER}${query}"
|
|
+ if $FETCH "${DELTUP_SERVER}${query}" -O ${best_candidate}-${NEW_FILE}.dtu
|
|
then
|
|
# thanks to deelkar for this much more elegant solution to the "broken pipe" problem with "head -n1"
|
|
GOTFILE=$(ls -c | sed -n 1p)
|
|
@@ -718,15 +723,15 @@
|
|
# may have sento to us.
|
|
|
|
# first: the request have been queued
|
|
- if [ "${GOTFILE}" = "deltup-queued" ]
|
|
+# if [ "${GOTFILE}" = "deltup-queued" ]
|
|
+ if [[ "$(file -bi ${GOTFILE}|cut -d ";" -f1)" != "application/x-bzip2" && "$(cat ${GOTFILE}|cut -d "," -f1)" != "sorry" ]]
|
|
then
|
|
let QTMOUT=$(date +%s)+QUEUETIMEOUT
|
|
- while [ -f deltup-queued ]
|
|
+ while [[ "$(file -bi ${GOTFILE}|cut -d ";" -f1)" != "application/x-bzip2" && "$(cat ${GOTFILE}|cut -d "," -f1)" != "sorry" ]]
|
|
do
|
|
output "${GREEN}destination file: ${CYAN}${NEW_FILE}\n"
|
|
- output "${YELLOW}$(cat deltup-queued)"
|
|
- QUEUEPOS=$(grep "has been queued" deltup-queued | cut -d. -f2 | cut -d")" -f1)
|
|
- rm -f deltup-queued
|
|
+ output "${YELLOW}$(cat ${GOTFILE})"
|
|
+ QUEUEPOS=$(grep "has been queued" ${GOTFILE} | cut -d. -f2 | cut -d")" -f1)
|
|
TSTAMP=$(date +%s)
|
|
if ((TSTAMP<QTMOUT)) && ((QUEUEPOS<=MAXIMUM_ACCEPTABLE_QUEUEPOS))
|
|
then
|
|
@@ -741,7 +746,7 @@
|
|
sleep 1
|
|
done
|
|
echo -n -e "${NORMAL}"
|
|
- $FETCH "${DELTUP_SERVER}${query}"
|
|
+ $FETCH "${DELTUP_SERVER}${query}" -O ${best_candidate}-${NEW_FILE}.dtu
|
|
GOTFILE=$(ls -c | sed -n 1p)
|
|
else
|
|
if ((TSTAMP>=QTMOUT))
|
|
@@ -761,20 +766,20 @@
|
|
done
|
|
fi
|
|
|
|
- if [ -f ${best_candidate}-${NEW_FILE}.failed ]
|
|
+ if [ "$(cat ${GOTFILE}|cut -d "," -f1)" = "sorry" ]
|
|
then
|
|
output "\n${RED}The server could not build the dtu-file for ${NEW_FILE}\n"
|
|
- output "${YELLOW}reason:\n${RED}$(cat ${best_candidate}-${NEW_FILE}.failed)\n"
|
|
- rm -rf ${best_candidate}-${NEW_FILE}.failed
|
|
+ output "${YELLOW}reason:\n${RED}$(cat ${GOTFILE})\n"
|
|
+ rm -rf -- "${GOTFILE}"
|
|
fi
|
|
|
|
- if [ -f ${best_candidate}-${NEW_FILE}.dtu ]
|
|
+ if [ -f "${best_candidate}-${NEW_FILE}.dtu" ]
|
|
then
|
|
output "${GREEN}Successfully fetched the dtu-file - let's build ${NEW_FILE}...\n"
|
|
- downloadsize=$(stat -c %s ${best_candidate}-${NEW_FILE}.dtu)
|
|
- if deltup -p -v -D ${DISTDIR} ${best_candidate}-${NEW_FILE}.dtu
|
|
+ downloadsize=$(stat -c %s "${best_candidate}-${NEW_FILE}.dtu")
|
|
+ if deltup -p -v -D "${DISTDIR}" "${best_candidate}-${NEW_FILE}.dtu"
|
|
then
|
|
- newsize=$(stat -c %s ${NEW_FILE})
|
|
+ newsize=$(stat -c %s "${NEW_FILE}")
|
|
let savedsize=${newsize}-${downloadsize}
|
|
let percent=${savedsize}*100/${newsize}
|
|
unit="bytes"
|
|
@@ -791,8 +796,8 @@
|
|
esac
|
|
output "${YELLOW}This dtu-file saved ${UCOLOR}${savedsize} ${unit} (${percent}%)${YELLOW} download size.\n"
|
|
fi
|
|
- mv -f ${NEW_FILE} ${DISTDIR} &&
|
|
- ${REMOVE_OLD} && remove "${best_candidate}"
|
|
+ mv -f -- "${NEW_FILE}" "${DISTDIR}" &&
|
|
+ ${REMOVE_OLD} && remove ${best_candidate}
|
|
fi
|
|
|
|
fi # if $FETCH "${DELTUP_SERVER}${query}"
|
|
@@ -812,7 +817,7 @@
|
|
read
|
|
fi
|
|
popd >/dev/null 2>&1
|
|
- rm -rf ${tmp_dwn_dest}
|
|
+ rm -rf -- "${tmp_dwn_dest}"
|
|
#stop respond to trap2
|
|
trap 2
|
|
fi # if ! FILE_IS_CORRUPT
|
|
@@ -824,10 +829,10 @@
|
|
|
|
# Ok, once we are here, we should have got the delta (and used it)
|
|
# or we still have to download the full file
|
|
-if ! [ -f ${DISTDIR}/${NEW_FILE} ]
|
|
+if ! [ -f "${DISTDIR}/${NEW_FILE}" ]
|
|
then
|
|
output "${RED}The dtu could not be fetched,${YELLOW} downloading full file from original URL\n"
|
|
- $FETCH $ORIG_URI
|
|
+ $FETCHNAME "$NEW_FILE" "$ORIG_URI"
|
|
# remember we had a fallback to use correct exitcode for portage
|
|
FALLBACK=$?
|
|
fi
|