Re: [Bug-tar] Faster excludes

2009-08-05 Thread Sergey Poznyakoff
Carl, Phil,

Thanks for the updated patch. After a quick glance I seem to have
fund some potential problems, but these could be easily fixed. I'll try
to come out with something definite by this weekend.

Regards,
Sergey




Re: [Bug-tar] --backup can destroy an extracted member when followed by an existing directory

2009-08-05 Thread Sergey Poznyakoff
Carl Worth cwo...@cworth.org ha escrit:

 I've traced through the code a bit and the problem is due to the
 handling of directory entries in extract.c:extract_archive().

Thanks for the in-depth analysis. I have applied the attached patch.

Regards,
Sergey

From 755c246588092d0b281cb610a8371c2c9b32de59 Mon Sep 17 00:00:00 2001
From: Sergey Poznyakoff g...@gnu.org.ua
Date: Wed, 5 Aug 2009 10:38:50 +0300
Subject: [PATCH] Fix backup handling and restoring file modes of existing 
directories

* NEWS, THANKS: Update
* src/extract.c (extract_dir): reset status to 0 if the
directory already exists.
* src/misc.c (maybe_backup_file): Assign before_backup_name
and clear after_backup_name before checking if we really need
to backup the file.
* tests/backup01.at: New testcase.
* tests/extrac08.at: New testcase.
* tests/Makefile.am, tests/testsuite.at: Add extrac08.at and
backup01.at
---
 NEWS   |8 +++-
 THANKS |1 +
 src/extract.c  |1 +
 src/misc.c |   17 +
 tests/Makefile.am  |2 ++
 tests/backup01.at  |   49 +
 tests/extrac08.at  |   51 +++
 tests/testsuite.at |3 +++
 8 files changed, 123 insertions(+), 9 deletions(-)
 create mode 100644 tests/backup01.at
 create mode 100644 tests/extrac08.at

diff --git a/NEWS b/NEWS
index e9a31ca..9c15ad7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU tar NEWS - User visible changes. 2009-05-25
+GNU tar NEWS - User visible changes. 2009-08-05
 Please send GNU tar bug reports to bug-tar@gnu.org
 
 
@@ -10,6 +10,12 @@ When listing or extracting archives, the actual record size 
is
 reported only if the archive is read from a device (as opposed
 to regular files and pipes).
 
+* Bugfixes
+** Fix handling of hard link targets by -c --transform.
+** Fix hard links recognition with -c --remove-files.
+** Fix restoring files from backup (debian bug #508199).
+** Correctly restore modes and permissions on existing directories.
+
 
 version 1.22 - Sergey Poznyakoff, 2009-03-05
 
diff --git a/THANKS b/THANKS
index dbb64d2..9d918ba 100644
--- a/THANKS
+++ b/THANKS
@@ -70,6 +70,7 @@ Burkhard Plache   pla...@krusty.optimax.ns.ca
 Calvin Cliff   cl...@trifid.astro.ucla.edu
 Cameron Elliottc...@mvbms.mvbms.com
 Carl Streeter  stree...@cae.wisc.edu
+Carl Worth  cwo...@cworth.org
 Carsten Heyl   h...@nads.de
 Catrin Urbanneck   c...@gppc.de
 Cesar Romani   rom...@ifm.uni-hamburg.de
diff --git a/src/extract.c b/src/extract.c
index 63f3525..5361506 100644
--- a/src/extract.c
+++ b/src/extract.c
@@ -682,6 +682,7 @@ extract_dir (char *file_name, int typeflag)
}
  if (S_ISDIR (st.st_mode))
{
+ status = 0;
  mode = st.st_mode;
  break;
}
diff --git a/src/misc.c b/src/misc.c
index 951449e..b609b86 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -417,6 +417,15 @@ maybe_backup_file (const char *file_name, bool 
this_is_the_archive)
 {
   struct stat file_stat;
 
+  assign_string (before_backup_name, file_name);
+
+  /* A run situation may exist between Emacs or other GNU programs trying to
+ make a backup for the same file simultaneously.  If theoretically
+ possible, real problems are unlikely.  Doing any better would require a
+ convention, GNU-wide, for all programs doing backups.  */
+
+  assign_string (after_backup_name, 0);
+
   /* Check if we really need to backup the file.  */
 
   if (this_is_the_archive  _remdev (file_name))
@@ -438,14 +447,6 @@ maybe_backup_file (const char *file_name, bool 
this_is_the_archive)
(S_ISBLK (file_stat.st_mode) || S_ISCHR (file_stat.st_mode)))
 return true;
 
-  assign_string (before_backup_name, file_name);
-
-  /* A run situation may exist between Emacs or other GNU programs trying to
- make a backup for the same file simultaneously.  If theoretically
- possible, real problems are unlikely.  Doing any better would require a
- convention, GNU-wide, for all programs doing backups.  */
-
-  assign_string (after_backup_name, 0);
   after_backup_name = find_backup_file_name (file_name, backup_type);
   if (! after_backup_name)
 xalloc_die ();
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2001834..64b1730 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -52,6 +52,7 @@ TESTSUITE_AT = \
  append.at\
  append01.at\
  append02.at\
+ backup01.at\
  chtype.at\
  comprec.at\
  delete01.at\
@@ -67,6 +68,7 @@ TESTSUITE_AT = \
  extrac05.at\
  extrac06.at\
  extrac07.at\
+ extrac08.at\
  gzip.at\
  grow.at\
  incremental.at\
diff --git a/tests/backup01.at b/tests/backup01.at
new file mode 100644
index 000..538dd3d
--- /dev/null
+++ b/tests/backup01.at
@@ -0,0 +1,49 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.

Re: [Bug-tar] Preserve timestamp of symlinks when extracting (if utimensat available)

2009-08-05 Thread Sergey Poznyakoff
Carl Worth cwo...@cworth.org ha escrit:

 I've attached a patch that fixes the bug when utimensat is available,
 and should have no effect when the function is not available,

Thanks a lot. I'll need some time to test it.

Regards,
Sergey