summaryrefslogtreecommitdiffstats
path: root/dist.sh
blob: 12e05a23f8485dd175ab37e8c433b097b7919d5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/sh
# Creates a tarball with the concatenation of a git tree and the submodules.
# Hidden files such as .gitignore are skipped.

# GNU tar
TAR=${2:-"tar"}

if [ $# -lt 1 ] ; then
	echo "Usage: dist.sh <filename> [tar_command]"
	exit 1
fi

FNAME=$1
PREFIX=`basename $FNAME | sed -e 's/\.tar.*$//'`

ALL_TAR=$(mktemp) || { echo "mktemp is missing!"; exit 1; }
TMP_TAR=$(mktemp) || { echo "mktemp is missing!"; exit 1; }
trap 'rm -f "$TMP_TAR" "$ALL_TAR"' EXIT

# Create tarball for main repo contents.
git archive --prefix="$PREFIX/" HEAD ":!.*" ":!**/.*" > "$ALL_TAR"

# Append submodule contents, if any.
export PREFIX TMP_TAR ALL_TAR
git submodule --quiet foreach --recursive \
	'git archive --prefix="$PREFIX/$displaypath/" HEAD ":!.*" ":!**/.*" > "$TMP_TAR";
	 tar Af "$ALL_TAR" "$TMP_TAR"'

xz < "$ALL_TAR" > "$FNAME"