X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/8e2f0e9b26f076d144fe5ff9e657f477db648db3..1b7137c19b38431c79b41d1dfde73ef76f826836:/mr diff --git a/mr b/mr index d4622d9..4fc7971 100755 --- a/mr +++ b/mr @@ -224,7 +224,9 @@ is an alias, and its value is the action to use. All other sections add repositories. The section header specifies the directory where the repository is located. This is relative to the directory that contains the mrconfig file, but you can also choose to use absolute -paths. +paths. (Note that you can use environment variables in section names; they +will be passed through the shell for expansion. For example, +"[$HOSTNAME]", or "[${HOSTNAME}foo]") Within a section, each parameter defines a shell command to run to handle a given action. mr contains default handlers for "update", "status", @@ -423,6 +425,8 @@ sub action { #{{{ $config{$topdir}{$subdir}{lib}."\n" : ""; my $is_checkout=($action eq 'checkout'); + $ENV{MR_REPO}=$dir; + if ($is_checkout) { if (-d $dir) { print "mr $action: $dir already exists, skipping checkout\n" if $verbose; @@ -437,8 +441,6 @@ sub action { #{{{ } } - $ENV{MR_REPO}=$dir; - my $skiptest=findcommand("skip", $dir, $topdir, $subdir, $is_checkout); my $command=findcommand($action, $dir, $topdir, $subdir, $is_checkout); @@ -717,6 +719,18 @@ sub selectrepos { #{{{ return @repos; } #}}} +sub expandenv { #{{{ + my $val=shift; + + + if ($val=~/\$/) { + $val=`echo "$val"`; + chomp $val; + } + + return $val; +} #}}} + my %loaded; sub loadconfig { #{{{ my $f=shift; @@ -777,7 +791,7 @@ sub loadconfig { #{{{ chomp; next if /^\s*\#/ || /^\s*$/; if (/^\[([^\]]*)\]\s*$/) { - $section=$1; + $section=expandenv($1); } elsif (/^(\w+)\s*=\s*(.*)/) { my $parameter=$1; @@ -900,7 +914,7 @@ sub modifyconfig { #{{{ $addfields->(); } - $section=$1; + $section=expandenv($1); push @out, $_; } @@ -1013,7 +1027,9 @@ sub config { #{{{ } #}}} sub register { #{{{ - if (! $config_overridden) { + if ($config_overridden) { + ($directory)=$ENV{MR_CONFIG}=~/^(.*\/)[^\/]+$/; + } else { # Find the closest known mrconfig file to the current # directory. $directory.="/" unless $directory=~/\/$/;