summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2009-10-09 23:07:12 +0000
committerDmitry V. Levin <ldv@altlinux.org>2009-10-09 23:07:28 +0000
commit81dfcfb18b0b481e868d449184bb403dcc8498da (patch)
tree96da23fae678aaf91aba8afa092d70fe0704eda8
parent76ac37d8d57c17ec00612f50532a2b275c8c50da (diff)
downloadstrace-81dfcfb18b0b481e868d449184bb403dcc8498da.tar.gz
strace-81dfcfb18b0b481e868d449184bb403dcc8498da.tar.bz2
strace-81dfcfb18b0b481e868d449184bb403dcc8498da.tar.xz
* git-set-file-times: Import from rsync.
-rwxr-xr-xgit-set-file-times36
1 files changed, 36 insertions, 0 deletions
diff --git a/git-set-file-times b/git-set-file-times
new file mode 100755
index 0000000..85d854e
--- /dev/null
+++ b/git-set-file-times
@@ -0,0 +1,36 @@
+#!/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;
+my $prefix = @ARGV && $ARGV[0] =~ s/^--prefix=// ? shift : '';
+
+$/ = "\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;
+ map { s/^/$prefix/ } @files;
+ utime $commit_time, $commit_time, @files;
+ }
+ last unless %ls;
+}
+close FH;