mirror of https://github.com/OpenTTD/OpenTTD.git
Change: Non-tag revisions are now named '<commitdate>-<branch>-g<shorthash><modified>'.
This commit is contained in:
parent
e0a62a9e55
commit
192770e6da
|
@ -12,15 +12,15 @@
|
|||
# The revision is needed for the bundle name and creating an OSX application bundle.
|
||||
# Detect the revision
|
||||
VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh")
|
||||
REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
|
||||
VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
|
||||
|
||||
# Make sure we have something in REV
|
||||
ifeq ($(REV),)
|
||||
REV := norev000
|
||||
# Make sure we have something in VERSION
|
||||
ifeq ($(VERSION),)
|
||||
VERSION := norev000
|
||||
endif
|
||||
|
||||
ifndef BUNDLE_NAME
|
||||
BUNDLE_NAME = openttd-custom-$(REV)-$(OS)
|
||||
BUNDLE_NAME = openttd-custom-$(VERSION)-$(OS)
|
||||
endif
|
||||
|
||||
# An OSX application bundle needs the data files, lang files and openttd executable in a different location.
|
||||
|
|
|
@ -94,15 +94,15 @@ VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh")
|
|||
MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
|
||||
|
||||
# Use autodetected revisions
|
||||
REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
|
||||
REV_NR := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ')
|
||||
VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
|
||||
ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ')
|
||||
|
||||
# Make sure we have something in REV and REV_NR
|
||||
ifeq ($(REV),)
|
||||
REV := norev000
|
||||
# Make sure we have something in VERSION and ISODATE
|
||||
ifeq ($(VERSION),)
|
||||
VERSION := norev000
|
||||
endif
|
||||
ifeq ($(REV_NR),)
|
||||
REV_NR := 0
|
||||
ifeq ($(ISODATE),)
|
||||
ISODATE := 00000000
|
||||
endif
|
||||
|
||||
# This helps to recompile if flags change
|
||||
|
@ -113,7 +113,7 @@ RES := $(shell if [ "`cat $(CONFIG_CACHE_ENDIAN) 2>/dev/null`" != "$(ENDIAN_FORC
|
|||
# If there is a change in the source-file-list, make sure we recheck the deps
|
||||
RES := $(shell if [ "`cat $(CONFIG_CACHE_SOURCE) 2>/dev/null`" != "$(SRCS)" ]; then echo "$(SRCS)" > $(CONFIG_CACHE_SOURCE); fi )
|
||||
# If there is a change in the revision, make sure we recompile rev.cpp
|
||||
RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(REV) $(MODIFIED)" ]; then echo "$(REV) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi )
|
||||
RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(VERSION) $(MODIFIED)" ]; then echo "$(VERSION) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi )
|
||||
|
||||
ifndef MAKEDEPEND
|
||||
# The slow, but always correct, dep-check
|
||||
|
@ -293,10 +293,10 @@ $(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
|
|||
# Revision files
|
||||
|
||||
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
|
||||
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp
|
||||
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp
|
||||
|
||||
$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in
|
||||
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/os/windows/ottdres.rc
|
||||
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/os/windows/ottdres.rc
|
||||
|
||||
FORCE:
|
||||
|
||||
|
|
108
findversion.sh
108
findversion.sh
|
@ -14,42 +14,31 @@ if [ "$#" != "0" ]; then
|
|||
Usage: ./findversion.sh
|
||||
Finds the current revision and if the code is modified.
|
||||
|
||||
Output: <REV>\t<REV_NR>\t<MODIFIED>\t<CLEAN_REV>
|
||||
REV
|
||||
Output: <VERSION>\t<ISODATE>\t<MODIFIED>\t<HASH>
|
||||
VERSION
|
||||
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
|
||||
based on.
|
||||
This also includes the commit date, 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.
|
||||
ISODATE
|
||||
the commit date of the revision this checkout is based on.
|
||||
The commit date may differ from the author date.
|
||||
This can be used to decide upon the age of the source.
|
||||
|
||||
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.
|
||||
If no timestamp 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.
|
||||
is not an git checkout for example.
|
||||
|
||||
CLEAN_REV
|
||||
the same as REV but without branch name
|
||||
HASH
|
||||
the git revision hash
|
||||
|
||||
By setting the AWK environment variable, a caller can determine which
|
||||
version of "awk" is used. If nothing is set, this script defaults to
|
||||
|
@ -70,21 +59,7 @@ ROOT_DIR=`pwd`
|
|||
# Determine if we are using a modified version
|
||||
# Assume the dir is not modified
|
||||
MODIFIED="0"
|
||||
if [ -d "$ROOT_DIR/.svn" ] || [ -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
|
||||
if [ -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
|
||||
|
@ -92,35 +67,21 @@ elif [ -d "$ROOT_DIR/.git" ]; then
|
|||
MODIFIED="2"
|
||||
fi
|
||||
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
|
||||
REV="g`echo $HASH | cut -c1-8`"
|
||||
SHORTHASH=`echo ${HASH} | cut -c1-8`
|
||||
ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'`
|
||||
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"
|
||||
VERSION="${TAG}"
|
||||
elif [ "${BRANCH}" = "master" ]; then
|
||||
VERSION="${ISODATE}-g${SHORTHASH}"
|
||||
else
|
||||
VERSION="${ISODATE}-${BRANCH}-g${SHORTHASH}"
|
||||
fi
|
||||
elif [ -d "$ROOT_DIR/.hg" ]; then
|
||||
# We are a hg checkout
|
||||
if [ -n "`HGPLAIN= hg status | grep -v '^?'`" ]; then
|
||||
MODIFIED="2"
|
||||
fi
|
||||
HASH=`LC_ALL=C HGPLAIN= hg id -i | cut -c1-12`
|
||||
REV="h`echo $HASH | cut -c1-8`"
|
||||
BRANCH="`HGPLAIN= hg branch | sed 's@^default$@@'`"
|
||||
TAG="`HGPLAIN= hg id -t | grep -v 'tip$'`"
|
||||
if [ -n "$TAG" ]; then
|
||||
BRANCH=""
|
||||
REV="$TAG"
|
||||
fi
|
||||
REV_NR=`LC_ALL=C HGPLAIN= 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 HGPLAIN= hg parent --template="{svnrev}"`
|
||||
|
||||
if [ "$MODIFIED" -eq "2" ]; then
|
||||
VERSION="${VERSION}M"
|
||||
fi
|
||||
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
||||
# We are an exported source bundle
|
||||
|
@ -129,19 +90,12 @@ elif [ -f "$ROOT_DIR/.ottdrev" ]; then
|
|||
else
|
||||
# We don't know
|
||||
MODIFIED="1"
|
||||
HASH=""
|
||||
SHORTHASH=""
|
||||
BRANCH=""
|
||||
REV=""
|
||||
REV_NR=""
|
||||
ISODATE=""
|
||||
TAG=""
|
||||
VERSION=""
|
||||
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"
|
||||
echo "$VERSION $ISODATE $MODIFIED $HASH"
|
||||
|
|
|
@ -21,312 +21,132 @@ Sub FindReplaceInFile(filename, to_find, replacement)
|
|||
file.Close
|
||||
End Sub
|
||||
|
||||
Sub UpdateFile(modified, revision, version, cur_date, filename)
|
||||
Sub UpdateFile(modified, isodate, version, cur_date, filename)
|
||||
FSO.CopyFile filename & ".in", filename
|
||||
FindReplaceInFile filename, "!!MODIFIED!!", modified
|
||||
FindReplaceInFile filename, "!!REVISION!!", revision
|
||||
FindReplaceInFile filename, "!!ISODATE!!", isodate
|
||||
FindReplaceInFile filename, "!!VERSION!!", version
|
||||
FindReplaceInFile filename, "!!DATE!!", cur_date
|
||||
End Sub
|
||||
|
||||
Sub UpdateFiles(version)
|
||||
Dim modified, revision, cur_date
|
||||
Dim modified, isodate, cur_date
|
||||
cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date)
|
||||
|
||||
If InStr(version, Chr(9)) Then
|
||||
revision = Mid(version, InStr(version, Chr(9)) + 1)
|
||||
modified = Mid(revision, InStr(revision, Chr(9)) + 1)
|
||||
revision = Mid(revision, 1, InStr(revision, Chr(9)) - 1)
|
||||
isodate = Mid(version, InStr(version, Chr(9)) + 1)
|
||||
modified = Mid(isodate, InStr(isodate, Chr(9)) + 1)
|
||||
isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1)
|
||||
modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1)
|
||||
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
|
||||
Else
|
||||
revision = 0
|
||||
isodate = 0
|
||||
modified = 1
|
||||
End If
|
||||
|
||||
UpdateFile modified, revision, version, cur_date, "../src/rev.cpp"
|
||||
UpdateFile modified, revision, version, cur_date, "../src/os/windows/ottdres.rc"
|
||||
UpdateFile modified, isodate, version, cur_date, "../src/rev.cpp"
|
||||
UpdateFile modified, isodate, version, cur_date, "../src/os/windows/ottdres.rc"
|
||||
End Sub
|
||||
|
||||
Function ReadRegistryKey(shive, subkey, valuename, architecture)
|
||||
Dim hiveKey, objCtx, objLocator, objServices, objReg, Inparams, Outparams
|
||||
|
||||
' First, get the Registry Provider for the requested architecture
|
||||
Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
|
||||
objCtx.Add "__ProviderArchitecture", architecture ' Must be 64 of 32
|
||||
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
|
||||
Set objServices = objLocator.ConnectServer("","root\default","","",,,,objCtx)
|
||||
Set objReg = objServices.Get("StdRegProv")
|
||||
|
||||
' Check the hive and give it the right value
|
||||
Select Case shive
|
||||
Case "HKCR", "HKEY_CLASSES_ROOT"
|
||||
hiveKey = &h80000000
|
||||
Case "HKCU", "HKEY_CURRENT_USER"
|
||||
hiveKey = &H80000001
|
||||
Case "HKLM", "HKEY_LOCAL_MACHINE"
|
||||
hiveKey = &h80000002
|
||||
Case "HKU", "HKEY_USERS"
|
||||
hiveKey = &h80000003
|
||||
Case "HKCC", "HKEY_CURRENT_CONFIG"
|
||||
hiveKey = &h80000005
|
||||
Case "HKDD", "HKEY_DYN_DATA" ' Only valid for Windows 95/98
|
||||
hiveKey = &h80000006
|
||||
Case Else
|
||||
MsgBox "Hive not valid (ReadRegistryKey)"
|
||||
End Select
|
||||
|
||||
Set Inparams = objReg.Methods_("GetStringValue").Inparameters
|
||||
Inparams.Hdefkey = hiveKey
|
||||
Inparams.Ssubkeyname = subkey
|
||||
Inparams.Svaluename = valuename
|
||||
Set Outparams = objReg.ExecMethod_("GetStringValue", Inparams,,objCtx)
|
||||
|
||||
ReadRegistryKey = Outparams.SValue
|
||||
End Function
|
||||
|
||||
Function DetermineSVNVersion()
|
||||
Dim WshShell, version, branch, modified, revision, clean_rev, url, oExec, line, hash
|
||||
Function DetermineVersion()
|
||||
Dim WshShell, branch, tag, modified, isodate, oExec, line, hash, shorthash
|
||||
Set WshShell = CreateObject("WScript.Shell")
|
||||
On Error Resume Next
|
||||
|
||||
revision = 0
|
||||
modified = 1
|
||||
hash = ""
|
||||
shorthash = ""
|
||||
branch = ""
|
||||
isodate = ""
|
||||
tag = ""
|
||||
|
||||
' Try TortoiseSVN
|
||||
' Get the directory where TortoiseSVN (should) reside(s)
|
||||
Dim sTortoise
|
||||
' First, try with 32-bit architecture
|
||||
sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 32)
|
||||
If sTortoise = "" Or IsNull(sTortoise) Then
|
||||
' No 32-bit version of TortoiseSVN installed, try 64-bit version (doesn't hurt on 32-bit machines, it returns nothing or is ignored)
|
||||
sTortoise = ReadRegistryKey("HKLM", "SOFTWARE\TortoiseSVN", "Directory", 64)
|
||||
End If
|
||||
' Set the environment to english
|
||||
WshShell.Environment("PROCESS")("LANG") = "en"
|
||||
|
||||
' If TortoiseSVN is installed, try to get the revision number
|
||||
If sTortoise <> "" Then
|
||||
Dim SubWCRev
|
||||
Set SubWCRev = WScript.CreateObject("SubWCRev.object")
|
||||
SubWCRev.GetWCInfo FSO.GetAbsolutePathName("../"), 0, 0
|
||||
revision = SubWCRev.Revision
|
||||
version = "r" & revision
|
||||
modified = 0
|
||||
if SubWCRev.HasModifications then modified = 2
|
||||
url = SubWCRev.Url
|
||||
End If
|
||||
Set oExec = WshShell.Exec("git rev-parse --verify HEAD")
|
||||
If Err.Number = 0 Then
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
Loop
|
||||
|
||||
' Looks like there is no TortoiseSVN installed either. Then we don't know it.
|
||||
If revision = 0 Then
|
||||
' Reset error and version
|
||||
Err.Clear
|
||||
version = "norev000"
|
||||
modified = 0
|
||||
|
||||
' Set the environment to english
|
||||
WshShell.Environment("PROCESS")("LANG") = "en"
|
||||
|
||||
' Do we have subversion installed? Check immediatelly whether we've got a modified WC.
|
||||
Set oExec = WshShell.Exec("svnversion ../")
|
||||
If Err.Number = 0 Then
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
Loop
|
||||
|
||||
line = OExec.StdOut.ReadLine()
|
||||
If line <> "exported" Then
|
||||
If InStr(line, "M") Then
|
||||
modified = 2
|
||||
End If
|
||||
|
||||
' And use svn info to get the correct revision and branch information.
|
||||
Set oExec = WshShell.Exec("svn info ../")
|
||||
If Err.Number = 0 Then
|
||||
Do
|
||||
line = OExec.StdOut.ReadLine()
|
||||
If InStr(line, "URL") Then
|
||||
url = line
|
||||
End If
|
||||
If InStr(line, "Last Changed Rev") Then
|
||||
revision = Mid(line, 19)
|
||||
version = "r" & revision
|
||||
End If
|
||||
Loop While Not OExec.StdOut.atEndOfStream
|
||||
End If ' Err.Number = 0
|
||||
End If ' line <> "exported"
|
||||
End If ' Err.Number = 0
|
||||
End If ' InStr(version, "$")
|
||||
|
||||
If version <> "norev000" Then
|
||||
If InStr(url, "branches") Then
|
||||
branch = Mid(url, InStr(url, "branches/") + 9)
|
||||
End If
|
||||
If InStr(url, "tags") Then
|
||||
version = Mid(url, InStr(url, "tags/") + 5)
|
||||
End If
|
||||
Else ' version <> "norev000"
|
||||
' svn detection failed, reset error and try git
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("git rev-parse --verify HEAD")
|
||||
If Err.Number = 0 Then
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
Loop
|
||||
|
||||
If oExec.ExitCode = 0 Then
|
||||
hash = oExec.StdOut.ReadLine()
|
||||
version = "g" & Mid(hash, 1, 8)
|
||||
' Make sure index is in sync with disk
|
||||
Set oExec = WshShell.Exec("git update-index --refresh")
|
||||
If Err.Number = 0 Then
|
||||
' StdOut and StdErr share a 4kB buffer so prevent it from filling up as we don't care about the output
|
||||
oExec.StdOut.Close
|
||||
oExec.StdErr.Close
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
WScript.Sleep 10
|
||||
Loop
|
||||
End If
|
||||
Set oExec = WshShell.Exec("git diff-index --exit-code --quiet HEAD ../")
|
||||
If Err.Number = 0 Then
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
Loop
|
||||
|
||||
If oExec.ExitCode = 1 Then
|
||||
modified = 2
|
||||
End If ' oExec.ExitCode = 1
|
||||
|
||||
Set oExec = WshShell.Exec("git symbolic-ref HEAD")
|
||||
If Err.Number = 0 Then
|
||||
line = oExec.StdOut.ReadLine()
|
||||
line = Mid(line, InStrRev(line, "/") + 1)
|
||||
If line <> "master" Then
|
||||
branch = line
|
||||
End If ' line <> "master"
|
||||
End If ' Err.Number = 0
|
||||
|
||||
Set oExec = WshShell.Exec("git log --pretty=format:%s --grep=" & Chr(34) & "^(svn r[0-9]*)" & Chr(34) & " -1")
|
||||
if Err.Number = 0 Then
|
||||
revision = Mid(oExec.StdOut.ReadLine(), 7)
|
||||
revision = Mid(revision, 1, InStr(revision, ")") - 1)
|
||||
End If ' Err.Number = 0
|
||||
If revision = "" Then
|
||||
' No revision? Maybe it is a custom git-svn clone
|
||||
' Reset error number as WshShell.Exec will not do that on success
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("git log --pretty=format:%b --grep=" & Chr(34) & "git-svn-id:.*@[0-9]*" & Chr(34) & " -1")
|
||||
If Err.Number = 0 Then
|
||||
revision = oExec.StdOut.ReadLine()
|
||||
revision = Mid(revision, InStr(revision, "@") + 1)
|
||||
revision = Mid(revision, 1, InStr(revision, " ") - 1)
|
||||
End If ' Err.Number = 0
|
||||
End If ' revision = ""
|
||||
|
||||
' Check if a tag is currently checked out
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("git name-rev --name-only --tags --no-undefined HEAD")
|
||||
If Err.Number = 0 Then
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
Loop
|
||||
If oExec.ExitCode = 0 Then
|
||||
version = oExec.StdOut.ReadLine()
|
||||
If Right(version, 2) = "^0" Then
|
||||
version = Left(version, Len(version) - 2)
|
||||
End If
|
||||
branch = ""
|
||||
End If ' oExec.ExitCode = 0
|
||||
End If ' Err.Number = 0
|
||||
End If ' Err.Number = 0
|
||||
End If ' oExec.ExitCode = 0
|
||||
End If ' Err.Number = 0
|
||||
|
||||
If version = "norev000" Then
|
||||
' git detection failed, reset error and try mercurial (hg)
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("hg id -i")
|
||||
If oExec.ExitCode = 0 Then
|
||||
hash = oExec.StdOut.ReadLine()
|
||||
shorthash = Mid(hash, 1, 8)
|
||||
' Make sure index is in sync with disk
|
||||
Set oExec = WshShell.Exec("git update-index --refresh")
|
||||
If Err.Number = 0 Then
|
||||
' StdOut and StdErr share a 4kB buffer so prevent it from filling up as we don't care about the output
|
||||
oExec.StdOut.Close
|
||||
oExec.StdErr.Close
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
WScript.Sleep 10
|
||||
Loop
|
||||
End If
|
||||
Set oExec = WshShell.Exec("git diff-index --exit-code --quiet HEAD ../")
|
||||
If Err.Number = 0 Then
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
Loop
|
||||
|
||||
If oExec.ExitCode = 0 Then
|
||||
line = OExec.StdOut.ReadLine()
|
||||
hash = Left(line, 12)
|
||||
version = "h" & Mid(hash, 1, 8)
|
||||
If oExec.ExitCode = 1 Then
|
||||
modified = 2
|
||||
End If ' oExec.ExitCode = 1
|
||||
|
||||
' Check if a tag is currently checked out
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("hg id -t")
|
||||
If Err.Number = 0 Then
|
||||
line = oExec.StdOut.ReadLine()
|
||||
If Len(line) > 0 And Right(line, 3) <> "tip" Then
|
||||
version = line
|
||||
branch = ""
|
||||
End If ' Len(line) > 0 And Right(line, 3) <> "tip"
|
||||
End If ' Err.Number = 0
|
||||
Set oExec = WshShell.Exec("git show -s --pretty=format:%ci")
|
||||
if Err.Number = 0 Then
|
||||
isodate = Mid(oExec.StdOut.ReadLine(), 1, 10)
|
||||
isodate = Replace(isodate, "-", "")
|
||||
End If ' Err.Number = 0
|
||||
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("hg status ../")
|
||||
If Err.Number = 0 Then
|
||||
Do
|
||||
line = OExec.StdOut.ReadLine()
|
||||
If Len(line) > 0 And Mid(line, 1, 1) <> "?" Then
|
||||
modified = 2
|
||||
Exit Do
|
||||
End If ' Len(line) > 0 And Mid(line, 1, 1) <> "?"
|
||||
Loop While Not OExec.StdOut.atEndOfStream
|
||||
' Check branch
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("git symbolic-ref HEAD")
|
||||
If Err.Number = 0 Then
|
||||
line = oExec.StdOut.ReadLine()
|
||||
branch = Mid(line, InStrRev(line, "/") + 1)
|
||||
End If ' Err.Number = 0
|
||||
|
||||
Set oExec = WshShell.Exec("hg branch")
|
||||
If Err.Number = 0 Then
|
||||
line = OExec.StdOut.ReadLine()
|
||||
If line <> "default" Then
|
||||
branch = line
|
||||
End If ' line <> "default"
|
||||
End If ' Err.Number = 0
|
||||
|
||||
Set oExec = WshShell.Exec("hg log -f -k " & Chr(34) & "(svn r" & Chr(34) & " -l 1 --template " & Chr(34) & "{desc|firstline}\n" & Chr(34) & " --cwd ../")
|
||||
If Err.Number = 0 Then
|
||||
line = oExec.StdOut.ReadLine()
|
||||
If Left(line, 6) = "(svn r" Then
|
||||
revision = Mid(line, 7)
|
||||
revision = Mid(revision, 1, InStr(revision, ")") - 1)
|
||||
End If 'Left(line, 6) = "(svn r"
|
||||
End If ' Err.Number = 0
|
||||
|
||||
If revision = "" Then
|
||||
' No rev? Maybe it is a custom hgsubversion clone
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("hg parent --template=" & Chr(34) & "{svnrev}" & Chr(34))
|
||||
If Err.Number = 0 Then
|
||||
revision = oExec.StdOut.ReadLine()
|
||||
End If ' Err.Number = 0
|
||||
End If ' revision = ""
|
||||
End If ' Err.Number = 0
|
||||
End If ' oExec.ExitCode = 0
|
||||
' Check if a tag is currently checked out
|
||||
Err.Clear
|
||||
Set oExec = WshShell.Exec("git name-rev --name-only --tags --no-undefined HEAD")
|
||||
If Err.Number = 0 Then
|
||||
' Wait till the application is finished ...
|
||||
Do While oExec.Status = 0
|
||||
Loop
|
||||
If oExec.ExitCode = 0 Then
|
||||
tag = oExec.StdOut.ReadLine()
|
||||
If Right(tag, 2) = "^0" Then
|
||||
tag = Left(tag, Len(tag) - 2)
|
||||
End If
|
||||
End If ' oExec.ExitCode = 0
|
||||
End If ' Err.Number = 0
|
||||
End If ' Err.Number = 0
|
||||
End If ' version = "norev000"
|
||||
End If ' version <> "norev000"
|
||||
End If ' oExec.ExitCode = 0
|
||||
End If ' Err.Number = 0
|
||||
|
||||
If version = "norev000" And FSO.FileExists("../.ottdrev") Then
|
||||
If hash = "" And FSO.FileExists("../.ottdrev") Then
|
||||
Dim rev_file
|
||||
Set rev_file = FSO.OpenTextFile("../.ottdrev", 1, True, 0)
|
||||
DetermineSVNVersion = rev_file.ReadLine()
|
||||
DetermineVersion = rev_file.ReadLine()
|
||||
rev_file.Close()
|
||||
ElseIf hash = "" Then
|
||||
DetermineVersion = "norev000"
|
||||
Else
|
||||
Dim version
|
||||
If tag <> "" Then
|
||||
version = tag
|
||||
ElseIf branch = "master" Then
|
||||
version = isodate & "-g" & shorthash
|
||||
Else
|
||||
version = isodate & "-" & branch & "-g" & shorthash
|
||||
End If
|
||||
|
||||
If modified = 2 Then
|
||||
version = version & "M"
|
||||
End If
|
||||
|
||||
clean_rev = version
|
||||
If branch <> "" Then
|
||||
version = version & "-" & branch
|
||||
End If
|
||||
|
||||
If version <> "norev000" Then
|
||||
DetermineSVNVersion = version & Chr(9) & revision & Chr(9) & modified & Chr(9) & clean_rev
|
||||
Else
|
||||
DetermineSVNVersion = version
|
||||
End If
|
||||
DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
@ -359,7 +179,7 @@ Function CheckFile(filename)
|
|||
End Function
|
||||
|
||||
Dim version
|
||||
version = DetermineSVNVersion
|
||||
version = DetermineVersion
|
||||
If Not (IsCachedVersion(version) And CheckFile("../src/rev.cpp") And CheckFile("../src/os/windows/ottdres.rc")) Then
|
||||
UpdateFiles version
|
||||
End If
|
||||
|
|
|
@ -79,8 +79,8 @@ END
|
|||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,9,0,!!REVISION!!
|
||||
PRODUCTVERSION 1,9,0,!!REVISION!!
|
||||
FILEVERSION 1,9,0,!!ISODATE!!
|
||||
PRODUCTVERSION 1,9,0,!!ISODATE!!
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
|
|
@ -26,18 +26,16 @@ bool IsReleasedVersion()
|
|||
|
||||
/**
|
||||
* The text version of OpenTTD's revision.
|
||||
* This will be either "<major>.<minor>.<build>[-RC<rc>]",
|
||||
* "r<revision number>[M][-<branch>]" or "norev000".
|
||||
* This will be either
|
||||
* - "<tag>", like "<major>.<minor>.<build>[-RC<rc>]",
|
||||
* - "<commitdate>-g<shorthash><modified>" in "master",
|
||||
* - "<commitdate>-<branch>-g<shorthash><modified>" in other branches, or
|
||||
* - "norev000", if the version is unknown.
|
||||
*
|
||||
* The major, minor and build are the numbers that describe releases of
|
||||
* OpenTTD (like 0.5.3). "-RC" is used to flag release candidates.
|
||||
*
|
||||
* The revision number is fairly straight forward. The M is to show that
|
||||
* the binary is made from modified source code. The branch shows the
|
||||
* branch the revision is of and will not be there when it is trunk.
|
||||
*
|
||||
* norev000 is for non-releases that are made on systems without
|
||||
* subversion or sources that are not a checkout of subversion.
|
||||
* <modified> shows a "M", if the binary is made from modified source code.
|
||||
*/
|
||||
const char _openttd_revision[] = "!!VERSION!!";
|
||||
|
||||
|
|
Loading…
Reference in New Issue