You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2014/04/11 21:46:25 UTC

[09/50] [abbrv] git commit: working uninstall for projectReferences

working uninstall for projectReferences


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/221fbf54
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/221fbf54
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/221fbf54

Branch: refs/heads/browserify
Commit: 221fbf54bf2d8d4823f76e0ceff6bb7fab347ee1
Parents: 64de69a
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Wed Mar 5 15:00:25 2014 -0800
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Wed Mar 5 15:00:25 2014 -0800

----------------------------------------------------------------------
 src/util/w8jsproj.js | 182 +++++++++++++++++++++++-----------------------
 1 file changed, 89 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/221fbf54/src/util/w8jsproj.js
----------------------------------------------------------------------
diff --git a/src/util/w8jsproj.js b/src/util/w8jsproj.js
index eb0487b..a890429 100644
--- a/src/util/w8jsproj.js
+++ b/src/util/w8jsproj.js
@@ -9,10 +9,10 @@ var xml_helpers = require('./xml-helpers'),
     shell = require('shelljs'),
     path = require('path');
 
-var WindowsStoreProjectTypeGUID = "{BC8A1FFA-BEE3-4634-8014-F334798102B3}";  
-var WinCSharpProjectTypeGUID = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}";  
-var WinVBnetProjectTypeGUID = "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}";
-var WinCplusplusProjectTypeGUID = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}";
+var WindowsStoreProjectTypeGUID = "{BC8A1FFA-BEE3-4634-8014-F334798102B3}";  // any of the below, subtype
+var WinCSharpProjectTypeGUID = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}";    // .csproj
+var WinVBnetProjectTypeGUID = "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}";     // who the ef cares?
+var WinCplusplusProjectTypeGUID = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; // .vcxproj
 
 
 function jsproj(location) {
@@ -42,9 +42,9 @@ jsproj.prototype = {
     },
 
     removeSDKRef:function(incText) {
-        var item_groups = this.xml.findall('ItemGroup/SDKReference[@Include="' + incText + '"]/..');
-        if(item_groups.length > 0 ) {
-            this.xml.getroot().remove(0, item_groups[0]);
+        var item_group = this.xml.find('ItemGroup/SDKReference[@Include="' + incText + '"]/..');
+        if(item_group) { // TODO: error handling
+            this.xml.getroot().remove(0, item_group);
         }
     },
 
@@ -78,15 +78,14 @@ jsproj.prototype = {
     removeReference:function(relPath) {
         require('../../plugman').emit('verbose','removeReference::' + relPath);
 
-        var item = new et.Element('ItemGroup');
         var extName = path.extname(relPath);
         var includeText = path.basename(relPath,extName);
         // <ItemGroup>
         //   <Reference Include="WindowsRuntimeComponent1">
-        var item_groups = this.xml.findall('ItemGroup/Reference[@Include="' + includeText + '"]/..');
+        var item_group = this.xml.find('ItemGroup/Reference[@Include="' + includeText + '"]/..');
 
-        if(item_groups.length > 0 ) {
-            this.xml.getroot().remove(0, item_groups[0]);
+        if(item_group) { // TODO: erro handling
+            this.xml.getroot().remove(0, item_group);
         }
     },
 
@@ -107,7 +106,6 @@ jsproj.prototype = {
 
         // path.normalize(relative_path);// ??
         relative_path = relative_path.split('/').join('\\');
-
         // var oneStep = this.xml.findall('ItemGroup/Content[@Include="' + relative_path + '""]/..');
 
         var item_groups = this.xml.findall('ItemGroup');
@@ -130,91 +128,59 @@ jsproj.prototype = {
         }
         return false;
     },
+    // relative path must include the project file, so we can determine .csproj, .jsproj, .vcxproj...
     addProjectReference:function(relative_path) {
         require('../../plugman').emit('verbose','adding project reference to ' + relative_path);
-        relative_path = relative_path.split('/').join('\\');
-        // read the guid from the project
-        console.log("this.location = " + this.location);
-        console.log("addProjectReference " + relative_path);
-        // could be a .csproj, or ???
-        var projectFullPath = shell.ls(path.join(relative_path,"*.*proj"))[0];
-        projectFullPath = projectFullPath.split('/').join('\\');
-
-        var solutionPath = shell.ls(path.join(path.dirname(this.location),"*.sln"))[0];
-        console.log("solutionPath = " + solutionPath);
-        
-        // note we may not have a solution, in which case just add a project reference
-
-        // if it is a vsxproj we will have use the guid to add to the solution
-        /*
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WindowsCppRuntimeComponent1", "..\WindowsCppRuntimeComponent1\WindowsCppRuntimeComponent1.vcxproj", "{91604387-B9EC-4598-8261-5FDC23409E23}"
-EndProject
-        */
-
-        var pluginProjectXML = xml_helpers.parseElementtreeSync(".\\" + projectFullPath);
-        // find the guid of the project
-        var guidNode = pluginProjectXML.findall("PropertyGroup/ProjectGuid")[0];
-        var projectGuid = guidNode.text;
-
-        var assemblyName = pluginProjectXML.findall("PropertyGroup/AssemblyName")[0].text;
-
-        //find the project type
-        var ptGuidsNode = pluginProjectXML.findall("PropertyGroup/ProjectTypeGuids")[0];
-        if(ptGuidsNode != null) {
-            var guids = ptGuidsNode.text.split(";");
-            if(guids.indexOf(WinCSharpProjectTypeGUID) > -1) {
-                console.log("found C# project type");
-
-                var preInsertText = "ProjectSection(ProjectDependencies) = postProject\n\r" +
-                                     projectGuid + "=" + projectGuid + "\n\r" +
-                                     "EndProjectSection\n\r";
-
-                // debug
-                preInsertText = "";
-
-                var postInsertText = 'Project("' + WinCSharpProjectTypeGUID + '") = "' + 
-                                         assemblyName + '", "' + projectFullPath + '",' +
-                                        '"' + projectGuid + '"\n\r EndProject\n\r';
-
-                // read in the solution file
-                var solText = fs.readFileSync(solutionPath,{encoding:"utf8"});
-                var splitText = solText.split("EndProject");
-                if(splitText.length != 2) {
-                    console.log("oops, too many projects in this solution");
-                }                 
-                else {
-                    solText = splitText[0] + preInsertText + "EndProject\n\r" + postInsertText + splitText[1];
-                    // console.log("solText = " + solText);
-                    fs.writeFileSync(solutionPath,solText,{encoding:"utf8"});
-                }
-            }
-            else if(false || guids.indexOf(WinCSharpProjectTypeGUID) > -1) {
-
-            }
-            else {
 
-            }
+        relative_path = relative_path.split('/').join('\\');
+        // read the solution path from the base directory
+        var solutionPath = shell.ls(path.join(path.dirname(this.location),"*.sln"))[0];// TODO:error handling
+        // note we may not have a solution, in which case just add a project reference, I guess ..
+        // get the project extension to figure out project type
+        var projectExt = path.extname(relative_path);
+
+        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;
+
+        var preInsertText = "ProjectSection(ProjectDependencies) = postProject\n\r" +
+                             projectGuid + "=" + projectGuid + "\n\r" +
+                            "EndProjectSection\n\r";
+
+        // read in the solution file
+        var solText = fs.readFileSync(solutionPath,{encoding:"utf8"});
+        var splitText = solText.split("EndProject");
+        if(splitText.length != 2) {
+            throw new Error("too many projects in solution.");
         }
 
+        var projectTypeGuid = null;
+        if(projectExt == ".vcxproj") {
+            projectTypeGuid = WinCplusplusProjectTypeGUID;
+        }
+        else if(projectExt == ".csproj") {
+            projectTypeGuid = WinCSharpProjectTypeGUID;
+        }
+        
+        if(!projectTypeGuid) {
+            throw new Error("unrecognized project type");
+        }
 
-        var assemblyNode = pluginProjectXML.findall("PropertyGroup/AssemblyName")[0];
-        var assemblyName = assemblyNode.text;
-
-        console.log("Project guid = " + projectGuid);
-        console.log("assemblyName = " + assemblyName);
+        var postInsertText = 'Project("' + projectTypeGuid + '") = "' + 
+                         projName + '", "' + relative_path + '",' +
+                        '"' + projectGuid + '"\n\r EndProject\n\r';
 
-        return;
+        solText = splitText[0] + preInsertText + "EndProject\n\r" + postInsertText + splitText[1];
+        fs.writeFileSync(solutionPath,solText,{encoding:"utf8"});
         
 
-        // Add the item group ProjectReference to the cordova project :
-    //         <ItemGroup>
-    //     <ProjectReference Include="WindowsRuntimeComponent1\WindowsRuntimeComponent1.csproj" />
-    // </ItemGroup>
-        // make ItemGroup to hold file.
+        // Add the ItemGroup/ProjectReference to the cordova project :
+        // <ItemGroup><ProjectReference Include="blahblah.csproj"/></ItemGroup>
         var item = new et.Element('ItemGroup');
 
         var projRef = new et.Element('ProjectReference');
-            projRef.attrib.Include = assemblyName;//projectFullPath;
+            projRef.attrib.Include = relative_path;
             item.append(projRef);
         this.xml.getroot().append(item);
 
@@ -222,17 +188,47 @@ EndProject
     removeProjectReference:function(relative_path) {
         require('../../plugman').emit('verbose','removing project reference to ' + relative_path);
 
-        // could be a .csproj, or ???
-        var projectFullPath = shell.ls(path.join(relative_path,"*.*proj"));
+        // 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 extension to figure out project type
+        var projectExt = path.extname(relative_path);
+        // get the project type
+        var projectTypeGuid = null;
+        if(projectExt == ".vcxproj") {
+            projectTypeGuid = WinCplusplusProjectTypeGUID;
+        }
+        else if(projectExt == ".csproj") {
+            projectTypeGuid = WinCSharpProjectTypeGUID;
+        }
+        
+        if(!projectTypeGuid) {
+            throw new Error("unrecognized project type");
+        }
 
-        // select first ItemsGroups with a ChildNode ProjectReference
-        // ideally select all, and look for @attib 'Include'= projectFullPath
-        var projectRefNodesPar = this.xml.findall("ItemGroup[ProjectReference]")[0];
+        var preInsertText = "ProjectSection(ProjectDependencies) = postProject\n\r" +
+                             projectGuid + "=" + projectGuid + "\n\r" +
+                            "EndProjectSection\n\r";
 
-        console.log("projectRefNodes = " + projectRefNodesPar);
-    
-        return;
+        var postInsertText = 'Project("' + projectTypeGuid + '") = "' + 
+                              projName + '", "' + relative_path + '",' +
+                              '"' + projectGuid + '"\n\r EndProject\n\r';
+
+        // find and read in the solution file
+        var solutionPath = shell.ls(path.join(path.dirname(this.location),"*.sln"))[0];  // TODO:error handling
+        var solText = fs.readFileSync(solutionPath,{encoding:"utf8"});
+        var splitText = solText.split(preInsertText);
+        
+        solText = splitText.join("").split(postInsertText);
+        solText = solText.join("");
 
+        fs.writeFileSync(solutionPath,solText,{encoding:"utf8"});
+
+        // select first ItemsGroups with a ChildNode ProjectReference
+        // ideally select all, and look for @attib 'Include'= projectFullPath
+        var projectRefNodesPar = this.xml.find("ItemGroup/ProjectReference[@Include='" + relative_path + "']/..");
         if(projectRefNodesPar) {
             this.xml.getroot().remove(0, projectRefNodesPar);
         }