This commit is contained in:
parent
3aeedafe31
commit
ea52ba878c
@ -65,15 +65,13 @@ Index: patch-2.5.9/util.c
|
||||
void
|
||||
move_file (char const *from, int volatile *from_needs_removal,
|
||||
char *to, mode_t mode, bool backup)
|
||||
@@ -164,6 +207,15 @@ move_file (char const *from, int volatil
|
||||
@@ -165,6 +208,13 @@ move_file (char const *from, int volatil
|
||||
goto rename_succeeded;
|
||||
}
|
||||
|
||||
+ if (errno == EACCES && (s_is_chrblkfifosock(to) > 0))
|
||||
+ {
|
||||
+ cat_file_to_dev (from, to);
|
||||
+ if (backup)
|
||||
+ insert_fid (to);
|
||||
+ unlink(from);
|
||||
+ return;
|
||||
+ }
|
||||
|
@ -1,3 +1,12 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Apr 23 10:53:19 CEST 2008 - agruen@suse.de
|
||||
|
||||
- remember-backup-files.diff: Fix bug when a file is touched by
|
||||
the same patch more than twice. Move the test cases from the
|
||||
patch header into separate files.
|
||||
- patch-2.5.9-cat_if_device.diff: No need to remember the device
|
||||
we write to as a backup file.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Nov 2 01:57:03 CET 2007 - agruen@suse.de
|
||||
|
||||
|
76
patch.spec
76
patch.spec
@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package patch (Version 2.5.9)
|
||||
#
|
||||
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
@ -10,15 +10,16 @@
|
||||
|
||||
# norootforbuild
|
||||
|
||||
|
||||
Name: patch
|
||||
License: GPL v2 or later
|
||||
Group: Productivity/Text/Utilities
|
||||
AutoReqProv: on
|
||||
Version: 2.5.9
|
||||
Release: 223
|
||||
Release: 252
|
||||
Summary: GNU patch
|
||||
Source: ftp://prep.ai.mit.edu/pub/gnu/patch/%{name}-%{version}.tar.bz2
|
||||
Url: http://www.gnu.org/software/patch/patch.html
|
||||
Url: ftp://alpha.gnu.org/gnu/diffutils/
|
||||
Patch: trailing-cr-fix.diff
|
||||
Patch1: remember-backup-files.diff
|
||||
Patch2: unified-reject-files.diff
|
||||
@ -73,57 +74,64 @@ make install \
|
||||
%doc NEWS README
|
||||
/usr/bin/patch
|
||||
%doc %{_mandir}/man1/patch.1.gz
|
||||
|
||||
%changelog
|
||||
* Fri Nov 02 2007 - agruen@suse.de
|
||||
* Wed Apr 23 2008 agruen@suse.de
|
||||
- remember-backup-files.diff: Fix bug when a file is touched by
|
||||
the same patch more than twice. Move the test cases from the
|
||||
patch header into separate files.
|
||||
- patch-2.5.9-cat_if_device.diff: No need to remember the device
|
||||
we write to as a backup file.
|
||||
* Fri Nov 02 2007 agruen@suse.de
|
||||
- Patch fails to apply hunks with asymmetric context correctly.
|
||||
* Wed Jan 25 2006 - mls@suse.de
|
||||
* Wed Jan 25 2006 mls@suse.de
|
||||
- converted neededforbuild to BuildRequires
|
||||
* Thu Jan 12 2006 - agruen@suse.de
|
||||
* Thu Jan 12 2006 agruen@suse.de
|
||||
- remember-backup-files.diff: Fix case where a patch modifies a
|
||||
read-only file more than once while --backup is used (test case
|
||||
in the patch header).
|
||||
* Thu Aug 18 2005 - mmj@suse.de
|
||||
* Thu Aug 18 2005 mmj@suse.de
|
||||
- --reject-unified is called --unified-reject-files [#105151]
|
||||
* Wed Jun 29 2005 - mmj@suse.de
|
||||
* Wed Jun 29 2005 mmj@suse.de
|
||||
- Don't compile with -f-signed-char [#93883]
|
||||
- Don't strip explicitly
|
||||
* Tue Jan 04 2005 - mmj@suse.de
|
||||
* Tue Jan 04 2005 mmj@suse.de
|
||||
- Add patch to make patch able to write reject files to devices,
|
||||
named pipes and sockets [#45794]
|
||||
* Sun Jan 25 2004 - agruen@suse.de
|
||||
* Sun Jan 25 2004 agruen@suse.de
|
||||
- Add --reject-unified option to produce unified reject files:
|
||||
Before, unified reject files were produced if the patch itself
|
||||
was unified; this could sometimes have been annoying.
|
||||
- If a patch with C function names (diff -p) has rejects, include
|
||||
the function names in the reject files.
|
||||
* Sun Jan 11 2004 - adrian@suse.de
|
||||
* Sun Jan 11 2004 adrian@suse.de
|
||||
- add %%defattr
|
||||
* Tue Oct 07 2003 - agruen@suse.de
|
||||
* Tue Oct 07 2003 agruen@suse.de
|
||||
- remember-backup-files: Also include the file timestamps in the
|
||||
hash table for non-POSIX-compliant systems that don't guarantee
|
||||
that i_dev + i_ino uniquely identifies a file.
|
||||
- #32031: Create --global-reject-file even if --dry-run is
|
||||
specified. Add a missing '\n'.
|
||||
* Wed Jul 16 2003 - agruen@suse.de
|
||||
* Wed Jul 16 2003 agruen@suse.de
|
||||
- Replace trailing-cr-fix.diff with official upstream version that
|
||||
fixes this bug differently.
|
||||
* Mon Jun 30 2003 - agruen@suse.de
|
||||
* Mon Jun 30 2003 agruen@suse.de
|
||||
- trailing-cr-fix.diff: Fix a bug in carriage return detection
|
||||
(DOS files) in the unified diff path.
|
||||
- Disable patch that adds comments to C preprocessor style
|
||||
merges, as specified by POSIX.1-2001.
|
||||
* Wed Jun 25 2003 - agruen@suse.de
|
||||
* Wed Jun 25 2003 agruen@suse.de
|
||||
- Fix bug introduced on June 5 that broke remember-backup-files.
|
||||
* Tue Jun 24 2003 - agruen@suse.de
|
||||
* Tue Jun 24 2003 agruen@suse.de
|
||||
- smart-reject-file-format.diff: Work around a special case in
|
||||
which patches are not terminated with a '^' in the internal
|
||||
representation. The resulting error message was "internal error
|
||||
in abort_hunk".
|
||||
* Thu Jun 05 2003 - agruen@suse.de
|
||||
* Thu Jun 05 2003 agruen@suse.de
|
||||
- Temporary reject file logic: Ooops, now must only close the
|
||||
temporary reject file after processing all patches, instead of
|
||||
after each patch.
|
||||
* Thu Jun 05 2003 - agruen@suse.de
|
||||
* Thu Jun 05 2003 agruen@suse.de
|
||||
- Upgrade to 2.5.9: Several fixes, obsoletes
|
||||
rename-same-file.patch.
|
||||
- Fix and adapt global-reject-file patch:
|
||||
@ -142,11 +150,11 @@ make install \
|
||||
tables instead of glibc's binary trees, requested from upstream
|
||||
to ensure greater portability.
|
||||
- Add /* SYM */ comment to #endif lines for patch -D SYM, too.
|
||||
* Wed Apr 09 2003 - agruen@suse.de
|
||||
* Wed Apr 09 2003 agruen@suse.de
|
||||
- Fix another bug with hard links and backup file generation.
|
||||
- Fix backup file generation if the same file appears in the
|
||||
patch more than once.
|
||||
* Wed Mar 26 2003 - mmj@suse.de
|
||||
* Wed Mar 26 2003 mmj@suse.de
|
||||
- Update to 2.5.8:
|
||||
· Bugfixes
|
||||
· patch -D now outputs preprocessor lines without comments, as
|
||||
@ -156,37 +164,37 @@ make install \
|
||||
from the time stamp
|
||||
· Perforce is now supported
|
||||
· Patch lines beginning with "#" are comments and are ignored
|
||||
* Wed Jan 15 2003 - agruen@suse.de
|
||||
* Wed Jan 15 2003 agruen@suse.de
|
||||
- Fix a bug with hardlinks (see rename-same-file.patch)
|
||||
* Tue Sep 17 2002 - ro@suse.de
|
||||
* Tue Sep 17 2002 ro@suse.de
|
||||
- removed bogus self-provides
|
||||
* Wed Feb 06 2002 - coolo@suse.de
|
||||
* Wed Feb 06 2002 coolo@suse.de
|
||||
- called suse_update_config
|
||||
* Mon Jun 25 2001 - uli@suse.de
|
||||
* Mon Jun 25 2001 uli@suse.de
|
||||
- added patch adding "--global-reject" option by ak@suse.de
|
||||
- bzipped tarball
|
||||
* Tue Mar 06 2001 - bk@suse.de
|
||||
* Tue Mar 06 2001 bk@suse.de
|
||||
- update to 2.5.4, added 2 patches from PLD and use buildroot
|
||||
* Wed Nov 08 2000 - uli@suse.de
|
||||
* Wed Nov 08 2000 uli@suse.de
|
||||
- now builds with -D_GNU_SOURCE, should avoid miscompilation that
|
||||
breaks LFS support
|
||||
- added fix for offset output by Alessandro Rubini
|
||||
- added fix and enhancement for --ifdef by Pete Buechler
|
||||
* Sun Feb 27 2000 - @suse.de
|
||||
* Sun Feb 27 2000 @suse.de
|
||||
- added missing CFLAGS quotes.
|
||||
* Sun Feb 27 2000 - bk@suse.de
|
||||
* Sun Feb 27 2000 bk@suse.de
|
||||
- added PPC fixes by Uli back again (-fsigned-char, CPPFLAGS)
|
||||
* Fri Feb 25 2000 - schwab@suse.de
|
||||
* Fri Feb 25 2000 schwab@suse.de
|
||||
- Specfile cleanup, get rid of Makefile.Linux
|
||||
- /usr/man -> /usr/share/man
|
||||
- Add group tag.
|
||||
* Mon Sep 13 1999 - bs@suse.de
|
||||
* Mon Sep 13 1999 bs@suse.de
|
||||
- ran old prepare_spec on spec file to switch to new prepare_spec.
|
||||
* Wed Aug 18 1999 - uli@suse.de
|
||||
* Wed Aug 18 1999 uli@suse.de
|
||||
- fixed for PPC (-fsigned-char, CPPFLAGS)
|
||||
* Tue Mar 16 1999 - ro@suse.de
|
||||
* Tue Mar 16 1999 ro@suse.de
|
||||
- update to 2.5.3 using diff from jurix
|
||||
* Wed Jan 13 1999 - bs@suse.de
|
||||
* Wed Jan 13 1999 bs@suse.de
|
||||
- applied patch from Egbert Eich (problems with non existing files fixed)
|
||||
* Thu Nov 05 1998 - ro@suse.de
|
||||
* Thu Nov 05 1998 ro@suse.de
|
||||
- use libc's basename() for glibc
|
||||
|
@ -1,81 +1,6 @@
|
||||
This patch remembers backup file names patch has already created
|
||||
in a binary tree, and prevents patch from overwriting backup
|
||||
files it has created before. The bug can be reproduced as follows:
|
||||
|
||||
$ cat > f
|
||||
< one
|
||||
|
||||
$ cat > f.patch
|
||||
<--- f.orig 2003-04-09 01:48:01.000000000 +0200
|
||||
<+++ f 2003-04-09 01:49:17.000000000 +0200
|
||||
<@@ -2 +2 @@
|
||||
<-one
|
||||
<+two
|
||||
<--- f.orig 2003-04-09 01:48:01.000000000 +0200
|
||||
<+++ f 2003-04-09 01:49:17.000000000 +0200
|
||||
<@@ -2 +2 @@
|
||||
<-two
|
||||
<+three
|
||||
|
||||
$ patch -p0 < f.patch
|
||||
> patching file f
|
||||
> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
> patching file f
|
||||
> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
|
||||
$ cat f.orig
|
||||
> one
|
||||
|
||||
$ rm f f.orig f.patch
|
||||
|
||||
|
||||
Here is another test case with hard links between source files.
|
||||
|
||||
$ cat > f
|
||||
< one
|
||||
|
||||
$ ln f g
|
||||
$ cat > fg.patch
|
||||
<--- f.orig 2003-04-09 01:48:01.000000000 +0200
|
||||
<+++ f 2003-04-09 01:49:17.000000000 +0200
|
||||
<@@ -2 +2 @@
|
||||
<-one
|
||||
<+two
|
||||
<--- g.orig 2003-04-09 01:48:01.000000000 +0200
|
||||
<+++ g 2003-04-09 01:49:17.000000000 +0200
|
||||
<@@ -2 +2 @@
|
||||
<-one
|
||||
<+two
|
||||
|
||||
$ patch -p0 < fg.patch
|
||||
> patching file f
|
||||
> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
> patching file g
|
||||
> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
|
||||
$ cat f.orig
|
||||
> one
|
||||
|
||||
$ cat g.orig
|
||||
> one
|
||||
|
||||
$ rm f f.orig g g.orig fg.patch
|
||||
|
||||
This test case failed with a Permission denied error with a previous
|
||||
version of this patch:
|
||||
|
||||
$ echo 1 > f
|
||||
$ echo 2 > f.new
|
||||
$ diff -Nu f f.new > f.diff
|
||||
$ mv f.new f
|
||||
$ echo 3 > f.new
|
||||
$ diff -Nu f f.new >> f.diff
|
||||
$ rm f.new
|
||||
$ echo 1 > f
|
||||
$ chmod a=r f
|
||||
$ strace -o ../log patch -p0 --backup < f.diff
|
||||
> patching file f
|
||||
> patching file f
|
||||
files it has created before.
|
||||
|
||||
Index: patch-2.5.9/Makefile.in
|
||||
===================================================================
|
||||
@ -161,16 +86,17 @@ Index: patch-2.5.9/util.c
|
||||
|
||||
/* Move a file FROM (where *FROM_NEEDS_REMOVAL is nonzero if FROM
|
||||
needs removal when cleaning up at the end of execution)
|
||||
@@ -64,7 +72,7 @@ move_file (char const *from, int volatil
|
||||
@@ -64,6 +72,9 @@ move_file (char const *from, int volatil
|
||||
struct stat to_st;
|
||||
int to_errno = ! backup ? -1 : stat (to, &to_st) == 0 ? 0 : errno;
|
||||
|
||||
- if (backup)
|
||||
+ if (backup && (to_errno || ! fid_exists (to, &to_st)))
|
||||
+ if (backup && ! to_errno && fid_exists (to, &to_st))
|
||||
+ backup = false;
|
||||
+
|
||||
if (backup)
|
||||
{
|
||||
int try_makedirs_errno = 0;
|
||||
char *bakname;
|
||||
@@ -123,6 +131,7 @@ move_file (char const *from, int volatil
|
||||
@@ -123,6 +134,7 @@ move_file (char const *from, int volatil
|
||||
quotearg_n (0, to), quotearg_n (1, bakname));
|
||||
while (rename (to, bakname) != 0)
|
||||
{
|
||||
@ -178,34 +104,23 @@ Index: patch-2.5.9/util.c
|
||||
if (errno != try_makedirs_errno)
|
||||
pfatal ("Can't rename file %s to %s",
|
||||
quotearg_n (0, to), quotearg_n (1, bakname));
|
||||
@@ -133,6 +142,8 @@ move_file (char const *from, int volatil
|
||||
|
||||
free (bakname);
|
||||
}
|
||||
+ else
|
||||
+ backup = false;
|
||||
|
||||
if (from)
|
||||
{
|
||||
@@ -165,6 +176,8 @@ move_file (char const *from, int volatil
|
||||
@@ -165,6 +177,7 @@ move_file (char const *from, int volatil
|
||||
if (! to_dir_known_to_exist)
|
||||
makedirs (to);
|
||||
copy_file (from, to, 0, mode);
|
||||
+ if (backup)
|
||||
+ insert_fid (to);
|
||||
+ insert_fid (to);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -173,6 +186,8 @@ move_file (char const *from, int volatil
|
||||
@@ -173,6 +186,7 @@ move_file (char const *from, int volatil
|
||||
}
|
||||
|
||||
rename_succeeded:
|
||||
+ if (backup)
|
||||
+ insert_fid (to);
|
||||
+ insert_fid (to);
|
||||
/* Do not clear *FROM_NEEDS_REMOVAL if it's possible that the
|
||||
rename returned zero because FROM and TO are hard links to
|
||||
the same file. */
|
||||
@@ -1011,3 +1026,105 @@ Fseek (FILE *stream, file_offset offset,
|
||||
@@ -1011,3 +1025,105 @@ Fseek (FILE *stream, file_offset offset,
|
||||
if (file_seek (stream, offset, ptrname) != 0)
|
||||
pfatal ("fseek");
|
||||
}
|
||||
@ -1505,3 +1420,101 @@ Index: patch-2.5.9/m4/nanosecond_stat.m4
|
||||
+ if test $ac_cv_stat_timeval = yes; then
|
||||
+ AC_DEFINE(HAVE_STAT_TIMEVAL, 1, [Define to 1 if struct stat comtains struct timeval's.])
|
||||
+ fi])
|
||||
Index: patch-2.5.9/remember-tests/hardlinks.test
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ patch-2.5.9/remember-tests/hardlinks.test
|
||||
@@ -0,0 +1,31 @@
|
||||
+Test case with hard links between source files.
|
||||
+
|
||||
+$ cat > f
|
||||
+< one
|
||||
+
|
||||
+$ ln f g
|
||||
+$ cat > fg.patch
|
||||
+<--- f.orig
|
||||
+<+++ f
|
||||
+<@@ -2 +2 @@
|
||||
+<-one
|
||||
+<+two
|
||||
+<--- g.orig
|
||||
+<+++ g
|
||||
+<@@ -2 +2 @@
|
||||
+<-one
|
||||
+<+two
|
||||
+
|
||||
+$ ../patch -p0 < fg.patch
|
||||
+> patching file f
|
||||
+> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
+> patching file g
|
||||
+> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
+
|
||||
+$ cat f.orig
|
||||
+> one
|
||||
+
|
||||
+$ cat g.orig
|
||||
+> one
|
||||
+
|
||||
+$ rm f f.orig g g.orig fg.patch
|
||||
Index: patch-2.5.9/remember-tests/multi-modify.test
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ patch-2.5.9/remember-tests/multi-modify.test
|
||||
@@ -0,0 +1,35 @@
|
||||
+A patch that modifies the same file three times. An unpatched version of
|
||||
+GNU patch will destroy the backup file.
|
||||
+
|
||||
+$ cat > f
|
||||
+< one
|
||||
+
|
||||
+$ cat > f.patch
|
||||
+<--- f.orig
|
||||
+<+++ f
|
||||
+<@@ -2 +2 @@
|
||||
+<-one
|
||||
+<+two
|
||||
+<--- f.orig
|
||||
+<+++ f
|
||||
+<@@ -2 +2 @@
|
||||
+<-two
|
||||
+<+three
|
||||
+<--- f.orig
|
||||
+<+++ f
|
||||
+<@@ -2 +2 @@
|
||||
+<-three
|
||||
+<+four
|
||||
+
|
||||
+$ ../patch -p0 < f.patch
|
||||
+> patching file f
|
||||
+> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
+> patching file f
|
||||
+> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
+> patching file f
|
||||
+> Hunk #1 succeeded at 1 (offset -1 lines).
|
||||
+
|
||||
+$ cat f.orig
|
||||
+> one
|
||||
+
|
||||
+$ rm f f.orig f.patch
|
||||
Index: patch-2.5.9/remember-tests/permission.test
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ patch-2.5.9/remember-tests/permission.test
|
||||
@@ -0,0 +1,17 @@
|
||||
+This test case failed with a Permission denied error with a previous
|
||||
+version of this patch.
|
||||
+
|
||||
+$ echo 1 > f
|
||||
+$ echo 2 > f.new
|
||||
+$ diff -Nu f f.new > f.diff
|
||||
+$ mv f.new f
|
||||
+$ echo 3 > f.new
|
||||
+$ diff -Nu f f.new >> f.diff
|
||||
+$ rm f.new
|
||||
+$ echo 1 > f
|
||||
+$ chmod a=r f
|
||||
+$ ../patch -p0 --backup < f.diff
|
||||
+> patching file f
|
||||
+> patching file f
|
||||
+
|
||||
+$ rm -f f f.diff f.orig f.rej
|
||||
|
Loading…
Reference in New Issue
Block a user