Meta/Announce: brief list of contributors
[alt-git.git] / Dothem
blob7c47ae03d8c5d76df7aec49d56cb7491defe9d16
1 #!/bin/sh
3 NWD=contrib/workdir/git-new-workdir
5 inst_prefix=$(
6 IFS=:
7 for p in $PATH
8 do
9 probed=${p%/git-active/bin}
10 if test "$probed" != "$p"
11 then
12 echo "$probed"
13 exit
15 done
16 echo $HOME
19 force= with_dash= M= install= nodoc= notest= bootstrap= branches= jobs=
20 scratch=
21 while case "$1" in
22 --pedantic | --locale=* | --loose) M="$M $1" ;;
23 --force) force=$1 ;;
24 --dash) with_dash=y ;;
25 --noinstall) install=noinstall ;;
26 --nodoc) nodoc=y ;;
27 --notest) notest=y ;;
28 --test=*) test="$1" ;;
29 --scratch) scratch=y ;;
30 --bootstrap) bootstrap=y ;;
31 --base=*) BUILDBASE=${1#*=} ;;
32 --branches=*) branches=${1#*=} ;;
33 -j*) jobs=$1 ;;
34 --) shift; break ;;
35 -*) echo >&2 "Unknown option: $1"; exit 1 ;;
36 *) break ;;
37 esac
39 shift
40 done
42 for TRASH in /dev/shm /tmp ""
44 if test -n "$TRASH" &&
45 mkdir -p "$TRASH/testpen" 2>/dev/null &&
46 test -w "$TRASH/testpen"
47 then
48 TRASH="--root=$(cd "$TRASH/testpen" && /bin/pwd)"
49 break
51 done
53 sh -c 'asciidoc --version >/dev/null 2>&1' || nodoc=y
54 GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}"
55 export GIT_TEST_OPTS
57 test -f /bin/dash || with_dash=
58 if test -z "$BUILDBASE"
59 then
60 if test -d "$inst_prefix/buildfarm"
61 then
62 BUILDBASE="$inst_prefix/buildfarm"
63 elif test -d "../buildfarm"
64 then
65 BUILDBASE=../buildfarm
66 else
67 echo >&2 "Buildbase unknown"
68 exit 1
71 test -n "$branches" || branches='next master maint jch pu'
72 test -n "$jobs" || jobs=-j2
74 find_installed () {
75 branch=$1
76 test -f "$inst_prefix/git-$branch/bin/git" &&
77 installed=$($inst_prefix/git-$branch/bin/git version) &&
78 if version=$(expr "$installed" : '.*\.g\([0-9a-f]*\)$')
79 then
81 elif version=v$(expr "$installed" : \
82 'git version \(.*\)\.rc[0-9]*$')
83 then
84 version="$version"-$(expr "$installed" : \
85 'git version .*\.\(rc[0-9]*\)$')
86 else
87 version=v$(expr "$installed" : 'git version \(.*\)')
88 fi &&
89 git rev-parse --verify "$version^0" 2>/dev/null
92 installed_source_trees=" "
93 for branch in $branches
95 if v=$(find_installed $branch) &&
96 test -n "$v" &&
97 v=$(git rev-parse --verify "$v^{tree}" 2>/dev/null)
98 then
99 installed_source_trees="$installed_source_trees$v "
101 done
103 for branch in $branches
105 echo "** $branch **"
106 revision=$(git show-ref -s --verify "refs/heads/$branch") || {
107 echo "** No $branch"
108 continue
111 if test ! -d "$BUILDBASE/$branch"
112 then
113 if test -z "$bootstrap"
114 then
115 echo "** No $BUILDBASE/$branch"
116 continue
118 "$NWD" . "$BUILDBASE/$branch" $branch &&
119 ln -s "$(pwd)/Meta" "$BUILDBASE/$branch/Meta" || {
120 echo "** Failed to bootstrap $BUILDBASE/$branch"
121 continue
125 private=$(git rev-parse -q --verify private-$branch 2>/dev/null)
126 case $? in 0|1) ;; *) exit $? ;; esac
128 version=$(find_installed $branch)
129 if test "z$version" = "z$revision"
130 then
131 echo "* up-to-date version is already installed from $branch"
132 test -n "$force" || continue
135 vtree=$(git rev-parse --verify "$version^{tree}")
136 rtree=$(git rev-parse --verify "$revision^{tree}")
138 skip_test=$notest skip_doc=$nodoc
139 case "$force" in
143 for xtree in $installed_source_trees $vtree
145 if test "z$xtree" = "z$rtree" ||
146 git diff --quiet "$xtree" "$rtree" -- . \
147 ':!GIT-VERSION-GEN' \
148 ':!RelNotes' \
149 ':!Documentation/'
150 then
151 skip_test=1
152 break
154 done
156 dvtree=$(git rev-parse --verify "$version:Documentation/")
157 drtree=$(git rev-parse --verify "$revision:Documentation/")
158 if test "z$dvtree" = "z$drtree"
159 then
160 skip_doc=1
163 esac
165 case "$skip_test" in
166 ?*) dotest= ;;
167 '') dotest=test ;;
168 esac
170 cd "$BUILDBASE/$branch"
171 git reset --hard &&
172 case "$(git symbolic-ref HEAD)" in
173 "refs/heads/$branch")
174 : ;;
176 git checkout "$branch" &&
177 git reset --hard || exit
178 esac &&
180 case "$scratch" in
184 Meta/Make clean
186 esac &&
188 case "$private" in
192 git merge --squash --no-commit "$private" || {
193 echo >&2 "** Cannot apply private edition changes"
194 git reset --hard
197 esac &&
199 save=$(git rev-parse HEAD) &&
201 Meta/Make $M ${test+"$test"} $jobs -- ${with_dash:+SHELL_PATH=/bin/dash} "$@" $dotest &&
204 test -n "$skip_doc" ||
205 if test "$save" = "$(git rev-parse HEAD)"
206 then
207 Meta/Make $M $jobs -- doc &&
208 Meta/Make $M -- install-man install-html
209 else
210 echo >&2 "Head moved--not installing docs"
212 } &&
215 test z$install = znoinstall ||
216 if test "$save" = "$(git rev-parse HEAD)"
217 then
218 Meta/Make $M -- ${with_dash:+SHELL_PATH=/bin/dash} "$@" install
219 else
220 echo >&2 "Head moved--not installing"
222 } || exit $?
224 git reset --hard
225 ) </dev/null || exit $?
227 installed_source_trees="$installed_source_trees$rtree "
228 done