From: Matt Wright <[email protected]>

Signed-off-by: Matt Wright <[email protected]>
---
 git-svn.perl | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/git-svn.perl b/git-svn.perl
index 050f2a36f4..d29730be3b 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1815,6 +1815,36 @@ sub complete_url_ls_init {
 
 sub verify_ref {
        my ($ref) = @_;
+
+       if ($ref =~ /^(.*)\^0$/) {
+               my $baseref = $1;
+               my $p = "$ENV{GIT_DIR}/$baseref";
+               $p = "$ENV{GIT_DIR}/refs/remotes/$baseref" unless -e $p;
+               $p = "$ENV{GIT_DIR}/refs/$baseref" unless -e $p;
+               $p = "$ENV{GIT_DIR}/refs/heads/$baseref" unless -e $p;
+
+               my $resolved = undef;
+               if (-e $p) {
+                       open FH, $p;
+                       $resolved = <FH>;
+                       chomp $resolved;
+                       close FH;
+               } elsif (-e "$ENV{GIT_DIR}/packed-refs") {
+                       open FH, "$ENV{GIT_DIR}/packed-refs";
+                       while (<FH>) {
+                               if ($_ =~ /^([0-9a-fA-F]+) 
((refs\/)?(remotes\/|heads\/|\/)?$baseref)$/) {
+                                       $resolved = $1;
+                                       last;
+                               }
+                       }
+               }
+
+               if (defined($resolved)) {
+                       return verify_ref("$1^0") if $resolved =~ /^ref: (.*)$/;
+                       return $resolved
+               }
+       }
+
        eval { command_oneline([ 'rev-parse', '--verify', $ref ],
                               { STDERR => 0 }); };
 }
-- 
2.20.0 (Apple Git-115)

Reply via email to