X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/c1903b7c2e589ce4379f1f9fb63b36b2fab274eb..53d1d56fd9100a36b53467ed049276ecc1f7a09e:/mr?ds=sidebyside diff --git a/mr b/mr index 3131690..314de60 100755 --- a/mr +++ b/mr @@ -127,14 +127,16 @@ Here is an example .mrconfig file: The .mrconfig file uses a variant of the INI file format. Lines starting with "#" are comments. Lines ending with "\" are continued on to the next line. -The "default" section allows setting default values for the sections that +The "DEFAULT" section allows setting default values for the sections that come after it. -The "alias" section allows adding aliases for actions. Each parameter +The "ALIAS" section allows adding aliases for actions. Each parameter is an alias, and its value is the action to use. -All other sections specify where each repository is located, relative to the -directory that contains the .mrconfig file. +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. Within a section, each parameter defines a shell command to run to handle a given action. mr contains default handlers for the "update", "status", and @@ -238,7 +240,7 @@ if (! exists $knownactions{$action}) { } if ($action eq 'help') { - exec($config{''}{default}{help}); + exec($config{''}{DEFAULT}{help}); } # work out what repos to act on @@ -246,9 +248,12 @@ my @repos; my $nochdir=0; foreach my $topdir (sort keys %config) { foreach my $subdir (sort keys %{$config{$topdir}}) { - next if $subdir eq 'default'; - my $dir=$topdir.$subdir; - next if $dir ne $directory && $dir !~ /^\Q$directory\E\//; + next if $subdir eq 'DEFAULT'; + my $dir=($subdir =~/^\//) ? $subdir : $topdir.$subdir; + my $d=$directory; + $dir.="/" unless $dir=~/\/$/; + $d.="/" unless $d=~/\/$/; + next if $dir ne $directory && $dir !~ /^\Q$directory\E/; push @repos, [$dir, $topdir, $subdir]; } } @@ -256,8 +261,8 @@ if (! @repos) { # fallback to find a leaf repo LEAF: foreach my $topdir (reverse sort keys %config) { foreach my $subdir (reverse sort keys %{$config{$topdir}}) { - next if $subdir eq 'default'; - my $dir=$topdir.$subdir; + next if $subdir eq 'DEFAULT'; + my $dir=($subdir =~/^\//) ? $subdir : $topdir.$subdir; my $d=$directory; $dir.="/" unless $dir=~/\/$/; $d.="/" unless $d=~/\/$/; @@ -318,10 +323,10 @@ sub action { } else { if (! $nochdir) { - print "mr $action: $dir\n"; + print "mr $action: $topdir$subdir\n"; } else { - print "mr $action: $dir (in subdir $directory)\n"; + print "mr $action: $topdir$subdir (in subdir $directory)\n"; } my $command="set -e; ".$lib. "my_action(){ $config{$topdir}{$subdir}{$action} ; }; my_action ". @@ -330,7 +335,7 @@ sub action { my $ret=system($command); if ($ret != 0) { print STDERR "mr $action: failed ($ret)\n" if $verbose; - push @failed, $topdir.$subdir; + push @failed, $dir; if ($ret >> 8 != 0) { print STDERR "mr $action: command failed\n"; } @@ -403,8 +408,8 @@ sub loadconfig { my $parent=$dir; while ($parent=~s/^(.*)\/[^\/]+\/?$/$1/) { if (exists $config{$parent} && - exists $config{$parent}{default}) { - $config{$dir}{default}={ %{$config{$parent}{default}} }; + exists $config{$parent}{DEFAULT}) { + $config{$dir}{DEFAULT}={ %{$config{$parent}{DEFAULT}} }; last; } } @@ -430,13 +435,13 @@ sub loadconfig { if (! defined $section) { die "$f line $.: parameter ($parameter) not in section\n"; } - if ($section ne 'alias' && + if ($section ne 'ALIAS' && ! exists $config{$dir}{$section} && - exists $config{$dir}{default}) { + exists $config{$dir}{DEFAULT}) { # copy in defaults - $config{$dir}{$section}={ %{$config{$dir}{default}} }; + $config{$dir}{$section}={ %{$config{$dir}{DEFAULT}} }; } - if ($section eq 'alias') { + if ($section eq 'ALIAS') { $alias{$parameter}=$value; } elsif ($parameter eq 'lib') { @@ -446,7 +451,7 @@ sub loadconfig { $config{$dir}{$section}{$parameter}=$value; $knownactions{$parameter}=1; if ($parameter eq 'chain' && - length $dir && $section ne "default" && + length $dir && $section ne "DEFAULT" && -e $dir.$section."/.mrconfig" && system($value) >> 8 == 0) { push @toload, $dir.$section."/.mrconfig"; @@ -467,12 +472,12 @@ sub loadconfig { # Finally, some useful actions that mr knows about by default. # These can be overridden in ~/.mrconfig. __DATA__ -[alias] +[ALIAS] co = checkout ci = commit ls = list -[default] +[DEFAULT] lib = \ error() { \ echo "mr: $@" >&2; \