Teach darcs-all how to get testsuite and nofib
[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_base="`echo $defaultrepo | sed 's!/ghc$!!'`"
13     defaultrepo_lib="$defaultrepo_base"/packages;;
14   /*)
15     defaultrepo_base="$defaultrepo"
16     defaultrepo_lib="$defaultrepo"/libraries;;
17 esac
18
19 quiet=NO
20
21 message()
22 {
23   if [ "$quiet" = "NO" ]; then
24      echo $*
25   fi
26 }
27
28 darcsall()
29 {
30   message "== running darcs $* at the top level"
31   darcs $*
32   for dir in $top_dirs; do
33     if test -d $dir -a -d $dir/_darcs; then
34         message "== running darcs $* in $dir"
35         darcs $* --repodir $dir
36     else
37         message "== $dir not present or not a repository; skipping"
38     fi
39   done
40   for pkg in `cat libraries/core-packages libraries/extra-packages`; do
41     if test -d libraries/$pkg; then
42         message "== running darcs $* in libraries/$pkg"
43         darcs $* --repodir libraries/$pkg
44     else
45         echo "warning: $pkg doesn't seem to exist, use 'darcs-all get' to get it"
46     fi
47   done
48 }
49
50 darcsget()
51 {
52   case $* in
53     *--complete*|*--partial*)
54       additional_flag="" ;;
55     *)
56       echo "warning: adding --partial, to override use --complete"
57       additional_flag="--partial" ;;
58   esac
59
60   if test "$nofib" = "YES"; then
61     if test -d nofib; then
62       echo "warning: nofib already present; omitting"
63     else
64       repo="$defaultrepo_base"/nofib
65       message "== running darcs get $additional_flag $* $repo"
66       darcs get $additional_flag $* $repo
67     fi
68   fi
69
70   if test "$testsuite" = "YES"; then
71     if test -d testsuite; then
72       echo "warning: testsuite already present; omitting"
73     else
74       repo="$defaultrepo_base"/testsuite
75       message "== running darcs get $additional_flag $* $repo"
76       darcs get $additional_flag $* $repo
77     fi
78   fi
79
80   cd libraries
81
82   if test "$extra" = "YES"; then
83       packages=`cat core-packages extra-packages`
84   else
85       packages=`cat core-packages`
86   fi
87
88   for pkg in $packages; do
89     if test -d $pkg; then
90         echo "warning: $pkg already present; omitting"
91     else
92         repo=$defaultrepo_lib/$pkg
93         message "== running darcs get $additional_flag $* $repo"
94         darcs get $additional_flag $* $repo
95     fi
96   done
97 }
98
99 if test ! -d _darcs -o ! -d compiler; then
100   echo "error: darcs-all must be run from the top level of the ghc tree."
101   exit 1;
102 fi
103
104 case $* in
105   *-q*) quiet=YES;;
106 esac
107
108 # --extra says we grab the extra libs with 'get'.  It has no effect on
109 # the other commands.
110 extra=NO
111 # --nofib/--testsuite tell get to also grab the respective repos.
112 # They have no effect on the other commands.
113 nofib=NO
114 testsuite=NO
115
116 args_done=NO
117
118 while [ "$args_done" == NO ]
119 do
120     case $1 in
121       --extra) shift; extra=YES;;
122       --nofib) shift; nofib=YES;;
123       --testsuite) shift; testsuite=YES;;
124       *) args_done=YES;;
125     esac
126 done
127
128 case $1 in
129   get)  shift; darcsget $*;;
130   # Hack around whatsnew failing if there are no changes
131   w|wh|wha|what|whats|whatsn|whatsne|whatsnew) set +e; darcsall $*;;
132   *) darcsall $*;;
133 esac