So I suppose we should 
1. remove .bat extension from other script locations to be consistent, for 
example

        'cordova-wp8': 
            { 'platform':'wp8', 'scriptSrc': 
path.join(project_dir,'cordova','version.bat') },

2.  Remove check for the file location on Windows before executing it due to 
additional different file extensions (we don't know exact target name, but 
.exec or .spawn cmd /c will be able to run it)

       if(fs.existsSync(engine.scriptSrc)){
                fs.chmodSync(engine.scriptSrc, '755');
                var d = Q.defer();
                child_process.exec(engine.scriptSrc, function(error, stdout, 
stderr) {

3. If we are switching to spawn we may want to wrap spawn functionality to 
special module which will hide all platform specific checks/magic
+ 1 for cmd /c due to same reason

Are you ok if I create ticket for this specific bug (plugman + wp78) and fix it 
as per steps 1 and 2 above?

Thx!
Sergey 
-----Original Message-----
From: Carlos Santana [mailto:csantan...@gmail.com] 
Sent: Wednesday, October 23, 2013 10:23 PM
To: dev@cordova.apache.org
Subject: Re: Plugman engine check and WP7/8

Actually just try it out and see that using spawn with "cmd"
["/c","cordova/build",...
is better option than adding the ".bat" then it covers "build.exe", 
"build.bat", and "build.cmd" on windows

if someone thinks this is bad route, please shime in this jira issue [1]

[1]: https://issues.apache.org/jira/browse/CB-5187

--Carlos



On Wed, Oct 23, 2013 at 1:23 PM, Carlos Santana <csantan...@gmail.com>wrote:

> Thanks Bryan for pointing out;
> I created a jira issue to address the "compile, emualate, run" using 
> spawn and not addressing windows ".bat"
>
> https://issues.apache.org/jira/browse/CB-5187
>
> I'm guessing the fix is to detect that node environment is Windows and 
> append ".bat" to cmd for child process spawn We can't use exec, that 
> was the original problem why we moved to spawn per Braden suggestion 
> about stdio
>
> Not sure what to say about the version topic being discuss, maybe 
> someone with knowledge about the problem should open a jira issue
>
> I'm out on a 2 day conference, will try to land something today unless 
> wants to take over and help.
>
>
> --Carlos
>
>
>
> On Wed, Oct 23, 2013 at 11:06 AM, Bryan Higgins <br...@bryanhiggins.net>wrote:
>
>> I know Carlos just changed several CLI commands to use spawn. There 
>> doesn't seem to be any specific handling for Windows.
>>
>>
>> https://git-wip-us.apache.org/repos/asf?p=cordova-cli.git;a=commit;h=
>> 01c7ecec7ccf4a3c1423ddf3844e125d24965025
>>
>>
>> On Wed, Oct 23, 2013 at 10:44 AM, Braden Shepherdson 
>> <bra...@chromium.org
>> >wrote:
>>
>> > I thought we were shelling out that command, not trying to load the
>> file.
>> > Then Windows would locate the version.bat file and run it, while 
>> > Unixy platforms would see the version file with +x, and run it.
>> >
>> > Are we no longer going through the shell? (This should be using 
>> > child_process.exec, not .spawn, for example.)
>> >
>> > Braden
>> >
>> >
>> > On Wed, Oct 23, 2013 at 10:13 AM, Bryan Higgins <
>> bhigg...@blackberry.com
>> > >wrote:
>> >
>> > > This issue has to do with the host system rather than platform.
>> Android
>> > and
>> > > BB10 both have version.bat files.
>> > >
>> > >
>> > > On Wed, Oct 23, 2013 at 9:56 AM, Sergey Grebnov (Akvelon) < 
>> > > v-seg...@microsoft.com> wrote:
>> > >
>> > > > Hi,
>> > > >
>> > > > #1 The problem
>> > > > Right now the simplest (and also the most correct IMO) way to
>> specify
>> > > > plugin restrictions to specific cordova version is the following:
>> > > >
>> > > > plugin.xml:
>> > > >
>> > > >  <engines>
>> > > >    <engine name="cordova" version=">=2.7.0" />  </engines>
>> > > >
>> > > > But in this case as per plugman engines definition
>> > > > (plugman/src/util/default-engines.js) plugman will always try 
>> > > > to
>> find
>> > > > version verification script in some predefined location, not 
>> > > > taking
>> > into
>> > > > account currently running platform, and will fail on WP since
>> correct
>> > > > script name is version.bat, not just version.
>> > > >
>> > > > module.exports = function(project_dir){
>> > > >     return {
>> > > >         'cordova':
>> > > >             { 'platform':'*', 'scriptSrc':
>> > > > path.join(project_dir,'cordova','version') }, <- works in 
>> > > > general,
>> but
>> > > NOT
>> > > > for WP7/8
>> > > >          ...
>> > > >         'cordova-wp8':
>> > > >             { 'platform':'wp8', 'scriptSrc':
>> > > > path.join(project_dir,'cordova','version.bat') }, <- correct
>> location,
>> > > not
>> > > > used in case of example above
>> > > >
>> > > >
>> > > > This means that right now there is no way to specify platform
>> dependent
>> > > > location of version verification script for 'cordova' engine 
>> > > > check
>> > which
>> > > >  is going to be the most popular.
>> > > >
>> > > > #2 Proposed solution
>> > > >
>> > > > Taking into account we have platform context when we are 
>> > > > looking for
>> > the
>> > > > appropriate engine
>> > > > plugman/src/install.js
>> > > >         function getEngines(pluginElement, platform, 
>> > > > project_dir, plugin_dir){
>> > > >
>> > > > I propose to think about 'cordova' engine settings (in
>> > > default-engines.js)
>> > > > as a fallback in case we don't have any platform specific 
>> > > > engine for
>> > some
>> > > > platform. So in case of  engine.attrib["name"] == 'cordova' we
>> should
>> > > check
>> > > > if there is engine with ['cordova-' + platform] name first and 
>> > > > if it
>> > does
>> > > > not exist use 'cordova' engine settings only.  For example we
>> already
>> > do
>> > > > this by the following line, but we need both engines (cordova 
>> > > > and
>> > > > cordova-wp8) specified in plugin.xml file. Thoughts?
>> > > >
>> > > > // make sure we check for platform req's and not just cordova reqs
>> > > >     if(cordovaEngineIndex && cordovaPlatformEngineIndex) 
>> > > > uncheckedEngines.pop(cordovaEngineIndex);
>> > > >
>> > > > PS. Another minor potential issue seems to be in check above; 
>> > > > cordovaEngineIndex && cordovaPlatformEngineIndex will return 
>> > > > false
>> if
>> > one
>> > > > of indexes is zero (zero is valid/correct index in this context 
>> > > > so
>> it
>> > > must
>> > > > be true).
>> > > >
>> > > > Thx!
>> > > > Sergey
>> > > >
>> > >
>> >
>>
>
>
>
> --
> Carlos Santana
> <csantan...@gmail.com>
>



--
Carlos Santana
<csantan...@gmail.com>

Reply via email to