X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/ec4e590670f444fdbea5ad72dbda9cfdd4eac4b0..4a93e5fc1444c6dcff1c0a8254ab600b7e798fef:/mr diff --git a/mr b/mr index d9cde93..1253102 100755 --- a/mr +++ b/mr @@ -30,9 +30,9 @@ B [options] action [params ...] B is a Multiple Repository management tool. It can checkout, update, or perform other actions on a set of repositories as if they were one combined -respository. It supports any combination of subversion, git, cvs, mecurial and -bzr repositories, and support for other revision control systems can easily be -added. +respository. It supports any combination of subversion, git, cvs, mecurial, +bzr and darcs repositories, and support for other revision control systems can +easily be added. B cds into and operates on all registered repositories at or below your working directory. Or, if you are in a subdirectory of a repository that @@ -286,7 +286,6 @@ $SIG{INT}=sub { $ENV{MR_CONFIG}="$ENV{HOME}/.mrconfig"; my $config_overridden=0; -my $directory=getcwd(); my $verbose=0; my $stats=0; my $no_recurse=0; @@ -295,6 +294,7 @@ my %config; my %configfiles; my %knownactions; my %alias; +my $directory=getcwd(); Getopt::Long::Configure("no_permute"); my $result=GetOptions( @@ -310,6 +310,9 @@ if (! $result || @ARGV < 1) { "(Use mr help for man page.)\n"); } +if (! defined $directory) { + die("mr: failed to determine working directory\n"); +} # Make sure MR_CONFIG is an absolute path, but don't use abs_path since # the config file might be a symlink to elsewhere, and the directory it's @@ -472,7 +475,6 @@ if ($jobs > 1) { else { foreach my $repo (@repos) { record($repo, action($action, @$repo)); - print "\n"; } } if (! @ok && ! @failed && ! @skipped) { @@ -561,7 +563,9 @@ sub action { #{{{ print "mr $action: $topdir$subdir\n"; } else { - print "mr $action: $topdir$subdir (in subdir $directory)\n"; + my $s=$directory; + $s=~s/^\Q$topdir$subdir\E\/?//; + print "mr $action: $topdir$subdir (in subdir $s)\n"; } my $command="set -e; ".$lib. "my_action(){ $config{$topdir}{$subdir}{$action}\n }; my_action ". @@ -650,7 +654,6 @@ sub mrs { #{{{ waitpid($active[$i][0], 0); print STDOUT $out[$i][0]; print STDERR $out[$i][1]; - print "\n"; record($active[$i][1], $? >> 8); splice(@fhs, $i, 1); splice(@active, $i, 1); @@ -671,9 +674,11 @@ sub record { #{{{ if ($ret == OK) { push @ok, $dir; + print "\n"; } elsif ($ret == FAILED) { push @failed, $dir; + print "\n"; } elsif ($ret == SKIPPED) { push @skipped, $dir; @@ -934,7 +939,7 @@ lib = if [ -z "$1" ] || [ -z "$2" ]; then error "mr: usage: hours_since action num" fi - for dir in .git .svn .bzr CVS .hg; do + for dir in .git .svn .bzr CVS .hg _darcs; do if [ -e "$MR_REPO/$dir" ]; then flagfile="$MR_REPO/$dir/.mr_last$1" break @@ -967,6 +972,8 @@ update = cvs update "$@" elif [ -d "$MR_REPO"/.hg ]; then hg pull "$@" && hg update "$@" + elif [ -d "$MR_REPO"/_darcs ]; then + darcs pull -a "$@" else error "unknown repo type" fi @@ -981,6 +988,8 @@ status = cvs status "$@" elif [ -d "$MR_REPO"/.hg ]; then hg status "$@" + elif [ -d "$MR_REPO"/_darcs ]; then + darcs whatsnew -ls "$@" else error "unknown repo type" fi @@ -995,6 +1004,8 @@ commit = cvs commit "$@" elif [ -d "$MR_REPO"/.hg ]; then hg commit -m "$@" && hg push + elif [ -d "$MR_REPO"/_darcs ]; then + darcs commit -a -m "$@" && darcs push -a else error "unknown repo type" fi @@ -1009,6 +1020,8 @@ diff = cvs diff "$@" elif [ -d "$MR_REPO"/.hg ]; then hg diff "$@" + elif [ -d "$MR_REPO"/_darcs ]; then + darcs diff "$@" else error "unknown repo type" fi @@ -1023,6 +1036,8 @@ log = cvs log "$@" elif [ -d "$MR_REPO"/.hg ]; then hg log "$@" + elif [ -d "$MR_REPO"/_darcs ]; then + darcs changes "$@" else error "unknown repo type" fi @@ -1066,6 +1081,11 @@ register = echo "Registering mercurial repo url: $url in $MR_CONFIG" mr -c "$MR_CONFIG" config "$(pwd)" \ checkout="hg clone $url $basedir" + elif [ -d _darcs ]; then + url=$(cat _darcs/prefs/defaultrepo) + echo "Registering darcs repository $url in $MR_CONFIG" + mr -c "$MR_CONFIG" config "$(pwd)" \ + checkout="darcs get $url $basedir" else error "unable to register this repo type" fi