From d71e945ee716fd18d60a583f8269aa10061ca89a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 12 Feb 2018 06:49:49 +0000 Subject: TLTREE: from git: support removed files (don't include them) git-svn-id: svn://tug.org/texlive/trunk@46608 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/TeXLive/TLTREE.pm | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'Master/tlpkg/TeXLive') diff --git a/Master/tlpkg/TeXLive/TLTREE.pm b/Master/tlpkg/TeXLive/TLTREE.pm index 6919da3b1cd..977642489aa 100644 --- a/Master/tlpkg/TeXLive/TLTREE.pm +++ b/Master/tlpkg/TeXLive/TLTREE.pm @@ -78,9 +78,10 @@ sub init_from_git { my $svnroot = $self->{'svnroot'}; my $retval = $?; my %files; + my %deletedfiles; my @lines; - my @foo = `cd $svnroot; git log --pretty=format:COMMIT=%h --name-only`; + my @foo = `cd $svnroot; git log --pretty=format:COMMIT=%h --no-renames --name-status`; if ($retval != 0) { $retval /= 256 if $retval > 0; tldie("TLTree: git log in $svnroot returned $retval, stopping.\n"); @@ -97,9 +98,27 @@ sub init_from_git { $rev++; next; } else { - # we only use the first occurrence of $f from the top, - # that is the most recent change - $files{$l} = $rev if (not(defined($files{$l}))); + # output is + # STATUS FILENAME + # where STATUS is as follows: + # Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (i.e. regular file, + # symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown (X), or have had their pairing Broken (B). + if ($l =~ m/^(A|C|D|M|R|T|U|X|B)\S*\s+(.*)$/) { + my $status = $1; + my $curfile = $2; + # + # check whether the file was already removed + if (!defined($files{$curfile}) && !defined($deletedfiles{$curfile})) { + # first occurrence of that file + if ($status eq "D") { + $deletedfiles{$curfile} = 1; + } else { + $files{$curfile} = $rev; + } + } + } else { + print STDERR "Unknown line in git output: >>$l<<\n"; + } } } -- cgit v1.2.3