You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pu...@apache.org on 2014/08/14 03:48:16 UTC
[3/9] git commit: move createTemplates scripts ( they will live
undoc'd for awhile
move createTemplates scripts ( they will live undoc'd for awhile
Project: http://git-wip-us.apache.org/repos/asf/cordova-wp8/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-wp8/commit/7053bfff
Tree: http://git-wip-us.apache.org/repos/asf/cordova-wp8/tree/7053bfff
Diff: http://git-wip-us.apache.org/repos/asf/cordova-wp8/diff/7053bfff
Branch: refs/heads/master
Commit: 7053bfff7f95c062513e3d0a75a0a5affb1cf234
Parents: 1bf8177
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Wed Aug 13 17:07:25 2014 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Wed Aug 13 17:08:25 2014 -0700
----------------------------------------------------------------------
wp8/bin/createTemplates.bat | 24 +++
wp8/bin/createTemplates.js | 369 +++++++++++++++++++++++++++++++++++++++
2 files changed, 393 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/7053bfff/wp8/bin/createTemplates.bat
----------------------------------------------------------------------
diff --git a/wp8/bin/createTemplates.bat b/wp8/bin/createTemplates.bat
new file mode 100644
index 0000000..6aa8f80
--- /dev/null
+++ b/wp8/bin/createTemplates.bat
@@ -0,0 +1,24 @@
+@ECHO OFF
+goto endheader
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+:endheader
+
+@echo off
+cscript "%~dp0\createTemplates.js" %* //nologo
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/7053bfff/wp8/bin/createTemplates.js
----------------------------------------------------------------------
diff --git a/wp8/bin/createTemplates.js b/wp8/bin/createTemplates.js
new file mode 100644
index 0000000..20418ad
--- /dev/null
+++ b/wp8/bin/createTemplates.js
@@ -0,0 +1,369 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+
+var fso = WScript.CreateObject('Scripting.FileSystemObject'),
+ shell = WScript.CreateObject("shell.application"),
+ wscript_shell = WScript.CreateObject("WScript.Shell");
+
+//Set up directory structure of current release
+//arguments passed in
+var args = WScript.Arguments;
+
+//Root folder of cordova-windowsphone (i.e C:\Cordova\cordova-windowsphone)
+var repoRoot = WScript.ScriptFullName.split('\\wp8\\bin\\', 1);
+
+//Sub folder containing templates
+var templatePath = '\\template';
+
+//Get version number
+var versionNum ='0.0.0';
+
+var platformRoot = WScript.ScriptFullName.split('\\bin\\', 1);
+
+// set with the -install switch, default false
+var addToVS = false;
+
+// help function
+function Usage() {
+ Log("\nUsage: createTemplates [-install]");
+ Log("Build/zips up templates from the local repo")
+ Log(" -install : also installs templates to user directory on success\n");
+}
+
+// logs messaged to stdout and stderr
+function Log(msg, error) {
+ if (error) {
+ WScript.StdErr.WriteLine(msg);
+ }
+ else {
+ WScript.StdOut.WriteLine(msg);
+ }
+}
+
+// deletes file if it exists
+function deleteFileIfExists(path) {
+ if(fso.FileExists(path)) {
+ fso.DeleteFile(path);
+ }
+}
+
+function deleteFolderIfExists(path) {
+ if(fso.FolderExists(path)) {
+ fso.DeleteFolder(path);
+ }
+}
+
+var ForReading = 1, ForWriting = 2, ForAppending = 8;
+var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
+
+// returns the contents of a file
+function read(filename) {
+ if(fso.FileExists(filename))
+ {
+ var f=fso.OpenTextFile(filename, 1,2);
+ var s=f.ReadAll();
+ f.Close();
+ return s;
+ }
+ else
+ {
+ Log('Cannot read non-existant file : ' + filename,true);
+ WScript.Quit(1);
+ }
+ return null;
+}
+
+// writes the contents to the specified file
+function write(filename, contents) {
+ var f=fso.OpenTextFile(filename, ForWriting, TristateTrue);
+ f.Write(contents);
+ f.Close();
+}
+
+// replaces the matches of regexp with replacement
+function replaceInFile(filename, regexp, replacement) {
+ var text = read(filename).replace(regexp,replacement);
+ write(filename,text);
+}
+
+// executes a commmand in the shell
+function exec(command) {
+ var oShell=wscript_shell.Exec(command);
+ var maxTime = 5000;
+ while (oShell.Status === 0) {
+ if(maxTime > 0) {
+ maxTime -= 100;
+ WScript.sleep(100);
+ }
+ else {
+ Log("Exec timed out with command :: " + command);
+ }
+ }
+}
+
+// executes a commmand in the shell
+function exec_verbose(command) {
+ //Log("Command: " + command);
+ var oShell=wscript_shell.Exec(command);
+ while (oShell.Status === 0) {
+ //Wait a little bit so we're not super looping
+ WScript.sleep(100);
+ //Print any stdout output from the script
+ if(!oShell.StdOut.AtEndOfStream) {
+ Log(oShell.StdOut.ReadLine());
+ }
+ }
+ //Check to make sure our scripts did not encounter an error
+ if(!oShell.StdErr.AtEndOfStream)
+ {
+ var err_line = oShell.StdErr.ReadAll();
+ WScript.StdErr.WriteLine(err_line);
+ WScript.Quit(1);
+ }
+}
+
+function copyFile(src,dest) {
+ exec('%comspec% /c copy /Y ' + src + ' ' + dest);
+}
+
+function copyCommonScripts() {
+ var srcPath = platformRoot + "\\bin";
+ var destPath = platformRoot + templatePath + "\\cordova";
+
+ copyFile(srcPath + "\\check_reqs.bat", destPath + "\\check_reqs.bat");
+ copyFile(srcPath + "\\check_reqs.js", destPath + "\\check_reqs.js");
+}
+
+function removeCommonScripts() {
+ var destPath = platformRoot + templatePath + "\\cordova";
+
+ deleteFileIfExists(destPath + "\\check_reqs.bat");
+ deleteFileIfExists(destPath + "\\check_reqs.js");
+}
+
+function copyCommonItemsToTemplate() {
+ var srcPath = repoRoot + '\\common';
+ var destPath = platformRoot + templatePath;
+
+ var folder = fso.GetFolder(srcPath);
+ // iterate over the files in the folder
+ for (var files = new Enumerator(folder.files) ; !files.atEnd() ; files.moveNext()) {
+ //Log("File: " + srcPath + "\\" + files.item().name);
+ copyFile(srcPath + "\\" + files.item().name, destPath + "\\" + files.item().name);
+ }
+ // iterate over the child folders in the folder
+ for (var subFlds = new Enumerator(folder.SubFolders) ; !subFlds.atEnd() ; subFlds.moveNext()) {
+ //Log("Folder: " + srcPath + "\\" + subFlds.item().name);
+ exec('%comspec% /c xcopy /Y /E /I ' + srcPath + "\\" + subFlds.item().name + " "
+ + destPath + "\\" + subFlds.item().name);
+ }
+
+
+}
+
+// delete desination items
+function removeCommonItems() {
+ var srcPath = repoRoot + '\\common';
+ var destPath = platformRoot + templatePath;
+ var folder = fso.GetFolder(srcPath);
+ // iterate over the files in the folder
+ for (var files = new Enumerator(folder.files) ; !files.atEnd() ; files.moveNext()) {
+ deleteFileIfExists(destPath + "\\" + files.item().name);
+ }
+ // iterate over the child folders in the folder
+ for (var subFlds = new Enumerator(folder.SubFolders) ; !subFlds.atEnd() ; subFlds.moveNext()) {
+ deleteFolderIfExists(destPath + "\\" + subFlds.item().name);
+ }
+}
+
+// packages templates into .zip
+function package_templates()
+{
+ Log("Creating template .zip files for wp8");
+ var templateOutFilename = repoRoot + '\\CordovaWP8_' + versionNum.replace(/\./g, '_') + '.zip';
+
+ // clear the destination
+ deleteFileIfExists(templateOutFilename);
+
+ // clean the template folder, if the project was opened in VS, it creates some useless cruft.
+ deleteFolderIfExists(platformRoot + templatePath + '\\Bin');
+ deleteFolderIfExists(platformRoot + templatePath + '\\obj');
+ deleteFolderIfExists(platformRoot + templatePath + '\\Service\ References');
+
+ deleteFileIfExists(platformRoot + templatePath + "\\CordovaWP8Solution.v11.suo");
+
+ //exec('%comspec% /c xcopy /Y /E /I ' + repoRoot + '\\Plugins ' + platformRoot + templatePath + '\\Plugins');
+
+ //copyCommonItemsToTemplate();
+ copyCommonScripts();
+
+ copyFile(repoRoot + '\\VERSION',platformRoot + templatePath);
+
+ copyFile(repoRoot + '\\wp8\\template\\cordova\\defaults.xml',platformRoot + templatePath + '\\config.xml');
+
+ // update .vstemplate files for the template zips.
+
+ var cleanVersionName = "CordovaWP8_" + versionNum.replace(/\./g, '_');
+
+ var projXml = WScript.CreateObject("Microsoft.XMLDOM");
+ projXml.async = false;
+ var fullTemplatePath = platformRoot + templatePath + '\\MyTemplate.vstemplate';
+ if (projXml.load(fullTemplatePath)) {
+
+ // <Name>CordovaWP8_ + versionNum.replace(/\./g, '_')</Name>
+ var xNode = projXml.selectSingleNode("VSTemplate/TemplateData/Name");
+ if(xNode != null)
+ {
+ // Log("replacing version in Name");
+ xNode.text = cleanVersionName;
+ }
+
+ // <DefaultName>CordovaWP8_ + versionNum</DefaultName>
+ xNode = projXml.selectSingleNode("VSTemplate/TemplateData/DefaultName");
+ if(xNode != null)
+ {
+ // Log("replacing version in DefaultName");
+ xNode.text = cleanVersionName + '_';
+ }
+
+ xNode = projXml.selectSingleNode("VSTemplate/TemplateData/Description");
+ if(xNode != null)
+ {
+ xNode.text = xNode.text.replace("0.0.0", versionNum);
+ }
+ projXml.save(fullTemplatePath);
+
+ }
+
+
+ // Use proper XML-DOM named nodes and replace them with cordova current version
+ var projXml = WScript.CreateObject("Microsoft.XMLDOM");
+ projXml.async = false;
+ if (projXml.load(platformRoot + templatePath + '\\MyTemplate.vstemplate')) {
+
+ // <Name>CordovaWP7_ + versionNum.replace(/\./g, '_')</Name>
+ var xNode = projXml.selectSingleNode("VSTemplate/TemplateData/Name");
+ if(xNode != null)
+ {
+ xNode.text = "CordovaWP8_" + versionNum.replace(/\./g, '_');
+ }
+
+ // <DefaultName>CordovaWP7_ + versionNum</DefaultName>
+ xNode = projXml.selectSingleNode("VSTemplate/TemplateData/DefaultName");
+ if(xNode != null)
+ {
+ xNode.text = "CordovaWP8_" + versionNum;
+ }
+
+ projXml.save(platformRoot + templatePath + '\\MyTemplate.vstemplate');
+ }
+
+ zip_project(templateOutFilename, platformRoot + templatePath);
+
+
+ if(addToVS)
+ {
+ var template_dir = wscript_shell.ExpandEnvironmentStrings("%USERPROFILE%") + '\\Documents\\Visual Studio 2012\\Templates\\ProjectTemplates';
+ if(fso.FolderExists(template_dir ))
+ {
+ dest = shell.NameSpace(template_dir);
+ dest.CopyHere(templateOutFilename, 4|20);
+ }
+ else
+ {
+ Log("WARNING: Could not find template directory in Visual Studio,\n you can manually copy over the template .zip files.");
+ }
+ // add to VS-2013 as well
+ template_dir = wscript_shell.ExpandEnvironmentStrings("%USERPROFILE%") + '\\Documents\\Visual Studio 2013\\Templates\\ProjectTemplates';
+ if(fso.FolderExists(template_dir ))
+ {
+ dest = shell.NameSpace(template_dir);
+ dest.CopyHere(templateOutFilename, 4|20);
+ }
+ }
+
+ deleteFileIfExists(platformRoot + templatePath + '\\config.xml');
+
+ cleanUp();
+}
+
+function zip_project(zip_path, project_path) {
+ // create empty ZIP file and open for adding
+ var file = fso.CreateTextFile(zip_path, true);
+
+ // create twenty-two byte "fingerprint" for .zip
+ file.write("PK");
+ file.write(String.fromCharCode(5));
+ file.write(String.fromCharCode(6));
+ file.write('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
+ file.Close();
+
+ // open .zip folder and copy contents of project_path to zip_path
+ var zipFolder = shell.NameSpace(zip_path);
+
+ var sourceItems = shell.NameSpace(project_path).items();
+ if (zipFolder !== null) {
+ zipFolder.CopyHere(sourceItems, 4|16|512|1024);
+ var maxTime = 5000;
+ //Log("sourceItems.Count = " + sourceItems.Count);
+ while(zipFolder.items().Count < sourceItems.Count)
+ {
+ maxTime -= 100;
+ if(maxTime > 0 ) {
+ WScript.Sleep(100);
+ }
+ else {
+ Log('Timeout. Failed to create .zip file.', true);
+ break;
+ }
+ }
+ //Log("zipFolder.items().Count = " + zipFolder.items().Count);
+ }
+ else {
+ Log('Failed to create .zip file.', true);
+ }
+}
+
+// delete any unneeded files when finished
+function cleanUp() {
+ //removeCommonItems();
+ removeCommonScripts();
+ deleteFileIfExists(platformRoot + templatePath + "\\VERSION");
+}
+
+function parseArgs() {
+ if(args.Count() > 0) {
+
+ //Support help flags -help, --help, /?
+ if(args(0).indexOf("-help") > -1 ||
+ args(0).indexOf("/?") > -1 ) {
+ Usage();
+ WScript.Quit(1);
+ }
+ else if(args(0).indexOf("-install") > -1) {
+ addToVS = true;
+ }
+ }
+}
+
+// MAIN
+parseArgs();
+// build/package the templates
+versionNum = read(repoRoot + "\\VERSION");
+package_templates(repoRoot);