1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00
elinks/contrib/mkdist
Kalle Olavi Niemitalo 9b7de0a039 mkdist: create git-commit-id instead of .git/HEAD
.git/HEAD in elinks-0.12pre1.tar.gz broke git-import-orig in Debian's
git-buildpackage 0.4.33:

$ git init
Initialized empty Git repository in .git/
$ git-import-orig ~/src/elinks-seek/elinks-0.12pre1.tar.gz
Upstream version is 0.12pre1
Initial import of '/home/Kalle/src/elinks-seek/elinks-0.12pre1.tar.gz' ...
fatal: bad object HEAD
Traceback (most recent call last):
  File "/usr/bin/git-import-orig", line 243, in <module>
    sys.exit(main(sys.argv))
  File "/usr/bin/git-import-orig", line 201, in main
    import_upstream_tree(repo, orig_dir, version, options.filters, verbose=not is_empty)
  File "/usr/bin/git-import-orig", line 65, in import_upstream_tree
    if replace_source_tree(repo, src_dir, filters, verbose=True):
  File "/var/lib/python-support/python2.5/gbp/git_utils.py", line 145, in replace_source_tree
    return not repo.is_clean()[0]
  File "/var/lib/python-support/python2.5/gbp/git_utils.py", line 78, in is_clean
    if out[0].startswith('#') and out[1].strip().startswith(clean_msg):
IndexError: list index out of range

So let's try with a "git-commit-id" file outside of .git/ instead.
I also considered ".git-commit-id" but that could give the impression
that Git itself reads the file for some purpose.
2008-07-01 02:50:27 +03:00

153 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
#
# This script can be used by a cron to generate snapshots.
# For example, use:
# 35 0 * * * mkdist -r elinks-0.11 -l 0.11 -s >>mkdist.log 2>&1
# 40 0 * * * mkdist -r HEAD -l 0.12 -s >>mkdist.log 2>&1
#
# Options:
# -g GIT_DIR Git repository from which this script exports ELinks.
# May be given in the environment instead.
# -r REVISION Git revision to be exported from the repository.
# -l LABEL User-friendly name of the branch or release.
# This ends up in the name of the tar file, and in the
# name of the directory it contains.
# -s Generate a snapshot (which has a date in the top-level
# directory).
# -d DOCDIR Copy prebuilt documentation from DOCDIR.
# -o OUTDIR Place the output files in OUTDIR. Defaults to the
# current directory.
# set -x
cat <<EOF
-------------------------------------------------
Date: $(date)
Args: $*
-------------------------------------------------
EOF
# Variables used in this script:
# $GIT_DIR = option -g GIT_DIR; passed in environment to Git
# $OPTARG = Bash special: argument of the option being parsed
# $OPTIND = Bash special: index of argument to be parsed next
# $commit = commit ID corresponding to $rev
# $docdir = option -d DOCDIR
# $label = option -l LABEL
# $opt = option letter being parsed, or '?' on error
# $outdir = option -o OUTDIR
# $rev = option -r REVISION
# $snap = option -s
# $tarbasename = name of the tar file without .tar.* extensions
# $tartopdir = name of the top directory within the tar file
# $tmpdir = temporary directory created by this script
rev=
label=
snap=
docdir=
outdir=.
while getopts "g:r:l:sd:o:" opt
do
case "$opt" in
(g) GIT_DIR=$OPTARG ;;
(r) rev=$OPTARG ;;
(l) label=$OPTARG ;;
(s) snap=1 ;;
(d) docdir=$OPTARG ;;
(o) outdir=$OPTARG ;;
("?") exit 1 ;;
(*) printf >&2 "%s:%d: bug found\n" "$0" "$LINENO"
exit 1 ;;
esac
done
if [ $OPTIND -le $# ]
then
printf >&2 "%s: too many non-option arguments\n" "$0"
exit 1
fi
if [ -z "$GIT_DIR" ]
then
printf >&2 "%s: Must specify -g GIT_DIR option\n" "$0"
exit 1
fi
if [ -z "$outdir" ]
then
printf >&2 "%s: Must specify -o OUTDIR option\n" "$0"
exit 1
fi
if [ -z "$rev" ]
then
printf >&2 "%s: Must specify -r REVISION option\n" "$0"
exit 1
fi
if [ -z "$label" ]
then
label=$rev
fi
commit=$(git --git-dir="$GIT_DIR" rev-parse --verify "$rev^{commit}") || exit 1
if [ "$snap" ]
then
tartopdir=elinks-$label-$(date +%Y%m%d)
tarbasename=elinks-current-$label
else
tartopdir=elinks-$label
tarbasename=elinks-$label
fi
tmpdir=$(mktemp -d -t elinks-dist-XXXXXXXX) || exit 1
# To make it easier to compare build logs, put the source first in an
# "elinks" directory, and only move to "$tartopdir" when finished.
git --git-dir="$GIT_DIR" archive --format=tar --prefix="elinks/" "$rev" |
(cd -- "$tmpdir" && tar -xf -)
mkdir -- "$tmpdir/elinks/.git"
printf "%s\n" "$commit" > "$tmpdir/elinks/git-commit-id"
(set -e
cd -- "$tmpdir/elinks"
./autogen.sh
mkdir build
cd build
# Enable lots of features so that their options will appear in elinks
# --config-help and doc/html/elinks.conf.5.html.
../configure --enable-bittorrent --enable-cgi --enable-fsp --enable-nntp
make -C po
mv po/*.gmo ../po/
mv contrib/elinks.spec ../contrib/
) || exit 1
if [ -n "$docdir" ]; then
mkdir -- "$tmpdir/elinks/doc/html"
cp -r -- "$docdir"/*.html* "$tmpdir/elinks/doc/html/"
# mkdir doc/pdf
# cp "$docdir"/*.pdf doc/pdf
else
make -C "$tmpdir/elinks/build"
make -C "$tmpdir/elinks/build/doc" html
mkdir -- "$tmpdir/elinks/doc/html"
mv -- "$tmpdir/elinks/build/doc"/*.html* "$tmpdir/elinks/doc/html/"
fi
rm -rf -- "$tmpdir/elinks/build"
mv -- "$tmpdir/elinks" "$tmpdir/$tartopdir"
(set -e
cd -- "$tmpdir"
tar cf "$tarbasename.tar" "$tartopdir"
md5sum --binary -- "$tarbasename.tar" > "$tarbasename.md5"
bzip2 --keep -- "$tarbasename.tar"
gzip -9 -- "$tarbasename.tar"
md5sum --binary -- "$tarbasename.tar.gz" "$tarbasename.tar.bz2" >> "$tarbasename.md5"
) || exit 1
mv -- "$tmpdir/$tarbasename.tar.gz" "$outdir"
mv -- "$tmpdir/$tarbasename.tar.bz2" "$outdir"
mv -- "$tmpdir/$tarbasename.md5" "$outdir"
rm -rf -- "$tmpdir"