is_trusted_repo($words[$c])
);
}
- elsif (defined $words[$c] && $twords[$c] eq $words[$c]) {
+ elsif (defined $words[$c] && $words[$c]=~/^($twords[$c])$/) {
$match=1;
}
else {
}
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);
}
}
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
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 "$@"
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
error "cannot determine bzr url"
fi
echo "Registering bzr url: $url in $MR_CONFIG"
- mr -c "$MR_CONFIG" config "`pwd`" checkout="bzr clone '$url' '$MR_REPO'"
+ mr -c "$MR_CONFIG" config "`pwd`" checkout="bzr branch '$url' '$MR_REPO'"
cvs_register =
repo=`cat CVS/Repository`
root=`cat CVS/Root`
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 $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