#!/bin/bash
#
# Script to parse the non-text sources metadata file and download
# the required files from the lookaside cache
#
# Please note: this script is non-destructive, it wont replace
# files that already exist, regardless of their state, allowing you
# to have work-in-progress content that wont get overwritten.
#
# Might want to drop this in ~/bin/ and chmod u+x it
surl="https://git.centos.org/sources/"
# for setting any overrides, such as surl or f
if [ -f /etc/centos-git-common ]; then
. /etc/centos-git-common
fi
#parse command line args
BRANCH=''
QUIET=''
CHECK=0
while (($# > 0))
do
case $1 in
--branch)
#specify branch instead of asking git
BRANCH=$2
shift 2
;;
--surl)
#override sources url
surl=$2
shift 2
;;
--check)
#verify the sha1sum of the downloaded file
CHECK=1
shift
;;
-q)
# Be less chatty
QUIET='--silent'
shift
;;
esac
done
# check metadata file and extract package name
shopt -s nullglob
set -- .*.metadata
if (( $# == 0 ))
then
echo 'Missing metadata. Please run from inside a sources git repo'
exit 1
elif (( $# > 1 ))
then
echo "Warning: multiple metadata files found. Using $1"
fi
meta=$1
pn=${meta%.metadata}
pn=${pn#.}
if [ ! -d .git ] || [ ! -d SPECS ]; then
echo 'You need to run this from inside a sources git repo'
exit 1
fi
mkdir -p SOURCES
# sort out our branch
if [ -n "$BRANCH" ]
then
branches=("$BRANCH")
else
# generate a list of all branches containing current HEAD
branches=()
while IFS='' read -r line
do
# input from: git branch --contains HEAD
branch="${line:2}"
if [[ "$branch" =~ "detached from" ]]
then
# ignore detached heads
continue
fi
if [ ".${line:0:1}" = ".*" ]
then
# current branch, put it first
branches=("$branch" "${branches[@]}")
else
branches=("${branches[@]}" "$branch")
fi
done <<< "$(git branch --contains HEAD)"
fi
while read -r fsha fname ; do
if [ ".${fsha}" = ".da39a3ee5e6b4b0d3255bfef95601890afd80709" ]; then
# zero byte file
touch ${fname}
else
if [ ! -e "${fname}" ]; then
for br in "${branches[@]}"
do
curl ${QUIET} -f "${surl}/${pn}/${br}/${fsha}" -o "${fname}" && break
done
else
echo "${fname} exists. skipping"
fi
if [ ${CHECK} -eq 1 ]; then
downsum=$(sha1sum ${fname} | awk '{print $1}')
if [ ${fsha} != ${downsum} ]; then
rm -f ${fname}
echo "failed to download ${fname}" >&2
fi
fi
fi
done < "${meta}"