diff options
Diffstat (limited to 'tools/create_project/scripts/revision.vbs')
| -rw-r--r-- | tools/create_project/scripts/revision.vbs | 445 | 
1 files changed, 0 insertions, 445 deletions
| diff --git a/tools/create_project/scripts/revision.vbs b/tools/create_project/scripts/revision.vbs deleted file mode 100644 index 851185371b..0000000000 --- a/tools/create_project/scripts/revision.vbs +++ /dev/null @@ -1,445 +0,0 @@ -' -' ScummVM - Graphic Adventure Engine -' -' ScummVM is the legal property of its developers, whose names -' are too numerous to list here. Please refer to the COPYRIGHT -' file distributed with this source distribution. -' -' This program 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 -' of the License. -' -' This program 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 this program; if not, write to the Free Software -' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -' -' Based off OpenTTD determineversion.vbs (released under GPL version 2) -' -'/ - -Option Explicit - -' Working copy check priority: -'   True:   TortoiseSVN -> SVN -> Git -> Hg -'   False:  Git -> Hg -> TortoiseSVN -> SVN -Dim prioritySVN: prioritySVN = False - -Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject") -Dim WshShell : Set WshShell = CreateObject("WScript.Shell") - -' Folders -Dim rootFolder : rootFolder = "" - -' Info variables -Dim tool : tool = "" -Dim branch : branch = "trunk" -Dim revision : revision = "" -Dim modified : modified = False - -' Parse our command line arguments -If ParseCommandLine() Then -	' Determine the revision and update the props file with the revision numbers -	DetermineRevision() -End If - -'//////////////////////////////////////////////////////////////// -'// Revision checking -'//////////////////////////////////////////////////////////////// -Sub DetermineRevision() -	Wscript.StdErr.WriteLine "Determining current revision:" - -	' Set the current directory to the root folder -	WshShell.CurrentDirectory = rootFolder - -	' Try until we find a proper working copy -	If (prioritySVN) Then -		If Not DetermineTortoiseSVNVersion() Then -			If Not DetermineSVNVersion() Then -				If Not DetermineGitVersion() Then -					If Not DetermineHgVersion() Then -						Wscript.StdErr.WriteLine "Could not determine the current revision, skipping..." -						Exit Sub -					End If -				End If -			End If -		End If -	Else -		If Not DetermineGitVersion() Then -			If Not DetermineHgVersion() Then -				If Not DetermineTortoiseSVNVersion() Then -					If Not DetermineSVNVersion() Then -						Wscript.StdErr.WriteLine "Could not determine the current revision, skipping..." -						Exit Sub -					End If -				End If -			End If -		End If -	End If - -	Wscript.StdErr.WriteLine "Found revision " & revision & " on branch " & branch & vbCrLf - -	' Setup our revision string -	Dim revisionString : revisionString = "r" & revision - -	If (modified) Then -		revisionString = revisionString & " M" -	End If - -	' If we are not on trunk, add the branch name to the revision string -	If (branch <> "trunk" And branch <> "") Then -		revisionString = revisionString & " (" & branch & ")" -	End If - -	' Add the DVCS name at the end -	revisionString = revisionString & " - " & tool - -	' Setup an environment variable with the revision string -	Dim Env: Set Env = WshShell.Environment("User") -	Env.item("SCUMMVM_REVISION_STRING") = revisionString -End Sub - -Function DetermineTortoiseSVNVersion() -	Err.Clear -	On Error Resume Next -	DetermineTortoiseSVNVersion = False -	Wscript.StdErr.Write "   TortoiseSVN...   " -	tool = "svn" - -	' 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 - -	' Check if Tortoise is present -	If sTortoise = "" Then -		Wscript.StdErr.WriteLine "TortoiseSVN not installed!" -		Exit Function -	End If - -	' If TortoiseSVN is installed, try to get the revision number -	Dim SubWCRev : Set SubWCRev = WScript.CreateObject("SubWCRev.object") -	SubWCRev.GetWCInfo rootFolder, 0, 0 - -	' Check if this is a working copy -	If Not SubWCRev.IsSvnItem Then -		Wscript.StdErr.WriteLine "Not a working copy!" -		Exit Function -	End If - -	revision = SubWCRev.Revision - -	' Check for modifications -	If SubWCRev.HasModifications Then modified = True - -	If revision = "" Then -		Wscript.StdErr.WriteLine "No revision found!" -		Exit Function -	End If - -	DetermineTortoiseSVNVersion = True -End Function - -Function DetermineSVNVersion() -	Err.Clear -	On Error Resume Next -	DetermineSVNVersion = False -	Wscript.StdErr.Write "   SVN...           " -	tool = "svn" - -	' Set the environment to English -	WshShell.Environment("PROCESS")("LANG") = "en" - -	' Do we have subversion installed? Check immediately whether we've got a modified WC. -	Dim oExec: Set oExec = WshShell.Exec("svnversion " & rootFolder) -	If Err.Number <> 0 Then -		Wscript.StdErr.WriteLine "SVN not installed!" -		Exit Function -	End If - -	' Wait till the application is finished ... -	Do While oExec.Status = 0 -		WScript.Sleep 100 -	Loop - -	Dim line: line = OExec.StdOut.ReadLine() -	If line = "exported" Then -		Wscript.StdErr.WriteLine "Not a working copy!" -		Exit Function -	End If - -	If InStr(line, "M") Then -		modified = True -	End If - -	' And use svn info to get the correct revision and branch information. -	Set oExec = WshShell.Exec("svn info " & rootFolder) - -	If Err.Number <> 0 Then -		Wscript.StdErr.WriteLine "No revision found!" -		Exit Function -	End If - -	Do -		line = OExec.StdOut.ReadLine() -		If InStr(line, "Last Changed Rev") Then -			revision = Mid(line, 19) -		End If -	Loop While Not OExec.StdOut.atEndOfStream - -	If revision = 0 Then -		Wscript.StdErr.WriteLine "No revision found!" -		Exit Function -	End If - -	DetermineSVNVersion = True -End Function - -Function DetermineGitVersion() -	Err.Clear -	On Error Resume Next -	DetermineGitVersion = False -	Wscript.StdErr.Write "   Git...           " -	tool = "git" - -	' First check if we have both a .git & .svn folders (in case hg-git has been set up to have the git folder at the working copy level) -	If FSO.FolderExists(rootFolder & "/.git") And FSO.FolderExists(rootFolder & "/.hg") Then -		Wscript.StdErr.WriteLine "Mercurial clone with git repository in tree!" -		Exit Function -	End If - -	' Set the environment to English -	WshShell.Environment("PROCESS")("LANG") = "en" - -	' Detect if we are using msysgit that has a cmd script in the path instead of an exe... -	Dim gitPath : gitPath = "git " -	Dim oExec : Set oExec = WshShell.Exec("git") -	If Err.Number <> 0 Then -		gitPath = "git.cmd " -	End If - -	Err.Clear -	Set oExec = WshShell.Exec(gitPath & "rev-parse --verify HEAD") -	If Err.Number <> 0 Then -		Wscript.StdErr.WriteLine "Git not installed!" -		Exit Function -	End If - -	' Wait till the application is finished ... -	Do While oExec.Status = 0 -		WScript.Sleep 100 -	Loop - -	If oExec.ExitCode <> 0 Then -		Wscript.StdErr.WriteLine "Error parsing git revision!" -		Exit Function -	End If - -	' Get the version hash -	Dim hash: hash = oExec.StdOut.ReadLine() - -	' Make sure index is in sync with disk -	Set oExec = WshShell.Exec(gitPath & "update-index --refresh") -	If Err.Number = 0 Then -		' Wait till the application is finished ... -		Do While oExec.Status = 0 -			WScript.Sleep 100 -		Loop -	End If - -	Set oExec = WshShell.Exec(gitPath & "diff-index --exit-code --quiet HEAD " & rootFolder) -	If oExec.ExitCode <> 0 Then -		Wscript.StdErr.WriteLine "Error parsing git revision!" -		Exit Function -	End If - -	' Wait till the application is finished ... -	Do While oExec.Status = 0 -		WScript.Sleep 100 -	Loop - -	If oExec.ExitCode = 1 Then -		modified = True -	End If - -	' Get branch name -	Set oExec = WshShell.Exec(gitPath & "symbolic-ref HEAD") -	If Err.Number = 0 Then -		Dim line: line = oExec.StdOut.ReadLine() -		line = Mid(line, InStrRev(line, "/") + 1) -		If line <> "master" Then -			branch = line -		End If -	End If - -	' Check for svn clones -	Set oExec = WshShell.Exec(gitPath & "log --pretty=format:%s --grep=" & Chr(34) & "^(svn r[0-9]*)" & Chr(34) & " -1 " & rootFolder) -	if Err.Number = 0 Then -		revision = Mid(oExec.StdOut.ReadLine(), 7) -		revision = Mid(revision, 1, InStr(revision, ")") - 1) -		tool = "svn-git" -	End If - -	' No revision? Maybe it is a custom git-svn clone -	If revision = "" Then -		Err.Clear -		Set oExec = WshShell.Exec(gitPath & "log --pretty=format:%b --grep=" & Chr(34) & "git-svn-id:.*@[0-9]*" & Chr(34) & " -1 " & rootFolder) -		If Err.Number = 0 Then -			revision = oExec.StdOut.ReadLine() -			revision = Mid(revision, InStr(revision, "@") + 1) -			revision = Mid(revision, 1, InStr(revision, " ") - 1) -			tool = "svn-git" -		End If -	End If - -	' Fallback to abbreviated revision number -	If revision = "" Then -		revision = Mid(hash, 1, 8) -	End If - -	DetermineGitVersion = True -End Function - -Function DetermineHgVersion() -	Err.Clear -	On Error Resume Next -	DetermineHgVersion = False -	Wscript.StdErr.Write "   Mercurial...     " -	tool = "hg" - -	Err.Clear -	Dim oExec: Set oExec = WshShell.Exec("hg parents --template ""{rev}:{node|short}""") -	If Err.Number <> 0 Then -		Wscript.StdErr.WriteLine "Mercurial not installed!" -		Exit Function -	End If - -	' Wait till the application is finished ... -	Do While oExec.Status = 0 -		WScript.Sleep 100 -	Loop - -	If oExec.ExitCode <> 0 Then -		Wscript.StdErr.WriteLine "Error parsing mercurial revision!" -		Exit Function -	End If - -	Dim info : info = Split(OExec.StdOut.ReadLine(), ":") -	Dim version : version = info(0) -	Dim hash : hash = info(1) - -	Set oExec = WshShell.Exec("hg status " & rootFolder) -	If Err.Number <> 0 Then -		Wscript.StdErr.WriteLine "Error parsing mercurial revision!" -		Exit Function -	End If - -	' Check for modifications -	Do -		line = OExec.StdOut.ReadLine() -		If Len(line) > 0 And Mid(line, 1, 1) <> "?" Then -			modified = True -			Exit Do -		End If -	Loop While Not OExec.StdOut.atEndOfStream - -	' Check for branch -	Set oExec = WshShell.Exec("hg branch") -	If Err.Number = 0 Then -		line = OExec.StdOut.ReadLine() -		If line <> "default" Then -			branch = line -		End If -	End If - -	' Check for SVN clone -	Set oExec = WshShell.Exec("hg log -f -l 1 --template ""{svnrev}\n"" --cwd " & rootFolder) -	If Err.Number = 0 Then -		revision = Mid(OExec.StdOut.ReadLine(), 7) -		revision = Mid(revision, 1, InStr(revision, ")") - 1) -		tool = "svn-hg" -	End If - -	' Fallback to abbreviated revision number -	If revision = "" Then -		revision = version & "(" & hash & ")" -	End If - -	DetermineHgVersion = True -End Function - -'//////////////////////////////////////////////////////////////// -'// Utilities -'//////////////////////////////////////////////////////////////// -Function ParseCommandLine() -	ParseCommandLine = True - -	If Wscript.Arguments.Count <> 1 Then -		Wscript.StdErr.WriteLine "[Error] Invalid number of arguments (was: " & Wscript.Arguments.Count & ", expected: 1)" - -		ParseCommandLine = False -		Exit Function -	End If - -	' Get our arguments -	rootFolder = Wscript.Arguments.Item(0) - -	' Check that the folders are valid -	If Not FSO.FolderExists(rootFolder) Then -		Wscript.StdErr.WriteLine "[Error] Invalid root folder (" & rootFolder & ")" - -		ParseCommandLine = False -		Exit Function -	End If - -	' Set absolute path -	rootFolder = FSO.GetAbsolutePathName(rootFolder) -End Function - -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 | 
