use warnings;
use POSIX qw(dup2);
use IO::Handle; # ->autoflush
-use PublicInbox::Spawn qw(spawn popen_rd);
+use File::Glob qw(bsd_glob GLOB_NOSORT);
+use PublicInbox::Spawn qw(popen_rd);
use PublicInbox::Tmpfile;
use base qw(Exporter);
our @EXPORT_OK = qw(git_unquote git_quote);
}
return;
}
- my ($in_r, $in_w, $out_r, $out_w);
-
- pipe($in_r, $in_w) or fail($self, "pipe failed: $!");
+ my ($out_r, $out_w);
pipe($out_r, $out_w) or fail($self, "pipe failed: $!");
- if ($^O eq 'linux') { # 1031: F_SETPIPE_SZ
- fcntl($out_w, 1031, 4096);
- fcntl($in_w, 1031, 4096) if $batch eq '--batch-check';
- }
-
my @cmd = (qw(git), "--git-dir=$self->{git_dir}",
qw(-c core.abbrev=40 cat-file), $batch);
- my $redir = { 0 => $out_r, 1 => $in_w };
+ my $redir = { 0 => $out_r };
if ($err) {
my $id = "git.$self->{git_dir}$batch.err";
my $fh = tmpfile($id) or fail($self, "tmpfile($id): $!");
$self->{$err} = $fh;
$redir->{2} = $fh;
}
- my $p = spawn(\@cmd, undef, $redir);
- defined $p or fail($self, "spawn failed: $!");
+ my ($in_r, $p) = popen_rd(\@cmd, undef, $redir);
$self->{$pid} = $p;
$out_w->autoflush(1);
+ if ($^O eq 'linux') { # 1031: F_SETPIPE_SZ
+ fcntl($out_w, 1031, 4096);
+ fcntl($in_r, 1031, 4096) if $batch eq '--batch-check';
+ }
$self->{$out} = $out_w;
$self->{$in} = $in_r;
}
sub qx {
my ($self, @cmd) = @_;
my $fh = $self->popen(@cmd);
- defined $fh or return;
local $/ = "\n";
return <$fh> if wantarray;
local $/;
my ($self) = @_;
my $n = 0;
my $pack_dir = git_path($self, 'objects/pack');
- foreach my $p (glob("$pack_dir/*.pack")) {
+ foreach my $p (bsd_glob("$pack_dir/*.pack", GLOB_NOSORT)) {
$n += -s $p;
}
$n
my ($self) = @_;
my $modified = 0;
my $fh = popen($self, qw(rev-parse --branches));
- defined $fh or return $modified;
cat_async_begin($self);
local $/ = "\n";
- foreach my $oid (<$fh>) {
+ while (my $oid = <$fh>) {
chomp $oid;
cat_async($self, $oid, \&extract_cmt_time, \$modified);
}