Tweak build/clone logic to always do a checkout, and to bail gracefully when a commit doesn't exist (skipping the relevant repoTag build)

This commit is contained in:
Tianon Gravi 2014-09-23 12:10:00 -06:00
parent 4b6f49153d
commit 845488129d
1 changed files with 23 additions and 18 deletions

View File

@ -193,27 +193,32 @@ while [ "$#" -gt 0 ]; do
echo "Processing $repoTag ..."
if [ "$doClone" ]; then
( cd "$gitRepo" && git clean -dfxq && git checkout -q "$gitRef" && "$dir/git-set-dir-times" )
# TODO git tag
IFS=$'\n'
froms=( $(grep '^FROM[[:space:]]' "$gitRepo/$gitDir/Dockerfile" | awk -F '[[:space:]]+' '{ print $2 ~ /:/ ? $2 : $2":latest" }') )
unset IFS
for from in "${froms[@]}"; do
for queuedRepoTag in "$@"; do
if [ "$from" = "$queuedRepoTag" ]; then
# a "FROM" in this image is being built later in our queue, so let's bail on this image for now and come back later
echo "- defer; FROM $from"
set -- "$@" "$repoTag"
continue 3
fi
done
done
if ! ( cd "$gitRepo" && git rev-parse --verify "${gitRef}^{commit}" &> /dev/null ); then
echo "- skip; invalid ref: $gitRef"
continue
fi
( cd "$gitRepo" && git clean -dfxq && git checkout -q "$gitRef" )
# TODO git tag
IFS=$'\n'
froms=( $(grep '^FROM[[:space:]]' "$gitRepo/$gitDir/Dockerfile" | awk -F '[[:space:]]+' '{ print $2 ~ /:/ ? $2 : $2":latest" }') )
unset IFS
for from in "${froms[@]}"; do
for queuedRepoTag in "$@"; do
if [ "$from" = "$queuedRepoTag" ]; then
# a "FROM" in this image is being built later in our queue, so let's bail on this image for now and come back later
echo "- defer; FROM $from"
set -- "$@" "$repoTag"
continue 3
fi
done
done
if [ "$doBuild" ]; then
( cd "$gitRepo/$gitDir" && "$dir/git-set-dir-times" )
thisLog="$logDir/build-$repoTag.log"
touch "$thisLog"
ln -sf "$thisLog" "$latestLogDir/$(basename "$thisLog")"