summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--quilt.changes7
-rw-r--r--quilt/remove.in112
2 files changed, 119 insertions, 0 deletions
diff --git a/quilt.changes b/quilt.changes
index dc30d80..5227620 100644
--- a/quilt.changes
+++ b/quilt.changes
@@ -1,4 +1,11 @@
-------------------------------------------------------------------
+Thu Sep 17 22:11:54 CEST 2009 - agruen@suse.de
+
+- Restore the "remove" command which a few people were missing
+ since its replacement by "revert" in April 2007. (Patch from
+ Pedro Alves.)
+
+-------------------------------------------------------------------
Wed Sep 9 14:59:10 CEST 2009 - agruen@suse.de
- French translation update from from
diff --git a/quilt/remove.in b/quilt/remove.in
new file mode 100644
index 0000000..a11db0a
--- /dev/null
+++ b/quilt/remove.in
@@ -0,0 +1,112 @@
+#! @BASH@
+
+# This script is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# See the COPYING and AUTHORS files for more details.
+
+# Read in library functions
+if [ "$(type -t patch_file_name)" != function ]
+then
+ if ! [ -r $QUILT_DIR/scripts/patchfns ]
+ then
+ echo "Cannot read library $QUILT_DIR/scripts/patchfns" >&2
+ exit 1
+ fi
+ . $QUILT_DIR/scripts/patchfns
+fi
+
+usage()
+{
+ printf $"Usage: quilt remove [-P patch] {file} ...\n"
+ if [ x$1 = x-h ]
+ then
+ printf $"
+Remove one or more files from the topmost or named patch. Files that
+are modified by patches on top of the specified patch cannot be removed.
+
+-P patch
+ Remove named files from the named patch.
+"
+ exit 0
+ else
+ exit 1
+ fi
+}
+
+options=`getopt -o P:h -- "$@"`
+
+if [ $? -ne 0 ]
+then
+ usage
+fi
+
+eval set -- "$options"
+
+while true
+do
+ case "$1" in
+ -P)
+ opt_patch="$2"
+ shift 2 ;;
+ -h)
+ usage -h ;;
+ --)
+ shift
+ break ;;
+ esac
+done
+
+if [ $# -lt 1 ]
+then
+ usage
+fi
+
+patch=$(find_applied_patch "$opt_patch") || exit 1
+
+status=0
+for file in $*
+do
+ if ! file_in_patch $SUBDIR$file $patch
+ then
+ printf $"File %s is not in patch %s\n" \
+ "$SUBDIR$file" "$(print_patch $patch)" >&2
+ status=1
+ continue
+ fi
+
+ next_patch=$(next_patch_for_file $patch $SUBDIR$file)
+ if [ -n "$next_patch" ]
+ then
+ printf $"File %s modified by patch %s\n" \
+ "$SUBDIR$file" "$(print_patch $next_patch)"
+ status=1
+ continue
+ fi
+
+ # Restore file from backup
+ if ! $QUILT_LIB/backup-files -r -t -s -B $QUILT_PC/$patch/ $SUBDIR$file
+ then
+ printf $"Failed to remove file %s from patch %s\n" \
+ "$SUBDIR$file" "$(print_patch $patch)" >&2
+ status=1
+ continue
+ fi
+
+ if [ -e $(dirname $QUILT_PC/$patch~refresh) -a \
+ -e $(patch_file_name $patch) ]
+ then
+ # The patch must be refreshed in order to get rid of the
+ # patch permanently.
+ touch $QUILT_PC/$patch~refresh
+ fi
+
+ printf $"File %s removed from patch %s\n" \
+ "$SUBDIR$file" "$(print_patch $patch)"
+done
+exit $status
+### Local Variables:
+### mode: shell-script
+### End:
+# vim:filetype=sh