From 8de136222e0eafe506c5dee4b2f918620ca7a065 Mon Sep 17 00:00:00 2001 From: joshtriplett Date: Thu, 30 Aug 2007 02:32:35 +0000 Subject: [PATCH 1/1] git.pm: Handle operating in sub-trees of a git repository. When looking for git commits that affect the wiki, only include changes that affect the ikiwiki source directory. If that is not the top-level directory in this git repository, strip off the prefix as given by `git-rev-parse --show-prefix` from all names reported by git-log. Patch by Jamey Sharp . --- IkiWiki/Rcs/git.pm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/IkiWiki/Rcs/git.pm b/IkiWiki/Rcs/git.pm index fcf8994a3..9f64b8630 100644 --- a/IkiWiki/Rcs/git.pm +++ b/IkiWiki/Rcs/git.pm @@ -144,11 +144,11 @@ sub _merge_past ($$$) { #{{{ return $conflict; } #}}} -sub _parse_diff_tree (@) { #{{{ +sub _parse_diff_tree ($@) { #{{{ # Parse the raw diff tree chunk and return the info hash. # See git-diff-tree(1) for the syntax. - my ($dt_ref) = @_; + my ($prefix, $dt_ref) = @_; # End of stream? return if !defined @{ $dt_ref } || @@ -230,6 +230,7 @@ sub _parse_diff_tree (@) { #{{{ if ($file =~ m/^"(.*)"$/) { ($file=$1) =~ s/\\([0-7]{1,3})/chr(oct($1))/eg; } + $file =~ s/^\Q$prefix\E//; if (length $file) { push @{ $ci{'details'} }, { 'file' => decode_utf8($file), @@ -256,10 +257,11 @@ sub git_commit_info ($;$) { #{{{ $num ||= 1; my @raw_lines = - run_or_die('git-log', "--max-count=$num", '--pretty=raw', '--raw', '--abbrev=40', '--always', '-m', '-r', $sha1); + run_or_die('git-log', "--max-count=$num", '--pretty=raw', '--raw', '--abbrev=40', '--always', '-m', '-r', $sha1, '--', '.'); + my ($prefix) = run_or_die('git-rev-parse', '--show-prefix'); my @ci; - while (my $parsed = _parse_diff_tree(\@raw_lines)) { + while (my $parsed = _parse_diff_tree(($prefix or ""), \@raw_lines)) { push @ci, $parsed; } -- 2.44.0