File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / support / git-set-file-times
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 07:51:15 2013 UTC (10 years, 9 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_1_2p5, RSYNC3_1_0, HEAD
v 3.1.0

    1: #!/usr/bin/perl
    2: use strict;
    3: use warnings;
    4: 
    5: # Sets mtime and atime of files to the latest commit time in git.
    6: #
    7: # This is useful after the first clone of the rsync repository BEFORE you
    8: # do any building.  It is also safe if you have done a "make distclean".
    9: 
   10: my %ls;
   11: my $commit_time;
   12: my $prefix = @ARGV && $ARGV[0] =~ s/^--prefix=// ? shift : '';
   13: 
   14: $/ = "\0";
   15: open FH, 'git ls-files -z|' or die $!;
   16: while (<FH>) {
   17:     chomp;
   18:     $ls{$_} = $_;
   19: }
   20: close FH;
   21: 
   22: $/ = "\n";
   23: open FH, "git log -r --name-only --no-color --pretty=raw -z @ARGV |" or die $!;
   24: while (<FH>) {
   25:     chomp;
   26:     if (/^committer .*? (\d+) (?:[\-\+]\d+)$/) {
   27: 	$commit_time = $1;
   28:     } elsif (s/\0\0commit [a-f0-9]{40}$// or s/\0$//) {
   29: 	my @files = delete @ls{split(/\0/, $_)};
   30: 	@files = grep { defined $_ } @files;
   31: 	next unless @files;
   32: 	map { s/^/$prefix/ } @files;
   33: 	utime $commit_time, $commit_time, @files;
   34:     }
   35:     last unless %ls;
   36: }
   37: close FH;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>