forked from ungleich-public/cdist
		
	[type/__uci_commit] Fail when uci(1) reports errors
This commit is contained in:
		
					parent
					
						
							
								cc599dab15
							
						
					
				
			
			
				commit
				
					
						3ef638a611
					
				
			
		
					 1 changed files with 29 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -45,16 +45,37 @@ then
 | 
			
		|||
	exit 1
 | 
			
		||||
fi >&2
 | 
			
		||||
 | 
			
		||||
rollback() {
 | 
			
		||||
	uci changes \\
 | 
			
		||||
	| sed -e 's/\..*\$//' -e 's/^-//' \\
 | 
			
		||||
	| while read -r package
 | 
			
		||||
	  do
 | 
			
		||||
		  uci revert "\${package}"
 | 
			
		||||
	  done
 | 
			
		||||
check_errors() {
 | 
			
		||||
	# reads stdin and forwards non-empty lines to stderr.
 | 
			
		||||
	# returns 0 if stdin is empty, else 1.
 | 
			
		||||
	! grep -e . >&2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uci batch <<'EOF' && uci commit || rollback
 | 
			
		||||
commit() {
 | 
			
		||||
	uci commit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
rollback() {
 | 
			
		||||
	echo >&2
 | 
			
		||||
	echo 'An error occurred when trying to commit transaction ${transaction_name}!' >&2
 | 
			
		||||
 | 
			
		||||
	uci changes \\
 | 
			
		||||
	| sed -e 's/^-//' -e 's/\..*\$//' \\
 | 
			
		||||
	| sort -u \\
 | 
			
		||||
	| while read -r _package
 | 
			
		||||
	  do
 | 
			
		||||
		  uci revert "\${_package}"
 | 
			
		||||
		  echo "\${_package}"  # for logging
 | 
			
		||||
	  done \\
 | 
			
		||||
	| awk '
 | 
			
		||||
	  BEGIN { printf "Reverted changes in: " }
 | 
			
		||||
	  { printf "%s%s", (FNR > 1 ? ", " : ""), \$0 }
 | 
			
		||||
	  END { printf "\\n" }' >&2
 | 
			
		||||
 | 
			
		||||
	return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uci batch <<'EOF' 2>&1 | check_errors && commit || rollback
 | 
			
		||||
$(cat "${batchfile}")
 | 
			
		||||
EOF
 | 
			
		||||
CODE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue