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 2015/02/12 01:50:54 UTC
[3/8] cordova-lib git commit: CB-8123 Rename windows platform related
files.
CB-8123 Rename windows platform related files.
Renames `windows8` plugin platform folders in tests to `windows`. Renames `jsproj.js` to `jsprojManager.js`.
Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/48852eef
Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/48852eef
Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/48852eef
Branch: refs/heads/master
Commit: 48852eefb20840149fa9ada28082e6cb0a2ff208
Parents: 8b6f7b9
Author: Tim Barham <ti...@microsoft.com>
Authored: Wed Jan 28 11:30:27 2015 -0800
Committer: Tim Barham <ti...@microsoft.com>
Committed: Wed Jan 28 11:30:27 2015 -0800
----------------------------------------------------------------------
.../spec-plugman/platforms/windows8.spec.js | 20 +-
.../org.test.plugins.dummyplugin/plugin.xml | 18 +-
.../src/windows/dummer.js | 1 +
.../src/windows/dummy1.dll | 0
.../src/windows/dummy1.vcxproj | 7 +
.../src/windows/dummy2.dll | 0
.../src/windows/dummy2.vcxproj | 7 +
.../src/windows/dummy3.dll | 0
.../src/windows/dummy3.vcxproj | 7 +
.../src/windows/dummy4.dll | 0
.../src/windows/dummy4.vcxproj | 7 +
.../src/windows8/dummer.js | 1 -
.../src/windows8/dummy1.dll | 0
.../src/windows8/dummy1.vcxproj | 7 -
.../src/windows8/dummy2.dll | 0
.../src/windows8/dummy2.vcxproj | 7 -
.../src/windows8/dummy3.dll | 0
.../src/windows8/dummy3.vcxproj | 7 -
.../src/windows8/dummy4.dll | 0
.../src/windows8/dummy4.vcxproj | 7 -
.../org.test.plugins.faultyplugin/plugin.xml | 6 +-
.../src/windows/faultyPlugin.js | 1 +
.../src/windows8/faultyPlugin.js | 1 -
cordova-lib/src/plugman/platforms/windows.js | 2 +-
cordova-lib/src/util/windows/jsproj.js | 533 -------------------
cordova-lib/src/util/windows/jsprojManager.js | 533 +++++++++++++++++++
26 files changed, 586 insertions(+), 586 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/platforms/windows8.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/platforms/windows8.spec.js b/cordova-lib/spec-plugman/platforms/windows8.spec.js
index 3d0215a..444c987 100644
--- a/cordova-lib/spec-plugman/platforms/windows8.spec.js
+++ b/cordova-lib/spec-plugman/platforms/windows8.spec.js
@@ -165,13 +165,13 @@ beforeEach(function () {
var source = copyArray(valid_source);
var s = spyOn(common, 'copyFile');
windows['source-file'].install(source[0], dummyplugin, cordovaProjectWindowsPlatformDir, dummy_id, null, proj_files);
- expect(s).toHaveBeenCalledWith(dummyplugin, 'src/windows8/dummer.js', cordovaProjectWindowsPlatformDir, path.join('plugins', 'org.test.plugins.dummyplugin', 'dummer.js'), false);
+ expect(s).toHaveBeenCalledWith(dummyplugin, 'src/windows/dummer.js', cordovaProjectWindowsPlatformDir, path.join('plugins', 'org.test.plugins.dummyplugin', 'dummer.js'), false);
});
it('should throw if source-file src cannot be found', function () {
var source = copyArray(invalid_source);
expect(function () {
windows['source-file'].install(source[1], faultyplugin, cordovaProjectWindowsPlatformDir, faulty_id, null, proj_files);
- }).toThrow('"' + path.resolve(faultyplugin, 'src/windows8/NotHere.js') + '" not found!');
+ }).toThrow('"' + path.resolve(faultyplugin, 'src/windows/NotHere.js') + '" not found!');
});
it('should throw if source-file target already exists', function () {
var source = copyArray(valid_source);
@@ -243,16 +243,16 @@ beforeEach(function () {
var frameworks = copyArray(valid_frameworks);
it('should write to correct project files when conditions are specified', function () {
- var xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy1.vcxproj"][@Condition="\'$(Platform)\'==\'x64\'"]';
+ var xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows\\dummy1.vcxproj"][@Condition="\'$(Platform)\'==\'x64\'"]';
validateInstalledProjects('framework', frameworks[4], xpath, ['all']);
- xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy2.vcxproj"]';
+ xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows\\dummy2.vcxproj"]';
validateInstalledProjects('framework', frameworks[5], xpath, ['windows8']);
- xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy3.vcxproj"]';
+ xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows\\dummy3.vcxproj"]';
validateInstalledProjects('framework', frameworks[6], xpath, ['windows', 'windows8']);
- xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows8\\dummy4.vcxproj"][@Condition="\'$(Platform)\'==\'x86\'"]';
+ xpath = 'ProjectReference[@Include="' + dummyplugin + '\\src\\windows\\dummy4.vcxproj"][@Condition="\'$(Platform)\'==\'x86\'"]';
validateInstalledProjects('framework', frameworks[7], xpath, ['windows', 'phone']);
});
});
@@ -390,19 +390,19 @@ beforeEach(function () {
install('windows', cordovaProjectWindowsPlatformDir, dummyplugin, cordovaProjectPluginsDir, {})
.then(function () {
var path = 'ItemGroup/ProjectReference';
- var incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy1.vcxproj';
+ var incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows\\dummy1.vcxproj';
var targetConditions = {versions: undefined, target: undefined, arch: 'x64'};
validateUninstalledProjects('framework', frameworks[4], path, incText, targetConditions, ['all']);
- incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy2.vcxproj';
+ incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows\\dummy2.vcxproj';
targetConditions = {versions: '<8.1', target: undefined, arch: undefined};
validateUninstalledProjects('framework', frameworks[5], path, incText, targetConditions, ['windows8']);
- incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy3.vcxproj';
+ incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows\\dummy3.vcxproj';
targetConditions = {versions: undefined, target: 'win', arch: undefined};
validateUninstalledProjects('framework', frameworks[6], path, incText, targetConditions, ['windows', 'windows8']);
- incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows8\\dummy4.vcxproj';
+ incText = cordovaProjectPluginsDir + "\\" + dummy_id + '\\src\\windows\\dummy4.vcxproj';
targetConditions = {versions: '8.1', target: 'all', arch: 'x86'};
validateUninstalledProjects('framework', frameworks[7], path, incText, targetConditions, ['windows', 'phone']);
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
index 1f265dd..b378b58 100644
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin.xml
@@ -178,22 +178,22 @@
<feature id="dummyPlugin" required="true" version="1.0.0.0"/>
</config-file>
- <source-file src="src/windows8/dummer.js"/>
+ <source-file src="src/windows/dummer.js"/>
<lib-file src="TestSDK1, Version=1.0" arch="x86"/>
<lib-file src="TestSDK2, Version=1.0" versions=">=8.1"/>
<lib-file src="TestSDK3, Version=1.0" target="phone"/>
<lib-file src="TestSDK4, Version=1.0" target="windows" versions="8.0" arch="x86"/>
- <framework src="src/windows8/dummy1.dll" arch="x64"/>
- <framework src="src/windows8/dummy2.dll" versions=">=8.0"/>
- <framework src="src/windows8/dummy3.dll" target="windows"/>
- <framework src="src/windows8/dummy4.dll" target="phone" versions="8.1" arch="ARM"/>
+ <framework src="src/windows/dummy1.dll" arch="x64"/>
+ <framework src="src/windows/dummy2.dll" versions=">=8.0"/>
+ <framework src="src/windows/dummy3.dll" target="windows"/>
+ <framework src="src/windows/dummy4.dll" target="phone" versions="8.1" arch="ARM"/>
- <framework src="src/windows8/dummy1.vcxproj" type="projectReference" arch="x64"/>
- <framework src="src/windows8/dummy2.vcxproj" type="projectReference" versions="<8.1"/>
- <framework src="src/windows8/dummy3.vcxproj" type="projectReference" target="win"/>
- <framework src="src/windows8/dummy4.vcxproj" type="projectReference" target="all" versions="8.1" arch="x86"/>
+ <framework src="src/windows/dummy1.vcxproj" type="projectReference" arch="x64"/>
+ <framework src="src/windows/dummy2.vcxproj" type="projectReference" versions="<8.1"/>
+ <framework src="src/windows/dummy3.vcxproj" type="projectReference" target="win"/>
+ <framework src="src/windows/dummy4.vcxproj" type="projectReference" target="all" versions="8.1" arch="x86"/>
<js-module src="www/dummyplugin.js" name="Dummy">
<clobbers target="dummy" />
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummer.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummer.js b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummer.js
new file mode 100644
index 0000000..48388bc
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummer.js
@@ -0,0 +1 @@
+./org.test.plugins.dummyplugin/src/windows8/dummer.js
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy1.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy1.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy1.dll
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy1.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy1.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy1.vcxproj
new file mode 100644
index 0000000..c454905
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy1.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{ef7dd979-6f12-4bdf-8754-9468ce799c4d}</ProjectGuid>
+ <ProjectName>dummy1</ProjectName>
+ </PropertyGroup>
+</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy2.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy2.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy2.dll
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy2.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy2.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy2.vcxproj
new file mode 100644
index 0000000..8edd706
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy2.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{6a760eea-8c27-442e-b98b-a487964ded42}</ProjectGuid>
+ <ProjectName>dummy2</ProjectName>
+ </PropertyGroup>
+</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy3.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy3.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy3.dll
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy3.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy3.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy3.vcxproj
new file mode 100644
index 0000000..600167c
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy3.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{5318c3c8-0921-4870-b4ad-8cce06c88238}</ProjectGuid>
+ <ProjectName>dummy3</ProjectName>
+ </PropertyGroup>
+</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy4.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy4.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy4.dll
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy4.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy4.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy4.vcxproj
new file mode 100644
index 0000000..d7acf04
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows/dummy4.vcxproj
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8e430a1b-094b-4c27-8b76-fdd7021dbfe9}</ProjectGuid>
+ <ProjectName>dummy4</ProjectName>
+ </PropertyGroup>
+</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummer.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummer.js b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummer.js
deleted file mode 100644
index 48388bc..0000000
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummer.js
+++ /dev/null
@@ -1 +0,0 @@
-./org.test.plugins.dummyplugin/src/windows8/dummer.js
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.dll
deleted file mode 100644
index e69de29..0000000
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj
deleted file mode 100644
index c454905..0000000
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy1.vcxproj
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
- <ProjectGuid>{ef7dd979-6f12-4bdf-8754-9468ce799c4d}</ProjectGuid>
- <ProjectName>dummy1</ProjectName>
- </PropertyGroup>
-</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.dll
deleted file mode 100644
index e69de29..0000000
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj
deleted file mode 100644
index 8edd706..0000000
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy2.vcxproj
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
- <ProjectGuid>{6a760eea-8c27-442e-b98b-a487964ded42}</ProjectGuid>
- <ProjectName>dummy2</ProjectName>
- </PropertyGroup>
-</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.dll
deleted file mode 100644
index e69de29..0000000
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj
deleted file mode 100644
index 600167c..0000000
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy3.vcxproj
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
- <ProjectGuid>{5318c3c8-0921-4870-b4ad-8cce06c88238}</ProjectGuid>
- <ProjectName>dummy3</ProjectName>
- </PropertyGroup>
-</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.dll
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.dll b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.dll
deleted file mode 100644
index e69de29..0000000
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj
deleted file mode 100644
index d7acf04..0000000
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/src/windows8/dummy4.vcxproj
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup Label="Globals">
- <ProjectGuid>{8e430a1b-094b-4c27-8b76-fdd7021dbfe9}</ProjectGuid>
- <ProjectName>dummy4</ProjectName>
- </PropertyGroup>
-</Project>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
index 1b38414..8ff99c4 100644
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/plugin.xml
@@ -135,17 +135,17 @@
<platform name="windows">
<config-file target="config.xml" parent="/*">
<feature name="org.test.plugins.faultyplugin">
- <param name="windows8-package" value="org.test.plugins.faultyplugin"/>
+ <param name="windows-package" value="org.test.plugins.faultyplugin"/>
</feature>
</config-file>
- <source-file src="src/windows8/faultyPlugin.js" />
+ <source-file src="src/windows/faultyPlugin.js" />
<lib-file src="TestSDK1, Version=1.0" arch="x85"/>
<lib-file src="TestSDK2, Version=1.0" versions="8.0a"/>
<lib-file src="TestSDK3, Version=1.0" target="daphne"/>
<!-- does not exist -->
- <source-file src="src/windows8/NotHere.js" />
+ <source-file src="src/windows/NotHere.js" />
</platform>
</plugin>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows/faultyPlugin.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows/faultyPlugin.js b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows/faultyPlugin.js
new file mode 100644
index 0000000..784b850
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows/faultyPlugin.js
@@ -0,0 +1 @@
+./org.test.plugins.faultyplugin/src/windows8/faultyPlugin.js
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows8/faultyPlugin.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows8/faultyPlugin.js b/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows8/faultyPlugin.js
deleted file mode 100644
index 784b850..0000000
--- a/cordova-lib/spec-plugman/plugins/org.test.plugins.faultyplugin/src/windows8/faultyPlugin.js
+++ /dev/null
@@ -1 +0,0 @@
-./org.test.plugins.faultyplugin/src/windows8/faultyPlugin.js
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/src/plugman/platforms/windows.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platforms/windows.js b/cordova-lib/src/plugman/platforms/windows.js
index 07186cb..7b5b061 100644
--- a/cordova-lib/src/plugman/platforms/windows.js
+++ b/cordova-lib/src/plugman/platforms/windows.js
@@ -26,7 +26,7 @@ var common = require('./common'),
path = require('path'),
fs = require('fs'),
glob = require('glob'),
- jsprojManager = require('../../util/windows/jsproj'),
+ jsprojManager = require('../../util/windows/jsprojManager'),
events = require('../../events'),
xml_helpers = require('../../util/xml-helpers');
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/src/util/windows/jsproj.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/util/windows/jsproj.js b/cordova-lib/src/util/windows/jsproj.js
deleted file mode 100644
index 57642ba..0000000
--- a/cordova-lib/src/util/windows/jsproj.js
+++ /dev/null
@@ -1,533 +0,0 @@
-/**
- 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.
- */
-
-/* jshint quotmark:false, unused:false */
-
-/*
- Helper for dealing with Windows Store JS app .jsproj files
- */
-
-
-var util = require('util'),
- xml_helpers = require('../../util/xml-helpers'),
- et = require('elementtree'),
- fs = require('fs'),
- glob = require('glob'),
- shell = require('shelljs'),
- events = require('../../events'),
- path = require('path'),
- semver = require('semver');
-
-var WinCSharpProjectTypeGUID = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"; // .csproj
-var WinCplusplusProjectTypeGUID = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; // .vcxproj
-
-// Match a JavaScript Project
-var JsProjectRegEx = /(Project\("\{262852C6-CD72-467D-83FE-5EEB1973A190}"\)\s*=\s*"[^"]+",\s*"[^"]+",\s*"\{[0-9a-f\-]+}"[^\r\n]*[\r\n]*)/gi;
-
-// Chars in a string that need to be escaped when used in a RegExp
-var RegExpEscRegExp = /([.?*+\^$\[\]\\(){}|\-])/g;
-
-function jsprojManager(location) {
- this.isUniversalWindowsApp = path.extname(location).toLowerCase() === ".projitems";
- this.projects = [];
- this.master = this.isUniversalWindowsApp ? new proj(location) : new jsproj(location);
- this.projectFolder = path.dirname(location);
-
-}
-
-jsprojManager.prototype = {
- _projects: null,
-
- write: function () {
- this.master.write();
- if (this._projects) {
- var that = this;
- this._projects.forEach(function (project) {
- if (project !== that.master && project.touched) {
- project.write();
- }
- });
- }
- },
-
- addSDKRef: function (incText, targetConditions) {
- events.emit('verbose', 'jsprojManager.addSDKRef(incText: ' + incText + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
- var item = createReferenceElement('ItemGroup/SDKReference', incText, targetConditions);
- this._getMatchingProjects(targetConditions).forEach(function (project) {
- project.appendToRoot(item);
- });
- },
-
- removeSDKRef: function (incText, targetConditions) {
- events.emit('verbose', 'jsprojManager.removeSDKRef(incText: ' + incText + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
- this._getMatchingProjects(targetConditions).forEach(function (project) {
- project.removeReferenceElementItemGroup('ItemGroup/SDKReference', incText, targetConditions);
- });
- },
-
- addReference: function (relPath, targetConditions) {
- events.emit('verbose', 'jsprojManager.addReference(incText: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
- // add hint path with full path
- var hint_path = new et.Element('HintPath');
- hint_path.text = relPath;
- var children = [hint_path];
-
- var extName = path.extname(relPath);
- if (extName === ".winmd") {
- var mdFileTag = new et.Element("IsWinMDFile");
- mdFileTag.text = "true";
- children.push(mdFileTag);
- }
-
- var item = createReferenceElement('ItemGroup/Reference', path.basename(relPath, extName), targetConditions, children);
- this._getMatchingProjects(targetConditions).forEach(function (project) {
- project.appendToRoot(item);
- });
-
- },
-
- removeReference: function (relPath, targetConditions) {
- events.emit('verbose', 'jsprojManager.removeReference(incText: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
- var extName = path.extname(relPath);
- var includeText = path.basename(relPath, extName);
-
- this._getMatchingProjects(targetConditions).forEach(function (project) {
- project.removeReferenceElementItemGroup('ItemGroup/Reference', includeText, targetConditions);
- });
- },
-
- addSourceFile: function (relative_path) {
- events.emit('verbose', 'jsprojManager.addSourceFile(relative_path: ' + relative_path + ')');
- this.master.addSourceFile(relative_path);
- },
-
- removeSourceFile: function (relative_path) {
- events.emit('verbose', 'jsprojManager.removeSourceFile(incText: ' + relative_path + ')');
- this.master.removeSourceFile(relative_path);
- },
-
- addProjectReference: function (relative_path, targetConditions) {
- events.emit('verbose', 'jsprojManager.addProjectReference(incText: ' + relative_path + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
- relative_path = relative_path.split('/').join('\\');
-
- var pluginProjectXML = xml_helpers.parseElementtreeSync(relative_path);
-
- // find the guid + name of the referenced project
- var projectGuid = pluginProjectXML.find("PropertyGroup/ProjectGuid").text;
- var projName = pluginProjectXML.find("PropertyGroup/ProjectName").text;
-
- // get the project type
- var projectTypeGuid = getProjectTypeGuid(relative_path);
- if (!projectTypeGuid) {
- throw new Error("unrecognized project type");
- }
-
- var preInsertText = "\tProjectSection(ProjectDependencies) = postProject\r\n" +
- "\t\t" + projectGuid + "=" + projectGuid + "\r\n" +
- "\tEndProjectSection\r\n";
- var postInsertText = '\r\nProject("' + projectTypeGuid + '") = "' +
- projName + '", "' + relative_path + '", ' +
- '"' + projectGuid + '"\r\nEndProject';
-
- var matchingProjects = this._getMatchingProjects(targetConditions);
- if (matchingProjects.length === 0) {
- // No projects meet the specified target and version criteria, so nothing to do.
- return;
- }
-
- // Will we be writing into the .projitems file rather than individual .jsproj files?
- var useProjItems = this.isUniversalWindowsApp && matchingProjects.length === 1 && matchingProjects[0] === this.master;
-
- // There may be multiple solution files (for different VS versions) - process them all
- getSolutionPaths(this.projectFolder).forEach(function (solutionPath) {
- var solText = fs.readFileSync(solutionPath, {encoding: "utf8"});
-
- if (useProjItems) {
- // Insert a project dependency into every jsproj in the solution.
- var jsProjectFound = false;
- solText = solText.replace(JsProjectRegEx, function (match) {
- jsProjectFound = true;
- return match + preInsertText;
- });
-
- if (!jsProjectFound) {
- throw new Error("no jsproj found in solution");
- }
- } else {
- // Insert a project dependency only for projects that match specified target and version
- matchingProjects.forEach(function (project) {
- solText = solText.replace(getJsProjRegExForProject(path.basename(project.location)), function (match) {
- return match + preInsertText;
- });
- });
- }
-
- // Add the project after existing projects. Note that this fairly simplistic check should be fine, since the last
- // EndProject in the file should actually be an EndProject (and not an EndProjectSection, for example).
- var pos = solText.lastIndexOf("EndProject");
- if (pos === -1) {
- throw new Error("no EndProject found in solution");
- }
- pos += 10; // Move pos to the end of EndProject text
- solText = solText.slice(0, pos) + postInsertText + solText.slice(pos);
-
- fs.writeFileSync(solutionPath, solText, {encoding: "utf8"});
- });
-
- // Add the ItemGroup/ProjectReference to each matching cordova project :
- // <ItemGroup><ProjectReference Include="blahblah.csproj"/></ItemGroup>
- var item = createReferenceElement('ItemGroup/ProjectReference', relative_path, targetConditions);
- matchingProjects.forEach(function (project) {
- project.appendToRoot(item);
- });
- },
-
- removeProjectReference: function (relative_path, targetConditions) {
- events.emit('verbose', 'jsprojManager.removeProjectReference(incText: ' + relative_path + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
- // find the guid + name of the referenced project
- var pluginProjectXML = xml_helpers.parseElementtreeSync(relative_path);
- var projectGuid = pluginProjectXML.find("PropertyGroup/ProjectGuid").text;
- var projName = pluginProjectXML.find("PropertyGroup/ProjectName").text;
-
- // get the project type
- var projectTypeGuid = getProjectTypeGuid(relative_path);
- if (!projectTypeGuid) {
- throw new Error("unrecognized project type");
- }
-
- var preInsertTextRegExp = getProjectReferencePreInsertRegExp(projectGuid);
- var postInsertTextRegExp = getProjectReferencePostInsertRegExp(projName, projectGuid, relative_path, projectTypeGuid);
-
- // There may be multiple solutions (for different VS versions) - process them all
- getSolutionPaths(this.projectFolder).forEach(function (solutionPath) {
- var solText = fs.readFileSync(solutionPath, {encoding: "utf8"});
-
- // To be safe (to handle subtle changes in formatting, for example), use a RegExp to find and remove
- // preInsertText and postInsertText
-
- solText = solText.replace(preInsertTextRegExp, function () {
- return "";
- });
-
- solText = solText.replace(postInsertTextRegExp, function () {
- return "";
- });
-
- fs.writeFileSync(solutionPath, solText, {encoding: "utf8"});
- });
-
- this._getMatchingProjects(targetConditions).forEach(function (project) {
- project.removeReferenceElementItemGroup('ItemGroup/ProjectReference', relative_path, targetConditions);
- });
- },
-
- _getMatchingProjects: function (targetConditions) {
- // If specified, target can be 'all' (default), 'phone' or 'windows'. Ultimately should probably allow a comma
- // separated list, but not needed now.
- var target = getTarget(targetConditions);
- var versions = getVersions(targetConditions);
-
- if (target || versions) {
- var matchingProjects = this.projects.filter(function (project) {
- return (!target || target === project.target) && (!versions || semver.satisfies(project.version, versions, /* loose */ true));
- });
-
- if (matchingProjects.length < this.projects.length) {
- return matchingProjects;
- }
- }
-
- // All projects match. If this is a universal project, return the projitems file. Otherwise return our single
- // project.
- return [this.master];
- },
-
- get projects() {
- var projects = this._projects;
- if (!projects) {
- projects = [];
- this._projects = projects;
-
- if (this.isUniversalWindowsApp) {
- var projectPath = this.projectFolder;
- var projectFiles = glob.sync('*.jsproj', {cwd: projectPath});
- projectFiles.forEach(function (projectFile) {
- projects.push(new jsproj(path.join(projectPath, projectFile)));
- });
- } else {
- this.projects.push(this.master);
- }
- }
-
- return projects;
- }
-};
-
-function getProjectReferencePreInsertRegExp(projectGuid) {
- projectGuid = escapeRegExpString(projectGuid);
- return new RegExp("\\s*ProjectSection\\(ProjectDependencies\\)\\s*=\\s*postProject\\s*" + projectGuid + "\\s*=\\s*" + projectGuid + "\\s*EndProjectSection", "gi");
-}
-
-function getProjectReferencePostInsertRegExp(projName, projectGuid, relative_path, projectTypeGuid) {
- projName = escapeRegExpString(projName);
- projectGuid = escapeRegExpString(projectGuid);
- relative_path = escapeRegExpString(relative_path);
- projectTypeGuid = escapeRegExpString(projectTypeGuid);
- return new RegExp('\\s*Project\\("' + projectTypeGuid + '"\\)\\s*=\\s*"' + projName + '"\\s*,\\s*"' + relative_path + '"\\s*,\\s*"' + projectGuid + '"\\s*EndProject', 'gi');
-}
-
-function getSolutionPaths(projectFolder) {
- return shell.ls(path.join(projectFolder, "*.sln")); // TODO:error handling
-}
-
-function escapeRegExpString(regExpString) {
- return regExpString.replace(RegExpEscRegExp, "\\$1");
-}
-
-function getJsProjRegExForProject(projectFile) {
- projectFile = escapeRegExpString(projectFile);
- return new RegExp('(Project\\("\\{262852C6-CD72-467D-83FE-5EEB1973A190}"\\)\\s*=\\s*"[^"]+",\\s*"' + projectFile + '",\\s*"\\{[0-9a-f\\-]+}"[^\\r\\n]*[\\r\\n]*)', 'gi');
-}
-
-function getProjectTypeGuid(projectPath) {
- switch (path.extname(projectPath)) {
- case ".vcxproj":
- return WinCplusplusProjectTypeGUID;
-
- case ".csproj":
- return WinCSharpProjectTypeGUID;
- }
- return null;
-}
-
-function createReferenceElement(path, incText, targetConditions, children) {
- path = path.split('/');
- path.reverse();
-
- var lastElement = null;
- path.forEach(function (elementName) {
- var element = new et.Element(elementName);
- if (lastElement) {
- element.append(lastElement);
- } else {
- element.attrib.Include = incText;
-
- var condition = createConditionAttrib(targetConditions);
- if (condition) {
- element.attrib.Condition = condition;
- }
-
- if (children) {
- children.forEach(function (child) {
- element.append(child);
- });
- }
- }
- lastElement = element;
- });
-
- return lastElement;
-}
-
-function getTarget(targetConditions) {
- var target = targetConditions.target;
- if (target) {
- target = target.toLowerCase().trim();
- if (target === "all") {
- target = null;
- } else if (target === "win") {
- // Allow "win" as alternative to "windows"
- target = "windows";
- } else if (target !== 'phone' && target !== 'windows') {
- throw new Error('Invalid lib-file target attribute (must be "all", "phone", "windows" or "win"): ' + target);
- }
- }
- return target;
-}
-
-function getVersions(targetConditions) {
- var versions = targetConditions.versions;
- if (versions && !semver.validRange(versions, /* loose */ true)) {
- throw new Error('Invalid lib-file versions attribute (must be a valid a valid node semantic version range): ' + versions);
- }
- return versions;
-}
-
-
-/* proj */
-
-function proj(location) {
- // Class to handle simple project xml operations
- if (!location) {
- throw new Error('Project file location can\'t be null or empty');
- }
- this.location = location;
- this.xml = xml_helpers.parseElementtreeSync(location);
-}
-
-proj.prototype = {
- write: function () {
- fs.writeFileSync(this.location, this.xml.write({indent: 4}), 'utf-8');
- },
-
- appendToRoot: function (element) {
- this.touched = true;
- this.xml.getroot().append(element);
- },
-
- removeReferenceElementItemGroup: function (path, incText, targetConditions) {
- var xpath = path + '[@Include="' + incText + '"]';
- var condition = createConditionAttrib(targetConditions);
- if (condition) {
- xpath += '[@Condition="' + condition + '"]';
- }
- xpath += '/..';
-
- var itemGroup = this.xml.find(xpath);
- if (itemGroup) {
- this.touched = true;
- this.xml.getroot().remove(0, itemGroup);
- }
- },
-
- addSourceFile: function (relative_path) {
- // we allow multiple paths to be passed at once as array so that
- // we don't create separate ItemGroup for each source file, CB-6874
- if (!(relative_path instanceof Array)) {
- relative_path = [relative_path];
- }
-
- // make ItemGroup to hold file.
- var item = new et.Element('ItemGroup');
-
- relative_path.forEach(function (filePath) {
- filePath = filePath.split('/').join('\\');
-
- var content = new et.Element('Content');
- content.attrib.Include = filePath;
- item.append(content);
- });
-
- this.appendToRoot(item);
- },
-
- removeSourceFile: function (relative_path) {
- var isRegexp = relative_path instanceof RegExp;
- if (!isRegexp) {
- // path.normalize(relative_path);// ??
- relative_path = relative_path.split('/').join('\\');
- }
-
- var root = this.xml.getroot();
- var that = this;
- // iterate through all ItemGroup/Content elements and remove all items matched
- this.xml.findall('ItemGroup').forEach(function (group) {
- // matched files in current ItemGroup
- var filesToRemove = group.findall('Content').filter(function (item) {
- if (!item.attrib.Include) {
- return false;
- }
- return isRegexp ? item.attrib.Include.match(relative_path) : item.attrib.Include === relative_path;
- });
-
- // nothing to remove, skip..
- if (filesToRemove.length < 1) {
- return;
- }
-
- filesToRemove.forEach(function (file) {
- // remove file reference
- group.remove(0, file);
- });
- // remove ItemGroup if empty
- if (group.findall('*').length < 1) {
- that.touched = true;
- root.remove(0, group);
- }
- });
- }
-};
-
-
-/* jsproj */
-
-function jsproj(location) {
- function targetPlatformIdentifierToDevice(jsprojPlatform) {
- var index = ["Windows", "WindowsPhoneApp"].indexOf(jsprojPlatform);
- if (index < 0) {
- throw new Error("Unknown TargetPlatformIdentifier '" + jsprojPlatform + "' in project file '" + location + "'");
- }
- return ["windows", "phone"][index];
- }
-
- function validateVersion(version) {
- version = version.split('.');
- while (version.length < 3) {
- version.push("0");
- }
- return version.join(".");
- }
-
- // Class to handle a jsproj file
- proj.call(this, location);
-
- var propertyGroup = this.xml.find('PropertyGroup[TargetPlatformIdentifier]');
- if (!propertyGroup) {
- throw new Error("Unable to find PropertyGroup/TargetPlatformIdentifier in project file '" + this.location + "'");
- }
-
- var jsprojPlatform = propertyGroup.find('TargetPlatformIdentifier').text;
- this.target = targetPlatformIdentifierToDevice(jsprojPlatform);
-
- var version = propertyGroup.find('TargetPlatformVersion');
- if (!version) {
- throw new Error("Unable to find PropertyGroup/TargetPlatformVersion in project file '" + this.location + "'");
- }
- this.version = validateVersion(version.text);
-}
-
-util.inherits(jsproj, proj);
-
-jsproj.prototype.target = null;
-jsproj.prototype.version = null;
-
-/* Common support functions */
-
-function createConditionAttrib(targetConditions) {
- var arch = targetConditions.arch;
- if (arch) {
- if (arch === "arm") {
- // Specifcally allow "arm" as alternative to "ARM"
- arch = "ARM";
- } else if (arch !== "x86" && arch !== "x64" && arch !== "ARM") {
- throw new Error('Invalid lib-file arch attribute (must be "x86", "x64" or "ARM"): ' + arch);
- }
- return "'$(Platform)'=='" + arch + "'";
- }
- return null;
-}
-
-
-module.exports = jsprojManager;
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/48852eef/cordova-lib/src/util/windows/jsprojManager.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/util/windows/jsprojManager.js b/cordova-lib/src/util/windows/jsprojManager.js
new file mode 100644
index 0000000..57642ba
--- /dev/null
+++ b/cordova-lib/src/util/windows/jsprojManager.js
@@ -0,0 +1,533 @@
+/**
+ 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.
+ */
+
+/* jshint quotmark:false, unused:false */
+
+/*
+ Helper for dealing with Windows Store JS app .jsproj files
+ */
+
+
+var util = require('util'),
+ xml_helpers = require('../../util/xml-helpers'),
+ et = require('elementtree'),
+ fs = require('fs'),
+ glob = require('glob'),
+ shell = require('shelljs'),
+ events = require('../../events'),
+ path = require('path'),
+ semver = require('semver');
+
+var WinCSharpProjectTypeGUID = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"; // .csproj
+var WinCplusplusProjectTypeGUID = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; // .vcxproj
+
+// Match a JavaScript Project
+var JsProjectRegEx = /(Project\("\{262852C6-CD72-467D-83FE-5EEB1973A190}"\)\s*=\s*"[^"]+",\s*"[^"]+",\s*"\{[0-9a-f\-]+}"[^\r\n]*[\r\n]*)/gi;
+
+// Chars in a string that need to be escaped when used in a RegExp
+var RegExpEscRegExp = /([.?*+\^$\[\]\\(){}|\-])/g;
+
+function jsprojManager(location) {
+ this.isUniversalWindowsApp = path.extname(location).toLowerCase() === ".projitems";
+ this.projects = [];
+ this.master = this.isUniversalWindowsApp ? new proj(location) : new jsproj(location);
+ this.projectFolder = path.dirname(location);
+
+}
+
+jsprojManager.prototype = {
+ _projects: null,
+
+ write: function () {
+ this.master.write();
+ if (this._projects) {
+ var that = this;
+ this._projects.forEach(function (project) {
+ if (project !== that.master && project.touched) {
+ project.write();
+ }
+ });
+ }
+ },
+
+ addSDKRef: function (incText, targetConditions) {
+ events.emit('verbose', 'jsprojManager.addSDKRef(incText: ' + incText + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
+
+ var item = createReferenceElement('ItemGroup/SDKReference', incText, targetConditions);
+ this._getMatchingProjects(targetConditions).forEach(function (project) {
+ project.appendToRoot(item);
+ });
+ },
+
+ removeSDKRef: function (incText, targetConditions) {
+ events.emit('verbose', 'jsprojManager.removeSDKRef(incText: ' + incText + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
+
+ this._getMatchingProjects(targetConditions).forEach(function (project) {
+ project.removeReferenceElementItemGroup('ItemGroup/SDKReference', incText, targetConditions);
+ });
+ },
+
+ addReference: function (relPath, targetConditions) {
+ events.emit('verbose', 'jsprojManager.addReference(incText: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
+
+ // add hint path with full path
+ var hint_path = new et.Element('HintPath');
+ hint_path.text = relPath;
+ var children = [hint_path];
+
+ var extName = path.extname(relPath);
+ if (extName === ".winmd") {
+ var mdFileTag = new et.Element("IsWinMDFile");
+ mdFileTag.text = "true";
+ children.push(mdFileTag);
+ }
+
+ var item = createReferenceElement('ItemGroup/Reference', path.basename(relPath, extName), targetConditions, children);
+ this._getMatchingProjects(targetConditions).forEach(function (project) {
+ project.appendToRoot(item);
+ });
+
+ },
+
+ removeReference: function (relPath, targetConditions) {
+ events.emit('verbose', 'jsprojManager.removeReference(incText: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
+
+ var extName = path.extname(relPath);
+ var includeText = path.basename(relPath, extName);
+
+ this._getMatchingProjects(targetConditions).forEach(function (project) {
+ project.removeReferenceElementItemGroup('ItemGroup/Reference', includeText, targetConditions);
+ });
+ },
+
+ addSourceFile: function (relative_path) {
+ events.emit('verbose', 'jsprojManager.addSourceFile(relative_path: ' + relative_path + ')');
+ this.master.addSourceFile(relative_path);
+ },
+
+ removeSourceFile: function (relative_path) {
+ events.emit('verbose', 'jsprojManager.removeSourceFile(incText: ' + relative_path + ')');
+ this.master.removeSourceFile(relative_path);
+ },
+
+ addProjectReference: function (relative_path, targetConditions) {
+ events.emit('verbose', 'jsprojManager.addProjectReference(incText: ' + relative_path + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
+
+ relative_path = relative_path.split('/').join('\\');
+
+ var pluginProjectXML = xml_helpers.parseElementtreeSync(relative_path);
+
+ // find the guid + name of the referenced project
+ var projectGuid = pluginProjectXML.find("PropertyGroup/ProjectGuid").text;
+ var projName = pluginProjectXML.find("PropertyGroup/ProjectName").text;
+
+ // get the project type
+ var projectTypeGuid = getProjectTypeGuid(relative_path);
+ if (!projectTypeGuid) {
+ throw new Error("unrecognized project type");
+ }
+
+ var preInsertText = "\tProjectSection(ProjectDependencies) = postProject\r\n" +
+ "\t\t" + projectGuid + "=" + projectGuid + "\r\n" +
+ "\tEndProjectSection\r\n";
+ var postInsertText = '\r\nProject("' + projectTypeGuid + '") = "' +
+ projName + '", "' + relative_path + '", ' +
+ '"' + projectGuid + '"\r\nEndProject';
+
+ var matchingProjects = this._getMatchingProjects(targetConditions);
+ if (matchingProjects.length === 0) {
+ // No projects meet the specified target and version criteria, so nothing to do.
+ return;
+ }
+
+ // Will we be writing into the .projitems file rather than individual .jsproj files?
+ var useProjItems = this.isUniversalWindowsApp && matchingProjects.length === 1 && matchingProjects[0] === this.master;
+
+ // There may be multiple solution files (for different VS versions) - process them all
+ getSolutionPaths(this.projectFolder).forEach(function (solutionPath) {
+ var solText = fs.readFileSync(solutionPath, {encoding: "utf8"});
+
+ if (useProjItems) {
+ // Insert a project dependency into every jsproj in the solution.
+ var jsProjectFound = false;
+ solText = solText.replace(JsProjectRegEx, function (match) {
+ jsProjectFound = true;
+ return match + preInsertText;
+ });
+
+ if (!jsProjectFound) {
+ throw new Error("no jsproj found in solution");
+ }
+ } else {
+ // Insert a project dependency only for projects that match specified target and version
+ matchingProjects.forEach(function (project) {
+ solText = solText.replace(getJsProjRegExForProject(path.basename(project.location)), function (match) {
+ return match + preInsertText;
+ });
+ });
+ }
+
+ // Add the project after existing projects. Note that this fairly simplistic check should be fine, since the last
+ // EndProject in the file should actually be an EndProject (and not an EndProjectSection, for example).
+ var pos = solText.lastIndexOf("EndProject");
+ if (pos === -1) {
+ throw new Error("no EndProject found in solution");
+ }
+ pos += 10; // Move pos to the end of EndProject text
+ solText = solText.slice(0, pos) + postInsertText + solText.slice(pos);
+
+ fs.writeFileSync(solutionPath, solText, {encoding: "utf8"});
+ });
+
+ // Add the ItemGroup/ProjectReference to each matching cordova project :
+ // <ItemGroup><ProjectReference Include="blahblah.csproj"/></ItemGroup>
+ var item = createReferenceElement('ItemGroup/ProjectReference', relative_path, targetConditions);
+ matchingProjects.forEach(function (project) {
+ project.appendToRoot(item);
+ });
+ },
+
+ removeProjectReference: function (relative_path, targetConditions) {
+ events.emit('verbose', 'jsprojManager.removeProjectReference(incText: ' + relative_path + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
+
+ // find the guid + name of the referenced project
+ var pluginProjectXML = xml_helpers.parseElementtreeSync(relative_path);
+ var projectGuid = pluginProjectXML.find("PropertyGroup/ProjectGuid").text;
+ var projName = pluginProjectXML.find("PropertyGroup/ProjectName").text;
+
+ // get the project type
+ var projectTypeGuid = getProjectTypeGuid(relative_path);
+ if (!projectTypeGuid) {
+ throw new Error("unrecognized project type");
+ }
+
+ var preInsertTextRegExp = getProjectReferencePreInsertRegExp(projectGuid);
+ var postInsertTextRegExp = getProjectReferencePostInsertRegExp(projName, projectGuid, relative_path, projectTypeGuid);
+
+ // There may be multiple solutions (for different VS versions) - process them all
+ getSolutionPaths(this.projectFolder).forEach(function (solutionPath) {
+ var solText = fs.readFileSync(solutionPath, {encoding: "utf8"});
+
+ // To be safe (to handle subtle changes in formatting, for example), use a RegExp to find and remove
+ // preInsertText and postInsertText
+
+ solText = solText.replace(preInsertTextRegExp, function () {
+ return "";
+ });
+
+ solText = solText.replace(postInsertTextRegExp, function () {
+ return "";
+ });
+
+ fs.writeFileSync(solutionPath, solText, {encoding: "utf8"});
+ });
+
+ this._getMatchingProjects(targetConditions).forEach(function (project) {
+ project.removeReferenceElementItemGroup('ItemGroup/ProjectReference', relative_path, targetConditions);
+ });
+ },
+
+ _getMatchingProjects: function (targetConditions) {
+ // If specified, target can be 'all' (default), 'phone' or 'windows'. Ultimately should probably allow a comma
+ // separated list, but not needed now.
+ var target = getTarget(targetConditions);
+ var versions = getVersions(targetConditions);
+
+ if (target || versions) {
+ var matchingProjects = this.projects.filter(function (project) {
+ return (!target || target === project.target) && (!versions || semver.satisfies(project.version, versions, /* loose */ true));
+ });
+
+ if (matchingProjects.length < this.projects.length) {
+ return matchingProjects;
+ }
+ }
+
+ // All projects match. If this is a universal project, return the projitems file. Otherwise return our single
+ // project.
+ return [this.master];
+ },
+
+ get projects() {
+ var projects = this._projects;
+ if (!projects) {
+ projects = [];
+ this._projects = projects;
+
+ if (this.isUniversalWindowsApp) {
+ var projectPath = this.projectFolder;
+ var projectFiles = glob.sync('*.jsproj', {cwd: projectPath});
+ projectFiles.forEach(function (projectFile) {
+ projects.push(new jsproj(path.join(projectPath, projectFile)));
+ });
+ } else {
+ this.projects.push(this.master);
+ }
+ }
+
+ return projects;
+ }
+};
+
+function getProjectReferencePreInsertRegExp(projectGuid) {
+ projectGuid = escapeRegExpString(projectGuid);
+ return new RegExp("\\s*ProjectSection\\(ProjectDependencies\\)\\s*=\\s*postProject\\s*" + projectGuid + "\\s*=\\s*" + projectGuid + "\\s*EndProjectSection", "gi");
+}
+
+function getProjectReferencePostInsertRegExp(projName, projectGuid, relative_path, projectTypeGuid) {
+ projName = escapeRegExpString(projName);
+ projectGuid = escapeRegExpString(projectGuid);
+ relative_path = escapeRegExpString(relative_path);
+ projectTypeGuid = escapeRegExpString(projectTypeGuid);
+ return new RegExp('\\s*Project\\("' + projectTypeGuid + '"\\)\\s*=\\s*"' + projName + '"\\s*,\\s*"' + relative_path + '"\\s*,\\s*"' + projectGuid + '"\\s*EndProject', 'gi');
+}
+
+function getSolutionPaths(projectFolder) {
+ return shell.ls(path.join(projectFolder, "*.sln")); // TODO:error handling
+}
+
+function escapeRegExpString(regExpString) {
+ return regExpString.replace(RegExpEscRegExp, "\\$1");
+}
+
+function getJsProjRegExForProject(projectFile) {
+ projectFile = escapeRegExpString(projectFile);
+ return new RegExp('(Project\\("\\{262852C6-CD72-467D-83FE-5EEB1973A190}"\\)\\s*=\\s*"[^"]+",\\s*"' + projectFile + '",\\s*"\\{[0-9a-f\\-]+}"[^\\r\\n]*[\\r\\n]*)', 'gi');
+}
+
+function getProjectTypeGuid(projectPath) {
+ switch (path.extname(projectPath)) {
+ case ".vcxproj":
+ return WinCplusplusProjectTypeGUID;
+
+ case ".csproj":
+ return WinCSharpProjectTypeGUID;
+ }
+ return null;
+}
+
+function createReferenceElement(path, incText, targetConditions, children) {
+ path = path.split('/');
+ path.reverse();
+
+ var lastElement = null;
+ path.forEach(function (elementName) {
+ var element = new et.Element(elementName);
+ if (lastElement) {
+ element.append(lastElement);
+ } else {
+ element.attrib.Include = incText;
+
+ var condition = createConditionAttrib(targetConditions);
+ if (condition) {
+ element.attrib.Condition = condition;
+ }
+
+ if (children) {
+ children.forEach(function (child) {
+ element.append(child);
+ });
+ }
+ }
+ lastElement = element;
+ });
+
+ return lastElement;
+}
+
+function getTarget(targetConditions) {
+ var target = targetConditions.target;
+ if (target) {
+ target = target.toLowerCase().trim();
+ if (target === "all") {
+ target = null;
+ } else if (target === "win") {
+ // Allow "win" as alternative to "windows"
+ target = "windows";
+ } else if (target !== 'phone' && target !== 'windows') {
+ throw new Error('Invalid lib-file target attribute (must be "all", "phone", "windows" or "win"): ' + target);
+ }
+ }
+ return target;
+}
+
+function getVersions(targetConditions) {
+ var versions = targetConditions.versions;
+ if (versions && !semver.validRange(versions, /* loose */ true)) {
+ throw new Error('Invalid lib-file versions attribute (must be a valid a valid node semantic version range): ' + versions);
+ }
+ return versions;
+}
+
+
+/* proj */
+
+function proj(location) {
+ // Class to handle simple project xml operations
+ if (!location) {
+ throw new Error('Project file location can\'t be null or empty');
+ }
+ this.location = location;
+ this.xml = xml_helpers.parseElementtreeSync(location);
+}
+
+proj.prototype = {
+ write: function () {
+ fs.writeFileSync(this.location, this.xml.write({indent: 4}), 'utf-8');
+ },
+
+ appendToRoot: function (element) {
+ this.touched = true;
+ this.xml.getroot().append(element);
+ },
+
+ removeReferenceElementItemGroup: function (path, incText, targetConditions) {
+ var xpath = path + '[@Include="' + incText + '"]';
+ var condition = createConditionAttrib(targetConditions);
+ if (condition) {
+ xpath += '[@Condition="' + condition + '"]';
+ }
+ xpath += '/..';
+
+ var itemGroup = this.xml.find(xpath);
+ if (itemGroup) {
+ this.touched = true;
+ this.xml.getroot().remove(0, itemGroup);
+ }
+ },
+
+ addSourceFile: function (relative_path) {
+ // we allow multiple paths to be passed at once as array so that
+ // we don't create separate ItemGroup for each source file, CB-6874
+ if (!(relative_path instanceof Array)) {
+ relative_path = [relative_path];
+ }
+
+ // make ItemGroup to hold file.
+ var item = new et.Element('ItemGroup');
+
+ relative_path.forEach(function (filePath) {
+ filePath = filePath.split('/').join('\\');
+
+ var content = new et.Element('Content');
+ content.attrib.Include = filePath;
+ item.append(content);
+ });
+
+ this.appendToRoot(item);
+ },
+
+ removeSourceFile: function (relative_path) {
+ var isRegexp = relative_path instanceof RegExp;
+ if (!isRegexp) {
+ // path.normalize(relative_path);// ??
+ relative_path = relative_path.split('/').join('\\');
+ }
+
+ var root = this.xml.getroot();
+ var that = this;
+ // iterate through all ItemGroup/Content elements and remove all items matched
+ this.xml.findall('ItemGroup').forEach(function (group) {
+ // matched files in current ItemGroup
+ var filesToRemove = group.findall('Content').filter(function (item) {
+ if (!item.attrib.Include) {
+ return false;
+ }
+ return isRegexp ? item.attrib.Include.match(relative_path) : item.attrib.Include === relative_path;
+ });
+
+ // nothing to remove, skip..
+ if (filesToRemove.length < 1) {
+ return;
+ }
+
+ filesToRemove.forEach(function (file) {
+ // remove file reference
+ group.remove(0, file);
+ });
+ // remove ItemGroup if empty
+ if (group.findall('*').length < 1) {
+ that.touched = true;
+ root.remove(0, group);
+ }
+ });
+ }
+};
+
+
+/* jsproj */
+
+function jsproj(location) {
+ function targetPlatformIdentifierToDevice(jsprojPlatform) {
+ var index = ["Windows", "WindowsPhoneApp"].indexOf(jsprojPlatform);
+ if (index < 0) {
+ throw new Error("Unknown TargetPlatformIdentifier '" + jsprojPlatform + "' in project file '" + location + "'");
+ }
+ return ["windows", "phone"][index];
+ }
+
+ function validateVersion(version) {
+ version = version.split('.');
+ while (version.length < 3) {
+ version.push("0");
+ }
+ return version.join(".");
+ }
+
+ // Class to handle a jsproj file
+ proj.call(this, location);
+
+ var propertyGroup = this.xml.find('PropertyGroup[TargetPlatformIdentifier]');
+ if (!propertyGroup) {
+ throw new Error("Unable to find PropertyGroup/TargetPlatformIdentifier in project file '" + this.location + "'");
+ }
+
+ var jsprojPlatform = propertyGroup.find('TargetPlatformIdentifier').text;
+ this.target = targetPlatformIdentifierToDevice(jsprojPlatform);
+
+ var version = propertyGroup.find('TargetPlatformVersion');
+ if (!version) {
+ throw new Error("Unable to find PropertyGroup/TargetPlatformVersion in project file '" + this.location + "'");
+ }
+ this.version = validateVersion(version.text);
+}
+
+util.inherits(jsproj, proj);
+
+jsproj.prototype.target = null;
+jsproj.prototype.version = null;
+
+/* Common support functions */
+
+function createConditionAttrib(targetConditions) {
+ var arch = targetConditions.arch;
+ if (arch) {
+ if (arch === "arm") {
+ // Specifcally allow "arm" as alternative to "ARM"
+ arch = "ARM";
+ } else if (arch !== "x86" && arch !== "x64" && arch !== "ARM") {
+ throw new Error('Invalid lib-file arch attribute (must be "x86", "x64" or "ARM"): ' + arch);
+ }
+ return "'$(Platform)'=='" + arch + "'";
+ }
+ return null;
+}
+
+
+module.exports = jsprojManager;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org