been at least 12 hours since the last update.
skip = test $(whoami) != joey
- skip = [ "$1" = update ] && [ $(hours_since "$1") -lt 12 ]
+ skip = [ "$1" = update ] && ! hours_since "$1" 12
=item chain
system("mkdir", "-p", $dir);
}
}
- elsif ($action eq 'update') {
+ elsif ($action =~ /update/) {
if (! -d $dir) {
return action("checkout", $dir, $topdir, $subdir);
}
my $repo = shift @repos;
pipe(my $outfh, CHILD_STDOUT);
pipe(my $errfh, CHILD_STDERR);
- unless (my $pid = fork) {
+ my $pid;
+ unless ($pid = fork) {
die "mr $action: cannot fork: $!" unless defined $pid;
open(STDOUT, ">&CHILD_STDOUT") || die "mr $action cannot reopen stdout: $!";
open(STDERR, ">&CHILD_STDERR") || die "mr $action cannot reopen stderr: $!";
}
close CHILD_STDOUT;
close CHILD_STDERR;
- push @active, $repo;
+ push @active, [$pid, $repo];
push @fhs, [$outfh, $errfh];
push @out, ['', ''];
}
$fhs[$i][$channel] = undef;
if (! defined $fhs[$i][0] &&
! defined $fhs[$i][1]) {
+ waitpid($active[$i][0], 0);
print STDOUT $out[$i][0];
print STDERR $out[$i][1];
print "\n";
- record($active[$i], $? >> 8);
+ record($active[$i][1], $? >> 8);
splice(@fhs, $i, 1);
splice(@active, $i, 1);
splice(@out, $i, 1);
exit 1
}
hours_since() {
+ if [ -z "$1" ] || [ -z "$2" ]; then
+ error "mr: usage: hours_since action num"
+ fi
for dir in .git .svn .bzr CVS .hg; do
if [ -e "$MR_REPO/$dir" ]; then
flagfile="$MR_REPO/$dir/.mr_last$1"
if [ -z "$flagfile" ]; then
error "cannot determine flag filename"
fi
- perl -wle 'print -f shift() ? int((-M _) * 24) : 9999' "$flagfile"
- touch "$flagfile"
+ delta=$(perl -wle 'print -f shift() ? int((-M _) * 24) : 9999' "$flagfile")
+ if [ "$delta" -lt "$2" ]; then
+ exit 0
+ else
+ touch "$flagfile"
+ exit 1
+ fi
}
update =