Fix bug in mtime resetting code, which caused delta files to be created that failed...
authorJoey Hess <joey@kitenet.net>
Fri, 2 Mar 2012 18:56:25 +0000 (14:56 -0400)
committerJoey Hess <joey@kitenet.net>
Fri, 2 Mar 2012 18:56:25 +0000 (14:56 -0400)
Need to set mtime in a separate pass, after symlink replacement with
regular file is complete.

debian/changelog
pristine-tar

index 09e05f7..3d199f6 100644 (file)
@@ -1,3 +1,10 @@
+pristine-tar (1.21) UNRELEASED; urgency=low
+
+  * Fix bug in mtime resetting code, which caused delta files to be created
+    that failed to regenerate the original tarball. Closes: #661902
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 02 Mar 2012 14:55:07 -0400
+
 pristine-tar (1.20) unstable; urgency=low
 
   * pristine-xz: Try --extreme too. While my corpus has no such xz files,
index e3c2a11..ea3af7a 100755 (executable)
@@ -300,7 +300,11 @@ sub recreatetarball {
                        chmod(0755, "$tempdir/workdir/$file") ||
                                die "chmod: $!";
                }
+       }
 
+       # Set file times only after modifying of the directory content is
+       # done.
+       foreach my $file (@manifest) {
                if (-e "$tempdir/workdir/$file") {
                        utime(0, 0, "$tempdir/workdir/$file") || die "utime: $file: $!";
                }
@@ -324,6 +328,8 @@ sub recreatetarball {
                                chmod(0755, $_) ||
                                        die "chmod: $!";
                        }
+               }, "$tempdir/workdir");
+               find(sub {
                        utime(0, 0, $_) || die "utime: $_: $!";
                }, "$tempdir/workdir");
        }