aboutsummaryrefslogtreecommitdiff
path: root/tools/create_project/scripts/revision.vbs
diff options
context:
space:
mode:
Diffstat (limited to 'tools/create_project/scripts/revision.vbs')
-rw-r--r--tools/create_project/scripts/revision.vbs445
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