Przeglądaj źródła

Add uniq option to bashbrew

Joe Ferguson 10 lat temu
rodzic
commit
0a16236a1f
2 zmienionych plików z 31 dodań i 5 usunięć
  1. 30 5
      bashbrew/bashbrew.sh
  2. 1 0
      bashbrew/travis.sh

+ 30 - 5
bashbrew/bashbrew.sh

@@ -49,6 +49,10 @@ usage() {
 		                     namespace because it is necessary to do so for dependent
 		                     images to use FROM correctly (think "onbuild" variants that
 		                     are "FROM base-image:some-version")
+		  --uniq
+		                     Only process the first tag of identical images
+		                     This is not recommended for build or push
+		                     i.e. process python:2.7, but not python:2
 		
 		build options:
 		  --no-build         Don't build, print what would build
@@ -63,13 +67,14 @@ usage() {
 }
 
 # arg handling
-opts="$(getopt -o 'h?' --long 'all,docker:,help,library:,logs:,namespaces:,no-build,no-clone,no-push,src:' -- "$@" || { usage >&2 && false; })"
+opts="$(getopt -o 'h?' --long 'all,docker:,help,library:,logs:,namespaces:,no-build,no-clone,no-push,src:,uniq' -- "$@" || { usage >&2 && false; })"
 eval set -- "$opts"
 
 doClone=1
 doBuild=1
 doPush=1
 buildAll=
+onlyUniq=
 while true; do
 	flag="$1"
 	shift
@@ -84,6 +89,7 @@ while true; do
 		--no-clone) doClone= ;;
 		--no-push) doPush= ;;
 		--src) src="$1" && shift ;;
+		--uniq) onlyUniq=1 ;;
 		--) break ;;
 		*)
 			{
@@ -130,6 +136,7 @@ queue=()
 declare -A repoGitRepo=()
 declare -A repoGitRef=()
 declare -A repoGitDir=()
+declare -A repoUniq=()
 
 logDir="$logs/$subcommand-$(date +'%Y-%m-%d--%H-%M-%S')"
 mkdir -p "$logDir"
@@ -175,7 +182,15 @@ for repoTag in "${repos[@]}"; do
 	fi
 	
 	if [ "${repoGitRepo[$repoTag]}" ]; then
-		queue+=( "$repoTag" )
+		if [ "$onlyUniq" ]; then
+			uniqLine="${repoGitRepo[$repoTag]}@${repoGitRef[$repoTag]} ${repoGitDir[$repoTag]}"
+			if [ -z "${repoUniq[$uniqLine]}" ]; then
+				queue+=( "$repoTag" )
+				repoUniq[$uniqLine]=$repoTag
+			fi
+		else
+			queue+=( "$repoTag" )
+		fi
 		continue
 	fi
 	
@@ -247,11 +262,21 @@ for repoTag in "${repos[@]}"; do
 		tags+=( "$repo:$tag" )
 	done
 	
-	if [ "$repo" = "$repoTag" ]; then
+	if [ "$repo" != "$repoTag" ]; then
+		tags=( "$repoTag" )
+	fi
+	
+	if [ "$onlyUniq" ]; then
+		for rt in "${tags[@]}"; do
+			uniqLine="${repoGitRepo[$rt]}@${repoGitRef[$rt]} ${repoGitDir[$rt]}"
+			if [ -z "${repoUniq[$uniqLine]}" ]; then
+				queue+=( "$rt" )
+				repoUniq[$uniqLine]=$rt
+			fi
+		done
+	else
 		# add all tags we just parsed
 		queue+=( "${tags[@]}" )
-	else
-		queue+=( "$repoTag" )
 	fi
 done
 

+ 1 - 0
bashbrew/travis.sh

@@ -36,6 +36,7 @@ fi
 # TODO that will change eventually!
 
 set -x
+./bashbrew.sh list --uniq "${repos[@]}"
 ./bashbrew.sh list "${repos[@]}"
 ./bashbrew.sh build --no-build "${repos[@]}"
 ./bashbrew.sh push --no-push "${repos[@]}"