create-tarball: Make it more comfortable to use the --copy-docs option.
[Samba/gebeck_regimport.git] / release-scripts / create-tarball
blob9e6b8fe0ff5d4f2f805c071db22599b88b57f59b
1 #!/bin/bash
3 ## option defaults
4 OPT_BRANCH=""
5 OPT_DOCSDIR=""
6 OPT_TAG=""
7 OPT_KEYID=""
9 TOPDIR="`dirname $0`/.."
10 VER_H="${TOPDIR}/source3/include/version.h"
12 function exitOnError
14 local _error="$1"
15 local _msg="$2"
17 if [ ${_error} -eq 0 ]; then
18 return 0
21 echo "FAILURE: ${_msg}"
22 exit ${_error}
26 ## Print help usage
29 function printUsage
31 echo "Usage $0 [options]"
32 echo " --help Print command usage"
33 echo " --branch <name> Specify the branch to to create the archive file from"
34 echo " --copy-docs <dir> Copy documentation from <dir> rather than building"
35 echo " --tag <name> Tag name for release"
36 echo " --keyid <email> The GnuPG key ID used to sign the release tag"
37 echo ""
41 ## Parse the command line options
44 function parseOptions
46 while [ -n "$1" ]; do
47 case "$1" in
48 --help)
49 printUsage
50 exit 0
52 --branch)
53 shift
54 if [ -z "$1" ]; then
55 printUsage
56 return 1
58 OPT_BRANCH="$1"
59 shift
61 --copy-docs)
62 shift
63 if [ -z "$1" ]; then
64 printUsage
65 return 1
67 OPT_DOCSDIR="$1"
68 shift
70 --tag)
71 shift
72 if [ -z "$1" ]; then
73 printUsage
74 return 1
76 OPT_TAG="$1"
77 shift
79 --keyid)
80 shift
81 if [ -z "$1" ]; then
82 printUsage
83 return 1
85 OPT_KEYID="$1"
86 shift
89 printUsage
90 return 1
92 esac
93 done
95 if [ -z "${OPT_BRANCH}" ]; then
96 echo "You must specify a branch name!"
97 printUsage
98 return 1
103 ## Build the dopcumentation (may be a no-op)
106 function buildDocs
108 if [ -n "${OPT_DOCSDIR}" ]; then
109 if [ ! -d "${OPT_DOCSDIR}" ]; then
110 exitOnError 1 "${OPT_DOCSDIR} does not exist. Please specify the absolute path."
113 mkdir docs
114 exitOnError $? "Failed to create docs directory"
116 rsync -av "${OPT_DOCSDIR}"/ docs/
117 exitOnError $? "Failed top copy docs from ${OPT_DOCSDIR}"
119 cd docs/
120 /bin/rm -rf test.pdf Samba4*pdf htmldocs/Samba4* htmldocs/test
121 if [ -d manpages-3 ]; then
122 mv manpages-3 manpages
124 if [ -d htmldocs/manpages-3 ]; then
125 mv htmldocs/manpages-3 htmldocs/manpages
127 # Sync thanks, history and registry/ into the docs dir
128 rsync -Ca --exclude=.svn ../../$OPT_BRANCH/docs-xml/registry ../docs/
129 rsync -Ca --exclude=.svn ../../$OPT_BRANCH/docs-xml/archives/ ../docs/
130 cd ../
132 return 0
135 echo "Building documentation. This may take a while. Log file in /tmp/docs-build.log.$$"
137 ${TOPDIR}/release-scripts/build-docs 2> /tmp/docs-build.log.$$
138 return $?
144 ## Create a release tag
146 function createReleaseTag
148 if [ -z "${OPT_TAG}" ]; then
149 echo "Tagging disabled"
150 return 0
153 if [ "x`git tag -l ${OPT_TAG}`" != "x" ]; then
154 echo -n "Tag exists. Do you wish to overwrite? (y/N): "
155 read answer
157 if [ "x$answer" != "xy" ]; then
158 echo "Tag creation aborted."
159 exit 1
163 if [ -z "${OPT_KEYID}" ]; then
164 echo -n "Enter the keyid:"
165 read OPT_KEYID
166 if [ -z "${OPT_KEYID}" ]; then
167 exitOnError 1 "No keyid specified"
171 git tag -u ${OPT_KEYID} ${OPT_TAG}
172 exitOnError $? "Failed to create tag"
174 return 0
177 ## Main driver
179 function main
181 parseOptions "$@"
182 exitOnError $? "Failed to parse options"
184 cd $TOPDIR
186 git checkout ${OPT_BRANCH}
187 exitOnError $? "Invalid branch name \"${OPT_BRANCH}\""
189 (cd source3 && ./script/mkversion.sh)
190 if [ ! -f $VER_H ]; then
191 exitOnError 1 "Failed to find ${VER_H}!"
194 version=`grep "define SAMBA_VERSION_OFFICIAL_STRING" $VER_H | awk '{print $3}'`
195 vendor_version=`grep "define SAMBA_VERSION_VENDOR_SUFFIX" $VER_H | awk '{print $3}'`
196 if [ -n "$vendor_version" ]; then
197 version="$version-$vendor_version"
199 vendor_patch=`grep "define SAMBA_VERSION_VENDOR_PATCH" $VER_H | awk '{print $3}'`
200 if [ -n "$vendor_patch" ]; then
201 version="$version-$vendor_patch"
203 version=`echo $version | sed 's/\"//g'`
205 echo "Creating release tarball for Samba $version"
207 /bin/rm -rf ../samba-${version}
208 git archive --format=tar --prefix=samba-${version}/ HEAD | (cd .. && tar xf -)
209 exitOnError $? "Failed to create release directory tree"
211 pushd ../samba-${version}
213 # Remove RFCs as they are non-free content (with a strict interpretation of
214 # the DFSG)
216 if [ -d source4 ]; then
217 echo "Removing RFCs"
218 find source4/ -name "rfc*.txt" -exec rm -f {} \;
219 rm -f source4/ldap_server/devdocs/draft-armijo-ldap-syntax-00.txt
220 rm -f source4/ldap_server/devdocs/ldapext-ldapv3-vlv-04.txt
223 packaging/bin/update-pkginfo ${version} 1 ""
225 buildDocs
226 exitOnError $? "Failed to build documentation"
228 ( cd source3 && ./autogen.sh )
230 cd ..
231 tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version}
232 exitOnError $? "Failed to create tarball from git tree"
234 gpg --detach-sign --armor samba-${version}.tar
235 ## exitOnError $? "Failed to sign tarball"
237 gzip -9 samba-${version}.tar
238 exitOnError $? "Failed to compress archive"
240 popd
242 createReleaseTag
243 exitOnError $? "Failed to create release tag"
245 return 0
248 main "$@"
249 exit $?