##// END OF EJS Templates
buildrpm: cleanup script
Gilles Moris -
r9812:dd2c95fc default
parent child Browse files
Show More
@@ -1,89 +1,80 b''
1 #!/bin/sh
1 #!/bin/sh
2 #
2 #
3 # Build a Mercurial RPM in place.
3 # Build a Mercurial RPM in place.
4 #
4 #
5 # Bryan O'Sullivan <bos@serpentine.com>
6 #
7 # Tested on
5 # Tested on
8 # - Fedora 10
6 # - Fedora 8 (with docutils 0.5)
9 # - Fedora 11
7 # - Fedora 11
10 # - Centos 5.3 (with Fedora EPEL repo for asciidoc)
8 # - OpenSuse 11.2
11
9
12 cd "`dirname $0`/.."
10 cd "`dirname $0`/.."
13 HG="$PWD/hg"
11 HG="$PWD/hg"
14 PYTHONPATH="$PWD/mercurial/pure"
12 PYTHONPATH="$PWD/mercurial/pure"
15 export PYTHONPATH
13 export PYTHONPATH
16
14
17 root="`$HG root 2>/dev/null`"
18 specfile=contrib/mercurial.spec
15 specfile=contrib/mercurial.spec
16 if [ ! -f $specfile ]; then
17 echo "Cannot find $specfile!" 1>&2
18 exit 1
19 fi
19
20
20 if [ -z "$root" ]; then
21 if [ ! -d .hg ]; then
21 echo 'You are not inside a Mercurial repository!' 1>&2
22 echo 'You are not inside a Mercurial repository!' 1>&2
22 exit 1
23 exit 1
23 fi
24 fi
24
25
25 if $HG id -i | grep '+$' > /dev/null 2>&1; then
26 if $HG id -i | grep '+$' > /dev/null 2>&1; then
26 echo -n "Your local changes will NOT be in the RPM. Continue [y/n] ? "
27 echo -n "Your local changes will NOT be in the RPM. Continue [y/n] ? "
27 read answer
28 read answer
28 if echo $answer | grep -iv '^y'; then
29 if echo $answer | grep -iv '^y'; then
29 exit
30 exit
30 fi
31 fi
31 fi
32 fi
32
33
33 rpmdir=/tmp/"`basename $root | sed 's/ /_/'`"-rpm # FIXME: Insecure /tmp handling
34 rpmdir="$PWD/rpmbuild"
34
35
35 cd "$root"
36 rm -rf $rpmdir
36 rm -rf $rpmdir
37 mkdir -p $rpmdir/RPMS
37 mkdir -p $rpmdir/RPMS
38 $HG clone -u . "$root" $rpmdir/BUILD
38 $HG clone -u . . $rpmdir/BUILD
39
40 if [ ! -f $specfile ]; then
41 echo "Cannot find $specfile!" 1>&2
42 exit 1
43 fi
44
39
45 tmpspec=/tmp/`basename "$specfile"`.$$ # FIXME: Insecure /tmp handling
40 tmpspec=/tmp/`basename "$specfile"`.$$ # FIXME: Insecure /tmp handling
46 # make setup.py build the version string
41 # make setup.py build the version string
47 python setup.py build_py -c -d .
42 python setup.py build_py -c -d .
48 hgversion=`$HG version | sed -ne 's/.*(version \(.*\))$/\1/p'`
43 hgversion=`$HG version | sed -ne 's/.*(version \(.*\))$/\1/p'`
49
44
50 if echo $hgversion | grep -- '-' > /dev/null 2>&1; then
45 if echo $hgversion | grep -- '-' > /dev/null 2>&1; then
51 # nightly build case, version is like 1.3.1+250-20b91f91f9ca
46 # nightly build case, version is like 1.3.1+250-20b91f91f9ca
52 version=`echo $hgversion | cut -d- -f1`
47 version=`echo $hgversion | cut -d- -f1`
53 release=`echo $hgversion | cut -d- -f2 | sed -e 's/+.*//'`
48 release=`echo $hgversion | cut -d- -f2 | sed -e 's/+.*//'`
54 else
49 else
55 # official tag, version is like 1.3.1
50 # official tag, version is like 1.3.1
56 version=`echo $hgversion | sed -e 's/+.*//'`
51 version=`echo $hgversion | sed -e 's/+.*//'`
57 release='0'
52 release='0'
58 fi
53 fi
59 tip=`$HG -q tip`
60
54
61 # Beat up the spec file
55 sed -e "s,^Version:.*,Version: $version," \
62 sed -e 's,^Source:.*,Source: /dev/null,' \
63 -e "s,^Version:.*,Version: $version," \
64 -e "s,^Release:.*,Release: $release," \
56 -e "s,^Release:.*,Release: $release," \
65 -e "s,^%prep.*,Changeset: $tip\n\0," \
57 -e "s,^%prep.*,\n\0," \
66 -e 's,^%setup.*,,' \
58 -e 's,^%setup.*,,' \
67 $specfile > $tmpspec
59 $specfile > $tmpspec
68
60
69 cat <<EOF >> $tmpspec
61 cat <<EOF >> $tmpspec
70 %changelog
62 %changelog
71 * `LANG=en_US date +'%a %b %d %Y'` `$HG showconfig ui.username` $version-$release
63 * `LANG=en_US date +'%a %b %d %Y'` `$HG showconfig ui.username` $version-$release
72 - Automatically built via $0
64 - Automatically built via $0
73
65
74 EOF
66 EOF
75 $HG log \
67 $HG log \
76 --template '* {date|rfc822date} {author}\n- {desc|firstline}\n\n' \
68 --template '* {date|rfc822date} {author}\n- {desc|firstline}\n\n' \
77 .hgtags \
69 .hgtags \
78 | sed -e 's/^\(\* [MTWFS][a-z][a-z]\), \([0-3][0-9]\) \([A-Z][a-z][a-z]\) /\1 \3 \2 /' \
70 | sed -e 's/^\(\* [MTWFS][a-z][a-z]\), \([0-3][0-9]\) \([A-Z][a-z][a-z]\) /\1 \3 \2 /' \
79 -e '/^\* [MTWFS][a-z][a-z] /{s/ [012][0-9]:[0-9][0-9]:[0-9][0-9] [+-][0-9]\{4\}//}' \
71 -e '/^\* [MTWFS][a-z][a-z] /{s/ [012][0-9]:[0-9][0-9]:[0-9][0-9] [+-][0-9]\{4\}//}' \
80 >> $tmpspec
72 >> $tmpspec
81
73
82 rpmbuild --define "_topdir $rpmdir" -bb $tmpspec
74 rpmbuild --define "_topdir $rpmdir" -bb $tmpspec --clean
83 if [ $? = 0 ]; then
75 if [ $? = 0 ]; then
84 rm -rf $tmpspec $rpmdir/BUILD
85 mv $rpmdir/RPMS/*/* $rpmdir && rm -r $rpmdir/RPMS
76 mv $rpmdir/RPMS/*/* $rpmdir && rm -r $rpmdir/RPMS
86 echo
77 echo
87 echo "Packages are in $rpmdir:"
78 echo "Packages are in $rpmdir:"
88 ls -l $rpmdir/*.rpm
79 ls -l $rpmdir/*.rpm
89 fi
80 fi
General Comments 0
You need to be logged in to leave comments. Login now