/share/WinGit/release.sh: fix intelligent tagging
[msysgit.git] / share / WinGit / release.sh
blob4b5d52ecda6e34411bdf5620016a4aaff5186cb8
1 #!/bin/sh
3 force=
4 do_compile=t
5 while test $# -gt 0
6 do
7 case "$1" in
8 -f|--force)
9 force=t
10 shift
12 -n|--no-compile)
13 do_compile=
14 shift
17 break
18 esac
19 done
21 test -z "$1" && {
22 echo "Usage: $0 [-f] [-n] <version>" >&2
23 exit 1
26 version=$1
28 test -z "$force" && {
29 die () {
30 echo "$*" >&2
31 echo "If that is okay, please call '$0 -f $version'" >&2
32 exit 1
35 (cd /git &&
36 git update-index --refresh &&
37 git diff-files --quiet &&
38 git diff-index --cached HEAD --) ||
39 die "Git submodule has dirty files"
40 (cd / &&
41 git update-index --refresh &&
42 git diff-files --quiet &&
43 git diff-index --cached HEAD --) ||
44 die "msysGit super project not up-to-date"
47 create_msysgit_tag () {
48 i=0 &&
49 tag=$(git describe HEAD | cut -d- -f1) &&
50 tag=${tag%.msysgit.*} &&
51 while ! git tag -a -m "Git for Windows $1" $tag.msysgit.$i
53 i=$(($i+1))
54 done
57 # compile everything needed for standard setup
58 test "$do_compile" && {
59 wordpad /share/WinGit/ReleaseNotes.rtf && {
60 # create a commit if ReleaseNotes changed
61 if test ! -z "$(git diff /share/WinGit/ReleaseNotes.rtf)"
62 then
63 git add /share/WinGit/ReleaseNotes.rtf &&
64 git commit -m "Git for Windows $version"
65 fi &&
66 (cd /git &&
67 create_msysgit_tag $version &&
68 make install) &&
69 (cd /src/git-cheetah/explorer/ && make)
70 } || exit 1
73 test -z "$force" && {
74 die () {
75 echo "$*" >&2
76 echo "If that is okay, please call '$0 -f $version'" >&2
77 exit 1
80 (cd /git &&
81 git update-index --refresh &&
82 git diff-files --quiet &&
83 git diff-index --cached HEAD --) ||
84 die "Git submodule has dirty files"
85 (cd /git &&
86 test git.exe = $(ls -t git.exe $(git ls-files) | head -n 1)) ||
87 die "Git's git.exe is not up-to-date (run 'cd /git && make' to fix)"
88 for f in /bin/git* /libexec/git-core/git*
90 case "$f" in
91 *.manifest)
92 continue
94 */gitk)
95 basename=gitk-git/gitk
97 */git-citool|*/git-gui)
98 basename=git-gui/git-gui
100 */git-gui--askpass|*/git-gui.tcl)
101 basename=git-gui/$(basename "$f")
104 basename=$(basename "$f")
106 esac
107 cmp "$f" "/git/$basename" ||
108 die "Installed Git disagrees with contents of /git/ ($f)"
109 done
110 (cd / &&
111 git update-index --refresh &&
112 git diff-files --quiet &&
113 git diff-index --cached HEAD --) ||
114 die "msysGit super project not up-to-date"
115 (cd /git &&
116 test ! -z "$(git tag --contains HEAD)") ||
117 die "Git's HEAD is untagged"
120 TMPDIR=/tmp/WinGit
121 unset DONT_REMOVE_BUILTINS
123 /share/WinGit/copy-files.sh $TMPDIR &&
124 sed -e '/share\/msysGit/d' -e "s/msysGit/Git (version $version)/" \
125 < /etc/motd > $TMPDIR/etc/motd &&
126 cp /share/resources/gpl-2.0.rtf /share/resources/git.bmp /share/resources/gitsmall.bmp $TMPDIR &&
127 homewinpath=$(cd ~ ; pwd -W) &&
128 sed -e "s/%APPVERSION%/$version/" -e "s@%OUTPUTDIR%@$homewinpath@" \
129 < /share/WinGit/install.iss > $TMPDIR/install.iss &&
130 cp /share/WinGit/*.inc.iss $TMPDIR &&
131 echo "Launching Inno Setup compiler ..." &&
132 (/share/InnoSetup/ISCC.exe "$TMPDIR/install.iss" -q > /tmp/install.out;
133 echo $? > /tmp/install.status) &&
134 (grep -Ev "\s*Reading|\s*Compressing" < /tmp/install.out;
135 test 0 = "$(cat /tmp/install.status)") &&
136 (cd / && git tag -a -m "Git for Windows $1" Git-$1) &&
137 echo "Installer is available as $homewinpath/Git-$version.exe"