X-Git-Url: https://git.madduck.net/code/myrepos.git/blobdiff_plain/1f9664072eba6ade88350eb595e67520993b8fd9..353f63c968368edea9b14261f510c34ce4e0c97f:/mr diff --git a/mr b/mr index 58ebceb..556366c 100755 --- a/mr +++ b/mr @@ -405,7 +405,7 @@ Unlike all other parameters, this parameter does not need to be placed within a section. B ships several libraries that can be included to add support for -additional version control type things (unison, git-svn, vcsh, git-fake-bare, +additional version control type things (unison, git-svn, git-fake-bare, git-subtree). To include them all, you could use: include = cat /usr/share/mr/* @@ -684,6 +684,7 @@ sub fulldir { 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'); @@ -725,6 +726,7 @@ sub action { } if ($is_checkout) { + $checkout_dir=$dir; if (! $force_checkout) { if (-d $dir) { print "mr $action: $dir already exists, skipping checkout\n" if $verbose; @@ -828,7 +830,13 @@ sub action { 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; } @@ -1858,7 +1866,7 @@ lib = } 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" @@ -1868,6 +1876,10 @@ git_bare_test = perl: -d "$ENV{MR_REPO}/refs/heads" && -d "$ENV{MR_REPO}/refs/tags" && -d "$ENV{MR_REPO}/objects" && -f "$ENV{MR_REPO}/config" && `GIT_CONFIG="$ENV{MR_REPO}"/config git config --get core.bare` =~ /true/ +vcsh_test = perl: + -d "$ENV{MR_REPO}/refs/heads" && -d "$ENV{MR_REPO}/refs/tags" && + -d "$ENV{MR_REPO}/objects" && -f "$ENV{MR_REPO}/config" && + `GIT_CONFIG="$ENV{MR_REPO}"/config git config --get vcsh.vcsh` =~ /true/ veracity_test = perl: -d "$ENV{MR_REPO}/.sgdrawer" svn_update = svn update "$@" @@ -1879,9 +1891,10 @@ bzr_update = bzr merge --pull "$@" fi cvs_update = cvs update "$@" -hg_update = hg pull "$@" && hg update "$@" +hg_update = hg pull "$@"; hg update "$@" darcs_update = darcs pull -a "$@" fossil_update = fossil pull "$@" +vcsh_update = vcsh run "$MR_REPO" git pull "$@" veracity_update = vv pull "$@" && vv update "$@" svn_status = svn status "$@" @@ -1891,6 +1904,7 @@ cvs_status = cvs status "$@" hg_status = hg status "$@" darcs_status = darcs whatsnew -ls "$@" || true fossil_status = fossil changes "$@" +vcsh_status = cd $(vcsh run "$MR_REPO" git config --get core.worktree); vcsh run "$MR_REPO" git status -s "$@" || true veracity_status = vv status "$@" svn_commit = svn commit "$@" @@ -1905,6 +1919,7 @@ cvs_commit = cvs commit "$@" hg_commit = hg commit -m "$@" && hg push darcs_commit = darcs record -a -m "$@" && darcs push -a fossil_commit = fossil commit "$@" +vcsh_commit = vcsh run "$MR_REPO" git commit -a "$@" && vcsh run "$MR_REPO" git push --all veracity_commit = vv commit -m "@" && vv push git_record = git commit -a "$@" @@ -1917,6 +1932,7 @@ bzr_record = hg_record = hg commit -m "$@" darcs_record = darcs record -a -m "$@" fossil_record = fossil commit "$@" +vcsh_record = vcsh run "$MR_REPO" git commit -a "$@" veracity_record = vv commit -m "@" svn_push = : @@ -1926,6 +1942,7 @@ cvs_push = : hg_push = hg push "$@" darcs_push = darcs push -a "$@" fossil_push = fossil push "$@" +vcsh_push = vcsh run "$MR_REPO" git push "$@" veracity_push = vv push "$@" svn_diff = svn diff "$@" @@ -1935,6 +1952,7 @@ cvs_diff = cvs diff "$@" hg_diff = hg diff "$@" darcs_diff = darcs diff -u "$@" fossil_diff = fossil diff "$@" +vcsh_diff = vcsh run "$MR_REPO" git diff "$@" veracity_diff = vv diff "$@" svn_log = svn log "$@" @@ -1945,6 +1963,7 @@ hg_log = hg log "$@" darcs_log = darcs changes "$@" git_bare_log = git log "$@" fossil_log = fossil timeline "$@" +vcsh_log = vcsh run "$MR_REPO" git log "$@" veracity_log = vv log "$@" run = "$@" @@ -1964,7 +1983,7 @@ git_register = 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 @@ -1993,6 +2012,13 @@ git_bare_register = fi echo "Registering git url: $url in $MR_CONFIG" mr -c "$MR_CONFIG" config "`pwd`" checkout="git clone --bare '$url' '$MR_REPO'" +vcsh_register = + url="`LC_ALL=C vcsh run "$MR_REPO" git config --get remote.origin.url`" || true + if [ -z "$url" ]; then + error "cannot determine git url" + fi + echo "Registering git url: $url in $MR_CONFIG" + mr -c "$MR_CONFIG" config "`pwd`" checkout="vcsh clone '$url' '$MR_REPO'" fossil_register = url=`fossil remote-url` repo=`fossil info | grep repository | sed -e 's/repository:*.//g' -e 's/ //g'` @@ -2012,6 +2038,7 @@ bzr_trusted_checkout = bzr checkout|clone|branch|get $url $repo hg_trusted_checkout = hg clone $url $repo darcs_trusted_checkout = darcs get $url $repo git_bare_trusted_checkout = git clone --bare $url $repo +vcsh_trusted_checkout = vcsh run "$MR_REPO" git clone $url $repo # fossil: messy to do veracity_trusted_checkout = vv clone $url $repo