Bläddra i källkod

Update diff-pr to scrape COPY from flattened Dockerfile so "COPY \\n foo \\n bar \\n baz" doesn't trip us up

Tianon Gravi 5 år sedan
förälder
incheckning
7e6ffbece8
1 ändrade filer med 31 tillägg och 8 borttagningar
  1. 31 8
      diff-pr.sh

+ 31 - 8
diff-pr.sh

@@ -146,8 +146,28 @@ copy-tar() {
 		local dDir; dDir="$(dirname "$d")"
 		local dDirName; dDirName="$(basename "$dDir")"
 
+		# TODO choke on "syntax" parser directive
+		# TODO handle "escape" parser directive reasonably
+		local flatDockerfile; flatDockerfile="$(
+			gawk '
+				BEGIN { line = "" }
+				/^[[:space:]]*#/ {
+					gsub(/^[[:space:]]+/, "")
+					print
+					next
+				}
+				{
+					if (match($0, /^(.*)(\\[[:space:]]*)$/, m)) {
+						line = line m[1]
+						next
+					}
+					print line $0
+					line = ""
+				}
+			' "$d"
+		)"
+
 		local IFS=$'\n'
-		local dBase; dBase="$(basename "$d")"
 		local copyAddContext; copyAddContext="$(awk '
 			toupper($1) == "COPY" || toupper($1) == "ADD" {
 				for (i = 2; i < NF; i++) {
@@ -159,7 +179,8 @@ copy-tar() {
 					}
 				}
 			}
-		' "$d")"
+		' <<<"$flatDockerfile")"
+		local dBase; dBase="$(basename "$d")"
 		local files=(
 			"$dBase"
 			$copyAddContext
@@ -198,23 +219,25 @@ copy-tar() {
 
 			local g
 			for g in "${globbed[@]}"; do
-				if [ -z "$failureMatters" ] && [ ! -e "$dDir/$g" ]; then
+				local srcG="$dDir/$g" dstG="$dst/$dDirName/$g"
+
+				if [ -z "$failureMatters" ] && [ ! -e "$srcG" ]; then
 					continue
 				fi
 
-				local gDir; gDir="$(dirname "$dst/$dDirName/$g")"
+				local gDir; gDir="$(dirname "$dstG")"
 				mkdir -p "$gDir"
-				cp -alT "$dDir/$g" "$dst/$dDirName/$g"
+				cp -alT "$srcG" "$dstG"
 
 				if [ -n "$listTarballContents" ]; then
 					case "$g" in
 						*.tar.* | *.tgz)
-							if [ -s "$dst/$dDirName/$g" ]; then
-								tar -tf "$dst/$dDirName/$g" \
+							if [ -s "$dstG" ]; then
+								tar -tf "$dstG" \
 									| grep -vE "$uninterestingTarballGrep" \
 									| sed -e 's!^[.]/!!' \
 									| sort \
-									> "$dst/$dDirName/$g  'tar -t'"
+									> "$dstG  'tar -t'"
 							fi
 							;;
 					esac