X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=Debian%2FDgit.pm;h=37cbc51b68e52116705d1988cf040eef36919bda;hp=32c2bc5673cad88ac87f1e569fa2a0518a5cf443;hb=9e3287b0f9611af321b7cb1ca7b7757dbe96cfd2;hpb=0c838feda384f115a115ddd609eca9b8c6ece162 diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index 32c2bc56..37cbc51b 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -188,12 +188,15 @@ sub git_rev_parse ($) { return cmdoutput qw(git rev-parse), "$_[0]~0"; } -sub git_for_each_ref ($$) { - my ($pattern,$func) = @_; +sub git_for_each_ref ($$;$) { + my ($pattern,$func,$gitdir) = @_; # calls $func->($objid,$objtype,$fullrefname,$reftail); # $reftail is RHS of ref after refs/[^/]+/ # breaks if $pattern matches any ref `refs/blah' where blah has no `/' my @cmd = (qw(git for-each-ref), $pattern); + if (defined $gitdir) { + @cmd = ('sh','-ec','cd "$1"; shift; exec "$@"','x', $gitdir, @cmd); + } open GFER, "-|", @cmd or die $!; debugcmd "|", @cmd; while () { @@ -208,7 +211,7 @@ sub git_for_each_ref ($$) { sub git_get_ref ($) { # => '' if no such ref my ($refname) = @_; - my $_ = $refname; + local $_ = $refname; s{^refs/}{[r]efs/} or die "$refname $_ ?"; return cmdoutput qw(git for-each-ref --format=%(objectname)), $_; }