WinGit release scripts: avoid absolute paths
[msysgit.git] / share / WinGit / release.sh
blob56e219173ef1fd40d989c746bba6b63d7dedcb72
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 # change directory to msysGit root
29 cd "$(dirname "$0")"/../.. || {
30 echo "Could not change directory to msysGit root" >&2
31 exit 1
34 test -z "$force" && {
35 die () {
36 echo "$*" >&2
37 echo "If that is okay, please call '$0 -f $version'" >&2
38 exit 1
41 (cd git &&
42 git update-index --refresh &&
43 git diff-files --quiet &&
44 git diff-index --cached HEAD --) ||
45 die "Git submodule has dirty files"
46 (git update-index --refresh &&
47 git diff-files --quiet &&
48 git diff-index --cached HEAD --) ||
49 die "msysGit super project not up-to-date"
52 create_msysgit_tag () {
53 i=0 &&
54 tag=$(git describe HEAD | cut -d- -f1) &&
55 tag=${tag%.msysgit.*} &&
56 while ! git tag -a -m "Git for Windows $1" $tag.msysgit.$i
58 i=$(($i+1))
59 done
62 # compile everything needed for standard setup
63 test "$do_compile" && {
64 wordpad share/WinGit/ReleaseNotes.rtf && {
65 ( # create a commit if ReleaseNotes changed
66 if test ! -z "$(git diff share/WinGit/ReleaseNotes.rtf)"
67 then
68 git add share/WinGit/ReleaseNotes.rtf &&
69 git commit -m "Git for Windows $version"
70 fi) &&
71 (cd git &&
72 create_msysgit_tag $version &&
73 make install) &&
74 (cd src/git-cheetah/explorer/ && make)
75 } || exit 1
78 test -z "$force" && {
79 die () {
80 echo "$*" >&2
81 echo "If that is okay, please call '$0 -f $version'" >&2
82 exit 1
85 (cd git &&
86 git update-index --refresh &&
87 git diff-files --quiet &&
88 git diff-index --cached HEAD --) ||
89 die "Git submodule has dirty files"
90 (cd git &&
91 test git.exe = $((printf 'git.exe\0'; git ls-files -z) | xargs --null ls -t 2>/dev/null| head -1)) ||
92 die "Git's git.exe is not up-to-date (run 'cd /git && make' to fix)"
93 for f in bin/git* libexec/git-core/git*
95 case "$f" in
96 *.manifest)
97 continue
99 */gitk)
100 basename=gitk-git/gitk
102 */git-citool|*/git-gui)
103 basename=git-gui/git-gui
105 */git-gui--askpass|*/git-gui--askyesno|*/git-gui.tcl)
106 basename=git-gui/$(basename "$f")
109 basename=$(basename "$f")
111 esac
112 cmp "$f" "git/$basename" ||
113 die "Installed Git disagrees with contents of /git/ ($f)"
114 done
115 (git update-index --refresh &&
116 git diff-files --quiet &&
117 git diff-index --cached HEAD --) ||
118 die "msysGit super project not up-to-date"
119 (cd git &&
120 test ! -z "$(git tag --contains HEAD)") ||
121 die "Git's HEAD is untagged"
124 TMPDIR=/tmp/WinGit
125 unset DONT_REMOVE_BUILTINS
127 share/WinGit/copy-files.sh $TMPDIR &&
128 sed -e '/share\/msysGit/d' -e "s/msysGit/Git (version $version)/" \
129 < etc/motd > $TMPDIR/etc/motd &&
130 cp share/resources/gpl-2.0.rtf share/resources/git.bmp share/resources/gitsmall.bmp $TMPDIR &&
131 sed -e "s/%APPVERSION%/$version/" \
132 < share/WinGit/install.iss > $TMPDIR/install.iss &&
133 cp share/WinGit/*.inc.iss $TMPDIR &&
134 echo "Launching Inno Setup compiler ..." &&
135 (share/InnoSetup/ISCC.exe "$TMPDIR/install.iss" -q > /tmp/install.out;
136 echo $? > /tmp/install.status) &&
137 (grep -Ev "\s*Reading|\s*Compressing" < /tmp/install.out;
138 test 0 = "$(cat /tmp/install.status)") &&
139 git tag -a -m "Git for Windows $1" Git-$1 &&
140 echo "Installer is available as $HOME/Git-$version.exe"