# Commit a new config change # Works only for simple cases emulate -L zsh setopt err_return ask () { echo -n ${fg_bold[white]}"Is this ok? [y/n] "${reset_color} if ! read -q; then echo echo "I would have done the wrong thing ... aborting!" return 2 else echo fi } log () { echo ${fg_bold[white]}">> $1"${reset_color} } { # ignore a -m [[ $1 == "-m" ]] && shift if [[ $# == 0 ]]; then echo "No message given. Aborting." return 1 fi local message=$1 local tok=__cci__ pushd -q ~ { local indexed="$(config status --porcelain | grep -v '^ ')" if [[ -n $indexed ]]; then log "Stuff in index -- only commiting this" echo "$indexed" ask || return 2 else log "Nothing in index -- commiting everything which has changed" echo "$(config status)" ask || return 2 config add --update fi cstg diff --diff-opts --cached ask || return 2 log "Creating new patch" cstg new $tok -m "$message" log "Refreshing" cstg refresh --index if [[ -z $(cstg files) ]]; then echo echo "Ehm - this patch is empty. Narf. Aborting!" echo "Deleting useless patch" cstg del $tok return 3 fi log "Committing" cstg commit $tok # from 0.16 onwards stg repushes the patches ... pop them again # this is needed to make the `config push` work log "Popping patches, stg thought it had to re-apply" cstg pop --all --keep if [[ -n $(cstg series --applied) ]]; then echo echo "Urgs! Something went wrong. There are still patches applied." echo "Clean up for yourself. Aborting here!" return 4 fi log "Pushing to remote" config push log "Re-apply patches" cstg push --all --keep log "Done" } always { popd -q } } always { unfunction ask log } # vim: ft=zsh