# Commit a new config change # Works only for simple cases _ask_$0 () { echo -n "Is this ok? [y/n] " if ! read -q; then echo echo "I would have done the wrong thing ... aborting!" return 2 else echo fi } if [[ $# == 0 ]]; then echo "No message given. Aborting." return 1 fi local message=$1 local tok=__cci__ local stg_v=$(python -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 echo ">> Stuff in index -- only commiting this" echo "$indexed" _ask_$0 || return 2 else echo ">> Nothing in index -- commiting everything which has changed" echo "$(config status)" _ask_$0 || return 2 config add -u fi cstg diff -O --cached _ask_$0 || return 2 echo ">> Creating new patch" cstg new $tok -m "$message" echo ">> Refreshing" cstg refresh -i if [[ -z $(cstg files) ]]; then echo echo "Ehm - this patch is empty. Narf. Aborting!" echo "Deleting useless patch" cstg del $tok return 3 fi echo ">> 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 echo ">>> Popping patches, stg thought it had to re-apply" cstg pop -a -k || 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 echo ">> Pushing to remote" config push || return echo ">> Re-apply patches" cstg push -a -k || return echo ">> Done" popd -q # vim: ft=zsh