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
 | 
						exit 1
 | 
				
			||||||
fi >&2
 | 
					fi >&2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rollback() {
 | 
					check_errors() {
 | 
				
			||||||
	uci changes \\
 | 
						# reads stdin and forwards non-empty lines to stderr.
 | 
				
			||||||
	| sed -e 's/\..*\$//' -e 's/^-//' \\
 | 
						# returns 0 if stdin is empty, else 1.
 | 
				
			||||||
	| while read -r package
 | 
						! grep -e . >&2
 | 
				
			||||||
	  do
 | 
					 | 
				
			||||||
		  uci revert "\${package}"
 | 
					 | 
				
			||||||
	  done
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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}")
 | 
					$(cat "${batchfile}")
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
CODE
 | 
					CODE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue