From: Joey Hess Date: Thu, 18 Oct 2007 20:42:30 +0000 (-0400) Subject: don't abs_path($ENV{MR_CONFIG}) X-Git-Url: https://git.madduck.net/code/myrepos.git/commitdiff_plain/55aa3f5eb153f5e46a5d795bc3fd40fa3f35646b?hp=166ff8a840ca4e98ab03305dc10c86e5f28e5554 don't abs_path($ENV{MR_CONFIG}) mrconfig files can be symlinks to files in other directories. But the directory the file is is significant, as it's the directory paths in the file are relative to. abs_path follows the symlink, so take care not to use it. --- diff --git a/mr b/mr index 44ff395..53f7a06 100755 --- a/mr +++ b/mr @@ -272,7 +272,7 @@ my %alias; Getopt::Long::Configure("no_permute"); my $result=GetOptions( "d|directory=s" => sub { $directory=abs_path($_[1]) }, - "c|config=s" => sub { $ENV{MR_CONFIG}=abs_path($_[1]) }, + "c|config=s" => \$ENV{MR_CONFIG}, "v|verbose" => \$verbose, "s|stats" => \$stats, "n|no-recurse" => \$no_recurse, @@ -283,6 +283,13 @@ if (! $result || @ARGV < 1) { } +# Make sure MR_CONFIG is an absolute path, but don't use abs_path since +# the config file might be a symlink to elsewhere, and the directory it's +# in is significant. +if ($ENV{MR_CONFIG} !~ /^\//) { + $ENV{MR_CONFIG}=getcwd()."/".$ENV{MR_CONFIG}; +} + loadconfig(\*DATA); loadconfig($ENV{MR_CONFIG}); #use Data::Dumper; @@ -325,6 +332,8 @@ elsif ($action eq 'config') { if ($section=~/^\//) { # try to convert to a path relative to the config file my ($dir)=$ENV{MR_CONFIG}=~/^(.*\/)[^\/]+$/; + $dir=abs_path($dir); + $dir.="/" unless $dir=~/\/$/; if ($section=~/^\Q$dir\E(.*)/) { $section=$1; }