1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
|
#!/bin/bash
# Variables:
# * VIFM_DATE_OVERRIDE -- date to use instead of "now"
if [ "$#" -lt "1" ] || [ "$#" -gt "2" ]; then
echo "Usage: $0 version [all|bump|update|commit|archive]"
exit 1
fi
ver="$1"
case "$ver" in
[0-9].[0-9][0-9].[0-9]-beta);;
[0-9].[0-9][0-9]-beta);;
[0-9].[0-9]-beta);;
[0-9].[0-9][0-9].[0-9]);;
[0-9].[0-9][0-9]);;
[0-9].[0-9]);;
*)
echo "ERROR: unrecognized version format: $ver"
exit 1
esac
IFS=. read -r -a ver_components <<< "${ver%-beta/}"
ver_num=$(( ver_components[0]*10000 +
ver_components[1]*100 +
ver_components[2] ))
target="all"
if [ $# -eq 2 ]; then
target="$2"
fi
function date() {
if [ -z "$VIFM_DATE_OVERRIDE" ]; then
command date "$@"
else
command date --date="$VIFM_DATE_OVERRIDE" "$@"
fi
}
# this check is for me, since I'm always use vifm.exe from the repository
if [ "$OS" = Windows_NT ]; then
if [ "$target" = all ] || [ "$target" = archive ]; then
vifm_running="$(ps -W | grep vifm.exe)"
if [ -n "$vifm_running" ]; then
echo "ERROR: vifm is running"
exit 2
fi
fi
fi
if [ "$target" = all ] || [ "$target" = update ] || [ "$target" = bump ]; then
echo "Updating version number..."
if [ "$target" != bump ]; then
# update version in ChangeLogs
sed -i "s/to current\$/to $ver ($(date '+%Y-%m-%d'))/" \
ChangeLog ChangeLog.LuaAPI
fi
# update version in configure script
sed -i "/AC_INIT(/s/,\\[[^,]\\+/,[$ver]/" configure.ac
sed -i "/VERSION_NUM/s/\\[[0-9]\\+\\]/[$ver_num]/" configure.ac
if [ "$OS" != Windows_NT ]; then
# regenerate autotools files
autoreconf
# some voodoo magic to preserve old version of aclocal.m4 file
make
git checkout aclocal.m4
make
# this one is to get rid of trailing whitespace
git checkout src/Makefile.in
make
fi
# update version in src/Makefile.win
makefile=src/Makefile.win
sed -i "/define VERSION/s/VERSION \".*\"/VERSION \"$ver\"/" "${makefile}"
sed -i "/define VERSION_NUM/s/[0-9]\\+/$ver_num/" "${makefile}"
vimplugindoc=data/vim/doc/plugin/vifm-plugin.txt
vimappdoc=data/vim/doc/app/vifm-app.txt
# update version in vifm-{app,plugin}.txt
sed -i "/For Vifm version/s/version \\S\\+/version $ver/" "${vimplugindoc}"
sed -i "/For Vifm version/s/version \\S\\+/version $ver/" "${vimappdoc}"
# update last change date in vifm-{app,plugin}.txt
sed -i "/Last change/s/: .*/: $(date '+%Y %b %d')/" "${vimplugindoc}"
sed -i "/Last change/s/: .*/: $(date '+%Y %b %d')/" "${vimappdoc}"
# update date in README
sed -i "/^This file last updated:/s/:.*/:$(date '+ %d %B %Y')/" README
# update version in README
sed -i "/^Version:/s/ .*/ $ver/" README
# update year in README
sed -i "/^2001 - /s/-.*/$(date '+- %Y')/" README
# update date in README.md
sed -i "/^_Version /s/ on .*/ on $(date '+%d %B %Y')._/" README.md
# update version in README.md
sed -i "/^_Version /s/ .*\. / ${ver}. /" README.md
# update man pages
sed -i "1s/\"[^\"]\\+\" \"[^\"]\\+\"\$/\"$(date '+%d %B %Y')\" \"vifm $ver\"/" data/man/*.1
if [ "$target" != bump ]; then
# update first header in the NEWS file
sed -i -e "1s/.*/$(date '+%d %B %Y')/" \
-e "2{s/.*/$(date '+%d %B %Y')/;s/./=/g}" NEWS
fi
fi
if [ "$target" = all ] || [ "$target" = commit ]; then
echo "Making version commit..."
if ! git commit -av -m "Version v$ver"; then
echo 'Committing error.'
exit 1
fi
# force mark commit with tag taking the last section in the NEWS for message
sed -n -e '/^~~~~~~~~~~~~~~~~~/q' -e '/^vifm/,$p' NEWS |
git tag --force --file=- --sign "v$ver"
fi
if [ "$target" = all ] || [ "$target" = archive ]; then
echo "Building archive..."
# make archive
if [ "$OS" != Windows_NT ]; then
archive_name="vifm-$ver.tar.bz2"
# perform build in a temporary directory to avoid picking up untracked
# files in tests/ which is listed in EXTRA_DIST of Makefile.am
build_dir=$(mktemp --directory --tmpdir vifm-release-XXXXXX)
trap 'rm -rf "$build_dir"' EXIT
git clone . "$build_dir"
( cd "$build_dir" && scripts/fix-timestamps && ./configure )
make -C "$build_dir" distcheck
mv "$build_dir/$archive_name" .
else
# remove config.h to make Makefile.win install default configuration
rm -f build-aux/config.h
# build vifm
make -C src/ -f Makefile.win clean
git checkout src/tags.c
if ! RELEASE=1 make -C src/ -f Makefile.win; then
echo "ERROR: Building project failed."
exit 3
fi
if ! RELEASE=1 make -C tests/ check; then
echo "ERROR: Testing project failed."
exit 4
fi
set -e
dir="vifm-w32-$ver-binary"
rm -rf "$dir"
mkdir "$dir"
cp -R data "$dir"
# place colors to a pseudo-/etc directory in data/ after updating EOLs
for i in "$dir/data/colors"/*; do
unix2dos -c ISO "$i"
done
mkdir "$dir/data/etc"
mv "$dir/data/colors" "$dir/data/etc"
# remove Unix-specific files from data/
rm "$dir/data"/*.desktop
rm "$dir/data"/vifm-media*
rm "$dir/data"/vifm.appdata.xml
rm "$dir/data/vifmrc-osx"
rm -r "$dir/data/man"
# update EOLs of a few other files in data/
unix2dos -c ISO "$dir/data/vifm-help.txt"
unix2dos -c ISO "$dir/data/vifmrc"
# prepare Vim-files in data/
mv "$dir/data/vim/doc/plugin/vifm-plugin.txt" "$dir/data/vim/doc/vifm-plugin.txt"
rmdir "$dir/data/vim/doc/plugin"
mkdir "$dir/data/vim-doc"
mv "$dir/data/vim/doc/app" "$dir/data/vim-doc/doc"
# the rest of text files are outside of data/
pkgfiles='AUTHORS BUGS ChangeLog ChangeLog.LuaAPI COPYING COPYING.3party FAQ INSTALL NEWS README THANKS TODO'
for i in $pkgfiles; do
dest="$dir/$i.txt"
cp "$i" "$dest"
unix2dos -c ISO "$dest"
done
cp src/vifm-pause src/*.dll src/*.exe "$dir"
strip -S --strip-unneeded "$dir"/*.dll "$dir"/*.exe
archive_name="$dir.zip"
rm -f "$archive_name"
zip -9 -r "$archive_name" "$dir"
set +e
fi
echo "Archive: $archive_name"
fi
|