[ 
https://issues.apache.org/jira/browse/CB-14033?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jack Lu updated CB-14033:
-------------------------
    Description: 
Suppose we have a cordova plugin project and a test project that are under the 
same directory. The {color:#333333}cordova plugin project {color}is in 
directory p, and the test project in directory t. When I run following command 
in directory t:

 
{code:java}
cordova plugin add ..\p
{code}
the install fails, and I found it's due to the src directory missing during 
copying.

After digging into the source, I found it's caused by a special handling in the 
fetch action{color:#333333} on windows{color}. The source is 
{color:#333333}[https://github.com/apache/cordova-lib/blob/master/src/plugman/fetch.js#L299]{color}.
{code:java}
            /*
                [CB-10423]
                This is a special case. On windows we cannot create a symlink 
unless we are run as admin
                The error that we have is because src contains dest, so we end 
up with a recursive folder explosion
                This code avoids copy the one folder that will explode, and 
allows plugins to contain a demo project
                and to install the plugin via `cordova plugin add ../`
            */
            var resolvedSrcPath = path.resolve(plugin_dir);
            var filenames = fs.readdirSync(resolvedSrcPath);
            var relPath = path.relative(resolvedSrcPath,dest);
            var relativeRootFolder = relPath.split('\\')[0];
            filenames.splice(filenames.indexOf(relativeRootFolder),1);
{code}
in this case {color:#333333}relPath{color} will be "..\t\plugins\{{{{plugin 
id}}}}", {color:#333333}relativeRootFolder{color} be "..", then 
{color:#333333}filenames.indexOf(relativeRootFolder){color} be -1, finally 
filenames lost the last element, which is the src directory in my case.

 

 

  was:
Suppose we have a cordova plugin project and a test project that are under the 
same directory. The {color:#333333}cordova plugin project {color}is in 
directory p, and the test project in directory t. When I run following command 
in directory t:

 
{code:java}
cordova plugin add ..\p
{code}
the install fails, and I found it's due to the src directory missing during 
copying.

After digging into the source, I found it's caused by a special handling in the 
fetch action{color:#333333} on windows{color}. The source is 
{color:#333333}[https://github.com/apache/cordova-lib/blob/master/src/plugman/fetch.js#L299]{color}.
{code:java}
            /*
                [CB-10423]
                This is a special case. On windows we cannot create a symlink 
unless we are run as admin
                The error that we have is because src contains dest, so we end 
up with a recursive folder explosion
                This code avoids copy the one folder that will explode, and 
allows plugins to contain a demo project
                and to install the plugin via `cordova plugin add ../`
            */
            var resolvedSrcPath = path.resolve(plugin_dir);
            var filenames = fs.readdirSync(resolvedSrcPath);
            var relPath = path.relative(resolvedSrcPath,dest);
            var relativeRootFolder = relPath.split('\\')[0];
            filenames.splice(filenames.indexOf(relativeRootFolder),1);
{code}
in this case {color:#333333}relPath{color} will be "..\t\plugins
 {{plugin id}}", {color:#333333}relativeRootFolder{color} be "..", then 
{color:#333333}filenames.indexOf(relativeRootFolder){color} be -1, finally 
filenames lost the last element, which is the src directory in my case.

 

 


> `cordova plugin add` skips directory on windows
> -----------------------------------------------
>
>                 Key: CB-14033
>                 URL: https://issues.apache.org/jira/browse/CB-14033
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: cordova-lib
>         Environment: Cordova 6.2.0
>            Reporter: Jack Lu
>            Priority: Major
>
> Suppose we have a cordova plugin project and a test project that are under 
> the same directory. The {color:#333333}cordova plugin project {color}is in 
> directory p, and the test project in directory t. When I run following 
> command in directory t:
>  
> {code:java}
> cordova plugin add ..\p
> {code}
> the install fails, and I found it's due to the src directory missing during 
> copying.
> After digging into the source, I found it's caused by a special handling in 
> the fetch action{color:#333333} on windows{color}. The source is 
> {color:#333333}[https://github.com/apache/cordova-lib/blob/master/src/plugman/fetch.js#L299]{color}.
> {code:java}
>             /*
>                 [CB-10423]
>                 This is a special case. On windows we cannot create a symlink 
> unless we are run as admin
>                 The error that we have is because src contains dest, so we 
> end up with a recursive folder explosion
>                 This code avoids copy the one folder that will explode, and 
> allows plugins to contain a demo project
>                 and to install the plugin via `cordova plugin add ../`
>             */
>             var resolvedSrcPath = path.resolve(plugin_dir);
>             var filenames = fs.readdirSync(resolvedSrcPath);
>             var relPath = path.relative(resolvedSrcPath,dest);
>             var relativeRootFolder = relPath.split('\\')[0];
>             filenames.splice(filenames.indexOf(relativeRootFolder),1);
> {code}
> in this case {color:#333333}relPath{color} will be "..\t\plugins\{{{{plugin 
> id}}}}", {color:#333333}relativeRootFolder{color} be "..", then 
> {color:#333333}filenames.indexOf(relativeRootFolder){color} be -1, finally 
> filenames lost the last element, which is the src directory in my case.
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to