X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=sync-all;h=9b0706eb03101711f533e490b7389f6d9787c958;hp=6f786cd1aad523bba02083c3c68d0d7254804ae0;hb=aaafc986f2175958bcadd4af6b3c9889bfc89009;hpb=7978575e0e3b3b4b8b838b88750fc0b4aef90bc1 diff --git a/sync-all b/sync-all index 6f786cd..9b0706e 100755 --- a/sync-all +++ b/sync-all @@ -3,6 +3,64 @@ use strict; use Cwd; +# Usage: +# +# ./sync-all [-q] [-s] [--ignore-failure] [-r repo] +# [--nofib] [--testsuite] [--checked-out] cmd [git flags] +# +# Applies the command "cmd" to each repository in the tree. +# sync-all will try to do the right thing for both git and darcs repositories. +# +# e.g. +# ./sync-all -r http://darcs.haskell.org/ghc get +# To get any repos which do not exist in the local tree +# +# ./sync-all pull +# To pull everything from the default repos +# +# -------------- Flags ------------------- +# -q says to be quite, and -s to be silent. +# +# --ignore-failure says to ignore errors and move on to the next repository +# +# -r repo says to use repo as the location of package repositories +# +# --checked-out says that the remote repo is in checked-out layout, as +# opposed to the layout used for the main repo. By default a repo on +# the local filesystem is assumed to be checked-out, and repos accessed +# via HTTP or SSH are assumed to be in the main repo layout; use +# --checked-out to override the latter. +# +# --nofib, --testsuite also get the nofib and testsuite repos respectively +# +# ------------ Which repos to use ------------- +# sync-all uses the following algorithm to decide which remote repos to use +# +# It always computes the remote repos from a single base, $repo_base +# How is $repo_base set? +# If you say "-r repo", then that's $repo_base +# otherwise $repo_base is set by asking git where the ghc repo came +# from, and removing the last component (e.g. /ghc.git/ of /ghc/). +# +# Then sync-all iterates over the package found in the file +# ./packages; see that file for a description of the contents. +# +# If $repo_base looks like a local filesystem path, or if you give +# the --checked-out flag, sync-all works on repos of form +# $repo_base/ +# otherwise sync-all works on repos of form +# $repo_base/ +# This logic lets you say +# both sync-all -r http://darcs.haskell.org/ghc-6.12 pull +# and sync-all -r ../HEAD pull +# The latter is called a "checked-out tree". + +# NB: sync-all *ignores* the defaultrepo of all repos other than the +# root one. So the remote repos must be laid out in one of the two +# formats given by and in the file 'packages'. + +$| = 1; # autoflush stdout after each print, to avoid output after die + my $defaultrepo; my @packages; my $verbose = 2; @@ -238,6 +296,19 @@ sub scmall { or ($scm eq "git" and "send-email")); $want_remote_repo = 1; } + elsif ($command =~ /^set-origin$/) { + @scm_args = ("remote", "set-url", "origin", $path); + } + elsif ($command =~ /^set-push$/) { + @scm_args = ("remote", "set-url", "--push", "origin", $path); + print "foo\n", @scm_args; + } + elsif ($command =~ /^fetch$/) { + @scm_args = ("fetch", "origin"); + } + elsif ($command =~ /^new$/) { + @scm_args = ("log", "origin.."); + } else { die "Unknown command: $command"; } @@ -330,7 +401,11 @@ Supported commands: * -- * --complete * --partial + * fetch * send + * set-origin + * set-push + * new Available package-tags are: END