Adding a support script that can be used to make the checked-out
authorWayne Davison <wayned@samba.org>
Sat, 17 Nov 2007 18:29:13 +0000 (10:29 -0800)
committerWayne Davison <wayned@samba.org>
Sat, 17 Nov 2007 18:29:13 +0000 (10:29 -0800)
file-times of an initial clone nicer.

support/git-set-file-times [new file with mode: 0755]

diff --git a/support/git-set-file-times b/support/git-set-file-times
new file mode 100755 (executable)
index 0000000..9ddef25
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/perl -w
+use strict;
+
+# Sets mtime and atime of files to the latest commit time in git.
+#
+# This is useful after the first clone of the rsync repository BEFORE you
+# do any building.  It is also safe if you have done a "make distclean".
+
+my %ls;
+my $commit_time;
+
+$/ = "\0";
+open FH, 'git ls-files -z|' or die $!;
+while (<FH>) {
+    chomp;
+    $ls{$_} = $_;
+}
+close FH;
+
+$/ = "\n";
+open FH, "git log -r --name-only --no-color --pretty=raw -z @ARGV |" or die $!;
+while (<FH>) {
+    chomp;
+    if (/^committer .*? (\d+) (?:[\-\+]\d+)$/) {
+       $commit_time = $1;
+    } elsif (s/\0\0commit [a-f0-9]{40}$// or s/\0$//) {
+       my @files = delete @ls{split(/\0/, $_)};
+       @files = grep { defined $_ } @files;
+       next unless @files;
+       utime $commit_time, $commit_time, @files;
+    }
+    last unless %ls;
+}
+close FH;