X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/1a2c28ad8b1aa4904916eff977756c6aaaa3b632..a8b4170ea0c023fc0f0d930ee7a970a13c600792:/mr?ds=sidebyside

diff --git a/mr b/mr
index e4beac8..87618a2 100755
--- a/mr
+++ b/mr
@@ -16,6 +16,8 @@ B<mr> [options] status
 
 B<mr> [options] commit [-m "message"]
 
+B<mr> [options] record [-m "message"]
+
 B<mr> [options] diff
 
 B<mr> [options] log
@@ -30,7 +32,7 @@ B<mr> [options] action [params ...]
 
 B<mr> 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,
+repository. It supports any combination of subversion, git, cvs, mecurial,
 bzr and darcs repositories, and support for other revision control systems can
 easily be added.
 
@@ -62,7 +64,16 @@ uncommitted changes are present in the repository.
 =item commit (or ci)
 
 Commits changes to each repository. (By default, changes are pushed to the
-remote repository too, when using distributed systems like git.)
+remote repository too, when using distributed systems like git. If you
+don't like this default, you can change it in your .mrconfig, or use record
+instead.)
+
+The optional -m parameter allows specifying a commit message.
+
+=item record
+
+Records changes to the local repository, but does not push them to the
+remote repository. Only supported for distributed revision control systems.
 
 The optional -m parameter allows specifying a commit message.
 
@@ -121,8 +132,8 @@ Displays this help.
 
 =back
 
-Actions can be abbreviated to any unambiguous subsctring, so
-"mr st" is equivilant to "mr status", and "mr up" is equivilant to "mr
+Actions can be abbreviated to any unambiguous substring, so
+"mr st" is equivalent to "mr status", and "mr up" is equivalent to "mr
 update"
 
 Additional parameters can be passed to most commands, and are passed on
@@ -147,6 +158,10 @@ Use the specified mrconfig file. The default is B<~/.mrconfig>
 
 Be verbose.
 
+=item -q
+
+Be quiet.
+
 =item -s
 
 Expand the statistics line displayed at the end to include information
@@ -316,6 +331,7 @@ use constant {
 # configurables
 my $config_overridden=0;
 my $verbose=0;
+my $quiet=0;
 my $stats=0;
 my $max_depth;
 my $no_chdir=0;
@@ -462,12 +478,12 @@ sub action { #{{{
 	}
 	else {
 		if (! $no_chdir) {
-			print "mr $action: $topdir$subdir\n";
+			print "mr $action: $topdir$subdir\n" unless $quiet;
 		}
 		else {
 			my $s=$directory;
 			$s=~s/^\Q$topdir$subdir\E\/?//;
-			print "mr $action: $topdir$subdir (in subdir $s)\n";
+			print "mr $action: $topdir$subdir (in subdir $s)\n" unless $quiet;
 		}
 		$command="set -e; ".$lib.
 			"my_action(){ $command\n }; my_action ".
@@ -605,10 +621,10 @@ sub showstats { #{{{
 		showstat($#ok+1, "ok", "ok"),
 		showstat($#failed+1, "failed", "failed"),
 		showstat($#skipped+1, "skipped", "skipped"),
-	).")\n";
+	).")\n" unless $quiet;
 	if ($stats) {
 		if (@skipped) {
-			print "mr $action: (skipped: ".join(" ", @skipped).")\n";
+			print "mr $action: (skipped: ".join(" ", @skipped).")\n" unless $quiet;
 		}
 		if (@failed) {
 			print STDERR "mr $action: (failed: ".join(" ", @failed).")\n";
@@ -1054,6 +1070,7 @@ sub getopts { #{{{
 		"d|directory=s" => sub { $directory=abs_path($_[1]) },
 		"c|config=s" => sub { $ENV{MR_CONFIG}=$_[1]; $config_overridden=1 },
 		"v|verbose" => \$verbose,
+		"q|quiet" => \$quiet,
 		"s|stats" => \$stats,
 		"n|no-recurse:i" => \$max_depth,
 		"j|jobs:i" => \$jobs,
@@ -1166,7 +1183,12 @@ git_bare_test =
 	test "`GIT_CONFIG="$MR_REPO"/config git config --get core.bare`" = true
 
 svn_update = svn update "$@"
-git_update = if [ "$@" ]; then git pull "$@"; else git pull -t origin master; fi
+git_update =
+	if [ "$@" ]; then
+		git pull "$@"
+	else
+		git pull
+	fi
 bzr_update = bzr merge "$@"
 cvs_update = cvs update "$@"
 hg_update  = hg pull "$@" && hg update "$@"
@@ -1184,14 +1206,19 @@ git_commit = git commit -a "$@" && git push --all
 bzr_commit = bzr commit "$@" && bzr push
 cvs_commit = cvs commit "$@"
 hg_commit  = hg commit -m "$@" && hg push
-darcs_commit = darcs commit -a -m "$@" && darcs push -a
+darcs_commit = darcs record -a -m "$@" && darcs push -a
+
+git_record = git commit -a "$@"
+bzr_record = bzr commit "$@"
+hg_record  = hg commit -m "$@"
+darcs_record = darcs record -a -m "$@"
 
 svn_diff = svn diff "$@"
 git_diff = git diff "$@"
 bzr_diff = bzr diff "$@"
 cvs_diff = cvs diff "$@"
 hg_diff  = hg diff "$@"
-darcs_diff = darcs diff "$@"
+darcs_diff = darcs diff -u "$@"
 
 svn_log = svn log "$@"
 git_log = git log "$@"
@@ -1216,7 +1243,7 @@ git_register =
 	echo "Registering git url: $url in $MR_CONFIG"
 	mr -c "$MR_CONFIG" config "`pwd`" checkout="git clone '$url' '$MR_REPO'"
 bzr_register =
-	url=`cat .bzr/branch/parent`
+	url="`LC_ALL=C bzr info . | egrep -i 'checkout of branch|parent branch' | awk '{print $NF}'`"
 	if [ -z "$url" ]; then
 		error "cannot determine bzr url"
 	fi
@@ -1237,7 +1264,7 @@ hg_register =
 darcs_register = 
 	url=`cat _darcs/prefs/defaultrepo`
 	echo "Registering darcs repository $url in $MR_CONFIG"
-	mr -c "$MR_CONFIG" config "`pwd`" checkout="darcs get '$url'p '$MR_REPO'"
+	mr -c "$MR_CONFIG" config "`pwd`" checkout="darcs get '$url' '$MR_REPO'"
 git_bare_register = 
 	url="`LC_ALL=C GIT_CONFIG=config git config --get remote.origin.url`" || true
 	if [ -z "$url" ]; then
@@ -1250,7 +1277,10 @@ help =
 	if [ ! -e "$MR_PATH" ]; then
 		error "cannot find program path"
 	fi
-	(pod2man -c mr "$MR_PATH" | man -l -) || error "pod2man or man failed"
+	tmp=$(mktemp -t mr.XXXXXXXXXX) || error "mktemp failed"
+	trap "rm -f $tmp" exit
+	pod2man -c mr "$MR_PATH" > "$tmp" || error "pod2man failed"
+	man -l "$tmp" || error "man failed"
 list = true
 config =