summaryrefslogblamecommitdiffstats
path: root/contrib/import.diff
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: