##// END OF EJS Templates
buildrpm: introduce --prepare for preparing without actually building rpms
Mads Kiilerich -
r22435:4c4385eb default
parent child Browse files
Show More
@@ -1,103 +1,122 b''
1 #!/bin/sh -e
1 #!/bin/sh -e
2 #
2 #
3 # Build a Mercurial RPM from the current repo
3 # Build a Mercurial RPM from the current repo
4 #
4 #
5 # Tested on
5 # Tested on
6 # - Fedora 20
6 # - Fedora 20
7 # - CentOS 5
7 # - CentOS 5
8 # - centOS 6
8 # - centOS 6
9
9
10 BUILD=1
11 while [ "$1" ]; do
12 case "$1" in
13 --prepare )
14 shift
15 BUILD=
16 ;;
17 * )
18 echo "Invalid parameter $1!" 1>&2
19 exit 1
20 ;;
21 esac
22 done
23
10 cd "`dirname $0`/.."
24 cd "`dirname $0`/.."
11
25
12 specfile=contrib/mercurial.spec
26 specfile=contrib/mercurial.spec
13 if [ ! -f $specfile ]; then
27 if [ ! -f $specfile ]; then
14 echo "Cannot find $specfile!" 1>&2
28 echo "Cannot find $specfile!" 1>&2
15 exit 1
29 exit 1
16 fi
30 fi
17
31
18 if [ ! -d .hg ]; then
32 if [ ! -d .hg ]; then
19 echo 'You are not inside a Mercurial repository!' 1>&2
33 echo 'You are not inside a Mercurial repository!' 1>&2
20 exit 1
34 exit 1
21 fi
35 fi
22
36
23 # build local hg and use it
37 # build local hg and use it
24 python setup.py build_py -c -d .
38 python setup.py build_py -c -d .
25 HG="$PWD/hg"
39 HG="$PWD/hg"
26 PYTHONPATH="$PWD/mercurial/pure"
40 PYTHONPATH="$PWD/mercurial/pure"
27 export PYTHONPATH
41 export PYTHONPATH
28
42
29 rpmdir="$PWD/rpmbuild"
43 rpmdir="$PWD/rpmbuild"
30
44
31 rm -rf $rpmdir
45 rm -rf $rpmdir
32 mkdir -p $rpmdir/SOURCES $rpmdir/SPECS $rpmdir/RPMS $rpmdir/SRPMS $rpmdir/BUILD
46 mkdir -p $rpmdir/SOURCES $rpmdir/SPECS $rpmdir/RPMS $rpmdir/SRPMS $rpmdir/BUILD
33
47
34 hgversion=`$HG version | sed -ne 's/.*(version \(.*\))$/\1/p'`
48 hgversion=`$HG version | sed -ne 's/.*(version \(.*\))$/\1/p'`
35
49
36 if echo $hgversion | grep -- '-' > /dev/null 2>&1; then
50 if echo $hgversion | grep -- '-' > /dev/null 2>&1; then
37 # nightly build case, version is like 1.3.1+250-20b91f91f9ca
51 # nightly build case, version is like 1.3.1+250-20b91f91f9ca
38 version=`echo $hgversion | cut -d- -f1`
52 version=`echo $hgversion | cut -d- -f1`
39 release=`echo $hgversion | cut -d- -f2 | sed -e 's/+.*//'`
53 release=`echo $hgversion | cut -d- -f2 | sed -e 's/+.*//'`
40 else
54 else
41 # official tag, version is like 1.3.1
55 # official tag, version is like 1.3.1
42 version=`echo $hgversion | sed -e 's/+.*//'`
56 version=`echo $hgversion | sed -e 's/+.*//'`
43 release='0'
57 release='0'
44 fi
58 fi
45
59
46 $HG archive -t tgz $rpmdir/SOURCES/mercurial-$version-$release.tar.gz
60 $HG archive -t tgz $rpmdir/SOURCES/mercurial-$version-$release.tar.gz
47 rpmspec=$rpmdir/SPECS/mercurial.spec
61 rpmspec=$rpmdir/SPECS/mercurial.spec
48
62
49 sed -e "s,^Version:.*,Version: $version," \
63 sed -e "s,^Version:.*,Version: $version," \
50 -e "s,^Release:.*,Release: $release," \
64 -e "s,^Release:.*,Release: $release," \
51 $specfile > $rpmspec
65 $specfile > $rpmspec
52
66
53 echo >> $rpmspec
67 echo >> $rpmspec
54 echo "%changelog" >> $rpmspec
68 echo "%changelog" >> $rpmspec
55
69
56 if echo $version | grep '+' > /dev/null 2>&1; then
70 if echo $version | grep '+' > /dev/null 2>&1; then
57 latesttag="`echo $version | sed -e 's/+.*//'`"
71 latesttag="`echo $version | sed -e 's/+.*//'`"
58 $HG log -r .:"$latesttag" -fM \
72 $HG log -r .:"$latesttag" -fM \
59 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' | python -c '
73 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' | python -c '
60 import sys, time
74 import sys, time
61
75
62 def datestr(date, format):
76 def datestr(date, format):
63 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
77 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
64
78
65 changelog = []
79 changelog = []
66 for l in sys.stdin.readlines():
80 for l in sys.stdin.readlines():
67 tok = l.split("\t")
81 tok = l.split("\t")
68 hgdate = tuple(int(v) for v in tok[0].split())
82 hgdate = tuple(int(v) for v in tok[0].split())
69 changelog.append((datestr(hgdate, "%F"), tok[1], hgdate, tok[2]))
83 changelog.append((datestr(hgdate, "%F"), tok[1], hgdate, tok[2]))
70 prevtitle = ""
84 prevtitle = ""
71 for l in sorted(changelog, reverse=True):
85 for l in sorted(changelog, reverse=True):
72 title = "* %s %s" % (datestr(l[2], "%a %b %d %Y"), l[1])
86 title = "* %s %s" % (datestr(l[2], "%a %b %d %Y"), l[1])
73 if prevtitle != title:
87 if prevtitle != title:
74 prevtitle = title
88 prevtitle = title
75 print
89 print
76 print title
90 print title
77 print "- %s" % l[3].strip()
91 print "- %s" % l[3].strip()
78 ' >> $rpmspec
92 ' >> $rpmspec
79
93
80 else
94 else
81
95
82 $HG log \
96 $HG log \
83 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' \
97 --template '{date|hgdate}\t{author}\t{desc|firstline}\n' \
84 .hgtags | python -c '
98 .hgtags | python -c '
85 import sys, time
99 import sys, time
86
100
87 def datestr(date, format):
101 def datestr(date, format):
88 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
102 return time.strftime(format, time.gmtime(float(date[0]) - date[1]))
89
103
90 for l in sys.stdin.readlines():
104 for l in sys.stdin.readlines():
91 tok = l.split("\t")
105 tok = l.split("\t")
92 hgdate = tuple(int(v) for v in tok[0].split())
106 hgdate = tuple(int(v) for v in tok[0].split())
93 print "* %s %s\n- %s" % (datestr(hgdate, "%a %b %d %Y"), tok[1], tok[2])
107 print "* %s %s\n- %s" % (datestr(hgdate, "%a %b %d %Y"), tok[1], tok[2])
94 ' >> $rpmspec
108 ' >> $rpmspec
95
109
96 fi
110 fi
97
111
98 rpmbuild --define "_topdir $rpmdir" -ba $rpmspec --clean
112 if [ "$BUILD" ]; then
99 if [ $? = 0 ]; then
113 rpmbuild --define "_topdir $rpmdir" -ba $rpmspec --clean
100 echo
114 if [ $? = 0 ]; then
101 echo "Packages are in $rpmdir:"
115 echo
102 ls -l $rpmdir/*RPMS/*
116 echo "Built packages for $version-$release:"
117 find $rpmdir/*RPMS/ -type f -newer $rpmspec
118 fi
119 else
120 echo "Prepared sources for $version-$release $rpmspec are in $rpmdir/SOURCES/ - use like:"
121 echo "rpmbuild --define '_topdir $rpmdir' -ba $rpmspec --clean"
103 fi
122 fi
General Comments 0
You need to be logged in to leave comments. Login now