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