瀏覽代碼

Fix a few (but not all) too-complex expressions that won't fail properly with just "set -e"

Tianon Gravi 10 年之前
父節點
當前提交
4a2f22e6a0
共有 1 個文件被更改,包括 29 次插入30 次删除
  1. 29 30
      bashbrew/bashbrew.sh

+ 29 - 30
bashbrew/bashbrew.sh

@@ -194,9 +194,14 @@ for repoTag in "${repos[@]}"; do
 		continue
 	fi
 	
-	# parse the repo library file
+	if ! manifest="$("${cmd[@]}")"; then
+		echo >&2 "error: failed to fetch $repoTag (${cmd[*]})"
+		exit 1
+	fi
+	
+	# parse the repo manifest file
 	IFS=$'\n'
-	repoTagLines=( $("${cmd[@]}" | grep -vE '^#|^\s*$') )
+	repoTagLines=( $(echo "$manifest" | grep -vE '^#|^\s*$') )
 	unset IFS
 	
 	tags=()
@@ -225,7 +230,7 @@ for repoTag in "${repos[@]}"; do
 		gitRepo="${gitRepo%/}"
 		gitRepo="$src/$gitRepo"
 		
-		if [ "$subcommand" == 'build' ]; then
+		if [ "$subcommand" = 'build' ]; then
 			if [ -z "$doClone" ]; then
 				if [ "$doBuild" -a ! -d "$gitRepo" ]; then
 					echo >&2 "error: directory not found: $gitRepo"
@@ -238,16 +243,9 @@ for repoTag in "${repos[@]}"; do
 					git clone -q "$gitUrl" "$gitRepo"
 				else
 					# if we don't have the "ref" specified, "git fetch" in the hopes that we get it
-					if ! (
-						cd "$gitRepo"
-						git rev-parse --verify "${gitRef}^{commit}" &> /dev/null
-					); then
+					if ! ( cd "$gitRepo" && git rev-parse --verify "${gitRef}^{commit}" &> /dev/null ); then
 						echo "Fetching $repo ($gitUrl) ..."
-						(
-							cd "$gitRepo"
-							git fetch -q --all
-							git fetch -q --tags
-						)
+						( cd "$gitRepo" && git fetch -q --all && git fetch -q --tags )
 					fi
 				fi
 				
@@ -280,6 +278,22 @@ for repoTag in "${repos[@]}"; do
 	fi
 done
 
+# usage: gitCheckout "$gitRepo" "$gitRef" "$gitDir"
+gitCheckout() {
+	[ "$1" -a "$2" -a "$3" ] || return 1
+	(
+		set -x
+		cd "$1"
+		git reset -q HEAD
+		git checkout -q -- .
+		git clean -dfxq
+		git checkout -q "$2" --
+		cd "$1/$3"
+		"$dir/git-set-mtimes"
+	)
+	return 0
+}
+
 set -- "${queue[@]}"
 while [ "$#" -gt 0 ]; do
 	repoTag="$1"
@@ -333,25 +347,13 @@ while [ "$#" -gt 0 ]; do
 			done
 			
 			if [ "$doBuild" ]; then
-				if ! (
-					set -x
-					cd "$gitRepo"
-					git reset -q HEAD
-					git checkout -q -- .
-					git clean -dfxq
-					git checkout -q "$gitRef" --
-					cd "$gitRepo/$gitDir"
-					"$dir/git-set-mtimes"
-				) &>> "$thisLog"; then
+				if ! gitCheckout "$gitRepo" "$gitRef" "$gitDir" &>> "$thisLog"; then
 					echo "- failed 'git checkout'; see $thisLog"
 					didFail=1
 					continue
 				fi
 				
-				if ! (
-					set -x
-					"$docker" build -t "$repoTag" "$gitRepo/$gitDir"
-				) &>> "$thisLog"; then
+				if ! ( set -x && "$docker" build -t "$repoTag" "$gitRepo/$gitDir" ) &>> "$thisLog"; then
 					echo "- failed 'docker build'; see $thisLog"
 					didFail=1
 					continue
@@ -362,10 +364,7 @@ while [ "$#" -gt 0 ]; do
 						# images FROM other images is explicitly supported
 						continue
 					fi
-					if ! (
-						set -x
-						"$docker" tag -f "$repoTag" "$namespace/$repoTag"
-					) &>> "$thisLog"; then
+					if ! ( set -x && "$docker" tag -f "$repoTag" "$namespace/$repoTag" ) &>> "$thisLog"; then
 						echo "- failed 'docker tag'; see $thisLog"
 						didFail=1
 						continue