blob: 712e8fc5ed12508e93ce90dfd3c89de12d5d8979 (
plain) (
tree)
|
|
diff -Nur quilt-2003-02-01/quilt/import.in quilt-2003-02-02/quilt/import.in
--- quilt-2003-02-01/quilt/import.in 2003-01-31 17:25:06.000000000 +0100
+++ quilt-2003-02-02/quilt/import.in 2003-02-02 01:47:59.000000000 +0100
@@ -35,6 +35,10 @@
-n patch
File name relative to patches/ to use.
+-d {o|a|n}
+ Keep the old (o), all (a), or new (n) description. This option
+ must be specified if both patches include a description.
+
-f Overwite/update existing patches.
EOF
@@ -44,7 +48,7 @@
fi
}
-options=`getopt -o fn:p:h -- "$@"`
+options=`getopt -o d:fn:p:h -- "$@"`
if [ $? -ne 0 ]
then
@@ -58,8 +62,7 @@
case "$1" in
-n)
opt_patch=$(echo "$2" |
- sed -e 's/^'"$(quote_bre $P)"'patches\///' \
- -e 's/^\.pc\///')
+ sed -e 's/^'"$(quote_bre $P)"'patches\///')
shift 2 ;;
-p)
opt_strip=$2
@@ -67,6 +70,9 @@
-f)
opt_force=1
shift ;;
+ -d)
+ opt_desc=$2
+ shift 2 ;;
-h)
usage -h ;;
--)
@@ -83,122 +89,119 @@
usage
fi
-[ -n "$opt_strip" ] && patch_args="-p$opt_strip"
+[ -n "$opt_strip" -a "$opt_strip" -ne 1 ] && patch_args="-p$opt_strip"
+
+case "$opt_desc" in
+o)
+ keep_old_desc=1
+ keep_new_desc=0 ;;
+a)
+ keep_old_desc=1
+ keep_new_desc=1 ;;
+n)
+ keep_old_desc=0
+ keep_new_desc=1 ;;
+'')
+ true ;;
+*)
+ echo "Invalid option -d$opt_desc"
+ exit 1
+esac
-if [ -n "$opt_patch" ]
+if ! [ -r "$input_file" ]
then
- patch=$(stripit "$opt_patch")
- patch_file="${P}patches/$opt_patch"
-else
- patch="$(stripit "$input_file")"
- if [ -n "$patch" ]
- then
- opt_patch="$patch.patch"
- else
- echo "Please use -n to specify a patch file name."
- exit 1
- fi
- patch_file="${P}patches/$opt_patch"
+ echo "Cannot read from file $input_file"
+ exit 1
fi
-if echo "$patch_file" | grep -q -e $'[ \t]'
+if [ -z "$opt_patch" ]
then
- echo "Patch file name \"$patch_file\" contains whitespace."
+ opt_patch="$(stripit "$input_file")"
+fi
+
+patch=$(stripit "$opt_patch")
+if [ -z "$patch" ]
+then
+ echo "Please use -n to specify a patch file name."
exit 1
fi
+patch_file="${P}patches/$opt_patch"
+case "$patch_file" in
+*' '*)
+ echo "Patch file name \"$patch_file\" contains whitespace."
+ exit 1 ;;
+esac
+
+# If the specified is topmost, pop?
if is_applied $patch
then
echo "Patch $patch is applied."
exit 1
fi
-case "$input_file" in
-'')
- tmpfile=$(@MKTEMP@ /tmp/patch-scripts.XXXXXX)
- if ! cat > $tmpfile
- then
- echo "Cannot read from standard input."
- rm -f $tmpfile
- exit 1
- fi
- input_file=$tmpfile ;;
-*.gz)
- tmpfile=$(@MKTEMP@ /tmp/patch-scripts.XXXXXX)
- if ! gzip -cd "$input_file" > $tmpfile
- then
- echo "Cannot decompress file $input_file"
- rm -f $tmpfile
- exit 1
- fi
- input_file=$tmpfile ;;
-*.bz2)
- tmpfile=$(@MKTEMP@ /tmp/patch-scripts.XXXXXX)
- if ! bzip2 -cd "$input_file" > $tmpfile
- then
- echo "Cannot decompress file $input_file"
- rm -f $tmpfile
- exit
- fi
- input_file=$tmpfile ;;
-*)
- if ! [ -r "$input_file" ]
- then
- echo "Cannot read from file $input_file"
- exit 1
- fi
-esac
+if [ -n "$patch_file" -a -z "$opt_force" ]
+then
+ echo "Patch $patch exists. Replace with -f."
+ exit 1
+fi
-if [ -e "$patch_file" ]
+if [ -e "$patch_file" -a "$keep_old_desc" != 0 ]
then
- if [ -z "$opt_force" ]
- then
- echo "Patch $patch exists. Replace with -f."
- exit 1
- fi
+ old_desc=$(@MKTEMP@ /tmp/patch-scripts.XXXXXX)
+ cat_file "$patch_file" \
+ | patch_description > $old_doc
+fi
+
+if [ "$keep_new_desc" != 0 ]
+then
+ new_desc=$(@MKTEMP@ /tmp/patch-scripts.XXXXXX)
+ cat_file "$input_file" \
+ | patch_description > $new_desc
+fi
- if grep -q '^%patch$' "$patch_file" &&
- ! grep -q '^%patch$' "$input_file"
+if [ -s $old_doc -a -s $new_desc -a -z "$opt_desc" ] && \
+ ! diff -q $old_doc $new_desc >/dev/null
+then
+ echo "Documentation difference:"
+ diff -u $old_doc $new_desc
+ echo "Please use -d {o|a|n} to specify which documentation to keep."
+ exit 1
+elif [ -z "$opt_desc" ]
+then
+ [ -s $old_doc ] ; keep_old_files=$?
+ [ -s $new_doc ] ; keep_new_files=$?
+fi
+
+if [ $keep_old_desc = 1 ]
+then
+ mkdir -p $(dirname "$patch_file")
+ temp_patch=$(@MKTEMP@ "$patch_file.XXXXXX")
+ cat $old_doc >> $temp_patch
+ if [ $keep_new_desc = 1 ]
then
- echo "Updating %patch section of patch $patch"
- if ! @SCRIPTS@/parse-patch -u patch $patch_file < "$input_file"
- then
- echo "Failed to update %patch section of patch $patch"
- exit 1
- fi
+ echo "---" >> $temp_patch
+ cat_file "$input_file" >> $temp_patch
else
- echo "Replacing patch $patch with new version"
- if ! cat "$input_file" > "$patch_file"
- then
- echo "Failed to replace patch $patch"
- exit 1
- fi
+ # FIX: cat only the non-description part!
+ cat "$input_file" >> $temp_patch
fi
+ cat_to_file "$patch_file" < $temp_patch
+ rm -f $temp_patch
else
- echo "Importing patch $patch (stored as $patch_file)"
- if ! grep -q '^%patch$' "$input_file"
- then
- echo "%patch" >> "$patch_file"
- fi
- if ! cat "$input_file" >> "$patch_file"
- then
- echo "Failed to import patch $patch"
- exit 1
- fi
+ # FIX: Make sure the file extensions (.gz|.bz2|) match, and use cp
+ # if possible...
+ cat_file "$input_file" \
+ | cat_to_file "$patch_file"
fi
rm -rf .pc/$patch
-if ! patch_in_series $patch &&
- ! insert_in_series $opt_patch "$patch_args"
+remove_from_series $patch
+if ! insert_in_series $opt_patch "$patch_args"
then
echo "Failed to insert $patch in file series."
fi
-
-if [ -n "$tmpfile" ]
-then
- rm -f $tmpfile
-fi
### Local Variables:
### mode: shell-script
### End:
|