diff -r ca3fd1fbe311 -r 5a9dc001e1ad projects/determineversion.vbs --- a/projects/determineversion.vbs Sat Oct 06 21:16:00 2007 +0000 +++ b/projects/determineversion.vbs Mon Dec 03 23:39:38 2007 +0000 @@ -14,21 +14,47 @@ file.Close End Sub -Sub UpdateFile(version, cur_date, filename) +Sub UpdateFile(revision, version, cur_date, filename) FSO.CopyFile filename & ".in", filename + FindReplaceInFile filename, "@@REVISION@@", revision FindReplaceInFile filename, "@@VERSION@@", version FindReplaceInFile filename, "@@DATE@@", cur_date End Sub Sub UpdateFiles(version) - Dim cur_date + Dim WshShell, cur_date, revision, oExec + Set WshShell = CreateObject("WScript.Shell") cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) - UpdateFile version, cur_date, "../src/rev.cpp" - UpdateFile version, cur_date, "../src/ottdres.rc" + revision = 0 + Select Case Mid(version, 1, 1) + Case "r" ' svn + revision = Mid(version, 2) + If InStr(revision, "M") Then + revision = Mid(revision, 1, InStr(revision, "M") - 1) + End If + If InStr(revision, "-") Then + revision = Mid(revision, 1, InStr(revision, "-") - 1) + End If + Case "h" ' mercurial (hg) + Set oExec = WshShell.Exec("hg log -k " & Chr(34) & "svn" & Chr(34) & " -l 1 --template " & Chr(34) & "{desc}\n" & Chr(34) & " ../src") + If Err.Number = 0 Then + revision = Mid(OExec.StdOut.ReadLine(), 7) + revision = Mid(revision, 1, InStr(revision, ")") - 1) + End If + Case "g" ' git + Set oExec = WshShell.Exec("git log --pretty=format:%s --grep=" & Chr(34) & "^(svn r[0-9]*)" & Chr(34) & " -1 ../src") + if Err.Number = 0 Then + revision = Mid(oExec.StdOut.ReadLine(), 7) + revision = Mid(revision, 1, InStr(revision, ")") - 1) + End If + End Select + + UpdateFile revision, version, cur_date, "../src/rev.cpp" + UpdateFile revision, version, cur_date, "../src/ottdres.rc" End Sub Function DetermineSVNVersion() - Dim WshShell, version, url, oExec + Dim WshShell, version, url, oExec, line Set WshShell = CreateObject("WScript.Shell") On Error Resume Next @@ -78,7 +104,6 @@ ' And use svn info to get the correct revision and branch information. Set oExec = WshShell.Exec("svn info ../src") If Err.Number = 0 Then - Dim line Do line = OExec.StdOut.ReadLine() If InStr(line, "URL") Then @@ -98,6 +123,52 @@ url = Mid(url, 1, InStr(2, url, "/") - 1) version = version & Replace(url, "/", "-") End If + Else + ' svn detection failed, reset error and try git + Err.Clear + Set oExec = WshShell.Exec("git rev-parse --verify --short=8 HEAD") + If Err.Number = 0 Then + version = "g" & oExec.StdOut.ReadLine() + Set oExec = WshShell.Exec("git diff-index --exit-code --quiet HEAD ../src") + Do While oExec.Status = 0 And Err.Number = 0 + Loop + If Err.Number = 0 And oExec.ExitCode = 1 Then + version = version & "M" + End If + + 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 + version = version & "-" & line + End If + End If + Else + ' try mercurial (hg) + Err.Clear + Set oExec = WshShell.Exec("hg tip") + If Err.Number = 0 Then + version = "h" & Mid(OExec.StdOut.ReadLine(), 19, 8) + Set oExec = WshShell.Exec("hg status ../src") + If Err.Number = 0 Then + Do + line = OExec.StdOut.ReadLine() + If Mid(line, 1, 1) <> "?" Then + version = version & "M" + Exit Do + End If + Loop While Not OExec.StdOut.atEndOfStream + End If + Set oExec = WshShell.Exec("hg branch") + If Err.Number = 0 Then + line = OExec.StdOut.ReadLine() + If line <> "default" Then + version = version & "-" & line + End If + End If + End If + End If End If DetermineSVNVersion = version