sub action {
my ($action, $dir, $topdir, $subdir, $force_checkout) = @_;
my $fulldir=fulldir($topdir, $subdir);
+ my $checkout_dir;
$ENV{MR_CONFIG}=$configfiles{$topdir};
my $is_checkout=($action eq 'checkout');
}
if ($is_checkout) {
+ $checkout_dir=$dir;
if (! $force_checkout) {
if (-d $dir) {
print "mr $action: $dir already exists, skipping checkout\n" if $verbose;
my $ret=hook("post_$action", $topdir, $subdir);
return $ret if $ret != OK;
- if (($is_checkout || $is_update)) {
+ if ($is_checkout || $is_update) {
+ if ($is_checkout && ! $no_chdir) {
+ if (! chdir($checkout_dir)) {
+ print STDERR "mr $action: failed to chdir to $checkout_dir: $!\n";
+ return FAILED;
+ }
+ }
my $ret=hook("fixups", $topdir, $subdir);
return $ret if $ret != OK;
}
}
svn_test = perl: -d "$ENV{MR_REPO}/.svn"
-git_test = perl: -d "$ENV{MR_REPO}/.git"
+git_test = perl: -e "$ENV{MR_REPO}/.git"
bzr_test = perl: -d "$ENV{MR_REPO}/.bzr"
cvs_test = perl: -d "$ENV{MR_REPO}/CVS"
hg_test = perl: -d "$ENV{MR_REPO}/.hg"
else
bzr merge --pull "$@"
fi
-cvs_update = cvs update "$@"
-hg_update = hg pull "$@" && hg update "$@"
+cvs_update = cvs -q update "$@"
+hg_update = hg pull "$@"; hg update "$@"
darcs_update = darcs pull -a "$@"
fossil_update = fossil pull "$@"
vcsh_update = vcsh run "$MR_REPO" git pull "$@"
svn_diff = svn diff "$@"
git_diff = git diff "$@"
bzr_diff = bzr diff "$@"
-cvs_diff = cvs diff "$@"
+cvs_diff = cvs -q diff "$@"
hg_diff = hg diff "$@"
darcs_diff = darcs diff -u "$@"
fossil_diff = fossil diff "$@"
echo "Registering git url: $url in $MR_CONFIG"
mr -c "$MR_CONFIG" config "`pwd`" checkout="git clone '$url' '$MR_REPO'"
bzr_register =
- url="`LC_ALL=C bzr info . | egrep -i 'checkout of branch|parent branch' | awk '{print $NF}'`"
+ url="`LC_ALL=C bzr info . | egrep -i 'checkout of branch|parent branch' | awk '{print $NF}' | head -n 1`"
if [ -z "$url" ]; then
error "cannot determine bzr url"
fi