From 845488129d4ad99ec482119d1ee9577a78b4fcde Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Tue, 23 Sep 2014 12:10:00 -0600 Subject: [PATCH] Tweak build/clone logic to always do a checkout, and to bail gracefully when a commit doesn't exist (skipping the relevant repoTag build) --- build.sh | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/build.sh b/build.sh index 95c2fc9..6cb24f3 100755 --- a/build.sh +++ b/build.sh @@ -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")"