All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
a4bfe55)
This is needed so that programs that print color to terminals
but not to pipes continue to do so when mr redirects output
to a variable before printing it or not printing it.
Suggests: subversion, git-core | git (>= 1:1.7), cvs, bzr, mercurial, darcs, fossil, vcsh, liburi-perl, curl, ack-grep
Provides: mr
Replaces: mr
Suggests: subversion, git-core | git (>= 1:1.7), cvs, bzr, mercurial, darcs, fossil, vcsh, liburi-perl, curl, ack-grep
Provides: mr
Replaces: mr
-Recommends: libwww-perl, libhtml-parser-perl, perl
+Recommends: libwww-perl, libhtml-parser-perl, libio-pty-easy-perl, perl
Description: tool to manage all your version control repos
The mr(1) command can checkout, update, or perform other actions on
a set of repositories as if they were one combined respository. It
Description: tool to manage all your version control repos
The mr(1) command can checkout, update, or perform other actions on
a set of repositories as if they were one combined respository. It
my $jobs=1;
my $trust_all=0;
my $directory=getcwd();
my $jobs=1;
my $trust_all=0;
my $directory=getcwd();
+my $terminal=-t STDOUT && eval{require IO::Pty::Easy;IO::Pty::Easy->import();1;} eq 1;
my $HOME_MR_CONFIG = "$ENV{HOME}/.mrconfig";
$ENV{MR_CONFIG}=find_mrconfig();
my $HOME_MR_CONFIG = "$ENV{HOME}/.mrconfig";
$ENV{MR_CONFIG}=find_mrconfig();
return $subdir =~ /^\// ? $subdir : $topdir.$subdir;
}
return $subdir =~ /^\// ? $subdir : $topdir.$subdir;
}
+sub terminal_friendly_spawn {
+ my $actionmsg = shift;
+ my $sh = shift;
+ my $quiet = shift;
+ my $output = "";
+ if ($terminal) {
+ my $pty = IO::Pty::Easy->new;
+ $pty->spawn($sh);
+ while ($pty->is_active) {
+ my $data = $pty->read();
+ $output .= $data if defined $data;
+ }
+ $pty->close;
+ } else {
+ $output = qx/$sh 2>&1/;
+ }
+ my $ret = $?;
+ if ($quiet && $ret != 0) {
+ print "$actionmsg\n" if $actionmsg;
+ print STDERR $output;
+ } elsif (!$quiet) {
+ print "$actionmsg\n" if $actionmsg;
+ print $output;
+ }
+ return $ret;
+}
+
sub action {
my ($action, $dir, $topdir, $subdir, $force_checkout) = @_;
my $fulldir=fulldir($topdir, $subdir);
sub action {
my ($action, $dir, $topdir, $subdir, $force_checkout) = @_;
my $fulldir=fulldir($topdir, $subdir);
my $ret=runsh $action, $topdir, $subdir,
$command, \@ARGV, sub {
my $sh=shift;
my $ret=runsh $action, $topdir, $subdir,
$command, \@ARGV, sub {
my $sh=shift;
- if ($quiet) {
- my $output = qx/$sh 2>&1/;
- my $ret = $?;
- if ($ret != 0) {
- print "$actionmsg\n";
- print STDERR $output;
- }
- return $ret;
+ if (!$jobs || $jobs > 1 || $quiet) {
+ return terminal_friendly_spawn($actionmsg, $sh, $quiet);
return OK unless defined $command;
my $ret=runsh $hook, $topdir, $subdir, $command, [], sub {
my $sh=shift;
return OK unless defined $command;
my $ret=runsh $hook, $topdir, $subdir, $command, [], sub {
my $sh=shift;
- if ($quiet) {
- my $output = qx/$sh 2>&1/;
- my $ret = $?;
- if ($ret != 0) {
- print STDERR $output;
- }
- return $ret;
+ if (!$jobs || $jobs > 1 || $quiet) {
+ return terminal_friendly_spawn(undef, $sh, $quiet);