summaryrefslogtreecommitdiff
path: root/.zsh/zshfunctions
blob: a83cbd8b346ae87264d4de22d6b2e7dec6ffe16f (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Nice mappings to restart/... the services
Start Stop Reload Restart ()
{
    [[ $UID != 0 ]] && SUDO="sudo"
    $SUDO /etc/init.d/$1 ${0:l}
}

# Change to the directory of a specific package
_cdu ()
{
    cd $(dirname $1)
}

# Open the ebuild with a specified command
open_ebuild ()
{
    local ebuild=$(equery --debug w $2 2> /dev/null)

    if [[ -z $ebuild ]]; then
        echo "Trying masked packages too..."
        ebuild=$(equery --debug w -m $2 2> /dev/null)
    fi

    if [[ -n $ebuild ]]; then
        $1 $ebuild
    else
        echo "No ebuild found"
    fi
}

# Commit a new config change
# Works only for simple cases
cci ()
{
    ask ()
    {
        echo -n "Is this ok? [y/n] "
    
        if ! read -q; then
            echo
            echo "I would have done the wrong thing ... aborting!"
            return 2
        fi
    }

    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 || return 2
    else
        echo ">> Nothing in index -- commiting everything which has changed"
        echo "$(config status)"

        ask || return 2
        config add -u
    fi

    cstg diff -O --cached
    ask || 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
    
    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

    echo ">> Re-apply patches"
    cstg push -a -k

    echo ">> Done"

    popd -q
}

if [[ $UID == 0 ]]; then

    # unpack a package
    unpack()
    {
        ebuild $(equery w -m $1) clean unpack
    }

    # set job count to 1 if there is only one package to install
    emerge()
    {
        local e=$(whence -p emerge)
        if [[ $# < 3 ]]; then
            $e --jobs=1 $@
        else
            $e $@
        fi
    }
fi