X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/6ac6acc4892bfcbe166f09b64eaecc420c430106..3d39c568b0f5559c4bf1e3c054588ca255c26e21:/mr diff --git a/mr b/mr index bd6c2d7..10a547f 100755 --- a/mr +++ b/mr @@ -1184,13 +1184,23 @@ sub loadconfig { } if (! $trusted) { - # Untrusted files can only contain checkout - # parameters. - if ($parameter ne 'checkout') { - trusterror("mr: illegal setting \"$parameter=$value\"", $f, $line, $bootstrap_url); + # Untrusted files can only contain a few + # settings in specific known-safe formats. + if ($parameter eq 'checkout') { + if (! is_trusted_checkout($value)) { + trusterror("mr: illegal checkout command \"$value\"", $f, $line, $bootstrap_url); + } + } + elsif ($parameter eq 'order') { + # not interpreted as a command, so + # safe. } - if (! is_trusted_checkout($value)) { - trusterror("mr: illegal checkout command \"$value\"", $f, $line, $bootstrap_url); + elsif ($value eq 'true' || $value eq 'false') { + # skip=true , deleted=true etc are + # safe. + } + else { + trusterror("mr: illegal setting \"$parameter=$value\"", $f, $line, $bootstrap_url); } } @@ -1678,6 +1688,9 @@ lib = return 0 fi } + is_bzr_checkout() { + LANG=C bzr info | egrep -q '^Checkout' + } svn_test = test -d "$MR_REPO"/.svn git_test = test -d "$MR_REPO"/.git @@ -1693,7 +1706,12 @@ git_bare_test = svn_update = svn update "$@" git_update = git pull "$@" -bzr_update = bzr merge --pull "$@" +bzr_update = + if is_bzr_checkout; then + bzr update "$@" + else + bzr merge --pull "$@" + fi cvs_update = cvs update "$@" hg_update = hg pull "$@" && hg update "$@" darcs_update = darcs pull -a "$@" @@ -1709,7 +1727,12 @@ fossil_status = fossil changes "$@" svn_commit = svn commit "$@" git_commit = git commit -a "$@" && git push --all -bzr_commit = bzr commit "$@" && bzr push +bzr_commit = + if is_bzr_checkout; then + bzr commit "$@" + else + bzr commit "$@" && bzr push + fi cvs_commit = cvs commit "$@" hg_commit = hg commit -m "$@" && hg push darcs_commit = darcs record -a -m "$@" && darcs push -a