Signed-off-by: Elie Tournier <elie.tournier@collabora.com> Reviewed-by: Gert Wollny <gert.wollny@collabora.com>macos/master
parent
70019da650
commit
10487d7851
@ -1,693 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
# |
|
||||||
# Creates and upload a git module tarball |
|
||||||
# |
|
||||||
# Note on portability: |
|
||||||
# This script is intended to run on any platform supported by X.Org. |
|
||||||
# Basically, it should be able to run in a Bourne shell. |
|
||||||
# |
|
||||||
# |
|
||||||
|
|
||||||
export LC_ALL=C |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: check_local_changes |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
check_local_changes() { |
|
||||||
git diff --quiet HEAD > /dev/null 2>&1 |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "" |
|
||||||
echo "Uncommitted changes found. Did you forget to commit? Aborting." |
|
||||||
echo "" |
|
||||||
echo "You can perform a 'git stash' to save your local changes and" |
|
||||||
echo "a 'git stash apply' to recover them after the tarball release." |
|
||||||
echo "Make sure to rebuild and run 'make distcheck' again." |
|
||||||
echo "" |
|
||||||
echo "Alternatively, you can clone the module in another directory" |
|
||||||
echo "and run ./configure. No need to build if testing was finished." |
|
||||||
echo "" |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
return 0 |
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: check_option_args |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
# perform sanity checks on cmdline args which require arguments |
|
||||||
# arguments: |
|
||||||
# $1 - the option being examined |
|
||||||
# $2 - the argument to the option |
|
||||||
# returns: |
|
||||||
# if it returns, everything is good |
|
||||||
# otherwise it exit's |
|
||||||
check_option_args() { |
|
||||||
option=$1 |
|
||||||
arg=$2 |
|
||||||
|
|
||||||
# check for an argument |
|
||||||
if [ x"$arg" = x ]; then |
|
||||||
echo "" |
|
||||||
echo "Error: the '$option' option is missing its required argument." |
|
||||||
echo "" |
|
||||||
usage |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# does the argument look like an option? |
|
||||||
echo $arg | $GREP "^-" > /dev/null |
|
||||||
if [ $? -eq 0 ]; then |
|
||||||
echo "" |
|
||||||
echo "Error: the argument '$arg' of option '$option' looks like an option itself." |
|
||||||
echo "" |
|
||||||
usage |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: check_modules_specification |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
check_modules_specification() { |
|
||||||
|
|
||||||
if [ x"$MODFILE" = x ]; then |
|
||||||
if [ x"${INPUT_MODULES}" = x ]; then |
|
||||||
echo "" |
|
||||||
echo "Error: no modules specified (blank command line)." |
|
||||||
usage |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
fi |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: generate_announce |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
generate_announce() |
|
||||||
{ |
|
||||||
cat <<RELEASE |
|
||||||
Subject: [ANNOUNCE] $pkg_name $pkg_version |
|
||||||
To: $list_to |
|
||||||
Cc: $list_cc |
|
||||||
|
|
||||||
`git log --no-merges "$tag_range" | git shortlog` |
|
||||||
|
|
||||||
git tag: $tag_name |
|
||||||
|
|
||||||
RELEASE |
|
||||||
|
|
||||||
for tarball in $tarbz2 $targz $tarxz; do |
|
||||||
cat <<RELEASE |
|
||||||
http://$host_current/$section_path/$tarball |
|
||||||
MD5: `$MD5SUM $tarball` |
|
||||||
SHA1: `$SHA1SUM $tarball` |
|
||||||
SHA256: `$SHA256SUM $tarball` |
|
||||||
PGP: http://${host_current}/${section_path}/${tarball}.sig |
|
||||||
|
|
||||||
RELEASE |
|
||||||
done |
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: read_modfile |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
# Read the module names from the file and set a variable to hold them |
|
||||||
# This will be the same interface as cmd line supplied modules |
|
||||||
# |
|
||||||
read_modfile() { |
|
||||||
|
|
||||||
if [ x"$MODFILE" != x ]; then |
|
||||||
# Make sure the file is sane |
|
||||||
if [ ! -r "$MODFILE" ]; then |
|
||||||
echo "Error: module file '$MODFILE' is not readable or does not exist." |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
# read from input file, skipping blank and comment lines |
|
||||||
while read line; do |
|
||||||
# skip blank lines |
|
||||||
if [ x"$line" = x ]; then |
|
||||||
continue |
|
||||||
fi |
|
||||||
# skip comment lines |
|
||||||
if echo "$line" | $GREP -q "^#" ; then |
|
||||||
continue; |
|
||||||
fi |
|
||||||
INPUT_MODULES="$INPUT_MODULES $line" |
|
||||||
done <"$MODFILE" |
|
||||||
fi |
|
||||||
return 0 |
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: print_epilog |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
print_epilog() { |
|
||||||
|
|
||||||
epilog="======== Successful Completion" |
|
||||||
if [ x"$NO_QUIT" != x ]; then |
|
||||||
if [ x"$failed_modules" != x ]; then |
|
||||||
epilog="======== Partial Completion" |
|
||||||
fi |
|
||||||
elif [ x"$failed_modules" != x ]; then |
|
||||||
epilog="======== Stopped on Error" |
|
||||||
fi |
|
||||||
|
|
||||||
echo "" |
|
||||||
echo "$epilog `date`" |
|
||||||
|
|
||||||
# Report about modules that failed for one reason or another |
|
||||||
if [ x"$failed_modules" != x ]; then |
|
||||||
echo " List of failed modules:" |
|
||||||
for mod in $failed_modules; do |
|
||||||
echo " $mod" |
|
||||||
done |
|
||||||
echo "========" |
|
||||||
echo "" |
|
||||||
fi |
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: process_modules |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
# Loop through each module to release |
|
||||||
# Exit on error if --no-quit was not specified |
|
||||||
# |
|
||||||
process_modules() { |
|
||||||
for MODULE_RPATH in ${INPUT_MODULES}; do |
|
||||||
if ! process_module ; then |
|
||||||
echo "Error: processing module \"$MODULE_RPATH\" failed." |
|
||||||
failed_modules="$failed_modules $MODULE_RPATH" |
|
||||||
if [ x"$NO_QUIT" = x ]; then |
|
||||||
print_epilog |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
fi |
|
||||||
done |
|
||||||
} |
|
||||||
|
|
||||||
# Function: sign_or_fail |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
# Sign the given file, if any |
|
||||||
# Output the name of the signature generated to stdout (all other output to |
|
||||||
# stderr) |
|
||||||
# Return 0 on success, 1 on fail |
|
||||||
# |
|
||||||
sign_or_fail() { |
|
||||||
if [ -n "$1" ]; then |
|
||||||
sig=$1.sig |
|
||||||
rm -f $sig |
|
||||||
$GPG -b $1 1>&2 |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: failed to sign $1." >&2 |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
echo $sig |
|
||||||
fi |
|
||||||
return 0 |
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: process_module |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Code 'return 0' on success to process the next module |
|
||||||
# Code 'return 1' on error to process next module if invoked with --no-quit |
|
||||||
# |
|
||||||
process_module() { |
|
||||||
|
|
||||||
top_src=`pwd` |
|
||||||
echo "" |
|
||||||
echo "======== Processing \"$top_src/$MODULE_RPATH\"" |
|
||||||
|
|
||||||
# This is the location where the script has been invoked |
|
||||||
if [ ! -d $MODULE_RPATH ] ; then |
|
||||||
echo "Error: $MODULE_RPATH cannot be found under $top_src." |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# Change directory to be in the git module |
|
||||||
cd $MODULE_RPATH |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: failed to cd to $MODULE_RPATH." |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# ----- Now in the git module *root* directory ----- # |
|
||||||
|
|
||||||
# Check that this is indeed a git module |
|
||||||
if [ ! -d .git ]; then |
|
||||||
echo "Error: there is no git module here: `pwd`" |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# Change directory to be in the git build directory (could be out-of-source) |
|
||||||
# More than one can be found when distcheck has run and failed |
|
||||||
configNum=`find . -name config.status -type f | wc -l | sed 's:^ *::'` |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: failed to locate config.status." |
|
||||||
echo "Has the module been configured?" |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
if [ x"$configNum" = x0 ]; then |
|
||||||
echo "Error: failed to locate config.status, has the module been configured?" |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
if [ x"$configNum" != x1 ]; then |
|
||||||
echo "Error: more than one config.status file was found," |
|
||||||
echo " clean-up previously failed attempts at distcheck" |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
status_file=`find . -name config.status -type f` |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: failed to locate config.status." |
|
||||||
echo "Has the module been configured?" |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
build_dir=`dirname $status_file` |
|
||||||
cd $build_dir |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: failed to cd to $MODULE_RPATH/$build_dir." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# ----- Now in the git module *build* directory ----- # |
|
||||||
|
|
||||||
# Check for uncommitted/queued changes. |
|
||||||
check_local_changes |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# Determine what is the current branch and the remote name |
|
||||||
current_branch=`git branch | $GREP "\*" | sed -e "s/\* //"` |
|
||||||
remote_name=`git config --get branch.$current_branch.remote` |
|
||||||
remote_branch=`git config --get branch.$current_branch.merge | cut -d'/' -f3,4` |
|
||||||
echo "Info: working off the \"$current_branch\" branch tracking the remote \"$remote_name/$remote_branch\"." |
|
||||||
|
|
||||||
# Run 'make dist/distcheck' to ensure the tarball matches the git module content |
|
||||||
# Important to run make dist/distcheck before looking in Makefile, may need to reconfigure |
|
||||||
echo "Info: running \"make $MAKE_DIST_CMD\" to create tarballs:" |
|
||||||
${MAKE} $MAKEFLAGS $MAKE_DIST_CMD > /dev/null |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: \"$MAKE $MAKEFLAGS $MAKE_DIST_CMD\" failed." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# Find out the tarname from the makefile |
|
||||||
pkg_name=`$GREP '^PACKAGE = ' Makefile | sed 's|PACKAGE = ||'` |
|
||||||
pkg_version=`$GREP '^VERSION = ' Makefile | sed 's|VERSION = ||'` |
|
||||||
tar_name="$pkg_name-$pkg_version" |
|
||||||
targz=$tar_name.tar.gz |
|
||||||
tarbz2=$tar_name.tar.bz2 |
|
||||||
tarxz=$tar_name.tar.xz |
|
||||||
|
|
||||||
[ -e $targz ] && ls -l $targz || unset targz |
|
||||||
[ -e $tarbz2 ] && ls -l $tarbz2 || unset tarbz2 |
|
||||||
[ -e $tarxz ] && ls -l $tarxz || unset tarxz |
|
||||||
|
|
||||||
if [ -z "$targz" -a -z "$tarbz2" -a -z "$tarxz" ]; then |
|
||||||
echo "Error: no compatible tarballs found." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# wayland/weston/libinput tag with the version number only |
|
||||||
tag_name="$tar_name" |
|
||||||
if [ x"$section" = xwayland ] || |
|
||||||
[ x"$section" = xweston ] || |
|
||||||
[ x"$section" = xlibinput ]; then |
|
||||||
tag_name="$pkg_version" |
|
||||||
fi |
|
||||||
|
|
||||||
# evemu tag with the version number prefixed by 'v' |
|
||||||
if [ x"$section" = xevemu ]; then |
|
||||||
tag_name="v$pkg_version" |
|
||||||
fi |
|
||||||
|
|
||||||
gpgsignerr=0 |
|
||||||
siggz="$(sign_or_fail ${targz})" |
|
||||||
gpgsignerr=$((${gpgsignerr} + $?)) |
|
||||||
sigbz2="$(sign_or_fail ${tarbz2})" |
|
||||||
gpgsignerr=$((${gpgsignerr} + $?)) |
|
||||||
sigxz="$(sign_or_fail ${tarxz})" |
|
||||||
gpgsignerr=$((${gpgsignerr} + $?)) |
|
||||||
if [ ${gpgsignerr} -ne 0 ]; then |
|
||||||
echo "Error: unable to sign at least one of the tarballs." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# Obtain the top commit SHA which should be the version bump |
|
||||||
# It should not have been tagged yet (the script will do it later) |
|
||||||
local_top_commit_sha=`git rev-list --max-count=1 HEAD` |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: unable to obtain the local top commit id." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# Check that the top commit looks like a version bump |
|
||||||
git diff --unified=0 HEAD^ | $GREP -F $pkg_version >/dev/null 2>&1 |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
# Wayland repos use m4_define([wayland_major_version], [0]) |
|
||||||
git diff --unified=0 HEAD^ | $GREP -E "(major|minor|micro)_version" >/dev/null 2>&1 |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: the local top commit does not look like a version bump." |
|
||||||
echo " the diff does not contain the string \"$pkg_version\"." |
|
||||||
local_top_commit_descr=`git log --oneline --max-count=1 $local_top_commit_sha` |
|
||||||
echo " the local top commit is: \"$local_top_commit_descr\"" |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
fi |
|
||||||
|
|
||||||
# Check that the top commit has been pushed to remote |
|
||||||
remote_top_commit_sha=`git rev-list --max-count=1 $remote_name/$remote_branch` |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: unable to obtain top commit from the remote repository." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
if [ x"$remote_top_commit_sha" != x"$local_top_commit_sha" ]; then |
|
||||||
echo "Error: the local top commit has not been pushed to the remote." |
|
||||||
local_top_commit_descr=`git log --oneline --max-count=1 $local_top_commit_sha` |
|
||||||
echo " the local top commit is: \"$local_top_commit_descr\"" |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# If a tag exists with the the tar name, ensure it is tagging the top commit |
|
||||||
# It may happen if the version set in configure.ac has been previously released |
|
||||||
tagged_commit_sha=`git rev-list --max-count=1 $tag_name 2>/dev/null` |
|
||||||
if [ $? -eq 0 ]; then |
|
||||||
# Check if the tag is pointing to the top commit |
|
||||||
if [ x"$tagged_commit_sha" != x"$remote_top_commit_sha" ]; then |
|
||||||
echo "Error: the \"$tag_name\" already exists." |
|
||||||
echo " this tag is not tagging the top commit." |
|
||||||
remote_top_commit_descr=`git log --oneline --max-count=1 $remote_top_commit_sha` |
|
||||||
echo " the top commit is: \"$remote_top_commit_descr\"" |
|
||||||
local_tag_commit_descr=`git log --oneline --max-count=1 $tagged_commit_sha` |
|
||||||
echo " tag \"$tag_name\" is tagging some other commit: \"$local_tag_commit_descr\"" |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
else |
|
||||||
echo "Info: module already tagged with \"$tag_name\"." |
|
||||||
fi |
|
||||||
else |
|
||||||
# Tag the top commit with the tar name |
|
||||||
if [ x"$DRY_RUN" = x ]; then |
|
||||||
git tag -s -m $tag_name $tag_name |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: unable to tag module with \"$tag_name\"." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
else |
|
||||||
echo "Info: module tagged with \"$tag_name\"." |
|
||||||
fi |
|
||||||
else |
|
||||||
echo "Info: skipping the commit tagging in dry-run mode." |
|
||||||
fi |
|
||||||
fi |
|
||||||
|
|
||||||
# --------- Now the tarballs are ready to upload ---------- |
|
||||||
|
|
||||||
# The hostname which is used to connect to the development resources |
|
||||||
hostname="annarchy.freedesktop.org" |
|
||||||
|
|
||||||
# Some hostnames are also used as /srv subdirs |
|
||||||
host_fdo="www.freedesktop.org" |
|
||||||
|
|
||||||
list_to="virglrenderer-devel@lists.freedesktop.org" |
|
||||||
|
|
||||||
host_current=$host_fdo |
|
||||||
section_path=software/virgl |
|
||||||
srv_path="/srv/$host_current/www/$section_path" |
|
||||||
|
|
||||||
# Use personal web space on the host for unit testing (leave commented out) |
|
||||||
# srv_path="~/public_html$srv_path" |
|
||||||
|
|
||||||
# Check that the server path actually does exist |
|
||||||
ssh $USER_NAME$hostname ls $srv_path >/dev/null 2>&1 || |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: the path \"$srv_path\" on the web server does not exist." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
|
|
||||||
# Check for already existing tarballs |
|
||||||
for tarball in $targz $tarbz2 $tarxz; do |
|
||||||
ssh $USER_NAME$hostname ls $srv_path/$tarball >/dev/null 2>&1 |
|
||||||
if [ $? -eq 0 ]; then |
|
||||||
if [ "x$FORCE" = "xyes" ]; then |
|
||||||
echo "Warning: overwriting released tarballs due to --force option." |
|
||||||
else |
|
||||||
echo "Error: tarball $tar_name already exists. Use --force to overwrite." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
fi |
|
||||||
done |
|
||||||
|
|
||||||
# Upload to host using the 'scp' remote file copy program |
|
||||||
if [ x"$DRY_RUN" = x ]; then |
|
||||||
echo "Info: uploading tarballs to web server:" |
|
||||||
scp $targz $tarbz2 $tarxz $siggz $sigbz2 $sigxz $USER_NAME$hostname:$srv_path |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: the tarballs uploading failed." |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
else |
|
||||||
echo "Info: skipping tarballs uploading in dry-run mode." |
|
||||||
echo " \"$srv_path\"." |
|
||||||
fi |
|
||||||
|
|
||||||
# Pushing the top commit tag to the remote repository |
|
||||||
if [ x$DRY_RUN = x ]; then |
|
||||||
echo "Info: pushing tag \"$tag_name\" to remote \"$remote_name\":" |
|
||||||
git push $remote_name $tag_name |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Error: unable to push tag \"$tag_name\" to the remote repository." |
|
||||||
echo " it is recommended you fix this manually and not run the script again" |
|
||||||
cd $top_src |
|
||||||
return 1 |
|
||||||
fi |
|
||||||
else |
|
||||||
echo "Info: skipped pushing tag \"$tag_name\" to the remote repository in dry-run mode." |
|
||||||
fi |
|
||||||
|
|
||||||
MD5SUM=`which md5sum || which gmd5sum` |
|
||||||
SHA1SUM=`which sha1sum || which gsha1sum` |
|
||||||
SHA256SUM=`which sha256sum || which gsha256sum` |
|
||||||
|
|
||||||
# --------- Generate the announce e-mail ------------------ |
|
||||||
# Failing to generate the announce is not considered a fatal error |
|
||||||
|
|
||||||
# Git-describe returns only "the most recent tag", it may not be the expected one |
|
||||||
# However, we only use it for the commit history which will be the same anyway. |
|
||||||
tag_previous=`git describe --abbrev=0 HEAD^ 2>/dev/null` |
|
||||||
# Git fails with rc=128 if no tags can be found prior to HEAD^ |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
if [ $? -ne 0 ]; then |
|
||||||
echo "Warning: unable to find a previous tag." |
|
||||||
echo " perhaps a first release on this branch." |
|
||||||
echo " Please check the commit history in the announce." |
|
||||||
fi |
|
||||||
fi |
|
||||||
if [ x"$tag_previous" != x ]; then |
|
||||||
# The top commit may not have been tagged in dry-run mode. Use commit. |
|
||||||
tag_range=$tag_previous..$local_top_commit_sha |
|
||||||
else |
|
||||||
tag_range=$tag_name |
|
||||||
fi |
|
||||||
generate_announce > "$tar_name.announce" |
|
||||||
echo "Info: [ANNOUNCE] template generated in \"$tar_name.announce\" file." |
|
||||||
echo " Please pgp sign and send it." |
|
||||||
|
|
||||||
# --------- Update the JH Build moduleset ----------------- |
|
||||||
# Failing to update the jh moduleset is not considered a fatal error |
|
||||||
if [ x"$JH_MODULESET" != x ]; then |
|
||||||
for tarball in $targz $tarbz2 $tarxz; do |
|
||||||
if [ x$DRY_RUN = x ]; then |
|
||||||
sha1sum=`$SHA1SUM $tarball | cut -d' ' -f1` |
|
||||||
$top_src/util/modular/update-moduleset.sh $JH_MODULESET $sha1sum $tarball |
|
||||||
echo "Info: updated jh moduleset: \"$JH_MODULESET\"" |
|
||||||
else |
|
||||||
echo "Info: skipping jh moduleset \"$JH_MODULESET\" update in dry-run mode." |
|
||||||
fi |
|
||||||
|
|
||||||
# $tar* may be unset, so simply loop through all of them and the |
|
||||||
# first one that is set updates the module file |
|
||||||
break |
|
||||||
done |
|
||||||
fi |
|
||||||
|
|
||||||
|
|
||||||
# --------- Successful completion -------------------------- |
|
||||||
cd $top_src |
|
||||||
return 0 |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Function: usage |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Displays the script usage and exits successfully |
|
||||||
# |
|
||||||
usage() { |
|
||||||
basename="`expr "//$0" : '.*/\([^/]*\)'`" |
|
||||||
cat <<HELP |
|
||||||
|
|
||||||
Usage: $basename [options] path... |
|
||||||
|
|
||||||
Where "path" is a relative path to a git module, including '.'. |
|
||||||
|
|
||||||
Options: |
|
||||||
--dist make 'dist' instead of 'distcheck'; use with caution |
|
||||||
--distcheck Default, ignored for compatibility |
|
||||||
--dry-run Does everything except tagging and uploading tarballs |
|
||||||
--force Force overwriting an existing release |
|
||||||
--help Display this help and exit successfully |
|
||||||
--modfile <file> Release the git modules specified in <file> |
|
||||||
--moduleset <file> The jhbuild moduleset full pathname to be updated |
|
||||||
--no-quit Do not quit after error; just print error message |
|
||||||
--user <name>@ Username of your fdo account if not configured in ssh |
|
||||||
|
|
||||||
Environment variables defined by the "make" program and used by release.sh: |
|
||||||
MAKE The name of the make command [make] |
|
||||||
MAKEFLAGS: Options to pass to all \$(MAKE) invocations |
|
||||||
|
|
||||||
HELP |
|
||||||
} |
|
||||||
|
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# Script main line |
|
||||||
#------------------------------------------------------------------------------ |
|
||||||
# |
|
||||||
|
|
||||||
# Choose which make program to use (could be gmake) |
|
||||||
MAKE=${MAKE:="make"} |
|
||||||
|
|
||||||
# Choose which grep program to use (on Solaris, must be gnu grep) |
|
||||||
if [ "x$GREP" = "x" ] ; then |
|
||||||
if [ -x /usr/gnu/bin/grep ] ; then |
|
||||||
GREP=/usr/gnu/bin/grep |
|
||||||
else |
|
||||||
GREP=grep |
|
||||||
fi |
|
||||||
fi |
|
||||||
|
|
||||||
# Find path for GnuPG v2 |
|
||||||
if [ "x$GPG" = "x" ] ; then |
|
||||||
if [ -x /usr/bin/gpg2 ] ; then |
|
||||||
GPG=/usr/bin/gpg2 |
|
||||||
else |
|
||||||
GPG=gpg |
|
||||||
fi |
|
||||||
fi |
|
||||||
|
|
||||||
# Set the default make tarball creation command |
|
||||||
MAKE_DIST_CMD=distcheck |
|
||||||
|
|
||||||
# Process command line args |
|
||||||
while [ $# != 0 ] |
|
||||||
do |
|
||||||
case $1 in |
|
||||||
# Use 'dist' rather than 'distcheck' to create tarballs |
|
||||||
# You really only want to do this if you're releasing a module you can't |
|
||||||
# possibly build-test. Please consider carefully the wisdom of doing so. |
|
||||||
--dist) |
|
||||||
MAKE_DIST_CMD=dist |
|
||||||
;; |
|
||||||
# Use 'distcheck' to create tarballs |
|
||||||
--distcheck) |
|
||||||
MAKE_DIST_CMD=distcheck |
|
||||||
;; |
|
||||||
# Does everything except uploading tarball |
|
||||||
--dry-run) |
|
||||||
DRY_RUN=yes |
|
||||||
;; |
|
||||||
# Force overwriting an existing release |
|
||||||
# Use only if nothing changed in the git repo |
|
||||||
--force) |
|
||||||
FORCE=yes |
|
||||||
;; |
|
||||||
# Display this help and exit successfully |
|
||||||
--help) |
|
||||||
usage |
|
||||||
exit 0 |
|
||||||
;; |
|
||||||
# Release the git modules specified in <file> |
|
||||||
--modfile) |
|
||||||
check_option_args $1 $2 |
|
||||||
shift |
|
||||||
MODFILE=$1 |
|
||||||
;; |
|
||||||
# The jhbuild moduleset to update with relase info |
|
||||||
--moduleset) |
|
||||||
check_option_args $1 $2 |
|
||||||
shift |
|
||||||
JH_MODULESET=$1 |
|
||||||
;; |
|
||||||
# Do not quit after error; just print error message |
|
||||||
--no-quit) |
|
||||||
NO_QUIT=yes |
|
||||||
;; |
|
||||||
# Username of your fdo account if not configured in ssh |
|
||||||
--user) |
|
||||||
check_option_args $1 $2 |
|
||||||
shift |
|
||||||
USER_NAME=$1 |
|
||||||
;; |
|
||||||
--*) |
|
||||||
echo "" |
|
||||||
echo "Error: unknown option: $1" |
|
||||||
echo "" |
|
||||||
usage |
|
||||||
exit 1 |
|
||||||
;; |
|
||||||
-*) |
|
||||||
echo "" |
|
||||||
echo "Error: unknown option: $1" |
|
||||||
echo "" |
|
||||||
usage |
|
||||||
exit 1 |
|
||||||
;; |
|
||||||
*) |
|
||||||
if [ x"${MODFILE}" != x ]; then |
|
||||||
echo "" |
|
||||||
echo "Error: specifying both modules and --modfile is not permitted" |
|
||||||
echo "" |
|
||||||
usage |
|
||||||
exit 1 |
|
||||||
fi |
|
||||||
INPUT_MODULES="${INPUT_MODULES} $1" |
|
||||||
;; |
|
||||||
esac |
|
||||||
|
|
||||||
shift |
|
||||||
done |
|
||||||
|
|
||||||
# If no modules specified (blank cmd line) display help |
|
||||||
check_modules_specification |
|
||||||
|
|
||||||
# Read the module file and normalize input in INPUT_MODULES |
|
||||||
read_modfile |
|
||||||
|
|
||||||
# Loop through each module to release |
|
||||||
# Exit on error if --no-quit no specified |
|
||||||
process_modules |
|
||||||
|
|
||||||
# Print the epilog with final status |
|
||||||
print_epilog |
|
Loading…
Reference in new issue