summaryrefslogtreecommitdiff
path: root/commitpkg
blob: d7b4b6c887ca520ee619e6a97d8725fb32dc6323 (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
127
128
129
130
131
132
#!/bin/bash

# Source makepkg.conf; fail if it is not found
if [ -r "/etc/makepkg.conf" ]; then
    source "/etc/makepkg.conf"
else
    echo "/etc/makepkg.conf not found!"
    exit 1
fi

# Source user-specific makepkg.conf overrides
if [ -r ~/.makepkg.conf ]; then
    source ~/.makepkg.conf
fi

cmd=$(basename $0)

if [ ! -f PKGBUILD ]; then
    echo "No PKGBUILD file"
    exit 1
fi

if [ -z "$CARCH" ]; then
    echo "CARCH must be set to a recognized value!"
    exit 1
fi

source PKGBUILD
pkgbase=${pkgbase:-${pkgname[0]}}

# set up repo-specific opts depending on how we were called
server="gerolde.archlinux.org"
if [ "$cmd" == "extrapkg" ]; then
    repo="extra"
elif [ "$cmd" == "corepkg" ]; then
    repo="core"
elif [ "$cmd" == "testingpkg" ]; then
    repo="testing"
elif [ "$cmd" == "communitypkg" ]; then
    repo="community"
    server="aur.archlinux.org"
elif [ "$cmd" == "community-testingpkg" ]; then
    repo="community-testing"
    server="aur.archlinux.org"
else
    if [ $# -eq 0 ]; then
        echo "usage: commitpkg <reponame> [-l limit] [commit message]"
        exit 1
    fi
    repo="$1"
    shift
fi

# see if any limit options were passed, we'll send them to SCP
unset scpopts
if [ "$1" = "-l" ]; then
    scpopts="$1 $2"
    shift 2
fi

for _pkgname in ${pkgname[@]}; do
    pkgfile=${_pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}
    anypkgfile=${_pkgname}-${pkgver}-${pkgrel}-any${PKGEXT}

    if [ ! -f $pkgfile ]; then
        if [ -f $PKGDEST/$pkgfile ]; then
            pkgfile=$PKGDEST/$pkgfile
        elif [ -f $anypkgfile ]; then
            pkgfile=$anypkgfile
            CARCH=any
        elif [ -f $PKGDEST/$anypkgfile ]; then
            pkgfile=$PKGDEST/$anypkgfile
            CARCH=any
        else
            echo "File $pkgfile doesn't exist"
            exit 1
        fi
    fi

    # combine what we know into a variable
    uploadto="staging/${repo}/$(basename ${pkgfile})"
    scp ${scpopts} "${pkgfile}" "${server}:${uploadto}"
    if [ "$(md5sum "${pkgfile}" | cut -d' ' -f1)" != "$(ssh ${server} md5sum "${uploadto}" | cut -d' ' -f1)" ]; then
        echo "File got corrupted during upload, cancelled."
        exit 1
    else
        echo "File integrity okay."
    fi

    if [ $? -ne 0 ]; then
        echo "Cancelled"
        exit 1
    fi
    echo "===> Uploaded $pkgfile"
done

if [ "$1" != "" ]; then
    svn commit -m "upgpkg: $pkgbase $pkgver-$pkgrel
    $1" > /dev/null
    if [ $? -ne 0 ]; then
        echo "Cancelled"
        exit 1
    fi
    echo "===> Commited with \"upgpkg: $pkgbase $pkgver-$pkgrel
    $1\" message"
else
    svn commit
    if [ $? -ne 0 ]; then
        echo "Cancelled"
        exit 1
    fi
    echo "===> Commited"
fi

archrelease $repo-$CARCH
if [ $? -ne 0 ]; then
    echo "Cancelled"
    exit 1
fi
echo "===> Tagged for $repo-$CARCH"

if [ "$CARCH" == "any" ]; then
    if [ -d ../repos/${repo}-i686 -a -d ../repos/${repo}-x86_64 ]; then
        pushd ..
        svn rm $repo-i686
        svn rm $repo-x86_64
        svn commit -m "removed $repo-i686 and $repo-x86_64 for $pkgname"
        popd
    fi
fi

# vim:ft=sh:ts=4:sw=4:et: