From 91d4aea5353b977fc40077d9534a6d28a3466873 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 6 Aug 2009 22:14:22 -0400 Subject: [PATCH] Add -p switch, that makes mr search the current directory and its parents for a .mrconfig file to use. Useful for projects that want to publish a mrconfig file to use to check out their several repositories, without requiring users put it anywhere in particular. --- debian/changelog | 9 +++++++++ debian/control | 4 ++-- mr | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 70ebe43..32958fa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +mr (0.41) UNRELEASED; urgency=low + + * Add -p switch, that makes mr search the current directory and its + parents for a .mrconfig file to use. Useful for projects that want + to publish a mrconfig file to use to check out their several repositories, + without requiring users put it anywhere in particular. + + -- Joey Hess Thu, 06 Aug 2009 22:13:05 -0400 + mr (0.40) unstable; urgency=low * Pass --pull to bzr merge to avoid needing to commit diff --git a/debian/control b/debian/control index 95eb801..36f51bf 100644 --- a/debian/control +++ b/debian/control @@ -1,5 +1,5 @@ Source: mr -Section: utils +Section: vcs Priority: optional Build-Depends: debhelper (>= 7), dpkg-dev (>= 1.9.0) Maintainer: Joey Hess @@ -9,7 +9,7 @@ Vcs-Git: git://git.kitenet.net/mr Package: mr Architecture: all -Section: utils +Section: vcs Depends: ${misc:Depends} Suggests: subversion, git-core, cvs, bzr, mercurial, darcs, liburi-perl Recommends: libwww-perl, libhtml-parser-perl diff --git a/mr b/mr index a897a5f..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. @@ -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, -- 2.39.5