X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/8863dd020e175247f423aed1dc63dbe0269af923..19919a98a8382dcc8723a0fb01b4a674f2c25214:/mr diff --git a/mr b/mr index 0bded23..0a50a33 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 @@ -239,8 +239,7 @@ repositories be processed earlier, and larger values to make repositories be processed later. Note that if a repository is located in a subdirectory of another -repository, ordering it to be processed earlier is not recommended, as this -can cause confusion during checkouts. +repository, ordering it to be processed earlier is not recommended. =item chain @@ -287,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; @@ -296,6 +294,7 @@ my %config; my %configfiles; my %knownactions; my %alias; +my $directory=getcwd(); Getopt::Long::Configure("no_permute"); my $result=GetOptions( @@ -311,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 @@ -448,7 +450,7 @@ foreach my $repo (@list) { } if (! @repos) { # fallback to find a leaf repo - foreach my $repo (@list) { + foreach my $repo (reverse @list) { my $topdir=$repo->{topdir}; my $subdir=$repo->{subdir}; @@ -473,7 +475,6 @@ if ($jobs > 1) { else { foreach my $repo (@repos) { record($repo, action($action, @$repo)); - print "\n"; } } if (! @ok && ! @failed && ! @skipped) { @@ -651,7 +652,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); @@ -672,9 +672,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; @@ -935,7 +937,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 @@ -968,6 +970,8 @@ update = cvs update "$@" elif [ -d "$MR_REPO"/.hg ]; then hg pull "$@" && hg update "$@" + elif [ -d "$MR_REPO"/_darcs ]; then + darcs pull "$@" else error "unknown repo type" fi @@ -982,6 +986,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 @@ -996,6 +1002,8 @@ commit = cvs commit "$@" elif [ -d "$MR_REPO"/.hg ]; then hg commit -m "$@" && hg push + elif [ -d "$MR_REPO"/_darcs ]; then + darcs commit -m "$@" && darcs push else error "unknown repo type" fi @@ -1010,6 +1018,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 @@ -1024,6 +1034,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 @@ -1067,6 +1079,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