| 12
 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
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 
 | # This script reads a list of revision ranges suitable for git format-patch
# from the $patch_list file, one per line, and exports them to the $patch_dir
# directory in a form suitable for (format 3.0) quilt packages.
# It is not required for creating such packages, but permits you to separate
# out individual patches however you please from the default single patch
# that is otherwise created by dpkg-source.
# The revision ranges may include $DEB_REF and/or $UPSTREAM_REF, which
# will be substituted according to the version of the package being
# exported.  These variables are derived from $DEB_VERSION and
# $UPSTREAM_VERSION by applying sanitise_git_ref (see gitpkg(1) for
# more on these three things).  You can also use DEB_VERSION and
# UPSTREAM_VERSION directly, but this is discouraged, and might go
# away in a future version.
# To enable this hook, use:
# git config gitpkg.deb-export-hook /usr/share/gitpkg/hooks/quilt-patches-deb-export-hook
#
#
# It can also be invoked independently of gitpkg, such as from within your
# project makefile or debian/rules, with something like:
#
# PATCH_EXPORT_SCRIPT=/usr/share/gitpkg/hooks/quilt-patches-deb-export-hook
# export-patches:
#	[ ! -r debian/patches ] || \
#	grep "^\#.*$(notdir $(PATCH_EXPORT_SCRIPT))" debian/patches/series
#	rm -rf debian/patches
#	bash $(PATCH_EXPORT_SCRIPT)
# Import the sanitise_git_ref function
. /usr/share/gitpkg/hooks/repo-config-helper
patch_list=debian/source/git-patches
patch_dir=debian/patches
if [ ! -r "$patch_list" ]; then
    echo "No $patch_list file, I guess you've pushed them all upstream."
    echo "Good Work!"
    exit 0
fi
if [ -e "$patch_dir" ]; then
    echo "Uh oh.  You already have a $patch_dir here."
    echo "You probably don't want us to scribble on that without asking."
    exit 1
fi
if [ -z "$REPO_DIR" ]; then
    # support running as a free-standing script, without gitpkg
    DEB_VERSION="$(dpkg-parsechangelog | sed -rne 's/^Version: ([^:]+:)?//p')"
    UPSTREAM_VERSION="${DEB_VERSION%-*}"
    REPO_DIR=.
fi;
DEB_REF=$(sanitise_git_ref $DEB_VERSION)
UPSTREAM_REF="${DEB_REF%-*}"
do_patches (){
    while read -r line
    do
	[ -n "$line" ] || continue
	case $line in
	    \#*)
		;;
	    *)
		count=$(wc -l "$patch_dir/series" | cut -f1 -d' ')
		if PATCHES="$(git --git-dir "$REPO_DIR/.git" format-patch --no-signature --start-number $count -N -o "$patch_dir" "$line")"; then
		    if [ -n "$PATCHES" ]; then
			echo "$PATCHES" | sed -e "s,$patch_dir/,,g" -e 's, ,\n,g' >> "$patch_dir/series"
		    else
			echo "Warning: no patches from $line"
		    fi
		else
		    echo "git --git-dir '$REPO_DIR/.git' format-patch --no-signature --start-number $count -N -o '$patch_dir' '$line'"
		    echo "failed."
		    exit 1
		fi
	esac
    done
}
mkdir -p "$patch_dir" || exit 1
echo "# $patch_list exported from git by quilt-patches-deb-export-hook" > "$patch_dir/series"
(sed -e "s/\$DEB_VERSION/$DEB_VERSION/g"		\
    -e "s/\${DEB_VERSION}/$DEB_VERSION/g"		\
    -e "s/\$UPSTREAM_VERSION/$UPSTREAM_VERSION/g"	\
    -e "s/\${UPSTREAM_VERSION}/$UPSTREAM_VERSION/g"	\
    -e "s/\$DEB_REF/$DEB_REF/g"				\
    -e "s/\${DEB_REF}/$DEB_REF/g"			\
    -e "s/\$UPSTREAM_REF/$UPSTREAM_REF/g"		\
    -e "s/\${UPSTREAM_REF}/$UPSTREAM_REF/g"		\
    < "$patch_list" ; echo ) | do_patches || exit 1
count=$(wc -l "$patch_dir/series" | cut -f1 -d' ')
# We remove the patch_list file if no patches were actually exported,
# to avoid triggering the lintian check about them not being exported.
# This might happen if people list a wildcard revision that doesn't
# have any changes outstanding for a particular release version.
if [ $count -eq 1 ]; then
    echo "No patches generated from $patch_list"
    rm -rf "$patch_dir"
    rm "$patch_list"
fi
 |