summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xrelease-scripts/create-tarball312
1 files changed, 218 insertions, 94 deletions
diff --git a/release-scripts/create-tarball b/release-scripts/create-tarball
index a689e693afb..3463f012a5b 100755
--- a/release-scripts/create-tarball
+++ b/release-scripts/create-tarball
@@ -1,98 +1,222 @@
#!/bin/bash
+## option defaults
+OPT_BRANCH=""
+OPT_DOCSDIR=""
+OPT_TAG=""
+OPT_KEYID=""
+
TOPDIR="`dirname $0`/.."
+VER_H="${TOPDIR}/source/include/version.h"
+
+function exitOnError
+{
+ local _error="$1"
+ local _msg="$2"
+
+ if [ ${_error} -eq 0 ]; then
+ return 0
+ fi
+
+ echo "FAILURE: ${_msg}"
+ exit ${_error}
+}
+
+##
+## Print help usage
+##
+
+function printUsage
+{
+ echo "Usage $0 [options]"
+ echo " --help Print command usage"
+ echo " --branch <name> Specify the branch to to create the archive file from"
+ echo " --copy-docs <dir> Copy documentation from <dir> rather than building"
+ echo " --tag <name> Tag name for release"
+ echo " --keyid <email> The GnuPG key ID used to sign the release tag"
+ echo ""
+}
+
+##
+## Parse the command line options
+##
+
+function parseOptions
+{
+ while [ -n "$1" ]; do
+ case "$1" in
+ --help)
+ printUsage
+ exit 0
+ ;;
+ --branch)
+ shift
+ if [ -z "$1" ]; then
+ printUsage
+ return 1
+ fi
+ OPT_BRANCH="$1"
+ shift
+ ;;
+ --copy-docs)
+ shift
+ if [ -z "$1" ]; then
+ printUsage
+ return 1
+ fi
+ OPT_DOCSDIR="$1"
+ shift
+ ;;
+ --tag)
+ shift
+ if [ -z "$1" ]; then
+ printUsage
+ return 1
+ fi
+ OPT_TAG="$1"
+ shift
+ ;;
+ --keyid)
+ shift
+ if [ -z "$1" ]; then
+ printUsage
+ return 1
+ fi
+ OPT_KEYID="$1"
+ shift
+ ;;
+ *)
+ printUsage
+ return 1
+ ;;
+ esac
+ done
+
+ if [ -z "${OPT_BRANCH}" ]; then
+ echo "You must specify a branch name!"
+ printUsage
+ return 1
+ fi
+}
+
+##
+## Build the dopcumentation (may be a no-op)
+##
+
+function buildDocs
+{
+ if [ -n "${OPT_DOCSDIR}" ]; then
+ if [ ! -d "${OPT_DOCSDIR}" ]; then
+ exitOnError 1 "${OPT_DOCSDIR} does not exist. Please specify the absolute path."
+ fi
+
+ mkdir docs
+ exitOnError $? "Failed to create docs directory"
+
+ rsync -av "${OPT_DOCSDIR}"/ docs/
+ exitOnError $? "Failed top copy docs from ${OPT_DOCSDIR}"
+
+ return 0
+ fi
+
+ echo "Building documentation. This may take a while. Log file in /tmp/docs-build.log.$$"
+
+ ${TOPDIR}/release-scripts/build-docs 2> /tmp/docs-build.log.$$
+ return $?
+
+}
+
+
+##
+## Create a release tag
+##
+function createReleaseTag
+{
+ if [ -z "${OPT_TAG}" ]; then
+ echo "Tagging disabled"
+ return 0
+ fi
+
+ if [ "x`git-tag -l ${OPT_TAG}`" != "x" ]; then
+ echo -n "Tag exists. Do you wish to overwrite? (y/N): "
+ read answer
+
+ if [ "x$answer" != "xy" ]; then
+ echo "Tag creation aborted."
+ exit 1
+ fi
+ fi
+
+ if [ -z "${OPT_KEYID}" ]; then
+ echo -n "Enter the keyid:"
+ read OPT_KEYID
+ if [ -z "${OPT_KEYID}" ]; then
+ exitOnError 1 "No keyid specified"
+ fi
+ fi
+
+ git-tag -u ${OPT_KEYID} ${OPT_TAG}
+ exitOnError $? "Failed to create tag"
+
+ return 0
+}
+##
+## Main driver
+##
+function main
+{
+ parseOptions "$@"
+ exitOnError $? "Failed to parse options"
+
+ cd $TOPDIR
+
+ git-checkout ${OPT_BRANCH}
+ exitOnError $? "Invalid branch name \"${OPT_BRANCH}\""
+
+ (cd source && ./script/mkversion.sh)
+ if [ ! -f $VER_H ]; then
+ exitOnError 1 "Failed to find ${VER_H}!"
+ fi
+
+ version=`grep SAMBA_VERSION_OFFICIAL_STRING $VER_H | awk '{print $3}'`
+ vendor_version=`grep SAMBA_VERSION_VENDOR_SUFFIX $VER_H | awk '{print $3}'`
+ if [ -n "$vendor_version" ]; then
+ version="$version-$vendor_version"
+ fi
+ version=`echo $version | sed 's/\"//g'`
+
+ echo "Creating release tarball for Samba $version"
+
+ /bin/rm -rf ../samba-${version}
+ git-archive --format=tar --prefix=samba-${version}/ HEAD | (cd .. && tar xf -)
+ exitOnError $? "Failed to create release directory tree"
+
+ pushd ../samba-${version}
+
+ packaging/bin/update-pkginfo ${version} 1 ""
+
+ buildDocs
+ exitOnError $? "Failed to build documentation"
+
+ ( cd source && ./autogen.sh )
+
+ cd ..
+ tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version}
+ exitOnError $? "Failed to create tarball from git tree"
+
+ gpg --detach-sign --armor samba-${version}.tar
+ ## exitOnError $? "Failed to sign tarball"
+
+ gzip -9 samba-${version}.tar
+ exitOnError $? "Failed to compress archive"
+
+ popd
+
+ createReleaseTag
+ exitOnError $? "Failed to create release tag"
+
+ return 0
+}
-cd $TOPDIR
-
-echo -n "Please enter branch to cut tarball from: "
-read branch
-
-if [ "x$branch" = "x" ]; then
- echo "You must enter a name! Exiting...."
- exit 1
-fi
-
-git-checkout $branch
-if [ $? -ne 0 ]; then
- echo "Invalid branch name! Exiting...."
- exit 2
-fi
-
-VER_H=source/include/version.h
-(cd source && ./script/mkversion.sh)
-
-if [ ! -f $VER_H ]; then
- echo "Failed to find $VER_H! Exiting...."
- exit 1
-fi
-
-version=`grep SAMBA_VERSION_OFFICIAL_STRING $VER_H | awk '{print $3}'`
-vendor_version=`grep SAMBA_VERSION_VENDOR_SUFFIX $VER_H | awk '{print $3}'`
-if [ -n "$vendor_version" ]; then
- version="$version-$vendor_version"
-fi
-version=`echo $version | sed 's/\"//g'`
-
-echo "Creating release tarball for Samba $version"
-
-/bin/rm -rf ../samba-${version}
-git-archive --format=tar --prefix=samba-${version}/ HEAD | (cd .. && tar xf -)
-
-pushd ../samba-${version}
-
-echo "Enter the absolute path to the generated Samba docs directory."
-echo -n "Just hit return to exclude the docs from the generate tarball: "
-read docsdir
-
-if [ "x$docsdir" != "x" ]; then
- if [ ! -d "$docsdir" ]; then
- echo "$docsdir does not exist! Exiting...."
- exit 1
- fi
-
- /bin/rm -rf docs
- mkdir docs
- rsync -a --exclude=.svn $docsdir/ docs/
-
- cd docs
- /bin/rm -rf test.pdf Samba4*pdf htmldocs/Samba4* htmldocs/test
- /bin/mv manpages-3 manpages
- /bin/mv htmldocs/manpages-3 htmldocs/manpages
- cd ..
-fi
-
-cd source
-./autogen.sh
-cd ..
-
-cd ..
-tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version}
-gpg --detach-sign --armor samba-${version}.tar
-gzip -9 samba-${version}.tar
-
-popd
-echo -n "Enter tag name (or hit <enter> to skip): "
-read tagname
-
-if [ "x$tagname" != "x" ]; then
- if [ "x`git-tag -l $tagname`" != "x" ]; then
- echo -n "Tag exists. Do you wish to overwrite? (y/N): "
- read answer
-
- if [ "x$answer" != "xy" ]; then
- echo "Tag creation aborted."
- exit 1
- fi
- fi
-
- echo -n "Enter the keyid:"
- read keyid
- if [ x"$keyid" = x"" ];then
- echo "no keyid"
- exit 1
- fi
- git-tag -u $keyid ${tagname}
-fi
-
-echo "Done!"
-exit 0
+main "$@"
+exit $?