What's cooiking (2014/05 #06)
[git.git] / Dothem
blob7f18d86a40f035c9c73fc978ce80b4a00fad4ba6
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 -*) echo >&2 "Unknown option: $1"; exit 1 ;;
35 *) break ;;
36 esac
38 shift
39 done
41 for TRASH in /dev/shm /tmp ""
43 if test -n "$TRASH" &&
44 mkdir -p "$TRASH/testpen" 2>/dev/null &&
45 test -w "TRASH/testpen"
46 then
47 TRASH="--root=$(cd "$TRASH/testpen" && /bin/pwd)"
48 break
50 done
52 sh -c 'asciidoc --version >/dev/null 2>&1' || nodoc=y
53 GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}"
54 export GIT_TEST_OPTS
56 test -f /bin/dash || with_dash=
57 if test -z "$BUILDBASE"
58 then
59 if test -d "$inst_prefix/buildfarm"
60 then
61 BUILDBASE="$inst_prefix/buildfarm"
62 elif test -d "../buildfarm"
63 then
64 BUILDBASE=../buildfarm
65 else
66 echo >&2 "Buildbase unknown"
67 exit 1
70 test -n "$branches" || branches='next master maint jch pu'
71 test -n "$jobs" || jobs=-j2
73 find_installed () {
74 branch=$1
75 test -f "$inst_prefix/git-$branch/bin/git" &&
76 installed=$($inst_prefix/git-$branch/bin/git version) &&
77 if version=$(expr "$installed" : '.*\.g\([0-9a-f]*\)$')
78 then
80 elif version=v$(expr "$installed" : \
81 'git version \(.*\)\.rc[0-9]*$')
82 then
83 version="$version"-$(expr "$installed" : \
84 'git version .*\.\(rc[0-9]*\)$')
85 else
86 version=v$(expr "$installed" : 'git version \(.*\)')
87 fi &&
88 git rev-parse --verify "$version^0" 2>/dev/null
91 installed_source_trees=" "
92 for branch in $branches
94 if v=$(find_installed $branch) &&
95 test -n "$v" &&
96 v=$(git rev-parse --verify "$v^{tree}" 2>/dev/null)
97 then
98 installed_source_trees="$installed_source_trees$v "
100 done
102 for branch in $branches
104 echo "** $branch **"
105 revision=$(git show-ref -s --verify "refs/heads/$branch") || {
106 echo "** No $branch"
107 continue
110 if test ! -d "$BUILDBASE/$branch"
111 then
112 if test -z "$bootstrap"
113 then
114 echo "** No $BUILDBASE/$branch"
115 continue
117 "$NWD" . "$BUILDBASE/$branch" $branch &&
118 ln -s "$(pwd)/Meta" "$BUILDBASE/$branch/Meta" || {
119 echo "** Failed to bootstrap $BUILDBASE/$branch"
120 continue
124 private=$(git rev-parse -q --verify private-$branch 2>/dev/null)
125 case $? in 0|1) ;; *) exit $? ;; esac
127 version=$(find_installed $branch)
128 if test "z$version" = "z$revision"
129 then
130 echo "* up-to-date version is already installed from $branch"
131 test -n "$force" || continue
134 vtree=$(git rev-parse --verify "$version^{tree}")
135 rtree=$(git rev-parse --verify "$revision^{tree}")
137 skip_test=$notest skip_doc=$nodoc
138 case "$force" in
142 for xtree in $installed_source_trees $vtree
144 if test "z$xtree" = "z$rtree" ||
145 git diff --quiet "$xtree" "$rtree" -- . \
146 ':!GIT-VERSION-GEN' ':!Documentation/'
147 then
148 skip_test=1
149 break
151 done
153 dvtree=$(git rev-parse --verify "$version:Documentation/")
154 drtree=$(git rev-parse --verify "$revision:Documentation/")
155 if test "z$dvtree" = "z$drtree"
156 then
157 skip_doc=1
160 esac
162 case "$skip_test" in
163 ?*) dotest= ;;
164 '') dotest=test ;;
165 esac
167 cd "$BUILDBASE/$branch"
168 git reset --hard &&
169 case "$(git symbolic-ref HEAD)" in
170 "refs/heads/$branch")
171 : ;;
173 git checkout "$branch" &&
174 git reset --hard || exit
175 esac &&
177 case "$scratch" in
181 Meta/Make clean
183 esac &&
185 case "$private" in
189 git merge --squash --no-commit "$private" || {
190 echo >&2 "** Cannot apply private edition changes"
191 git reset --hard
194 esac &&
196 save=$(git rev-parse HEAD) &&
198 Meta/Make $M ${test+"$test"} $jobs -- ${with_dash:+SHELL_PATH=/bin/dash} $dotest &&
201 test -n "$skip_doc" ||
202 if test "$save" = "$(git rev-parse HEAD)"
203 then
204 Meta/Make $M $jobs -- doc &&
205 Meta/Make $M -- install-man install-html
206 else
207 echo >&2 "Head moved--not installing docs"
209 } &&
212 test z$install = znoinstall ||
213 if test "$save" = "$(git rev-parse HEAD)"
214 then
215 Meta/Make $M -- ${with_dash:+SHELL_PATH=/bin/dash} install
216 else
217 echo >&2 "Head moved--not installing"
219 } || exit $?
221 git reset --hard
222 ) </dev/null || exit $?
224 installed_source_trees="$installed_source_trees$rtree "
225 done