}
sub _cat_file_cb {
- my ($bref, undef, undef, $size, $result) = @_;
- @$result = ($bref, $size);
+ my ($bref, $oid, $type, $size, $result) = @_;
+ @$result = ($bref, $oid, $type, $size);
}
sub cat_file {
- my ($self, $oid, $sizeref) = @_;
+ my ($self, $oid) = @_;
my $result = [];
cat_async($self, $oid, \&_cat_file_cb, $result);
cat_async_wait($self);
- $$sizeref = $result->[1] if $sizeref;
- $result->[0];
+ wantarray ? @$result : $result->[0];
}
sub check_async_step ($$) {
# same args as popen above
sub qx {
- my $self = shift;
- my $fh = $self->popen(@_);
+ my $fh = popen(@_);
if (wantarray) {
- local $/ = "\n";
my @ret = <$fh>;
close $fh; # caller should check $?
@ret;
}
}
+sub date_parse {
+ my $self = shift;
+ map {
+ substr($_, length('--max-age='), -1)
+ } $self->qx('rev-parse', map { "--since=$_" } @_);
+}
+
# check_async and cat_async may trigger the other, so ensure they're
# both completely done by using this:
sub async_wait_all ($) {
my $ret = '???';
# don't show full FS path, basename should be OK:
if ($self->{git_dir} =~ m!/([^/]+)(?:/\.git)?\z!) {
- $ret = "/path/to/$1";
+ $ret = "$1.git";
}
wantarray ? ($ret) : $ret;
}
push(@$inflight, $oid, $cb, $arg);
}
-sub async_prefetch {
- my ($self, $oid, $cb, $arg) = @_;
- if (my $inflight = $self->{inflight}) {
- # we could use MAX_INFLIGHT here w/o the halving,
- # but lets not allow one client to monopolize a git process
- if (scalar(@$inflight) < int(MAX_INFLIGHT/2)) {
- print { $self->{out} } $oid, "\n" or
- $self->fail("write error: $!");
- return push(@$inflight, $oid, $cb, $arg);
- }
- }
- undef;
-}
-
sub extract_cmt_time {
my ($bref, undef, undef, undef, $modified) = @_;