about summary refs log tree commit homepage
path: root/lib/PublicInbox/Import.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-09-08 10:23:34 +0000
committerEric Wong <e@80x24.org>2016-09-08 20:03:43 +0000
commit75d9216d604a2e31201f1833e655a6f71296d05c (patch)
tree67cb27459788d60fbb0276c7670f6789b3b2012b /lib/PublicInbox/Import.pm
parent33d98667aef95cdf2511f5179263e894c19a211c (diff)
downloadpublic-inbox-75d9216d604a2e31201f1833e655a6f71296d05c.tar.gz
This reduces duplication, slightly.  We may be using it
yet again in a to-be-introduced function (or we may not
introduce it).
Diffstat (limited to 'lib/PublicInbox/Import.pm')
-rw-r--r--lib/PublicInbox/Import.pm37
1 files changed, 18 insertions, 19 deletions
diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm
index c2beb19c..09dd38d0 100644
--- a/lib/PublicInbox/Import.pm
+++ b/lib/PublicInbox/Import.pm
@@ -75,6 +75,15 @@ sub norm_body ($) {
         $b
 }
 
+sub _check_path ($$$$) {
+        my ($r, $w, $tip, $path) = @_;
+        return if $tip eq '';
+        print $w "ls $tip $path\n" or wfail;
+        local $/ = "\n";
+        defined(my $info = <$r>) or die "EOF from fast-import: $!";
+        $info =~ /\Amissing / ? undef : $info;
+}
+
 # returns undef on non-existent
 # ('MISMATCH', msg) on mismatch
 # (:MARK, msg) on success
@@ -86,20 +95,16 @@ sub remove {
 
         my ($r, $w) = $self->gfi_start;
         my $tip = $self->{tip};
-        return ('MISSING', undef) if $tip eq '';
-
-        print $w "ls $tip $path\n" or wfail;
-        local $/ = "\n";
-        my $check = <$r>;
-        defined $check or die "EOF from fast-import / ls: $!";
-        return ('MISSING', undef) if $check =~ /\Amissing /;
-        $check =~ m!\A100644 blob ([a-f0-9]{40})\t!s or die "not blob: $check";
+        my $info = _check_path($r, $w, $tip, $path) or return ('MISSING',undef);
+        $info =~ m!\A100644 blob ([a-f0-9]{40})\t!s or die "not blob: $info";
         my $blob = $1;
+
         print $w "cat-blob $blob\n" or wfail;
-        $check = <$r>;
-        defined $check or die "EOF from fast-import / cat-blob: $!";
-        $check =~ /\A[a-f0-9]{40} blob (\d+)\n\z/ or
-                                die "unexpected cat-blob response: $check";
+        local $/ = "\n";
+        $info = <$r>;
+        defined $info or die "EOF from fast-import / cat-blob: $!";
+        $info =~ /\A[a-f0-9]{40} blob (\d+)\n\z/ or
+                                die "unexpected cat-blob response: $info";
         my $left = $1;
         my $offset = 0;
         my $buf = '';
@@ -162,13 +167,7 @@ sub add {
 
         my ($r, $w) = $self->gfi_start;
         my $tip = $self->{tip};
-        if ($tip ne '') {
-                print $w "ls $tip $path\n" or wfail;
-                local $/ = "\n";
-                my $check = <$r>;
-                defined $check or die "EOF from fast-import: $!";
-                return unless $check =~ /\Amissing /;
-        }
+        _check_path($r, $w, $tip, $path) and return;
 
         # kill potentially confusing/misleading headers
         $mime->header_set($_) for qw(bytes lines content-length status);