X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/be8197cd3ebbd893e7d791f20ff7685d2815b55f..91d4aea5353b977fc40077d9534a6d28a3466873:/mr diff --git a/mr b/mr index 613f86a..4dbaa7a 100755 --- a/mr +++ b/mr @@ -179,6 +179,11 @@ the current working directory. Use the specified mrconfig file. The default is B<~/.mrconfig> +=item -p + +Search in the current directory, and its parent directories and use +the first B<.mrconfig> found, instead of the default B<~/.mrconfig>. + =item -v Be verbose. @@ -221,11 +226,6 @@ a good speedup in updates without loading the machine too much. =head1 FILES -The ~/.mrlog file contains commands that mr has remembered to run later, -due to being offline. You can delete or edit this file to remove commands, -or even to add other commands for 'mr online' to run. If the file is -present, mr assumes it is in offline mode. - B is configured by .mrconfig files. It starts by reading the .mrconfig file in your home directory, and this can in turn chain load .mrconfig files from repositories. @@ -341,6 +341,11 @@ the action that is performed for a given revision control system, you can override these rcs specific actions. To add a new revision control system, you can just add rcs specific actions for it. +The ~/.mrlog file contains commands that mr has remembered to run later, +due to being offline. You can delete or edit this file to remove commands, +or even to add other commands for 'mr online' to run. If the file is +present, mr assumes it is in offline mode. + =head1 EXTENSIONS mr can be extended to support things such as unison and git-svn. Some @@ -418,7 +423,7 @@ sub rcs_test { chomp $rcs; if ($rcs=~/\n/s) { $rcs=~s/\n/, /g; - print STDERR "mr $action: found multiple possible repository types ($rcs) for $dir\n"; + print STDERR "mr $action: found multiple possible repository types ($rcs) for $topdir$subdir\n"; return undef; } if (! length $rcs) { @@ -511,22 +516,22 @@ sub action { elsif (! defined $command) { my $rcs=rcs_test(@_); if (! defined $rcs) { - print STDERR "mr $action: unknown repository type and no defined $action command for $dir\n"; + print STDERR "mr $action: unknown repository type and no defined $action command for $topdir$subdir\n"; return FAILED; } else { - print STDERR "mr $action: no defined action for $rcs repository $dir, skipping\n"; + print STDERR "mr $action: no defined action for $rcs repository $topdir$subdir, skipping\n"; return SKIPPED; } } else { if (! $no_chdir) { - print "mr $action: $dir\n" unless $quiet; + print "mr $action: $topdir$subdir\n" unless $quiet; } else { my $s=$directory; - $s=~s/^\Q$dir\E\/?//; - print "mr $action: $dir (in subdir $s)\n" unless $quiet; + $s=~s/^\Q$topdir$subdir\E\/?//; + print "mr $action: $topdir$subdir (in subdir $s)\n" unless $quiet; } $command="set -e; ".$lib. "my_action(){ $command\n }; my_action ". @@ -1147,12 +1152,24 @@ sub expandaction { return $action; } +sub find_nearest_mrconfig { + my $dir=getcwd(); + while (length $dir) { + if (-e "$dir/.mrconfig") { + return "$dir/.mrconfig"; + } + $dir=~s/\/[^\/]*$//; + } + die "no .mrconfig found in path\n"; +} + sub getopts { my @saved=@ARGV; Getopt::Long::Configure("bundling", "no_permute"); my $result=GetOptions( "d|directory=s" => sub { $directory=abs_path($_[1]) }, "c|config=s" => sub { $ENV{MR_CONFIG}=$_[1]; $config_overridden=1 }, + "p|path" => sub { $ENV{MR_CONFIG}=find_nearest_mrconfig(); $config_overridden=1 }, "v|verbose" => \$verbose, "q|quiet" => \$quiet, "s|stats" => \$stats, @@ -1275,7 +1292,7 @@ git_bare_test = svn_update = svn update "$@" git_update = git pull "$@" -bzr_update = bzr merge "$@" +bzr_update = bzr merge --pull "$@" cvs_update = cvs update "$@" hg_update = hg pull "$@" && hg update "$@" darcs_update = darcs pull -a "$@"