From c1903b7c2e589ce4379f1f9fb63b36b2fab274eb Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 11 Oct 2007 17:02:20 -0400 Subject: [PATCH 1/1] add bzr support also improve docs --- debian/control | 2 +- mr | 72 ++++++++++++++++++++++++++++---------------------- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/debian/control b/debian/control index d125ef9..075a283 100644 --- a/debian/control +++ b/debian/control @@ -11,7 +11,7 @@ Package: mr Architecture: all Section: utils Depends: -Suggests: subversion, git-core, cvs +Suggests: subversion, git-core, cvs, bzr Description: a Multiple Repository management tool The mr(1) command allows you to register a set of repositories in a .mrconfig file, and then checkout, update, or perform other actions on diff --git a/mr b/mr index 01a9feb..3131690 100755 --- a/mr +++ b/mr @@ -112,11 +112,17 @@ Be verbose. =head1 FILES B is configured by .mrconfig files. It starts by reading the .mrconfig -file in your home directory. Each repository specified in a .mrconfig file -can also have its own .mrconfig file in its root directory that can -optionally be used as well. So you could have a ~/.mrconfig that registers a -repository ~/src, that itself contains a ~/src/.mrconfig file, that in turn -registers several additional repositories. +file in your home directory, and this can in turn chain load .mrconfig files +from repositories. + +Here is an example .mrconfig file: + + [src] + checkout = svn co svn://svn.example.com/src/trunk src + chain = true + + [src/linux-2.6] + checkout = git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git The .mrconfig file uses a variant of the INI file format. Lines starting with "#" are comments. Lines ending with "\" are continued on to the next line. @@ -143,34 +149,28 @@ are run inside the repository, though not necessarily at the top of it. The "MR_REPO" environment variable is set to the path to the top of the repository. -There are three special parameters. If the "skip" parameter is set and -its command returns nonzero, then B will skip acting on that repository. +A few parameters have special meanings: + +=over 4 + +=item skip + +If the "skip" parameter is set and its command returns nonzero, then B +will skip acting on that repository. + +=item chain + If the "chain" parameter is set and its command returns nonzero, then B will try to load a .mrconfig file from the root of the repository. (You -should avoid chaining from repositories with untrusted committers.) The -"lib" parameter can specify some shell code that will be run before each -command, this can be a useful way to define shell functions for other commands -to use. +should avoid chaining from repositories with untrusted committers.) -For example: - - [src] - checkout = svn co svn://svn.example.com/src/trunk src - chain = true +=item lib - [src/linux-2.6] - skip = small - checkout = git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git +The "lib" parameter can specify some shell code that will be run before each +command, this can be a useful way to define shell functions for other commands +to use. - [default] - lib = \ - small() { - case "$(hostname)" in; \ - slug|snail); \ - return 0; ;; ; \ - esac; \ - return 1; \ - } +=back =head1 AUTHOR @@ -196,9 +196,9 @@ my %alias; Getopt::Long::Configure("no_permute"); my $result=GetOptions( - "d=s" => sub { $directory=abs_path($_[1]) }, - "c=s" => \$config, - "v" => \$verbose, + "d|directory=s" => sub { $directory=abs_path($_[1]) }, + "c|config=s" => \$config, + "verbose" => \$verbose, ); if (! $result || @ARGV < 1) { die("Usage: mr [-d directory] action [params ...]\n". @@ -484,6 +484,8 @@ update = \ svn update "$@"; \ elif [ -d "$MR_REPO"/.git ]; then \ git pull origin master "$@"; \ + elif [ -d "$MR_REPO"/.bzr ]; then \ + bzr merge "$@"; \ elif [ -d "$MR_REPO"/CVS ]; then \ cvs update "$@"; \ else \ @@ -494,6 +496,8 @@ status = \ svn status "$@"; \ elif [ -d "$MR_REPO"/.git ]; then \ git status "$@" || true; \ + elif [ -d "$MR_REPO"/.bzr ]; then \ + bzr status "$@"; \ elif [ -d "$MR_REPO"/CVS ]; then \ cvs status "$@"; \ else \ @@ -504,6 +508,8 @@ commit = \ svn commit "$@"; \ elif [ -d "$MR_REPO"/.git ]; then \ git commit -a "$@" && git push --all; \ + elif [ -d "$MR_REPO"/.bzr ]; then \ + bzr commit "$@" && bzr push; \ elif [ -d "$MR_REPO"/CVS ]; then \ cvs commit "$@"; \ else \ @@ -514,6 +520,8 @@ diff = \ svn diff "$@"; \ elif [ -d "$MR_REPO"/.git ]; then \ git diff "$@"; \ + elif [ -d "$MR_REPO"/.bzr ]; then \ + bzr diff "$@"; \ elif [ -d "$MR_REPO"/CVS ]; then \ cvs diff "$@"; \ else \ @@ -524,6 +532,8 @@ log = \ svn log"$@"; \ elif [ -d "$MR_REPO"/.git ]; then \ git log "$@"; \ + elif [ -d "$MR_REPO"/.bzr ]; then \ + bzr log "$@"; \ elif [ -d "$MR_REPO"/CVS ]; then \ cvs log "$@"; \ else \ -- 2.39.5