You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by st...@apache.org on 2015/12/05 02:44:04 UTC
cordova-lib git commit: CB-6698 Fix directory resolution of framework
with parent. This closes #289
Repository: cordova-lib
Updated Branches:
refs/heads/master 18eacea16 -> bc3e973cc
CB-6698 Fix directory resolution of framework with parent. This closes #289
Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/bc3e973c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/bc3e973c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/bc3e973c
Branch: refs/heads/master
Commit: bc3e973ccc18079194e9a3638d036a671b351ac8
Parents: 18eacea
Author: Martin Bektchiev <ma...@telerik.com>
Authored: Thu Aug 27 12:44:45 2015 +0300
Committer: Steve Gill <st...@gmail.com>
Committed: Fri Dec 4 17:38:47 2015 -0800
----------------------------------------------------------------------
.../spec-plugman/platforms/android.spec.js | 71 ++++++++++++++++++++
.../plugin-lib2/AndroidManifest.xml | 5 ++
.../plugin-lib2/libFile | 1 +
.../plugin-lib2/project.properties | 1 +
.../org.test.plugins.dummyplugin/plugin.xml | 1 +
cordova-lib/src/plugman/platforms/android.js | 9 ++-
cordova-lib/src/plugman/util/android-project.js | 6 +-
7 files changed, 91 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/bc3e973c/cordova-lib/spec-plugman/platforms/android.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/platforms/android.spec.js b/cordova-lib/spec-plugman/platforms/android.spec.js
index de0ccb3..b8699a4 100644
--- a/cordova-lib/spec-plugman/platforms/android.spec.js
+++ b/cordova-lib/spec-plugman/platforms/android.spec.js
@@ -213,6 +213,77 @@ describe('android project handler', function() {
finalProjectProperties = fs.readFileSync(mainProjectPropsFile, 'utf8');
expect(finalProjectProperties).not.toMatch('\ncordova.system.library.1=' + 'extras/android/support/v4', 'Sublibrary not added');
});
+ it('with custom=true and parent', function () {
+ var packageIdSuffix = 'childapp';
+ var frameworkElement = { src: 'plugin-lib', custom: true };
+ var frameworkElementChild = { src: 'plugin-lib2', custom: true, parent: 'plugin-lib' };
+ var parentDir = path.resolve(temp, dummy_id, packageIdSuffix + '-' + frameworkElementChild.parent);
+ var parentProjectPropsFile = path.resolve(parentDir, 'project.properties');
+ var subDir = path.resolve(temp, dummy_id, packageIdSuffix + '-' + frameworkElement.src);
+ var subProjectPropsFile = path.resolve(subDir, 'project.properties');
+
+ var exec = spyOn(shell, 'exec');
+
+ android['framework'].install(frameworkElement, dummyplugin, temp, dummy_id, { platformVersion: '3.0.0' });
+ android['framework'].install(frameworkElementChild, dummyplugin, temp, dummy_id, { platformVersion: '3.0.0' });
+ android.parseProjectFile(temp).write();
+
+ var finalProjectProperties = fs.readFileSync(parentProjectPropsFile, 'utf8');
+ expect(finalProjectProperties).toMatch('\nandroid.library.reference.1=../' + packageIdSuffix + '-plugin-lib2', 'Reference to library not added');
+ var subProjectProperties = fs.readFileSync(subProjectPropsFile, 'utf8');
+ expect(subProjectProperties).toMatch(/\btarget=android-19$/m, 'target SDK version not copied to library');
+ expect(exec).toHaveBeenCalledWith('android update lib-project --path "' + subDir + '"');
+
+ // Now test uninstall
+ android.purgeProjectFileCache(temp);
+ android['framework'].uninstall(frameworkElementChild, temp, dummy_id, { platformVersion: '3.0.0' });
+ android.parseProjectFile(temp).write();
+
+ finalProjectProperties = fs.readFileSync(parentProjectPropsFile, 'utf8');
+ expect(finalProjectProperties).not.toMatch('\nandroid.library.reference.1=../' + packageIdSuffix + '-plugin-lib2', 'Reference to library not removed');
+
+ android['framework'].uninstall(frameworkElement, temp, dummy_id, { platformVersion: '3.0.0' });
+ android.parseProjectFile(temp).write();
+
+ expect(fs.existsSync(subDir)).toBe(false, 'Should delete subdir');
+ });
+ it('with custom=false and parent', function () {
+ var packageIdSuffix = 'childapp';
+ var frameworkElement = { src: 'plugin-lib', custom: true };
+ var frameworkElementChild = { src: 'extras/android/support/v4', custom: false, parent: 'plugin-lib' };
+ var parentDir = path.resolve(temp, dummy_id, packageIdSuffix + '-' + frameworkElementChild.parent);
+ var parentProjectPropsFile = path.resolve(parentDir, 'project.properties');
+ var sdkLibRelativeDir = path.join('..', 'SDK', 'extras', 'android', 'support', 'v4');
+ var exec = spyOn(shell, 'exec');
+
+ android['framework'].install(frameworkElement, dummyplugin, temp, dummy_id, { platformVersion: '3.0.0' });
+ fs.writeFileSync(path.join(temp, 'local.properties'), 'sdk.dir=' + path.join(temp, '..', 'SDK').replace(/\\/g, '/'));
+ android['framework'].install(frameworkElementChild, dummyplugin, temp, dummy_id, { platformVersion: '3.0.0' });
+
+ android.parseProjectFile(temp).write();
+ android.parseProjectFile(parentDir).write();
+
+ exec.reset();
+
+ var finalProjectProperties = fs.readFileSync(parentProjectPropsFile, 'utf8');
+ var libReference = '\nandroid.library.reference.1=' + path.join('..', '..', sdkLibRelativeDir).replace(/\\/g, '/');
+ expect(finalProjectProperties).toMatch(libReference, 'Reference to library not added');
+ // exec doesn't get called since sublibrary dir doesn't actually exist.
+ expect(exec).not.toHaveBeenCalled();
+
+ // Now test uninstall
+ android.purgeProjectFileCache(temp);
+ android.purgeProjectFileCache(parentDir);
+ android['framework'].uninstall(frameworkElementChild, temp, dummy_id, { platformVersion: '3.0.0' });
+ android.parseProjectFile(temp).write();
+ android.parseProjectFile(parentDir).write();
+
+ finalProjectProperties = fs.readFileSync(parentProjectPropsFile, 'utf8');
+ expect(finalProjectProperties).not.toMatch(libReference, 'Reference to library not removed');
+
+ android['framework'].uninstall(frameworkElement, temp, dummy_id, { platformVersion: '3.0.0' });
+ android.parseProjectFile(temp).write();
+ });
});
describe('uninstallation', function() {
beforeEach(function() {
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/bc3e973c/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/AndroidManifest.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/AndroidManifest.xml b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/AndroidManifest.xml
new file mode 100644
index 0000000..3c9499c
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/AndroidManifest.xml
@@ -0,0 +1,5 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ android:versionCode="1" package="com.test.somelib">
+ <uses-sdk android:minSdkVersion="9"/>
+ <application/>
+</manifest>
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/bc3e973c/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/libFile
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/libFile b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/libFile
new file mode 100644
index 0000000..c79df8e
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/libFile
@@ -0,0 +1 @@
+libFile contents
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/bc3e973c/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/project.properties
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/project.properties b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/project.properties
new file mode 100644
index 0000000..c4a5b63
--- /dev/null
+++ b/cordova-lib/spec-plugman/plugins/org.test.plugins.dummyplugin/plugin-lib2/project.properties
@@ -0,0 +1 @@
+target=android-11
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/bc3e973c/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 b2d7f75..f656661 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
@@ -51,6 +51,7 @@
</config-file>
<framework src="plugin-lib" custom="true" />
+ <framework src="plugin-lib2" custom="true" parent="plugin-lib" />
<framework src="extras/android/support/v7/appcompat" />
<framework src="extra.gradle" type="gradleReference" />
<resource-file src="android-resource.xml" target="res/xml/dummy.xml" />
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/bc3e973c/cordova-lib/src/plugman/platforms/android.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platforms/android.js b/cordova-lib/src/plugman/platforms/android.js
index 0949392..e59025c 100644
--- a/cordova-lib/src/plugman/platforms/android.js
+++ b/cordova-lib/src/plugman/platforms/android.js
@@ -122,7 +122,10 @@ module.exports = {
events.emit('verbose', 'Installing Android library: ' + src);
var parent = obj.parent;
- var parentDir = parent ? path.resolve(project_dir, parent) : project_dir;
+ var parentDir = parent ?
+ path.resolve(project_dir, getCustomSubprojectRelativeDir(plugin_id, project_dir, parent)) :
+ project_dir;
+
var subDir;
var type = obj.type;
@@ -157,7 +160,9 @@ module.exports = {
events.emit('verbose', 'Uninstalling Android library: ' + src);
var parent = obj.parent;
- var parentDir = parent ? path.resolve(project_dir, parent) : project_dir;
+ var parentDir = parent ?
+ path.resolve(project_dir, getCustomSubprojectRelativeDir(plugin_id, project_dir, parent)) :
+ project_dir;
var subDir;
var type = obj.type;
http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/bc3e973c/cordova-lib/src/plugman/util/android-project.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/android-project.js b/cordova-lib/src/plugman/util/android-project.js
index 77908fb..fd62c79 100644
--- a/cordova-lib/src/plugman/util/android-project.js
+++ b/cordova-lib/src/plugman/util/android-project.js
@@ -118,7 +118,11 @@ AndroidProject.prototype = {
for (var filename in this._propertiesEditors) {
var editor = this._propertiesEditors[filename];
if (editor.dirty) {
- fs.writeFileSync(filename, editor.toString());
+ // Check for parent directory existence before attempting write
+ // (when uninstalling a plugin its subprojects' directories are deleted)
+ if (fs.existsSync(path.dirname(filename))) {
+ fs.writeFileSync(filename, editor.toString());
+ }
editor.dirty = false;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org