tags 743576 patch
thanks

Hopefully the last message to this bug report. While I have not been
able to tackle #743617, I think that the two attached patches fix
#743576.

Also, I unmerged #705967, because I don't think #743576 is the
solution here. Instead, I think we should introduce proper variable
handling in [DEFAULT].

-- 
 .''`.   martin f. krafft <madduck@d.o> @martinkrafft
: :'  :  proud Debian developer
`. `'`   http://people.debian.org/~madduck
  `-  Debian - when you have better things to do than fixing systems
From fb436fec2ca98879769e4ac20d905ed9e717815b Mon Sep 17 00:00:00 2001
From: "martin f. krafft" <madd...@madduck.net>
Date: Tue, 9 Sep 2014 06:39:54 +0200
Subject: [PATCH 1/2] chdir() to config directory before including

Make mr try to chdir() to the dirname() of any .mrconfig files it's
supposed to load. If the chdir() is successful, then the filename is
truncated to basename(). If the chdir() is unsuccessful, then processing
happens as before.

Signed-off-by: martin f. krafft <madd...@madduck.net>
---
 mr | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/mr b/mr
index 18e8761..b7cd3cb 100755
--- a/mr
+++ b/mr
@@ -563,6 +563,7 @@ use warnings;
 use strict;
 use Getopt::Long;
 use Cwd qw(getcwd abs_path);
+use File::Basename;
 
 # things that can happen when mr runs a command
 use constant {
@@ -1278,6 +1279,7 @@ sub loadconfig {
 	my @toload;
 
 	my $in;
+	my $absf=abs_path($f);
 	my $trusted;
 	if (ref $f eq 'GLOB') {
 		$dir="";
@@ -1285,7 +1287,6 @@ sub loadconfig {
 		$trusted=1;
 	}
 	else {
-		my $absf=abs_path($f);
 		if ($loaded{$absf}) {
 			return;
 		}
@@ -1301,7 +1302,11 @@ sub loadconfig {
 		}
 
 		$dir=abs_path($dir)."/";
-		
+
+		if (chdir($dir)) {
+			$f=basename($f);
+		}
+
 		if (! exists $configfiles{$dir}) {
 			$configfiles{$dir}=$f;
 		}
@@ -1323,7 +1328,12 @@ sub loadconfig {
 			return;
 		}
 
-		print "mr: loading config $f\n" if $verbose;
+		if ($f =~ /\//) {
+			print "mr: loading config $f\n" if $verbose;
+		} else {
+			print "mr: loading config $f (from ".getcwd().")\n" if $verbose;
+		}
+
 		open($in, "<", $f) || die "mr: open $f: $!\n";
 	}
 	my @lines=<$in>;
@@ -1367,7 +1377,7 @@ sub loadconfig {
 				"this can allow arbitrary code execution!)\n";
 		}
 		else {
-			die "mr: $msg in untrusted $f line $lineno\n".
+			die "mr: $msg in untrusted $absf line $lineno\n".
 				"(To trust this file, list it in ~/.mrtrust.)\n";
 		}
 	};
-- 
2.1.0

From d98311be7b311946f199443443d9fab3ecbaead9 Mon Sep 17 00:00:00 2001
From: "martin f. krafft" <madd...@madduck.net>
Date: Tue, 9 Sep 2014 09:02:09 +0200
Subject: [PATCH 2/2] Always ensure all parent .mrconfig files are loaded

There may be parent .mrconfig files between ~/.mrconfig and ./.mrconfig
that is not chain-loaded from ~/.mrconfig. Such is the case if you e.g.
download a team-repository to work (such as the debconf-team repo), but
you don't want to put it into the ~/.mrconfig chain.

In those cases, all parent .mrconfig files should be loaded, in case
there are settings or lib snippets needed in subdirectories.

Fortunately, the code already ensures that config files are only loaded
once, so this is trivial to patch.

Signed-off-by: martin f. krafft <madd...@madduck.net>
---
 mr | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mr b/mr
index b7cd3cb..3c5321f 100755
--- a/mr
+++ b/mr
@@ -1317,6 +1317,7 @@ sub loadconfig {
 			if ($parent eq '/') {
 				$parent="";
 			}
+			loadconfig($parent);
 			if (exists $config{$parent} &&
 			    exists $config{$parent}{DEFAULT}) {
 				$config{$dir}{DEFAULT}={ %{$config{$parent}{DEFAULT}} };
-- 
2.1.0

Attachment: digital_signature_gpg.asc
Description: Digital signature (see http://martin-krafft.net/gpg/sig-policy/999bbcc4/current)

Reply via email to