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