summaryrefslogtreecommitdiffstats
path: root/scripts/diff2patches.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/diff2patches.sh')
-rwxr-xr-xscripts/diff2patches.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/scripts/diff2patches.sh b/scripts/diff2patches.sh
new file mode 100755
index 0000000..fa5fd6a
--- /dev/null
+++ b/scripts/diff2patches.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+####################
+# Copyright (C) 2007, 2008 by Raphael Geissert <atomo64@gmail.com>
+#
+# This file is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this file If not, see <https://www.gnu.org/licenses/>.
+#
+# On Debian systems, the complete text of the GNU General
+# Public License 3 can be found in '/usr/share/common-licenses/GPL-3'.
+####################
+
+set -e
+
+PROGNAME=${0##*/}
+
+usage() {
+ echo \
+"Usage: $PROGNAME [options] FILE.diff.gz
+ Options:
+ --help Show this message
+ --version Show version and copyright information
+ debian/control must exist on the current path for this script to work
+ If debian/patches exists and is a directory, patches are extracted there,
+ otherwise they are extracted under debian/ (unless the environment variable
+ DEB_PATCHES is defined and points to a valid directory, in which case
+ patches are extracted there)."
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2007, 2008 by Raphael Geissert, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 3 or later."
+}
+
+case "$1" in
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+esac
+
+if ! which lsdiff > /dev/null 2>&1; then
+ echo "lsdiff was not found in \$PATH, package patchutils probably not installed!"
+ exit 1
+fi
+
+diffgz="$1"
+
+if [ ! -f "$diffgz" ]; then
+ [ -z "$diffgz" ] && diffgz="an unspecified .diff.gz"
+ echo "Couldn't find $diffgz, aborting!"
+ exit 1
+fi
+
+if [ -x /usr/bin/dh_testdir ]; then
+ /usr/bin/dh_testdir || exit 1
+else
+ [ ! -f debian/control ] && echo "Couldn't find debian/control!" && exit 1
+fi
+
+if [ -z "$DEB_PATCHES" ] || [ ! -d "$DEB_PATCHES" ]; then
+ DEB_PATCHES=debian
+ [ -d debian/patches ] && DEB_PATCHES=debian/patches
+else
+ DEB_PATCHES="$(readlink -f "$DEB_PATCHES")"
+fi
+
+echo "Patches will be extracted under $DEB_PATCHES/"
+
+FILES=$(zcat "$diffgz" | lsdiff --strip 1 | grep -v ^debian/) || \
+ echo "$(basename "$diffgz") doesn't contain any patch outside debian/"
+
+for file in $FILES; do
+ [ ! -z "$file" ] || continue
+ echo -n "Extracting $file..."
+ newFileName="$DEB_PATCHES/$(echo "$file" | sed 's#/#___#g').patch"
+ zcat "$diffgz" | filterdiff -i "$file" -p1 > "$newFileName"
+ echo "done"
+done
+
+exit