]>
git.madduck.net Git - code/myrepos.git/blobdiff - mr
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
B<mr> is a Multiple Repository management tool. It can checkout, update, or
perform other actions on a set of repositories as if they were one combined
repository. It supports any combination of subversion, git, cvs, mercurial,
B<mr> is a Multiple Repository management tool. It can checkout, update, or
perform other actions on a set of repositories as if they were one combined
repository. It supports any combination of subversion, git, cvs, mercurial,
-bzr, darcs and fossil repositories, and support for other version
+bzr, darcs, fossil and veracity repositories, and support for other version
control systems can easily be added.
B<mr> cds into and operates on all registered repositories at or below your
control systems can easily be added.
B<mr> cds into and operates on all registered repositories at or below your
within a section.
B<mr> ships several libraries that can be included to add support for
within a section.
B<mr> 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/*
git-subtree). To include them all, you could use:
include = cat /usr/share/mr/*
sub action {
my ($action, $dir, $topdir, $subdir, $force_checkout) = @_;
my $fulldir=fulldir($topdir, $subdir);
sub action {
my ($action, $dir, $topdir, $subdir, $force_checkout) = @_;
my $fulldir=fulldir($topdir, $subdir);
$ENV{MR_CONFIG}=$configfiles{$topdir};
my $is_checkout=($action eq 'checkout');
$ENV{MR_CONFIG}=$configfiles{$topdir};
my $is_checkout=($action eq 'checkout');
if (! $force_checkout) {
if (-d $dir) {
print "mr $action: $dir already exists, skipping checkout\n" if $verbose;
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;
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;
}
my $ret=hook("fixups", $topdir, $subdir);
return $ret if $ret != OK;
}
};
my $trusterror = sub {
my $msg=shift;
};
my $trusterror = sub {
my $msg=shift;
- my ($err, $file, $lineno, $url)=@_;
if (defined $bootstrap_url) {
if (defined $bootstrap_url) {
- die "mr: $err in untrusted $bootstrap_url line $lineno\n".
+ die "mr: $msg in untrusted $bootstrap_url line $lineno\n".
"(To trust this url, --trust-all can be used; but please use caution;\n".
"this can allow arbitrary code execution!)\n";
}
else {
"(To trust this url, --trust-all can be used; but please use caution;\n".
"this can allow arbitrary code execution!)\n";
}
else {
- die "mr: $err in untrusted $file line $lineno\n".
+ die "mr: $msg in untrusted $f line $lineno\n".
"(To trust this file, list it in ~/.mrtrust.)\n";
}
};
"(To trust this file, list it in ~/.mrtrust.)\n";
}
};
-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/
-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 "$@"
git_update = git pull "$@"
svn_update = svn update "$@"
git_update = git pull "$@"
hg_update = hg pull "$@" && hg update "$@"
darcs_update = darcs pull -a "$@"
fossil_update = fossil pull "$@"
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 "$@"
git_status = git status -s "$@" || true
svn_status = svn status "$@"
git_status = git status -s "$@" || true
hg_status = hg status "$@"
darcs_status = darcs whatsnew -ls "$@" || true
fossil_status = fossil changes "$@"
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 "$@"
git_commit = git commit -a "$@" && git push --all
svn_commit = svn commit "$@"
git_commit = git commit -a "$@" && git push --all
hg_commit = hg commit -m "$@" && hg push
darcs_commit = darcs record -a -m "$@" && darcs push -a
fossil_commit = fossil 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 "$@"
bzr_record =
git_record = git commit -a "$@"
bzr_record =
hg_record = hg commit -m "$@"
darcs_record = darcs record -a -m "$@"
fossil_record = fossil commit "$@"
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 = :
git_push = git push "$@"
svn_push = :
git_push = git push "$@"
hg_push = hg push "$@"
darcs_push = darcs push -a "$@"
fossil_push = fossil 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 "$@"
git_diff = git diff "$@"
svn_diff = svn diff "$@"
git_diff = git diff "$@"
hg_diff = hg diff "$@"
darcs_diff = darcs diff -u "$@"
fossil_diff = fossil 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 "$@"
git_log = git log "$@"
svn_log = svn log "$@"
git_log = git log "$@"
darcs_log = darcs changes "$@"
git_bare_log = git log "$@"
fossil_log = fossil timeline "$@"
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 "$@"
fi
echo "Registering git url: $url in $MR_CONFIG"
mr -c "$MR_CONFIG" config "`pwd`" checkout="git clone --bare '$url' '$MR_REPO'"
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'`
echo "Registering fossil repository $url in $MR_CONFIG"
mr -c "$MR_CONFIG" config "`pwd`" checkout="mkdir -p '$MR_REPO' && cd '$MR_REPO' && fossil open '$repo'"
fossil_register =
url=`fossil remote-url`
repo=`fossil info | grep repository | sed -e 's/repository:*.//g' -e 's/ //g'`
echo "Registering fossil repository $url in $MR_CONFIG"
mr -c "$MR_CONFIG" config "`pwd`" checkout="mkdir -p '$MR_REPO' && cd '$MR_REPO' && fossil open '$repo'"
+veracity_register =
+ url=`vv config | grep sync_targets | sed -e 's/sync_targets:*.//g' -e 's/ //g'`
+ repo=`vv repo info | grep repository | sed -e 's/Current repository:*.//g' -e 's/ //g'`
+ echo "Registering veracity repository $url in $MR_CONFIG"
+ mr -c "$MR_CONFIG" config "`pwd`" checkout="mkdir -p '$MR_REPO' && cd '$MR_REPO' && vv checkout '$repo'"
svn_trusted_checkout = svn co $url $repo
svn_alt_trusted_checkout = svn checkout $url $repo
svn_trusted_checkout = svn co $url $repo
svn_alt_trusted_checkout = svn checkout $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
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
+veracity_trusted_checkout = vv clone $url $repo