15dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes#!/usr/bin/perl -w 25dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesuse strict; 35dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 45dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes# Sets mtime and atime of files to the latest commit time in git. 55dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes# 65dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes# This is useful after the first clone of the rsync repository BEFORE you 75dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes# do any building. It is also safe if you have done a "make distclean". 85dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 95dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesmy %ls; 105dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesmy $commit_time; 115dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesmy $prefix = @ARGV && $ARGV[0] =~ s/^--prefix=// ? shift : ''; 125dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 135dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes$/ = "\0"; 145dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesopen FH, 'git ls-files -z|' or die $!; 155dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hugheswhile (<FH>) { 165dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes chomp; 175dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes $ls{$_} = $_; 185dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes} 195dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesclose FH; 205dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes 215dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes$/ = "\n"; 225dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesopen FH, "git log -r --name-only --no-color --pretty=raw -z @ARGV |" or die $!; 235dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hugheswhile (<FH>) { 245dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes chomp; 255dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes if (/^committer .*? (\d+) (?:[\-\+]\d+)$/) { 265dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes $commit_time = $1; 275dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes } elsif (s/\0\0commit [a-f0-9]{40}$// or s/\0$//) { 285dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes my @files = delete @ls{split(/\0/, $_)}; 295dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes @files = grep { defined $_ } @files; 305dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes next unless @files; 315dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes map { s/^/$prefix/ } @files; 325dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes utime $commit_time, $commit_time, @files; 335dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes } 345dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes last unless %ls; 355dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughes} 365dec78d0c2663930cd1bbcecbbcee47f68bc52f3Elliott Hughesclose FH; 37