From 813a7ced61b4c18222f43b31c10ad7b4c8e16bf1 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 19 Aug 2018 19:15:56 +0100 Subject: git-debrebase: get_tree: Support $precheck and $recurse Signed-off-by: Ian Jackson --- git-debrebase | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/git-debrebase b/git-debrebase index 894bad5..5a9a9cb 100755 --- a/git-debrebase +++ b/git-debrebase @@ -183,23 +183,30 @@ sub run_deferred_updates ($) { @deferred_update_messages = (); } -sub get_tree ($) { +sub get_tree ($;$$) { # tree object name => ([ $name, $info ], ...) # where $name is the sort key, ie has / at end for subtrees # $info is the LHS from git-ls-tree ( ) - # will crash if $x does not exist, so don't do that; + # without $precheck, will crash if $x does not exist, so don't do that; # instead pass '' to get (). - my ($x) = @_; + my ($x, $precheck, $recurse) = @_; return () if !length $x; + if ($precheck) { + my ($type, $dummy) = git_cat_file $x, [qw(tree missing)]; + return () if $type eq 'missing'; + } + our (@get_tree_memo, %get_tree_memo); my $memo = $get_tree_memo{$x}; return @$memo if $memo; local $Debian::Dgit::debugcmd_when_debuglevel = 3; my @l; - my @cmd = (qw(git ls-tree -z --full-tree --), $x); + my @cmd = (qw(git ls-tree -z --full-tree)); + push @cmd, qw(-r) if $recurse; + push @cmd, qw(--), $x; my $o = cmdoutput @cmd; $o =~ s/\0$//s; my $last = ''; -- cgit v1.2.3