Fixed and simplified repository calculation, works via SSH now, too
[ghc-hetmet.git] / darcs-all
1 #!/bin/sh
2
3 set -e
4
5 top_dirs="nofib testsuite"
6
7 # Figure out where to get the other repositories from,
8 # based on where this GHC repo came from.
9 defaultrepo=`cat _darcs/prefs/defaultrepo`
10 case $defaultrepo in
11   http://* | *@*:*)
12     defaultrepo_lib=`echo $defaultrepo | sed 's!/ghc$!!'`/packages;;
13   /*)
14     defaultrepo_lib=$defaultrepo/libraries;;
15 esac
16
17 quiet=NO
18
19 message()
20 {
21   if [ "$quiet" = "NO" ]; then
22      echo $*
23   fi
24 }
25
26 darcsall()
27 {
28   message "== running darcs $* at the top level"
29   darcs $*
30   for dir in $top_dirs; do
31     if test -d $dir -a -d $dir/_darcs; then
32         message "== running darcs $* in $dir"
33         darcs $* --repodir $dir
34     else
35         message "== $dir not present or not a repository; skipping"
36     fi
37   done
38   for pkg in `cat libraries/core-packages libraries/extra-packages`; do
39     if test -d libraries/$pkg; then
40         message "== running darcs $* in libraries/$pkg"
41         darcs $* --repodir libraries/$pkg
42     else
43         echo "warning: $pkg doesn't seem to exist, use 'darcs-all get' to get it"
44     fi
45   done
46 }
47
48 darcsget()
49 {
50   case $* in
51     *--partial*) ;;
52     *) echo "warning: adding --partial, to override use --complete"
53   esac
54
55   cd libraries
56
57   if test "$extra" = "YES"; then
58       packages=`cat core-packages extra-packages`
59   else
60       packages=`cat core-packages`
61   fi
62
63   for pkg in $packages; do
64     if test -d $pkg; then
65         echo "warning: $pkg already present; omitting"
66     else
67         repo=$defaultrepo_lib/$pkg
68         message "== running darcs get --partial $* $repo"
69         darcs get --partial $* $repo
70     fi
71   done
72 }
73
74 if test ! -d _darcs -o ! -d compiler; then
75   echo "error: darcs-all must be run from the top level of the ghc tree."
76   exit 1;
77 fi
78
79 case $* in
80   *-q*) quiet=YES;;
81 esac
82
83 # --extra says we grab the extra libs with 'get'.  It has no effect on
84 # the other commands.
85 extra=NO;
86 case $1 in
87   --extra) shift; extra=YES;
88 esac
89
90 case $1 in
91   get)  shift; darcsget $*;;
92   # Hack around whatsnew failing if there are no changes
93   w|wh|wha|what|whats|whatsn|whatsne|whatsnew) set +e; darcsall $*;;
94   *) darcsall $*;;
95 esac