# Commit a new config change # Works only for simple cases 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} } TRAPEXIT () { # cleanup unfunction ask log } # ignore a -m [[ $1 == "-m" ]] && shift if [[ $# == 0 ]]; then echo "No message given. Aborting." return 1 fi local message=$1 local tok=__cci__ local stg_v=$(python2 -c 'from stgit.builtin_version import version; print(version)') # bail out on errors with the python thing (( $? )) && return 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 || return # from 0.16 onwards stg repushes the patches ... pop them again # this is needed to make the `config push` work if is-at-least 0.16 $stg_v; then log "Popping patches, stg thought it had to re-apply" cstg pop --all --keep || return fi 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 || return log "Re-apply patches" cstg push --all --keep || return log "Done" popd -q # vim: ft=zsh