X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/e8a3c7466e3764dde7350f332976b0fafed40d4c..2467756e9e048a4579ee65c9980672316e12ee24:/mr?ds=sidebyside diff --git a/mr b/mr index f947633..97720d4 100755 --- a/mr +++ b/mr @@ -290,7 +290,7 @@ This obsolete flag is ignored. Here is an example .mrconfig file: [src] - checkout = svn co svn://svn.example.com/src/trunk src + checkout = svn checkout svn://svn.example.com/src/trunk src chain = true [src/linux-2.6] @@ -317,14 +317,18 @@ will be passed through the shell for expansion. For example, Within a section, each parameter defines a shell command to run to handle a given action. mr contains default handlers for "update", "status", -"commit", and other standard actions. Normally you only need to specify what -to do for "checkout". +"commit", and other standard actions. + +Normally you only need to specify what to do for "checkout". Here you +specify the command to run in order to create a checkout of the repository. +The command will be run in the parent directory, and must create the +repository's directory. So use "git clone", "svn checkout", "bzr branch" +or "bzr checkout" (for a bound branch), etc. Note that these shell commands are run in a "set -e" shell environment, where any additional parameters you pass are available in -"$@". The "checkout" command is run in the parent of the repository -directory, since the repository isn't checked out yet. All other commands -are run inside the repository, though not necessarily at the top of it. +"$@". All commands other than "checkout" are run inside the repository, +though not necessarily at the top of it. The "MR_REPO" environment variable is set to the path to the top of the repository. (For the "register" action, "MR_REPO" is instead set to the @@ -751,6 +755,9 @@ sub hook { print STDERR "mr $hook: received signal ".($? & 127)."\n"; return ABORT; } + else { + return FAILED; + } } return OK; @@ -1231,21 +1238,26 @@ sub loadconfig { $knownactions{$parameter}=1; } if ($parameter eq 'chain' && - length $dir && $section ne "DEFAULT" && - -e $dir.$section."/.mrconfig") { - my $ret=system($value); - if ($ret != 0) { - if (($? & 127) == 2) { - print STDERR "mr: chain test interrupted\n"; - exit 2; + length $dir && $section ne "DEFAULT") { + my $chaindir="$section"; + if ($chaindir !~ m!/!) { + $chaindir=$dir.$chaindir; + } + if (-e "$chaindir/.mrconfig") { + my $ret=system($value); + if ($ret != 0) { + if (($? & 127) == 2) { + print STDERR "mr: chain test interrupted\n"; + exit 2; + } + elsif ($? & 127) { + print STDERR "mr: chain test received signal ".($? & 127)."\n"; + } } - elsif ($? & 127) { - print STDERR "mr: chain test received signal ".($? & 127)."\n"; + else { + push @toload, ["$chaindir/.mrconfig", $chaindir]; } } - else { - push @toload, $dir.$section."/.mrconfig"; - } } } } @@ -1254,8 +1266,8 @@ sub loadconfig { } } - foreach (@toload) { - loadconfig($_); + foreach my $c (@toload) { + loadconfig(@$c); } } @@ -1739,7 +1751,12 @@ darcs_commit = darcs record -a -m "$@" && darcs push -a fossil_commit = fossil commit "$@" git_record = git commit -a "$@" -bzr_record = bzr commit "$@" +bzr_record = + if is_bzr_checkout; then + bzr commit --local "$@" + else + bzr commit "$@" + fi hg_record = hg commit -m "$@" darcs_record = darcs record -a -m "$@" fossil_record = fossil commit "$@" @@ -1824,7 +1841,7 @@ fossil_register = svn_trusted_checkout = svn co $url $repo svn_alt_trusted_checkout = svn checkout $url $repo git_trusted_checkout = git clone $url $repo -bzr_trusted_checkout = bzr clone|branch|get $url $repo +bzr_trusted_checkout = bzr checkout|clone|branch|get $url $repo # cvs: too hard hg_trusted_checkout = hg clone $url $repo darcs_trusted_checkout = darcs get $url $repo