1
0
Fork 0
forked from suyu/suyu
suyu/src/common/scm_rev_gen.js
Yuri Kunde Schlesner 78eb8ba844 [build] Search for the git binary in the default msysgit install dir
The Git for Windows installer doesn't add the Git binaries to the path
by default. (Due to risk of conflicts with built-in windows commands.)
Unless you have configured your system specially this causes the
scm_rev_gen.js script to fail to find Git.  Added more paths to the
script so that it searches in the default msysgit installation
directory, eliminating the need to set the PATH for most environments.
2014-07-19 17:16:05 -03:00

74 lines
2.2 KiB
JavaScript

var wshShell = new ActiveXObject("WScript.Shell")
var oFS = new ActiveXObject("Scripting.FileSystemObject");
var outfile = "scm_rev.cpp";
var cmd_revision = " rev-parse HEAD";
var cmd_describe = " describe --always --long --dirty";
var cmd_branch = " rev-parse --abbrev-ref HEAD";
var git_search_paths = {
"git.cmd": 1,
"git": 1,
"C:\\Program Files (x86)\\Git\\bin\\git.exe": 1,
"C:\\Program Files\\Git\\bin\\git.exe": 1
};
function GetGitExe() {
for (var gitexe in git_search_paths) {
try {
wshShell.Exec(gitexe);
return gitexe;
} catch (e) {
}
}
WScript.Echo("Cannot find git or git.cmd, check your PATH:\n" +
wshShell.ExpandEnvironmentStrings("%PATH%"));
WScript.Quit(1);
}
function GetFirstStdOutLine(cmd) {
try {
return wshShell.Exec(cmd).StdOut.ReadLine();
} catch (e) {
// catch "the system cannot find the file specified" error
WScript.Echo("Failed to exec " + cmd + " this should never happen");
WScript.Quit(1);
}
}
function GetFileContents(f) {
try {
return oFS.OpenTextFile(f).ReadAll();
} catch (e) {
// file doesn't exist
return "";
}
}
// get info from git
var gitexe = GetGitExe();
var revision = GetFirstStdOutLine(gitexe + cmd_revision);
var describe = GetFirstStdOutLine(gitexe + cmd_describe);
var branch = GetFirstStdOutLine(gitexe + cmd_branch);
var isMaster = +("master" == branch);
// remove hash (and trailing "-0" if needed) from description
describe = describe.replace(/(-0)?-[^-]+(-dirty)?$/, '$2');
var out_contents =
"#include \"common/scm_rev.h\"\n" +
"namespace Common {\n" +
" const char g_scm_rev[] = \"" + revision + "\";\n" +
" const char g_scm_branch[] = \"" + branch + "\";\n" +
" const char g_scm_desc[] = \"" + describe + "\";\n" +
"}\n";
// check if file needs updating
if (out_contents == GetFileContents(outfile)) {
WScript.Echo(outfile + " current at " + describe);
} else {
// needs updating - writeout current info
oFS.CreateTextFile(outfile, true).Write(out_contents);
WScript.Echo(outfile + " updated to " + describe);
}