Files
@ r17653:8e16767f3f42
Branch filter:
Location: cpp/openttd-patchpack/source/findversion.sh - annotation
r17653:8e16767f3f42
5.1 KiB
application/x-sh
(svn r22435) -Fix: Git revision detection would return too much when tags are involved.
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 | r10085:5185635441a9 r10085:5185635441a9 r10729:809061d9ab58 r10729:809061d9ab58 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10092:36ce5ba21174 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10092:36ce5ba21174 r10092:36ce5ba21174 r10092:36ce5ba21174 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r15633:41f638112d0f r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r15633:41f638112d0f r15633:41f638112d0f r15633:41f638112d0f r10097:382d57ab041b r10097:382d57ab041b r10092:36ce5ba21174 r10092:36ce5ba21174 r10092:36ce5ba21174 r10085:5185635441a9 r10085:5185635441a9 r15250:61ec821d955c r15250:61ec821d955c r15633:41f638112d0f r10085:5185635441a9 r10085:5185635441a9 r10281:446aefa38244 r10281:446aefa38244 r17109:1d6a7e911128 r15633:41f638112d0f r15397:3a2110328d0a r15397:3a2110328d0a r15633:41f638112d0f r15397:3a2110328d0a r17653:8e16767f3f42 r17092:68ea7f31e57c r17092:68ea7f31e57c r17109:1d6a7e911128 r17092:68ea7f31e57c r10085:5185635441a9 r10085:5185635441a9 r15633:41f638112d0f r10085:5185635441a9 r10085:5185635441a9 r15253:0671324fe9d4 r10281:446aefa38244 r17109:1d6a7e911128 r17109:1d6a7e911128 r17109:1d6a7e911128 r17093:5363240a7d0a r17109:1d6a7e911128 r17093:5363240a7d0a r17110:a05cf3cd6325 r17110:a05cf3cd6325 r17110:a05cf3cd6325 r17110:a05cf3cd6325 r17110:a05cf3cd6325 r16611:d11beffb7028 r16611:d11beffb7028 r16611:d11beffb7028 r16611:d11beffb7028 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10092:36ce5ba21174 r10092:36ce5ba21174 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10085:5185635441a9 r10092:36ce5ba21174 | #!/bin/sh
# $Id$
# This file is part of OpenTTD.
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
# Arguments given? Show help text.
if [ "$#" != "0" ]; then
cat <<EOF
Usage: ./findversion.sh
Finds the current revision and if the code is modified.
Output: <REV>\t<REV_NR>\t<MODIFIED>\t<CLEAN_REV>
REV
a string describing what version of the code the current checkout is
based on. The exact format of this string depends on the version
control system in use, but it tries to identify the revision used as
close as possible (using the svn revision number or hg/git hash).
This also includes an indication of whether the checkout was
modified and which branch was checked out. This value is not
guaranteed to be sortable, but is mainly meant for identifying the
revision and user display.
If no revision identifier could be found, this is left empty.
REV_NR
the revision number of the svn revision this checkout is based on.
This can be used to determine which functionality is present in this
checkout. For trunk svn checkouts and hg/git branches based upon it,
this number should be accurate. For svn branch checkouts, this
number is mostly meaningless, at least when comparing with the
REV_NR from other branches or trunk.
This number should be sortable. Within a given branch or trunk, a
higher number means a newer version. However, when using git or hg,
this number will not increase on new commits.
If no revision number could be found, this is left empty.
MODIFIED
Whether (the src directory of) this checkout is modified or not. A
value of 0 means not modified, a value of 2 means it was modified.
Modification is determined in relation to the commit identified by
REV, so not in relation to the svn revision identified by REV_NR.
A value of 1 means that the modified status is unknown, because this
is not an svn/git/hg checkout for example.
CLEAN_REV
the same as REV but without branch name
By setting the AWK environment variable, a caller can determine which
version of "awk" is used. If nothing is set, this script defaults to
"awk".
EOF
exit 1;
fi
# Allow awk to be provided by the caller.
if [ -z "$AWK" ]; then
AWK=awk
fi
# Find out some dirs
cd `dirname "$0"`
ROOT_DIR=`pwd`
# Determine if we are using a modified version
# Assume the dir is not modified
MODIFIED="0"
if [ -d "$ROOT_DIR/.svn" ]; then
# We are an svn checkout
if [ -n "`svnversion | grep 'M'`" ]; then
MODIFIED="2"
fi
# Find the revision like: rXXXXM-branch
BRANCH=`LC_ALL=C svn info | "$AWK" '/^URL:.*branches/ { split($2, a, "/"); for(i in a) if (a[i]=="branches") { print a[i+1]; break } }'`
TAG=`LC_ALL=C svn info | "$AWK" '/^URL:.*tags/ { split($2, a, "/"); for(i in a) if (a[i]=="tags") { print a[i+1]; break } }'`
REV_NR=`LC_ALL=C svn info | "$AWK" '/^Last Changed Rev:/ { print $4 }'`
if [ -n "$TAG" ]; then
REV=$TAG
else
REV="r$REV_NR"
fi
elif [ -d "$ROOT_DIR/.git" ]; then
# We are a git checkout
# Refresh the index to make sure file stat info is in sync, then look for modifications
git update-index --refresh >/dev/null
if [ -n "`git diff-index HEAD`" ]; then
MODIFIED="2"
fi
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
REV="g`echo $HASH | cut -c1-8`"
BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@;s@^master$@@'`"
REV_NR=`LC_ALL=C git log --pretty=format:%s --grep="^(svn r[0-9]*)" -1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
if [ -z "$REV_NR" ]; then
# No rev? Maybe it is a custom git-svn clone
REV_NR=`LC_ALL=C git log --pretty=format:%b --grep="git-svn-id:.*@[0-9]*" -1 | sed "s@.*\@\([0-9]*\).*@\1@"`
fi
TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`"
if [ -n "$TAG" ]; then
BRANCH=""
REV="$TAG"
fi
elif [ -d "$ROOT_DIR/.hg" ]; then
# We are a hg checkout
if [ -n "`hg status | grep -v '^?'`" ]; then
MODIFIED="2"
fi
HASH=`LC_ALL=C hg id -i | cut -c1-12`
REV="h`echo $HASH | cut -c1-8`"
BRANCH="`hg branch | sed 's@^default$@@'`"
TAG="`hg id -t | grep -v 'tip$'`"
if [ -n "$TAG" ]; then
BRANCH=""
REV="$TAG"
fi
REV_NR=`LC_ALL=C hg log -f -k "(svn r" -l 1 --template "{desc|firstline}\n" | grep "^(svn r[0-9]*)" | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
if [ -z "$REV_NR" ]; then
# No rev? Maybe it is a custom hgsubversion clone
REV_NR=`LC_ALL=C hg parent --template="{svnrev}"`
fi
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
# We are an exported source bundle
cat $ROOT_DIR/.ottdrev
exit
else
# We don't know
MODIFIED="1"
BRANCH=""
REV=""
REV_NR=""
fi
if [ "$MODIFIED" -eq "2" ]; then
REV="${REV}M"
fi
CLEAN_REV=${REV}
if [ -n "$BRANCH" ]; then
REV="${REV}-$BRANCH"
fi
echo "$REV $REV_NR $MODIFIED $CLEAN_REV"
|