plugman manages plugin.xml-compatible cordova plugins into cordova-generated projects.

Usage
=====

Install a plugin
----------------

    $ plugman install --platform <platform> --project <directory> --plugin <plugin> [--variable NAME=VALUE]

Parameters:

 - platform <platform>: One of android, ios, blackberry10, wp8, or windows8
 - project <directory>: Path reference to a cordova-generated project of the platform you specify
 - plugin <plugin>: One of a path reference to a local copy of a plugin, or a remote https: or git: URL pointing to a cordova plugin (optionally append #branch:subdir) or a plugin ID from http://plugins.cordova.io
 - variable NAME=VALUE: Some plugins require install-time variables to be defined. These could be things like API keys/tokens or other app-specific variables.

Uninstall a plugin
------------------

    $ plugman uninstall --platform <platform> --project <directory> --plugin <plugin-id>

Parameters:
 - plugin <plugin-id>: The plugin to remove, identified by its id (see the plugin.xml's <plugin id> attribute)

Optional parameters
-------------------

 - www <directory>: www assets for the plugin will be installed into this directory. Default is to install into the standard www directory for the platform specified
 - plugins_dir <directory>: a copy of the plugin will be stored in this directory. Default is to install into the <project directory>/plugins folder
 - searchpath <directory>: when looking up plugins by ID, look in this directory and each of its subdirectories for the plugin before hitting the registry.
   Multiple search paths can be used by either specifying the flag multiple times, or by separating paths with a delimiter (: on 'nix, ; on Windows).

Optional flags
--------------

 --debug|-d    : Verbose mode

 --help|-h     : Displays this message

 --version|-v  : Displays version

Interacting with the registry
=============================

Add a user account
------------------

    $ plugman adduser

Publish a plugin
----------------

    $ plugman publish <directory>

Unpublish a plugin
------------------

    $ plugman unpublish <name>@<version>

Search for a plugin
-------------------

    $ plugman search <keyword1 keyword2 ...>

Display plugin information
-----------------------

    $ plugman info plugin

Manage registry configuration
-----------------------------

    $ plugman config set registry http://localhost:5984/registry/_design/app/_rewrite
    $ plugman config get registry

Manage owners
-------------

    $ plugman owner ls org.apache.cordova.core.file
    $ plugman owner add username org.apache.cordova.core.file
    $ plugman owner rm username org.apache.cordova.core.file

Create A Plugin
---------------

    $ plugman create --name <Plugin Name> --plugin_id <Plugin ID> --plugin_version <Plugin Version> [--path <Directory Path>] [--variable NAME=VALUE]

Parameters:

 - <Plugin Name>: A Name for a Plugin
 - <Plugin ID>: An ID for the plugin, ex: org.bar.foo
 - <Plugin Version>: A version for the plugin, ex: 0.0.0
 - variable NAME=VALUE: Extra variables such as description or Author

Add a Platform to a Plugin
--------------------------

    $ plugman platform add --platform_name <Platform>

Parameters:

- <Platform>: One of android, ios

Remove a Platform from a Plugin
-------------------------------

    $ plugman platform remove --platform_name <Platform>

Parameters:

- <Platform>: One of android, ios

