source: trunk/debathena/third/common/debathenificator.sh @ 23736

Revision 23736, 5.2 KB checked in by broder, 15 years ago (diff)
/Never/ automatically upload to production in the debathenificator.
Line 
1# Interface: define variables name, daversionappend, and function
2# hack_package ().
3
4set -e
5
6: ${DEBATHENA_APT=/mit/debathena/apt}
7
8# Process arguments.
9dist_arch=$1; shift
10a=
11if [ "$1" = "-A" ]; then a=-A; shift; fi
12chroot=$dist_arch-sbuild
13
14if [ -z "$dist_arch" -o $# -eq 0 ]; then
15    echo 'No arguments!' >&2
16    exit 2
17fi
18
19dist=$(echo "$dist_arch" | sed 's/^\(.*\)-\([^-]*\)$/\1/')
20arch=$(echo "$dist_arch" | sed 's/^\(.*\)-\([^-]*\)$/\2/')
21: ${section=debathena-system}
22: ${daname=$name}
23: ${release=-proposed}
24
25# Create a chroot and define functions for using it.
26sid=$(schroot -b -c "$chroot")
27trap 'schroot -e -c "$sid"' EXIT
28sch() { schroot -r -c "$sid" -- "$@"; }           # Run in the chroot
29schq() { schroot -q -r -c "$sid" -- "$@"; }       # Run in the chroot quietly
30schr() { schroot -r -c "$sid" -u root -- "$@"; }  # Run in the chroot as root
31schr apt-get -qq -y update || exit 3
32
33quote() {
34  echo "$1" | sed 's/[^[:alnum:]]/\\&/g'
35}
36
37munge_sections () {
38    perl -0pe "s/^Section: /Section: $section\\//gm or die" -i debian/control
39}
40
41add_changelog () {
42    if [ -n "$dch_done" ]; then
43        dch "$@"
44    else
45        echo | dch -v"${daversion}" -D unstable "$@"
46        dch_done=1
47    fi
48}
49
50append_description () {
51    perl -0pe 'open THREE, "</dev/fd/3"; $x = <THREE>; s/(^Description:.*\n( .*\S.*\n)*)/$1$x/gm or die' -i debian/control 3<&0
52}
53
54add_build_depends () {
55    perl -0pe 's/^(Build-Depends:.*(?:\n[ \t].*)*)$/$1, '"$1"'/m or die' -i debian/control
56}
57
58add_debathena_provides () {
59    [ "$name" = "$daname" ]
60    perl -0pe 's/^(Package: (.*)\n(?:(?!Provides:).+\n)*)(?:Provides: (.*)\n((?:.+\n)*))?(?=\n|\z)/$1Provides: $3, debathena-$2\n$4/mg or die; s/^Provides: , /Provides: /mg' -i debian/control
61    add_changelog "Provide debathena-$name."
62}
63
64rename_source () {
65    perl -pe "s{^Source: $name\$}{Source: $daname}" -i debian/control
66    add_changelog "Rename package to $daname."
67    perl -0pe "s/^$name/$daname/" -i debian/changelog
68}
69
70cmd_source () {
71    if [ "$a" != "-A" ]; then
72        echo "Not building source package for $dist_arch." >&2
73        return
74    fi
75    echo "Building source for $daname-$daversion on $dist_arch" >&2
76   
77    if ! [ -e "${name}_$version.dsc" ]; then
78        sch apt-get -d source "$name"
79    fi
80   
81    if ! [ -e "${daname}_$daversion.dsc" ]; then
82        (
83            tmpdir=$(mktemp -td "debathenify.$$.XXXXXXXXXX")
84            trap 'rm -rf "$tmpdir"' EXIT
85            origversion=$(echo "$version" | sed 's/-[^-]*$//')
86            cp -a "${name}_$origversion.orig.tar.gz" "$tmpdir/"
87            dscdir=$(pwd)
88            cd "$tmpdir/"
89            dpkg-source -x "$dscdir/${name}_$version.dsc" "$tmpdir/$name-$origversion"
90            cd "$tmpdir/$name-$origversion"
91            dch_done=
92            hack_package
93            if [ "$name" != "$daname" ]; then
94                rename_source
95                cp -a "$tmpdir/${name}_$origversion.orig.tar.gz" "$tmpdir/${daname}_$origversion.orig.tar.gz"
96                cp -a "$tmpdir/${daname}_$origversion.orig.tar.gz" "$dscdir"
97            fi
98            [ -n "$dch_done" ]
99            schr apt-get -q -y install devscripts pbuilder
100            schr /usr/lib/pbuilder/pbuilder-satisfydepends
101            sch debuild -S -sa -us -uc -i -I.svn && cp -a "../${daname}_$daversion"* "$dscdir"
102        )
103        [ $? -eq 0 ] || exit 1
104       
105        if [ -n "$DA_CHECK_DIFFS" ]; then
106            interdiff -z "${name}_$version.diff.gz" "${daname}_$daversion.diff.gz" | \
107                enscript --color --language=ansi --highlight=diffu --output=- -q | \
108                less -R
109            echo -n "Press Enter to continue: " >&2
110            read dummy
111        fi
112    fi
113}
114
115cmd_binary () {
116    sbuildhack "$dist_arch" $a "${daname}_$daversion.dsc"
117}
118
119v () {
120    echo "$@"
121    "$@"
122}
123
124cmd_upload () {
125    REPREPRO="v reprepro -Vb $DEBATHENA_APT"
126    REPREPROI="$REPREPRO --ignore=wrongdistribution --ignore=missingfield"
127
128    . /mit/debathena/bin/debian-versions.sh
129    tag=$(gettag $dist)
130
131    if [ "$a" = "-A" ]; then
132        $REPREPROI include "${dist}${release}" "${daname}_${daversion}_source.changes"
133    fi
134    $REPREPROI include "${dist}${release}" "${daname}_${daversion}${tag}_${arch}.changes"
135}
136
137version=$(
138    sch apt-cache showsrc "$name" | \
139        sed -n 's/^Version: \(.*\)$/\1/ p' | (
140        version='~~~'
141        while read -r newversion; do
142            if [ $(expr "$newversion" : '.*debathena') = 0 ] && \
143                dpkg --compare-versions "$newversion" '>' "$version"; then
144                version=$newversion
145            fi
146        done
147        if [ "$version" = '~~~' ]; then
148            echo "No version of $name found." >&2
149            exit 1
150        fi
151        echo "$version"
152        )
153    )
154daversion=$version$daversionappend
155
156# Look for binary packages built from the named package with the right
157# version, and exit out if we find one (an architecture-specific one
158# if we weren't run with the -A flag).  We need to look for either a
159# Source: or a Package: header matching $name since there is no
160# Source: header for a package whose name matches its source.
161pkgfiles="$DEBATHENA_APT/dists/$dist/$section/binary-$arch/Packages.gz $DEBATHENA_APT/dists/${dist}-proposed/$section/binary-$arch/Packages.gz"
162if { zcat $pkgfiles | \
163    dpkg-awk -f - "Package:^$daname\$" "Version:^$(quote "$daversion")~" -- Architecture;
164    zcat $pkgfiles | \
165    dpkg-awk -f - "Source:^$daname\$" "Version:^$(quote "$daversion")~" -- Architecture; } \
166    | if [ "$a" = "-A" ]; then cat; else fgrep -vx 'Architecture: all'; fi \
167    | grep -q .; then
168    echo "$daname $daversion already exists for $dist_arch." >&2
169    exit 0
170fi
171
172for cmd; do
173    "cmd_$cmd"
174done
Note: See TracBrowser for help on using the repository browser.