3
/* Copyright 2012 10gen Inc.
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
9
* http://www.apache.org/licenses/LICENSE-2.0
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
18
// This JavaScript file is run under Windows Script Host from the Visual Studio build.
19
// It compares the timestamps of a set of "input" files with the timestamps of a set of "output"
20
// files and runs a specified command if any "input" file is newer than any of the "output" files.
23
// cscript run_if_newer.js /path:"basepath" /input:"filelist" /output:"filelist" /command:"runthis"
25
function quitWithMessage(message) {
26
WScript.Echo("Error in call to \"" + WScript.ScriptName + "\": " + message);
30
function checkArguments(requiredArguments) {
31
for (var i = 0, len = requiredArguments.length; i < len; ++i) {
32
var argName = requiredArguments[i];
33
if (!WScript.Arguments.Named.Exists(argName)) {
34
quitWithMessage("missing \"/" + argName + ":\" argument");
36
if (WScript.Arguments.Named.Item(argName).length == 0) {
37
quitWithMessage("empty \"/" + argName + ":\" argument");
40
if (WScript.Arguments.Named.length != requiredArguments.length) {
41
quitWithMessage("extra named argument found");
43
if (WScript.Arguments.Unnamed.length != 0) {
44
quitWithMessage("extra unnamed argument found");
48
function runIfNewer(fso, shell, inputFiles, outputFiles, commandLine) {
49
var runCommand = false;
50
var outputFileDate = new Date(2037, 11, 31);
51
for (var i = 0, len = outputFiles.length; i < len; ++i) {
52
var thisFileName = outputFiles[i];
53
if (!fso.FileExists(thisFileName)) {
57
var fileDate = fso.GetFile(thisFileName).DateLastModified;
58
if (fileDate < outputFileDate) {
59
outputFileDate = fileDate;
62
for ( var i = 0, len = inputFiles.length; i < len; ++i ) {
63
thisFileName = inputFiles[i];
64
if (!fso.FileExists(thisFileName)) {
65
quitWithMessage("input file \"" + thisFileName + "\" does not exist");
67
if (fso.GetFile(thisFileName).DateLastModified >= outputFileDate) {
72
var execObject = shell.Exec(commandLine);
73
while (execObject.Status == 0) {
79
checkArguments(["path", "input", "output", "command"]);
81
var shell = new ActiveXObject("WScript.Shell");
82
shell.CurrentDirectory = WScript.Arguments.Named.Item("path");
84
var fso = new ActiveXObject("Scripting.FileSystemObject");
87
WScript.Arguments.Named.Item("input").split(","),
88
WScript.Arguments.Named.Item("output").split(","),
89
WScript.Arguments.Named.Item("command"));