That is correct, Braden. Also, exposing this via command-line flags as per your suggestion Michal should be totally doable.
On 6/12/13 7:58 AM, "Braden Shepherdson" <[email protected]> wrote: >It's either: a directory on the local disk, or a .tar.gz on the web >somewhere. > >This looks great, Fil! > >Braden > > >On Tue, Jun 11, 2013 at 9:30 PM, Michal Mocny <[email protected]> wrote: > >> That sounds awesome, sweet work Fil! >> >> Question: your cordova-android lib example has the uri >> "/Users/fil/src/cordova-android", but you mention supporting only >>.tar.gz >> -- does that mean that non-archived local directories are also >>supported? >> (I should hope so). >> >> Thanks! >> -Michal >> >> >> On Tue, Jun 11, 2013 at 6:10 PM, Filip Maj <[email protected]> wrote: >> >> > Hey guys another quick update >> > >> > I have made progress on the hooks/events/middleware approach and opted >> for >> > a simpler, configuration approach. I think this approach satisfies >> > requirements for Adobe w.r.t. phonegap's CLI, as well as the wishes >> Michal >> > and Braden expressed for customizing the various libraries the cli >> > consumes. >> > >> > Once the git servers are back up, I'll push the latest code, but in >>the >> > meantime, here's how the "replace stock cordova libraries with your >>own" >> > functionality is coded atm - it's hooked into the lazy load >> functionality: >> > >> > 1. customize project/.cordova/config.json's "lib" object to point to >> > specific locations of libraries (see examples below for detail) >> > - you can do so at a module-level as well by calling >> > `cordova.config({lib:{/* whatever */}}); >> > 2. Then every time you go to add a platform, it checks if the >>appropriate >> > fields exist in the config.json, and if so, will lazy load the >>necessary >> > library before shelling out the library executable. >> > 3. This also works with the cordova hello world app. So if you call >> > cordova.config() with details about the location of your www assets >>and >> > whatnot before calling cordova.create(), it will use that info to lazy >> > load those assets first. >> > >> > ---- >> > >> > Example 1: I want to use latest (master) of cordova-android from my >>local >> > filesystem >> > >> > You can do so via CLI or node-level module, here's the cli based >>example: >> > $ cordova create tmp >> > $ vim tmp/.cordova/config.json >> > * edit to add a path to the lib * >> > $ cat tmp/.cordova/config.json >> > { >> > id:'io.cordova.hello', >> > name:'HelloCordova', >> > lib:{ >> > "android":{ >> > uri:"/Users/fil/src/cordova-android", >> > version:"master" >> > id:"cordova-master" >> > >> > } >> > } >> > } >> > $ cd tmp >> > $ cordova platform add android >> > >> > ^ that will shell out to /Users/fil/src/cordova-android/bin/create >> > >> > You can do the same with a library that is stored on the web >>somewhere. >> > Currently, it must be a .tar.gz but nothing stopping us from adding >>more >> > support compression-wise. For example, imagine we have some fork of >> > cordova-android that uses ChromeView instead. >> > >> > The above will also copy the local cordova-android directory into >> > ~/.cordova/lib/android/cordova-master/master/. >> > >> > ---- >> > >> > Example 2: I want to use phonegap-start www app instead of the >> > cordova-app-hello-world >> > >> > Can only do so via node module right now (because the the www assets >>get >> > copied over when you call create), but here's how you would do it: >> > >> > $ node >> > > cordova=require('cordova'); >> > > app_path = '/location/that/my/app/will/exist' >> > > cordova.config(app_path, { >> > lib:{ >> > "www":{ >> > >> > uri:"https://github.com/phonegap/phonegap-start/archive/2.5.0.tar.gz", >> > version:"2.5.0" >> > id:"phonegap" >> > } >> > }}); >> > > cordova.create(app_path); >> > Downloading >> > https://github.com/phonegap/phonegap-start/archive/2.5.0.tar.gz... >> > >> > >> > Similarly to the my first example, this one will create a >> > ~/.cordova/lib/www/phonegap/2.5.0 directory, with the contents of the >>tar >> > ball extracted into it. >> > >> > ==== >> > >> > I still have a bunch of work to do with this, like revamping our tests >> > completely and adding new coverage for these features, but inching >> closer. >> > >> > On 6/7/13 2:46 PM, "Michael Brooks" <[email protected]> wrote: >> > >> > >1. Awesome >> > > >> > >2. Very similar logic exists in the phonegap-cli [1] [2]. Since this >> logic >> > >is being used by phonegap-cli, node-phonegap-build, and cordova-cli, >>we >> > >could extract it out to a new NPM module called cordova-config. >> > > >> > >3. Additionally, PhoneGap will want to load its own Hello World app >> > >instead >> > >of the Cordova Hello World app. So, it would be nice to accomodate >>this >> > >situation gracefully. Do Chrome Apps have any odd requirements? >> > > >> > >[1] >> > > >> >>https://github.com/mwbrooks/phonegap-cli/blob/master/lib/common/config.js >> > >[2] >> > >>>https://github.com/mwbrooks/phonegap-cli/tree/master/spec/common/config >> > > >> > > >> > >On Fri, Jun 7, 2013 at 2:38 PM, Filip Maj <[email protected]> wrote: >> > > >> > >> Cool, thanks Mike, I'll use the gitweb approach to download >>libraries. >> > >> >> > >> And re #2: fair enough, I'll add that bit of logic to the "find the >> root >> > >> of a cordova project" utility function. >> > >> >> > >> As for the hooks, I am still mulling over different approaches. One >> > >> scenario that us Adobe folk want to support for PhoneGap is >> redirecting >> > >> any adds/builds for particular platforms that are not supported on >>a >> > >> user's machine to PhoneGap Build. For example, if a user's machine >>was >> > >>not >> > >> setup for iOS development (say, a Windows machine), the PhoneGap >>CLI >> not >> > >> only needs to know when a particular event happens, but also needs >>to >> be >> > >> able to stop the Cordova CLI from proceeding with the event - >> something >> > >> akin to e.preventDefault() in DOM events. >> > >> >> > >> I'm not sure of any npm libraries out there that have a similar >> eventing >> > >> system in place but I will do some research and see if there is any >> > >>prior >> > >> art out there. >> > >> >> > >> If anyone on the list has any ideas, I'm all ears :) >> > >> >> > >> On 13-06-07 10:07 AM, "Michael Brooks" <[email protected]> >> > wrote: >> > >> >> > >> >1. The Apache GitWeb implementation allows us to download a >>tar.gz of >> > >>any >> > >> >hash or tag. Using this will allow us to download any platform >> release. >> > >> >Here is an example of how to download cordova-android 2.8.0 [1]. I >> > >>think >> > >> >this is better than downloading the entire release, because >> > >>lazy-loading >> > >> >is >> > >> >meant to only grab what's needed. It's also a better choice than >> > >>GitHub's >> > >> >downloads because Apache's mirroring is sometimes unreliable. >> > >> > >> > >> >2. We should use $HOME/.cordova/ There is no reason to invent >> > >> >yet-another-name for the Cordova configuration directory. When a >> > >> >".cordova/" is found the $HOME directory, it is considered a >>global >> > >> >configuration directory and not a Cordova project. We can use >> > >> >$HOME/.cordova/lib/cordova-android to store the lazy-loaded >> libraries. >> > >>I >> > >> >chose "lib/" instead of "platforms/" because we will also be >> > >>lazy-loading >> > >> >resources such as the Hello World app and someday perhaps even >> ios-sim. >> > >> > >> > >> >3. Sure, the hooks sound good. >> > >> > >> > >> >[1] >> > >> > >> > >> >> > >> >> https://git-wip-us.apache.org/repos/asf?p=cordova-android.git;a=snapshot >> > ; >> > >>h >> > >> >=2.8.0;sf=tgz >> > >> > >> > >> > >> > >> >On Fri, Jun 7, 2013 at 7:41 AM, Michal Mocny <[email protected]> >> > >>wrote: >> > >> > >> > >> >> Glad to see movement on this. >> > >> >> >> > >> >> Few suggestions: >> > >> >> - use $HOME/.cordova-config/libs <-- this gives us a folder to >>put >> > >> >>other >> > >> >> stuff into later, without littering $HOME with .cordova-this and >> > >> >> .cordova-that >> > >> >> - I would love to have the ability to use different cordova-lib >> > >>versions >> > >> >> within any project easily. Changing the before-hook or >>adjusting >> the >> > >> >>libs >> > >> >> folder sound like global operations. Can we support --libs-dir= >> > >>command >> > >> >> line flag to cordova-cli? This should only need to be >>specified on >> > >> >>create. >> > >> >> >> > >> >> -Michal >> > >> >> >> > >> >> >> > >> >> On Fri, Jun 7, 2013 at 10:07 AM, Braden Shepherdson < >> > >> [email protected] >> > >> >> >wrote: >> > >> >> >> > >> >> > The Apache Way of having source release bundles is important >>and >> we >> > >> >> follow >> > >> >> > it. But we can download content for CLI from wherever we >>please. >> > >>We're >> > >> >> > currently downloading the libs from npm, getting the code from >> npm >> > >>and >> > >> >> the >> > >> >> > libs from Github doesn't change much. >> > >> >> > >> > >> >> > This is $HOME, as in /Users/me or /home/me or >> > >>C:\Users\me\Application >> > >> >> Data >> > >> >> > or whatever it is on Windows? SGTM. >> > >> >> > >> > >> >> > The before hook should have the ability to substitute their >>own >> > >>copy >> > >> >>of >> > >> >> the >> > >> >> > libs from somewhere else, ideally a git URL/directory and >> revision. >> > >> >>This >> > >> >> > way it would be trivial to point CLI at master versions of >> > >>platforms. >> > >> >> > >> > >> >> > Braden >> > >> >> > >> > >> >> > >> > >> >> > On Fri, Jun 7, 2013 at 3:58 AM, Filip Maj <[email protected]> >>wrote: >> > >> >> > >> > >> >> > > One of the last key outstanding tasks for the CLI is lazy >> > >>loading of >> > >> >> > > platform libraries [1]. >> > >> >> > > >> > >> >> > > I want to start tackling that tomorrow. I have a few >> > >> >>points/questions >> > >> >> to >> > >> >> > > bring up and wanted to share my vision of the >>implementation, >> > >>give >> > >> >> folks >> > >> >> > > an opportunity to comment. >> > >> >> > > >> > >> >> > > - where to download the source from? >> > >> >> Archive.apache.org/dist/cordovaseems >> > >> >> > > to have all of our releases, but each zip file contains ALL >> > >> >>platforms, >> > >> >> > not >> > >> >> > > individual ones. Github.com, on the other hand, DOES offer >> > >> >>per-platform >> > >> >> > > downloads, for e.g. [2]. >> > >> >> > > - storing the location in HOME/.cordova-libs cool with >>people? >> I >> > >> >>want >> > >> >> to >> > >> >> > > avoid naming the folder .cordova since that is already used >>on >> a >> > >> >> > > per-project basis to identify the root of a >>cordova-cli-created >> > >> >>project >> > >> >> > (a >> > >> >> > > la git). >> > >> >> > > - I am thinking of exposing hooks/events for this >> > >> >> > (before_library_download >> > >> >> > > and after_library_download is my initial thought, which get >> > >>passed >> > >> >>in >> > >> >> > > platform and version as event parameters/data). >> > >> >> > > >> > >> >> > > Comments/suggestions welcome. Thanks! >> > >> >> > > >> > >> >> > > Fil >> > >> >> > > >> > >> >> > > [1] https://issues.apache.org/jira/browse/CB-3306 >> > >> >> > > [2] >> https://github.com/apache/cordova-android/archive/2.8.0.zip >> > >> >> > > >> > >> >> > > >> > >> >> > >> > >> >> >> > >> >> > >> >> > >> > >>
