summaryrefslogtreecommitdiff
path: root/.zsh/functions/cci
blob: 6d10917cd0e0b5505d4e0e8728cc7c2c4b160c7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 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
}

_stg_v_$0 ()
{
    python -c 'from stgit.builtin_version import version; print version'
}

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
    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_$0); 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