Bug#705967: myrepos - debian RFE #705967

2014-09-08 Thread martin f krafft
also sprach Joey Hess jo...@debian.org [2013-11-21 18:59 +0100]:
  When you have a moment could you please consider commit c070209
  from https://github.com/mhameed/myrepos
  
  Unfortunately most of github is unusable, so can't send a pull request
  independantly.
 
 It seems to me that if include commands are going to be run chdired to
 the directory that contains the mrconfig file, then this should also be
 done when loading ~/.mrconfig.
 
 Also, chdir($oldDir) could fail and should be guarded.

How about the attached patch? I think it addresses both issues (and
also updates verbose output).

-- 
 .''`.   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] 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



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


Bug#705967: myrepos - debian RFE #705967

2013-11-21 Thread Joey Hess
Mesar Hameed wrote:
 Hi Joey,
 
 Hope all is well with you.
 
 When you have a moment could you please consider commit c070209
 from https://github.com/mhameed/myrepos
 
 Unfortunately most of github is unusable, so can't send a pull request
 independantly.

It seems to me that if include commands are going to be run chdired to
the directory that contains the mrconfig file, then this should also be
done when loading ~/.mrconfig.

Also, chdir($oldDir) could fail and should be guarded.

-- 
see shy jo


signature.asc
Description: Digital signature