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 2015/03/19 07:54:19 UTC

[1/2] cordova-medic git commit: [CB-8698] Rewriting cordova.conf: factoring out common build code, parametrising builds with Buildbot Properties, and adding extra steps for cleanup. Removing unused plugin code. Cleaning up documentation. Cleaning up file

Repository: cordova-medic
Updated Branches:
  refs/heads/master eb060496c -> 0e37682dc


http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic/LICENSE
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic/LICENSE b/cordova-plugin-medic/LICENSE
deleted file mode 100644
index 7a4a3ea..0000000
--- a/cordova-plugin-medic/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic/README.md
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic/README.md b/cordova-plugin-medic/README.md
deleted file mode 100644
index fee223a..0000000
--- a/cordova-plugin-medic/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-cordova-medic-device
------------------------
-This is used for automated testing/Continuous Integration of Cordova/Mobile-spec.
-
-To install this plugin, follow the [Command-line Interface Guide](http://cordova.apache.org/docs/en/edge/guide_cli_index.md.html#The%20Command-line%20Interface).
-
-If you are not using the Cordova Command-line Interface, follow [Using Plugman to Manage Plugins](http://cordova.apache.org/docs/en/edge/plugin_ref_plugman.md.html).

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic/docs/medic.md
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic/docs/medic.md b/cordova-plugin-medic/docs/medic.md
deleted file mode 100644
index 7cc0ef8..0000000
--- a/cordova-plugin-medic/docs/medic.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
- license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-Medic
-======
-
-> The `medic` object provides support for continuous integration. It is not intended for use in applications.
-
-Properties
-----------
-
-- device.name
-- device.cordova
-- device.platform
-- device.uuid
-- device.version
-- device.model
-
-Variable Scope
---------------
-
-Since `device` is assigned to the `window` object, it is implicitly in the global scope.
-
-    // These reference the same `device`
-    var phoneName = window.device.name;
-    var phoneName = device.name;
-
-Permissions
------------
-
-### Android
-
-#### app/res/xml/config.xml
-
-    <plugin name="Medic" value="org.apache.cordova.Medic" />
-
-#### app/AndroidManifest.xml
-
-    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
-
-### iOS
-
-    No permissions are required.
-
-

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic/docs/medic.sha.md
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic/docs/medic.sha.md b/cordova-plugin-medic/docs/medic.sha.md
deleted file mode 100644
index 59b1751..0000000
--- a/cordova-plugin-medic/docs/medic.sha.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
- license: Licensed to the Apache Software Foundation (ASF) under one
-         or more contributor license agreements.  See the NOTICE file
-         distributed with this work for additional information
-         regarding copyright ownership.  The ASF licenses this file
-         to you under the Apache License, Version 2.0 (the
-         "License"); you may not use this file except in compliance
-         with the License.  You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-         Unless required by applicable law or agreed to in writing,
-         software distributed under the License is distributed on an
-         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         KIND, either express or implied.  See the License for the
-         specific language governing permissions and limitations
-         under the License.
----
-
-medic.sha
-===========
-
-Get the identifying hash of the test suite being run.
-
-    var string = medic.sha;
-
-Description
------------
-
-The details of how a UUID is generated are determined by the device manufacturer and are specific to the device's platform or model.
-
-Supported Platforms
--------------------
-
-- Android
-- iOS
-
-Quick Example
--------------
-
-    // Android: Returns a random 64-bit integer (as a string, again!)
-    //          The integer is generated on the device's first boot
-    //
-    // BlackBerry: Returns the PIN number of the device
-    //             This is a nine-digit unique integer (as a string, though!)
-    //
-    // iPhone: (Paraphrased from the UIDevice Class documentation)
-    //         Returns a string of hash values created from multiple hardware identifies.
-    //         It is guaranteed to be unique for every device and cannot be tied
-    //         to the user account.
-    // Windows Phone 7 : Returns a hash of device+current user,
-    // if the user is not defined, a guid is generated and will persist until the app is uninstalled
-    //
-    // webOS: returns the device NDUID
-    //
-    // Tizen: returns the device IMEI (International Mobile Equipment Identity or IMEI is a number
-    // unique to every GSM and UMTS mobile phone.
-    var deviceID = device.uuid;
-
-Full Example
-------------
-
-    <!DOCTYPE html>
-    <html>
-      <head>
-        <title>Device Properties Example</title>
-
-        <script type="text/javascript" charset="utf-8" src="cordova-x.x.x.js"></script>
-        <script type="text/javascript" charset="utf-8">
-
-        // Wait for device API libraries to load
-        //
-        document.addEventListener("deviceready", onDeviceReady, false);
-
-        // device APIs are available
-        //
-        function onDeviceReady() {
-            var element = document.getElementById('deviceProperties');
-            element.innerHTML = 'Device Name: '     + device.name     + '<br />' +
-                                'Device Cordova: '  + device.cordova  + '<br />' +
-                                'Device Platform: ' + device.platform + '<br />' +
-                                'Device UUID: '     + device.uuid     + '<br />' +
-                                'Device Version: '  + device.version  + '<br />';
-        }
-
-        </script>
-      </head>
-      <body>
-        <p id="deviceProperties">Loading device properties...</p>
-      </body>
-    </html>
-
-iOS Quirk
--------------
-
-The `uuid` on iOS is not unique to a device, but varies for each
-application, for each installation.  It changes if you delete and
-re-install the app, and possibly also when you upgrade iOS, or even
-upgrade your app per version (apparent in iOS 5.1). The `uuid` is not
-a reliable value.
-
-Windows Phone 7 and 8 Quirks
--------------
-
-The `uuid` for Windows Phone 7 requires the permission
-`ID_CAP_IDENTITY_DEVICE`.  Microsoft will likely deprecate this
-property soon.  If the capability is not available, the application
-generates a persistent guid that is maintained for the duration of the
-application's installation on the device.

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic/plugin.xml b/cordova-plugin-medic/plugin.xml
deleted file mode 100644
index a72947d..0000000
--- a/cordova-plugin-medic/plugin.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
-    xmlns:rim="http://www.blackberry.com/ns/widgets"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    id="org.apache.cordova.core.medic"
-    version="0.1.0">
-    <name>Device</name>
-    <description>Cordova Medic Plugin</description>
-    <license>Apache 2.0</license>
-    <keywords>cordova,medic,testing</keywords>
-
-    <js-module src="www/medic.js" name="medic">
-        <clobbers target="medic" />
-    </js-module>
-    <js-module src="www/jasmine-jsreporter.js" name="jasmine-jsreporter">
-        <clobbers target="jasmine-jsreporter" />
-    </js-module>
-
-    <!-- android -->
-    <platform name="android">
-        <config-file target="res/xml/config.xml" parent="/*">
-            <feature name="Medic" >
-                <param name="android-package" value="org.apache.cordova.medic.Medic"/>
-            </feature>
-            <access origin="http://172.23.188.139" />
-            <content src="autotest/pages/all.html" />
-        </config-file>
-    </platform>
-
-    <!-- ios -->
-    <platform name="ios">
-        <config-file target="config.xml" parent="/*">
-            <feature name="Medic">
-                <param name="ios-package" value="CDVMedic"/>
-            </feature>
-            <access origin="http://172.23.188.139" ></access>
-            <content src="autotest/pages/all.html" />
-        </config-file>
-    </platform>
-</plugin>

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic/www/jasmine-jsreporter.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic/www/jasmine-jsreporter.js b/cordova-plugin-medic/www/jasmine-jsreporter.js
deleted file mode 100644
index ea00d8a..0000000
--- a/cordova-plugin-medic/www/jasmine-jsreporter.js
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-  This file is part of the Jasmine JSReporter project from Ivan De Marino.
-
-  Copyright (C) 2011 Ivan De Marino (aka detro, aka detronizator), http://blog.ivandemarino.me, ivan.de.marino@gmail.com
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of the <organization> nor the
-      names of its contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL IVAN DE MARINO BE LIABLE FOR ANY
-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*
-Copyright (c) 2012 Adobe Systems Incorporated. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-(function () {
-    // Ensure that Jasmine library is loaded first
-    if (!jasmine) {
-        throw new Exception("[Jasmine JSReporter] 'Jasmine' library not found");
-    }
-
-    /**
-     * Calculate elapsed time, in Seconds.
-     * @param startMs Start time in Milliseconds
-     * @param finishMs Finish time in Milliseconds
-     * @return Elapsed time in Seconds */
-    function elapsedSec (startMs, finishMs) {
-        return (finishMs - startMs) / 1000;
-    }
-
-    var platformMap = {
-        'ipod touch':'ios',
-        'iphone':'ios'
-    };
-
-    var JSReporter =  function (server, serverext, sha) {
-        this.server = server;
-        this.serverext = serverext;
-        this.sha = sha;
-    };
-
-    JSReporter.prototype = {
-        reportRunnerStarting: function (runner) {
-            // Attach results to the "jasmine" object to make those results easy to scrap/find
-            jasmine.runnerResults = {
-                failures: [],
-                durationSec : 0,
-                passed : true,
-                total: 0,
-                failed: 0
-            };
-        },
-
-        reportSpecStarting: function (spec) {
-            // Start timing this spec
-            spec.startedAt = new Date();
-        },
-
-        reportSpecResults: function (spec) {
-            // Finish timing this spec and calculate duration/delta (in sec)
-            spec.finishedAt = new Date();
-            spec.durationSec = elapsedSec(spec.startedAt.getTime(), spec.finishedAt.getTime());
-            jasmine.runnerResults.durationSec += spec.durationSec;
-            jasmine.runnerResults.total++;
-            var results = spec.results();
-            var failed = !(results.passed());
-            if (failed) {
-                var failure = {spec:spec.getFullName(),assertions:[]};
-                jasmine.runnerResults.failed++;
-                var items = results.getItems();
-                for (var i = 0, l = items.length; i < l; i++) {
-                    var item = items[i];
-                    if (!item.passed_) {
-                        failure.assertions.push({exception:item.message,trace:(item.trace && item.trace.stack ? item.trace.stack : "")});
-                    }
-                }
-                jasmine.runnerResults.failures.push(failure);
-            }
-        },
-
-        reportSuiteResults: function (suite) {
-            // Nothing to do
-        },
-
-        reportRunnerResults: function (runner) {
-            var p = device.platform.toLowerCase();
-            this.postTests({
-                mobilespec:jasmine.runnerResults,
-                sha:this.sha,
-                platform:(platformMap.hasOwnProperty(p) ? platformMap[p] : p),
-                version:device.version.toLowerCase(),
-                timestamp:Math.round(Math.floor((new Date()).getTime() / 1000)),
-                model:device.model || device.name
-            });
-        },
-        postTests: function(json) {
-            console.log('posting tests');
-            var xhr = new XMLHttpRequest();
-            var doc_id = [ this.sha, json.version, json.model].map(encodeURIComponent).join('__');
-            // TODO: expose the db in this url for customization
-            var doc_url = this.server + '/mobilespec_results/' + doc_id;
-            var doc_urlext = this.serverext + '/_utils/document.html?mobilespec_results/' + doc_id;
-            console.log('Test Results URL = '+doc_urlext+' <<<end test result>>>'); 
-            xhr.open("PUT", doc_url, true);
-            xhr.onreadystatechange=function() {
-                console.log('onreadystatechange');
-                if (xhr.readyState==4) {
-                    console.log('readystate==4, status: ' + xhr.status);
-                    if (xhr.status==201) {
-                        // HTTP 201 Created
-                        // we added the doc, hooray
-                        if(!(jasmine.runnerResults.failed)) {
-                            console.log('[[[ TEST OK ]]]');
-                        } else {
-                            console.log('[[[ TEST FAILED ]]]');
-                        }
-                        console.log('>>> DONE <<<');
-                        try { // throws exception on windows8
-                            if (blackberry && blackberry.app && blackberry.app.exit) blackberry.app.exit();
-                        } catch (ex) { }
-
-                    } else if (xhr.status == 409) {
-                        console.log('conflict on couch');
-                        // HTTP 409 Conflict
-                        // doc already exists. now let's GET it, grab the rev, delete it, and try again.
-                        var exehar = new XMLHttpRequest();
-                        exehar.open('GET', doc_url, true);
-                        exehar.onreadystatechange=function() {
-                            if (exehar.readyState==4) {
-                                if (exehar.status==200) {
-                                    var existing_doc = JSON.parse(exehar.responseText);
-                                    var rev = existing_doc._rev;
-                                    var eksatschargh = new XMLHttpRequest();
-                                    eksatschargh.open('DELETE', doc_url + '?rev=' + rev, true);
-                                    eksatschargh.onreadystatechange=function() {
-                                        if (eksatschargh.readyState==4) {
-                                            if (eksatschargh.status==200) {
-                                                var x_h_r = new XMLHttpRequest();
-                                                x_h_r.open('PUT', doc_url, true);
-                                                x_h_r.onreadystatechange=function() {
-                                                    if (x_h_r.readyState==4) {
-                                                        if (x_h_r.status==201) {
-                                                            if(!(jasmine.runnerResults.failed)) {
-                                                                console.log('[[[ TEST OK ]]]');
-                                                            } else {
-                                                                console.log('[[[ TEST FAILED ]]]');
-                                                            }
-                                                            console.log('>>> DONE <<<');
-//                                                            if (blackberry && blackberry.app && blackberry.app.exit) blackberry.app.exit();
-                                                        } else {
-                                                            console.log('the round trip delete+create failed. i give up. status was: ' + x_h_r.status);
-                                                            console.log(x_h_r.responseText);
-                                                        }
-                                                    }
-                                                };
-                                                x_h_r.send(JSON.stringify(json));
-                                            } else {
-                                                console.log('look, we tried to add the results to couch. it said it alrady exists. now im trying to DELETE it. it fucked up. wtf. status on the DELETE: ' + eksatschargh.status);
-                                            }
-                                        }
-                                    };
-                                    eksatschargh.send(null);
-                                } else {
-                                    console.log('look, we tried to add the results to couch. it said it alrady exists. now im trying to GET it so i can DELETE it. it fucked up. wtf. status on the GET: ' + exehar.status);
-                                }
-                            }
-                        };
-                        exehar.send(null);
-                    } else {
-                        console.log('some crazy shit happened. couch returned some balltastic info. status code: ' + xhr.status);
-                        console.log(xhr.responseText);
-                        console.log('>>> DONE <<<');
-                        try { // throws exception on windows8
-                            if (blackberry && blackberry.app && blackberry.app.exit) blackberry.app.exit();
-                        } catch (ex) { }
-                    }
-                }
-            };
-            xhr.send(JSON.stringify(json));
-        },
-    };
-
-    // export public
-    jasmine.JSReporter = JSReporter;
-})();

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic/www/medic.js
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic/www/medic.js b/cordova-plugin-medic/www/medic.js
deleted file mode 100644
index e16b011..0000000
--- a/cordova-plugin-medic/www/medic.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var argscheck = require('cordova/argscheck'),
-    channel = require('cordova/channel'),
-    utils = require('cordova/utils'),
-    exec = require('cordova/exec');
-
-require('./jasmine-jsreporter');
-
-/**
- * This represents the medic CI information
- * @constructor
- */
-function Medic() {
-    this.couchdb = 'http://172.23.188.139:5900';
-    this.sha = 'sample';
-    var medic_this = this;
-    var xhr = new XMLHttpRequest();
-    xhr.open("GET", "medic.json", false);
-    xhr.onload = xhr.onerror = function() {
-       var cfg = JSON.parse(xhr.responseText);
-       medic_this.sha = cfg.sha;
-       medic_this.couchdb = cfg.couchdb;
-       medic_this.couchdbext = cfg.couchdbext || medic_this.couchdb;
-       console.log('Loaded Medic Config: sha='+medic_this.sha+',couchdb='+medic_this.couchdb+',couchdbext='+medic_this.couchdbext);
-    }
-    xhr.send();
-}
-Medic.prototype.isEnabled = function() {
-    return (!!window.jasmine || !!window.jasmine.JSReporter) ;
-}
-
-Medic.prototype.getJSReporter = function() {
-
-    if(!window.jasmine) console.log('[ERROR] jasmine not installed.');
-    if(!window.jasmine.JSReporter) console.log('[ERROR] jasmine reporter not installed.');
-    return new window.jasmine.JSReporter( this.couchdb, this.couchdbext, this.sha );
-};
-
-module.exports = new Medic();

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-repos.json
----------------------------------------------------------------------
diff --git a/cordova-repos.json b/cordova-repos.json
deleted file mode 100644
index cf38c5a..0000000
--- a/cordova-repos.json
+++ /dev/null
@@ -1,295 +0,0 @@
-{
-"tests" : [
-  {
-    "title" : "Android Master Platform",
-    "categories" : ["CORDOVA-ANDROID","CORDOVA-CLI","CORDOVA-PLUGMAN","CORDOVA-COHO","CORDOVA-MSPEC","CORDOVA-TESTMASTER","CORDOVA-JS"],
-    "branch" : "master",
-    "builder": "cordova-android",
-    "platform": "android"
-  },
-  {
-    "title" : "Android Master Plugins",
-    "categories" : ["CORDOVA-PLUGIN"],
-    "branch" : "master",
-    "builder": "cordova-android",
-    "platform": "android"
-  },
-    {
-    "title" : "Android Build Windows",
-    "categories" : ["CORDOVA-ANDROID","CORDOVA-CLI","CORDOVA-PLUGIN","CORDOVA-COHO","CORDOVA-MSPEC","CORDOVA-TESTMASTER","CORDOVA-JS"],
-    "branch" : "master",
-    "builder": "cordova-android-win",
-    "platform": "android"
-  },
-  {
-    "title" : "IOS Master Platform",
-    "categories" : ["CORDOVA-IOS","CORDOVA-CLI","CORDOVA-PLUGMAN","CORDOVA-COHO","CORDOVA-MSPEC","CORDOVA-TESTMASTER","CORDOVA-JS"],
-    "branch" : "master",
-    "builder": "cordova-ios",
-    "platform": "ios"
-  },
-  {
-    "title" : "IOS Master Plugins",
-    "categories" : ["CORDOVA-PLUGIN"],
-    "branch" : "master",
-    "builder": "cordova-ios",
-    "platform": "ios"
-  }
-,
-  {
-    "title" : "Windows Phone8 master",
-    "categories" : ["CORDOVA-WP8","CORDOVA-CLI","CORDOVA-PLUGIN","CORDOVA-COHO","CORDOVA-MSPEC","CORDOVA-TESTMASTER","CORDOVA-JS"],
-    "branch" : "master",
-    "builder": ["cordova-wp8", "cordova-wp8-vs2012-win8"],
-    "platform": "wp8"
-  },
-  {
-    "title" : "Windows 8 master",
-    "categories" : ["CORDOVA-WINDOWS","CORDOVA-CLI","CORDOVA-PLUGIN","CORDOVA-COHO","CORDOVA-MSPEC","CORDOVA-TESTMASTER","CORDOVA-JS"],
-    "branch" : "master",
-    "builder": ["cordova-windows", "cordova-windows8-vs2012-win8"],
-    "platform": "windows"
-  }
-,
-  {
-    "title" : "BlackBerry Master Platform",
-    "categories" : ["CORDOVA-BLACKBERRY","CORDOVA-CLI","CORDOVA-PLUGMAN","CORDOVA-COHO","CORDOVA-MSPEC","CORDOVA-TESTMASTER","CORDOVA-JS"],
-    "branch" : "master",
-    "builder": "cordova-blackberry",
-    "platform": "blackberry"
-  },
-  {
-    "title" : "BlackBerry Master Plugins",
-    "categories" : ["CORDOVA-PLUGIN"],
-    "branch" : "master",
-    "builder": "cordova-blackberry",
-    "platform": "blackberry"
-  }
-,
-  {
-    "title" : "CLI tooling tests",
-    "categories" : ["CORDOVA-CLI","CORDOVA-LIB"],
-    "branch" : "master",
-    "builder": "cordova-tools-cli",
-    "platform": "ios"
-  },
-  {
-    "title" : "ChromeSpec on Chrome",
-    "categories" : ["CORDOVA-CHROMESPEC"],
-    "branch" : "master",
-    "builder": "cordova-zchrome_desktop",
-    "platform": "chrome"
-  },
-  {
-    "title" : "ChromeSpec on Android",
-    "categories" : ["CORDOVA-CHROMESPEC"],
-    "branch" : "master",
-    "builder": "cordova-zchrome-mobile",
-    "platform": "chrome"
-  }
-],
-"repos" : [
-{
-    "title" : "CCA",
-    "repo" : "https://github.com/MobileChromeApps/mobile-chrome-apps.git",
-    "category" : "CORDOVA-CHROMESPEC",
-    "release" : "master",
-    "current" : "master"
-},
-{
-    "title" : "TESTMASTER",
-    "repo" : "https://git-wip-us.apache.org/repos/asf/cordova-medic.git",
-    "category" : "CORDOVA-TESTMASTER",
-    "release" : "master",
-    "current" : "master"
-},{
-    "title" : "COHO",
-    "repo" : "https://git-wip-us.apache.org/repos/asf/cordova-coho.git",
-    "category" : "CORDOVA-COHO",
-    "release" : "master",
-    "current" : "master"
-},{
-    "title" : "CLI",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-cli.git",
-    "category" : "CORDOVA-CLI",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "PLUGMAN",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugman.git",
-    "category" : "CORDOVA-PLUGMAN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "CORDOVA-LIB",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-lib.git",
-    "category" : "CORDOVA-CLI",
-    "release" : "master",
-    "current" :"master"
-}
-,
-{
-    "title" : "JS",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-js.git",
-    "category" : "CORDOVA-JS",
-    "release" : "RELEASE",
-    "current" :"master"
-},{
-    "title" : "ANDROID",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-android.git",
-    "category" : "CORDOVA-ANDROID",
-    "release" : "RELEASE",
-    "current" :"master"
-},{
-    "title" : "IOS",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-ios.git",
-    "category" : "CORDOVA-IOS",
-    "release" : "RELEASE",
-    "current" :"master"
-},{
-    "title" : "WP8",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-wp8.git",
-    "category" : "CORDOVA-WP8",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "WINDOWS",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-windows.git",
-    "category" : "CORDOVA-WINDOWS",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "BLACKBERRY",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-blackberry.git",
-    "category" : "CORDOVA-BLACKBERRY",
-    "release" : "RELEASE",
-    "current" :"master"
-},{
-    "title" : "MSPEC",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-mobile-spec.git",
-    "category" : "CORDOVA-MSPEC",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "TESTFRAMEWORK",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-test-framework.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "BATTERY",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "CAMERA",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "CONSOLE",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "CONTACTS",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "DEVICE",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "DEVICEMOTION",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "DEVICEORIENTATION",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-orientation.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "DIALOGS",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "FILE",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "FILETRANSFER",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "GEOLOCATION",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "GLOBALIZATION",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "INAPPBROWSER",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "MEDIA",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-media.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "MEDIACAPTURE",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-media-capture.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "NETWORKINFO",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "SPLASHSCREEN",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "STATUSBAR",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-},{
-    "title" : "VIBRATION",
-    "repo"  : "https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git",
-    "category" : "CORDOVA-PLUGIN",
-    "release" : "master",
-    "current" :"master"
-}
-]
-}

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova.conf
----------------------------------------------------------------------
diff --git a/cordova.conf b/cordova.conf
deleted file mode 100644
index 64fda24..0000000
--- a/cordova.conf
+++ /dev/null
@@ -1,347 +0,0 @@
-#!/usr/bin/python
-
-"""
-This is the config file for the Cordova project.
-"""
-
-import json
-
-from buildbot.schedulers.timed import Nightly
-
-class MedicConfig(object):
-    """static class that encapsulates all configuration parameters"""
-
-    def __init__(self):
-        with open(FP + "cordova-config.json") as fname:
-            self.json_config = json.load(fname)
-
-        with open(FP + "cordova-repos.json") as fname:
-            self.json_repos = json.load(fname)
-
-        self.platform_list = self.json_config['app']['platforms']
-        self.branch_release = self.json_config['app']['release']
-        self.build_timeout = self.json_config['app']['timeout']
-
-        self.projectbranches = ['master', self.branch_release]
-        self.polltime = 300
-        self.stabletime = 30
-
-        # GitPoller on Windows fails if gitbin location is not provided.
-        # Set git location if running medic master on Windows
-        self.git_bin = ""  #"c:\Program Files (x86)\Git\cmd\git.exe"
-
-        self.repos = {}
-        self.branches = {}
-
-        self.fetch_repos()
-        self.fetch_branches()
-
-    def has_platform(self, platform_name):
-        """Indicates whether specific platform is need to be built"""
-        return platform_name in self.platform_list
-
-    def fetch_repos(self):
-        """Fetches repos from config.json"""
-        for repo in self.json_repos['repos']:
-            title = str(repo["title"])
-            repo_url = str(repo['repo'])
-            self.repos[title] = repo_url
-
-    def fetch_branches(self):
-        """Fetches branches for each repo from config.json"""
-        for jrepo in self.json_repos['repos']:
-            title = str(jrepo["title"])
-            self.branches[title] = str(jrepo['current'])
-
-CONFIG = MedicConfig()
-
-# schedulers
-
-from buildbot.schedulers.basic import SingleBranchScheduler
-from buildbot.schedulers.forcesched import ForceScheduler
-from buildbot.changes.filter import ChangeFilter
-
-FORCE_BUILDERS = []
-
-for test in CONFIG.json_repos['tests']:
-
-    test_platform = test["platform"]
-    test_builders = test["builder"]
-    # convert test_builders to list if necessary
-    if type(test_builders) == unicode:
-        test_builders = [test_builders]
-    # and convert list members to strings (instead of unicode)
-    test_builders = [str(b) for b in test_builders]
-
-    if CONFIG.has_platform(test_platform):
-
-        FORCE_BUILDERS.extend(test_builders)
-        c['schedulers'].append(SingleBranchScheduler(
-            name=test["title"],
-            change_filter=ChangeFilter(
-                branch=test["branch"],
-                project=test["categories"]),
-            treeStableTimer=CONFIG.stabletime,
-            builderNames=test_builders))
-
-c['schedulers'].append(ForceScheduler(name="force", builderNames=FORCE_BUILDERS))
-c['schedulers'].extend([
-    Nightly(
-        name         = 'cordova_nightly',
-        reason       = 'nightly',
-        branch       = 'master',
-        hour         = 0,
-        builderNames = [
-            'cordova-ios',
-            'cordova-android',
-            'cordova-android-win',
-            'cordova-wp8',
-            'cordova-wp8-vs2012-win8',
-            'cordova-windows',
-            'cordova-windows8-vs2012-win8',
-        ],
-    ),
-])
-
-# new build steps
-
-from buildbot.steps.shell import ShellCommand
-from buildbot.config import BuilderConfig
-from buildbot.process.factory import BuildFactory
-from buildbot.steps.transfer import FileDownload
-
-def RMCommand(path, **kwargs):
-    js_script = "var s = require('shelljs'); console.log('removing {path}'); s.rm('-rf', '{path}');".format(path=path)
-    return ShellCommand(command='node -e "'+ js_script + '"> ../rm.txt 2>&1', logfiles = {"log": "../rm.txt"}, **kwargs)
-
-def NPMInstall(command=list(), **kwargs):
-    return ShellCommand(command=["npm", "install"] + command + ["--cache=./npm_cache"], **kwargs)
-
-def InstallShellJS():
-    return NPMInstall(["shelljs"], workdir='build', haltOnFailure=True, description='Install shelljs')
-
-class PlatformTestBase(object):
-    """Base class with common build steps for all platforms"""
-    def __init__(self, platform=""):
-        self.platform = platform
-
-    def init_workspace_steps(self):
-        """Returns a list of initial environment setup steps"""
-        return [
-            InstallShellJS(),
-            RMCommand(path="~/.cordova/" + self.platform, workdir='build', haltOnFailure=False, description='Remove cache'),
-            RMCommand(path="*", workdir='build', haltOnFailure=False, description='Clean workdir'),
-            ShellCommand(command=["git", "clone", "--depth", "1", "-b", CONFIG.branches['TESTMASTER'], CONFIG.repos['TESTMASTER'], "medic"], workdir='build', haltOnFailure=True, description='Get Medic'),
-            # --production switch is used to speed up installation + fruitstrap dev dependency is not supported on Windows
-            NPMInstall(["--production"], workdir='build/medic', haltOnFailure=True, description='Install Medic'),
-            FileDownload(mastersrc=FP+"cordova-config.json", slavedest="medic/config.json", haltOnFailure=True),
-            FileDownload(mastersrc=FP+"cordova-repos.json", slavedest="medic/repos.json", haltOnFailure=True),
-            ShellCommand(command=["git", "clone", "--depth", "1", CONFIG.repos['COHO']], workdir='build', haltOnFailure=True, description='Get COHO'),
-            NPMInstall(["--production"], workdir='build/cordova-coho', haltOnFailure=True, description='Install COHO'),
-        ]
-
-    def repos_clone_steps(self):
-        """Returns a list of steps for cloning necessary repos"""
-        platform = self.platform
-        # required by coho tools to correctly resolve repo location
-        if platform == "blackberry10":
-            platform = "blackberry"
-        return [
-            ShellCommand(command=["node", "medic/checkout.js", "--path=medic/repos.json", "--cat=CORDOVA-MSPEC", "--releasebranch=" + CONFIG.branch_release], workdir='build', haltOnFailure=True, description='Clone Mobilespec'),
-            ShellCommand(command=["node", "medic/checkout.js", "--path=medic/repos.json", "--cat=CORDOVA-PLUGIN", "--releasebranch=" + CONFIG.branch_release], workdir='build', haltOnFailure=True, description='Clone Plugins'),
-            ShellCommand(command=["node", "medic/checkout.js", "--path=medic/repos.json", "--cat=CORDOVA-" + platform, "--releasebranch=" + CONFIG.branch_release], workdir='build', haltOnFailure=True, description='Clone Platform'),
-            ShellCommand(command=["node", "medic/checkout.js", "--path=medic/repos.json", "--cat=CORDOVA-JS", "--releasebranch=" + CONFIG.branch_release], workdir='build', haltOnFailure=True, description='Clone JS'),
-        ]
-
-    def cli_steps(self):
-        """Returns a list of steps for CLI setup"""
-        return [
-            ShellCommand(command=["git", "clone", "-b", CONFIG.branches['CLI'], CONFIG.repos['CLI'], "cordova-cli"], workdir='build', haltOnFailure=True, description='Clone CLI'),
-            ShellCommand(command=["git", "clone", "--depth", "1", "-b", CONFIG.branches['CORDOVA-LIB'], CONFIG.repos['CORDOVA-LIB'], "cordova-lib"], workdir='build', haltOnFailure=True, description='Clone cordova-lib'),
-            NPMInstall(["--production"], workdir='build/cordova-lib/cordova-lib', haltOnFailure=True, description='Install cordova-lib'),
-            ShellCommand(command=["rm", "-f", "npm-shrinkwrap.json"], workdir='build/cordova-cli', haltOnFailure=False, description='Remove CLI SW'),
-            NPMInstall(workdir='build/cordova-cli', haltOnFailure=True, description='Install CLI'),
-            ShellCommand(command=["npm", "test"], workdir='build/cordova-cli', haltOnFailure=True, description='Test CLI'),
-            NPMInstall(workdir='build/cordova-js', haltOnFailure=True, description='Install JS'),
-        ]
-
-    def plugman_steps(self):
-        """
-        Returns a list of steps for CLI setup
-        Should not be used in common case, only for common slave tests
-        """
-        return [
-            ShellCommand(command=["rm", "-rf", "cordova-*"], workdir='build', haltOnFailure=False, description='Cordova Clean'),
-            ShellCommand(command=["git", "clone", CONFIG.repos['PLUGMAN'], "cordova-plugman"], workdir='build', haltOnFailure=True, description='Get Plugman'),
-            NPMInstall(workdir='build/cordova-plugman', haltOnFailure=True, description='Install Plugman'),
-            ShellCommand(command=["npm", "test"], workdir='build/cordova-plugman', haltOnFailure=True, description='Test Plugman'),
-        ]
-
-    def prepare_mobilespec_steps(self):
-        """Returns a list of steps for mobilespec app setup"""
-        platform = self.platform
-        # required by coho tools to correctly resolve repo location
-        if platform == "blackberry10":
-            platform = "blackberry"
-        return [
-            NPMInstall(workdir='build/cordova-mobile-spec/createmobilespec', haltOnFailure=True, description='Install createmobilespec'),
-            ShellCommand(command=["cordova-coho/coho", "npm-link"], workdir='build', haltOnFailure=True, description='COHO npm-link'),
-            # add --skiplink for createmobilespec since
-            # it requires cordova-plugman repo to be cloned
-            # Re-directing node output to a file is a workaround for a node.js bug
-            # on windows where a piped stream does not get flushed when process.exit is called.
-            # https://github.com/joyent/node/issues/3584
-            ShellCommand(command="node cordova-mobile-spec/createmobilespec/createmobilespec.js --" + platform + " mobilespec --debug --skiplink >createmobilespecOut.txt 2>&1",
-                workdir='build', haltOnFailure=True, description='Run createmobilespec', logfiles = {"log" : "createmobilespecOut.txt"}),
-            ShellCommand(command=["node", "medic/updateconfig.js", "--" + self.platform], workdir='build', haltOnFailure=True, description='Update config')
-        ]
-
-    def deploy_steps(self):
-        """
-        Returns a list of steps for deploying
-        mobilespec application to test device
-        """
-        return [ShellCommand(command=["node", "medic/build_" + self.platform + ".js"], workdir='build', timeout=CONFIG.build_timeout, description='Run tests', name='Run tests')]
-
-    def build_platform_step(self):
-        """Returns a list of steps for building mobilespec application"""
-        return [ShellCommand(command=["../cordova-cli/bin/cordova", "build", self.platform], workdir='build/mobilespec', timeout=CONFIG.build_timeout, description='Build', name='Build')]
-
-    def get_all_steps(self):
-        """Returns a list of all steps current platform"""
-        steps = []
-        steps.extend(self.init_workspace_steps())
-        steps.extend(self.repos_clone_steps())
-        steps.extend(self.cli_steps())
-        steps.extend(self.prepare_mobilespec_steps())
-        steps.extend(self.deploy_steps())
-        return steps
-
-    def get_default_factory(self):
-        """Creates and returns a default factory for platform"""
-        factory = BuildFactory()
-        factory.addSteps(self.get_all_steps())
-        return factory
-
-class PlatformTestIOS(PlatformTestBase):
-    def __init__(self):
-        super(PlatformTestIOS, self).__init__('ios')
-
-class PlatformTestAndroid(PlatformTestBase):
-    def __init__(self):
-        super(PlatformTestAndroid, self).__init__('android')
-
-class PlatformTestWP8(PlatformTestBase):
-    def __init__(self):
-        super(PlatformTestWP8, self).__init__('wp8')
-
-    def repos_clone_steps(self):
-        steps = super(PlatformTestWP8, self).repos_clone_steps()
-        # pach cordova-wp8 template to prevent app to lock the screen.
-        # In other case we won't be able to re-install the app next time.
-        steps.extend([ShellCommand(command=["node", "medic\src\utils\patch_wp8_template.js"], workdir='build', haltOnFailure=True, description='Patch WP8 template')])
-        return steps
-
-class PlatformTestWindows(PlatformTestBase):
-
-    def __init__(self):
-        super(PlatformTestWindows, self).__init__('windows')
-
-    def deploy_steps(self):
-        return [
-            ShellCommand(command=["node", "medic/build_" + self.platform + ".js", "--store80"],
-                         workdir='build', timeout=CONFIG.build_timeout,
-                         description='Run tests (Windows 8.0)',
-                         name='Run tests (Windows 8.0)'),
-            ShellCommand(command=["node", "medic/build_" + self.platform + ".js", "--store"],
-                         workdir='build', timeout=CONFIG.build_timeout,
-                         description='Run tests (Windows 8.1)',
-                         name='Run tests (Windows 8.1)'),
-            ShellCommand(command=["node", "medic/build_" + self.platform + ".js", "--phone"],
-                         workdir='build', timeout=CONFIG.build_timeout,
-                         description='Run tests (Phone 8.1)',
-                         name='Run tests (Phone 8.1)'),
-        ]
-
-class PlatformTestBlackberry(PlatformTestBase):
-
-    def __init__(self):
-        super(PlatformTestBlackberry, self).__init__('blackberry10')
-
-    def prepare_mobilespec_steps(self):
-        steps = super(PlatformTestBlackberry, self).prepare_mobilespec_steps()
-        steps.extend([ShellCommand(command=["node", "../cordova-cli/bin/cordova", "plugin", "rm", "org.apache.cordova.core.medic"], workdir='build/mobilespec', haltOnFailure=True, description='Medic plugin rm')])
-        return steps
-
-    def deploy_steps(self):
-        steps = [ShellCommand(command=["cp", "platforms/blackberry10/www/config.xml", "./config.xml"], workdir='build/mobilespec', haltOnFailure=True, description='Plugin add')]
-        steps.extend(super(PlatformTestBlackberry, self).deploy_steps())
-        return steps
-
-if CONFIG.has_platform("ios"):
-    c['builders'].append(BuilderConfig(name="cordova-ios", slavenames=["cordova-ios-slave"], factory=PlatformTestIOS().get_default_factory()))
-
-if CONFIG.has_platform("android"):
-    c['builders'].append(BuilderConfig(name="cordova-android", slavenames=["cordova-android-slave"], factory=PlatformTestAndroid().get_default_factory()))
-    c['builders'].append(BuilderConfig(name="cordova-android-win", slavenames=["cordova-windows-slave"], factory=PlatformTestAndroid().get_default_factory()))
-
-if CONFIG.has_platform("wp8"):
-    c['builders'].append(BuilderConfig(name="cordova-wp8", slavenames=["cordova-windows-slave"], factory=PlatformTestWP8().get_default_factory()))
-    c['builders'].append(BuilderConfig(name="cordova-wp8-vs2012-win8", slavenames=["cordova-win8-slave"], factory=PlatformTestWP8().get_default_factory()))
-
-if CONFIG.has_platform("windows"):
-    c['builders'].append(BuilderConfig(name="cordova-windows", slavenames=["cordova-windows-slave"], factory=PlatformTestWindows().get_default_factory()))
-    c['builders'].append(BuilderConfig(name="cordova-windows8-vs2012-win8", slavenames=["cordova-win8-slave"], factory=PlatformTestWindows().get_default_factory()))
-
-if CONFIG.has_platform("blackberry"):
-    c['builders'].append(BuilderConfig(name="cordova-blackberry", slavenames=["cordova-blackberry-slave"], factory=PlatformTestBlackberry().get_default_factory()))
-
-if CONFIG.has_platform("chrome"):
-    factory_chrome_desktop = BuildFactory()
-    factory_chrome_desktop.addStep(ShellCommand(command=["rm", "-rf", "medic"], workdir='build', haltOnFailure=False, description='Medic Clean', descriptionDone='Medic Clean'))
-    factory_chrome_desktop.addStep(ShellCommand(command=["git", "clone", "-b", CONFIG.branches['TESTMASTER'], CONFIG.repos['TESTMASTER'], "medic"], workdir='build', haltOnFailure=True, description='Get Medic', descriptionDone='Get Medic'))
-    # --production switch is used to speed up installation + fruitstrap dev dependency is not supported on Windows
-    factory_chrome_desktop.addStep(NPMInstall(["--production"], workdir='build/medic', haltOnFailure=True, description='Install Medic', descriptionDone='Install Medic'))
-    factory_chrome_desktop.addStep(ShellCommand(command=["rm", "-rf", "mobile-chrome-apps"], workdir='build', haltOnFailure=True, description='Clean Chromespec', descriptionDone='Clean Chromespec'))
-    factory_chrome_desktop.addStep(ShellCommand(command=["git", "clone", CONFIG.repos['CCA']], workdir='build', haltOnFailure=True, description='Fetch Chromespec', descriptionDone='Fetch Chromespec'))
-    factory_chrome_desktop.addStep(NPMInstall(workdir='build/medic/runner', haltOnFailure=True, description='Install Runner', descriptionDone='Install Runner'))
-    factory_chrome_desktop.addStep(ShellCommand(command=["node", "medic/runner/testrunner.js", "--cmd=medic/runner/runchrome.sh", "--path=mobile-chrome-apps/chrome-cordova/chrome-apps-api-tests", "--args=mobile-chrome-apps/chrome-cordova/chrome-apps-api-tests"], workdir='build', haltOnFailure=True, description='Run Chrome', descriptionDone='Run Chrome'))
-    c['builders'].append(BuilderConfig(name="cordova-zchrome-desktop", slavenames=["cordova-common-slave"], factory=factory_chrome_desktop))
-
-    factory_chrome_mobile = BuildFactory()
-    factory_chrome_mobile.addStep(ShellCommand(command=["rm", "-rf", "medic"], workdir='build', haltOnFailure=False, description='Medic Clean', descriptionDone='Medic Clean'))
-    factory_chrome_mobile.addStep(ShellCommand(command=["git", "clone", "-b", CONFIG.branches['TESTMASTER'], CONFIG.repos['TESTMASTER'], "medic"], workdir='build', haltOnFailure=True, description='Get Medic', descriptionDone='Get Medic'))
-    # --production switch is used to speed up installation + fruitstrap dev dependency is not supported on Windows
-    factory_chrome_mobile.addStep(NPMInstall(["--production"], workdir='build/medic', haltOnFailure=True, description='Install Medic', descriptionDone='Install Medic'))
-    factory_chrome_mobile.addStep(NPMInstall(workdir='build/medic/runner', haltOnFailure=True, description='Install Runner', descriptionDone='Install Runner'))
-
-    factory_chrome_mobile.addStep(ShellCommand(command=["rm", "-rf", "mobile-chrome-apps"], workdir='build', haltOnFailure=True, description='Clean cca', descriptionDone='Clean cca'))
-    factory_chrome_mobile.addStep(ShellCommand(command=["git", "clone", "--recurse-submodules", CONFIG.repos['CCA']], workdir='build', haltOnFailure=True, description='Fetch cca', descriptionDone='Fetch cca'))
-    factory_chrome_mobile.addStep(NPMInstall(workdir='build/mobile-chrome-apps', haltOnFailure=True, description='Install cca', descriptionDone='Install cca'))
-    factory_chrome_mobile.addStep(ShellCommand(command=["rm", "-rf", "ccatest"], workdir='build', haltOnFailure=True, description='Clean ccatest', descriptionDone='Clean ccatest'))
-    factory_chrome_mobile.addStep(ShellCommand(command=["mobile-chrome-apps/src/cca.js", "create", "ccatest", "--copy-from", "mobile-chrome-apps/chrome-cordova/chrome-apps-api-tests"], workdir='build', haltOnFailure=True, description='cca create', descriptionDone='cca create'))
-
-    factory_chrome_mobile.addStep(ShellCommand(command=["node", "../medic/runner/testrunner.js", "--ip=192.168.1.122", "--port=6800", "--cmd=../medic/runner/runcca.sh", "--path=www", "--args=android"], workdir='build/ccatest', timeout=300, haltOnFailure=True, description='Run Mobile', descriptionDone='Run Mobile'))
-    c['builders'].append(BuilderConfig(name="cordova-zchrome-mobile", slavenames=["cordova-android-slave"], factory=factory_chrome_mobile))
-
-factory_cli = BuildFactory()
-factory_cli.addStep(InstallShellJS())
-factory_cli.addStep(RMCommand(path="cordova-*", workdir='build', haltOnFailure=False, description='Cordova Clean'))
-factory_cli.addSteps(PlatformTestBase().cli_steps())
-c['builders'].append(BuilderConfig(name="cordova-tools-cli", slavenames=["cordova-common-slave"], factory=factory_cli))
-
-# factory_plugman = BuildFactory()
-# factory_plugman.addSteps(PlatformTestBase().plugman_steps())
-# c['builders'].append(BuilderConfig(name="Tools_Plugman",slavenames=["cordova-common-slave"],factory=factory_plugman))
-
-#mail status
-
-# Store these here for now, not sure if we'll use them.
-
-# mail_to = []
-# for mt in json_config['mail']['to']:
-#     mail_to.append(str(mt))
-
-# mail_from = str(json_config['mail']['from'])
-# mail_pw = str(json_config['mail']['password'])
-# mail_serverURL = str(json_config['mail']['serverURL'])

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/install.js
----------------------------------------------------------------------
diff --git a/install.js b/install.js
deleted file mode 100644
index 73644a3..0000000
--- a/install.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var os = require('os'),
-    exec = require('child_process').exec;
-
-console.log('Installing platform specific dependencies...');
-console.log('Current platform is ' + os.platform());
-
-var installDependency = function(name) {
-    var cmd = 'npm install ' + name;
-    console.log (cmd);
-    exec(cmd, function (error, stdout, stderr) {
-        if (error) {
-          console.log('error: ' + error);
-          if (stderr) console.log('stderr: ' + stderr);
-          throw new Error('Dependency installation failed');
-        }
-        console.log('Successfully installed ' + name);
-  });
-};
-
-// the following dependencies must be installed only on non-Windows paltforms
-if (os.platform() !== "win32") {
-  installDependency('ios-deploy');
-  //installDependency('git://github.com/filmaj/fruitstrap.git');
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/master.cfg
----------------------------------------------------------------------
diff --git a/master.cfg b/master.cfg
deleted file mode 100644
index 2158970..0000000
--- a/master.cfg
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/usr/bin/python
-# -*- python -*-
-# ex: set syntax=python:
-
-# This is a sample buildmaster config file. It must be installed as
-# 'master.cfg' in your buildmaster's base directory (although the filename
-# can be changed with the --basedir option to 'mktap buildbot master').
-
-# It has one job: define a dictionary named BuildmasterConfig. This
-# dictionary has a variety of keys to control different aspects of the
-# buildmaster. They are documented in docs/config.xhtml .
-
-
-# This is the dictionary that the buildmaster pays attention to. We also use
-# a shorter alias to save typing.
-
-# Absolute or relative path to buildbot per-project configureations.
-# For local Buildbot installation it is convenient to use the same directory
-# for main master.cfg and projects .conf files
-FP = "./"
-
-c = BuildmasterConfig = {}
-
-####### BUILDSLAVES
-
-# import the passwds
-
-# import private
-# reload(private)
-
-# c['db_url'] = private.mysqlConnection
-
-# the 'slaves' list defines the set of allowable buildslaves. Each element is
-# a tuple of bot-name and bot-password. These correspond to values given to
-# the buildslave's mktap invocation.
-from buildbot.buildslave import BuildSlave
-
-c['slaves'] = [
-    BuildSlave("cordova-ios-slave", "pass", max_builds=1),
-    BuildSlave("cordova-android-slave", "pass", max_builds=1),
-    BuildSlave("cordova-windows-slave", "pass", max_builds=1),
-    BuildSlave("cordova-win8-slave", "pass", max_builds=1),
-    BuildSlave("cordova-blackberry-slave", "pass", max_builds=1),
-    BuildSlave("cordova-common-slave", "pass", max_builds=3),
-]
-
-# to limit to two concurrent builds on a slave, use
-#  c['slaves'] = [BuildSlave("bot1name", "bot1passwd", max_builds=2)]
-
-
-# 'slavePortnum' defines the TCP port to listen on. This must match the value
-# configured into the buildslaves (with their --master option)
-
-c['slavePortnum'] = 9889
-
-####### CHANGESOURCES
-
-# the 'change_source' setting tells the buildmaster how it should find out
-# about source code changes. Any class which implements IChangeSource can be
-# put here: there are several in buildbot/changes/*.py to choose from.
-
-from buildbot.changes.pb import PBChangeSource
-
-# c['change_source'] = PBChangeSource(user=private.pbcsUser,
-#                                     passwd=private.pbcsPwd)
-c['change_source'] = PBChangeSource(port=9999,
-                                    user='Cordova',
-                                    passwd='Cordova')
-
-# from buildbot.changes.svnpoller import SVNPoller)
-
-# For example, if you had CVSToys installed on your repository, and your
-# CVSROOT/freshcfg file had an entry like this:
-#pb = ConfigurationSet([
-#    (None, None, None, PBService(userpass=('foo', 'bar'), port=4519)),
-#    ])
-
-# then you could use the following buildmaster Change Source to subscribe to
-# the FreshCVS daemon and be notified on every commit:
-#
-#from buildbot.changes.freshcvs import FreshCVSSource
-#fc_source = FreshCVSSource("cvs.example.com", 4519, "foo", "bar")
-#c['change_source'] = fc_source
-
-# or, use a PBChangeSource, and then have your repository's commit script run
-# 'buildbot sendchange', or use contrib/svn_buildbot.py, or
-# contrib/arch_buildbot.py :
-#
-#from buildbot.changes.pb import PBChangeSource
-#c['change_source'] = PBChangeSource()
-
-####### GLOBAL EXCLUDES LIST - DO NOT TRIGGER BUILDS ON THESE FILES
-
-import re
-masterExcludes = ["STATUS" , "README" , "CHANGES" , "INSTALL"]
-
-def isGlobalImportant(change):
-    if not masterExcludes:
-        return True
-
-    for file in change.files:
-        triggerBuild = True
-        for pattern in masterExcludes:
-            match = re.match(pattern, file)
-            if match:
-                triggerBuild = False
-                break
-        if triggerBuild:
-            return True
-
-## NOTES
-#
-# add 'fileIsImportant = isGlobalImportant' to any project scheduler(s)
-# that you want to apply this global list to.
-#
-# Projects can individually extend this global default :
-#
-# Place something like this in the projects/$project.conf file:
-#
-# $projectExcludes = [masterExcludes , "exclude.me" , "andme.too" , "etc..."]
-#
-# def isProjectimportant
-#     if not $projectExcludes:
-#        return True
-#
-#   for file in change.files:
-#        triggerBuild = True
-#        for pattern in $projectExcludes:
-#            match = re.match(pattern, file)
-#            if match:
-#                triggerBuild = False
-#                break
-#        if triggerBuild:
-#            return True
-#
-##
-# Then add 'fileisImportant = is$Projectimportant' to the scheduler.
-# (replace $project in all above with actual project name!)
-##
-
-####### SCHEDULERS
-
-## configure the Schedulers
-from buildbot.scheduler import AnyBranchScheduler, Periodic, Scheduler, Nightly, Dependent
-from buildbot.schedulers.basic  import SingleBranchScheduler
-from buildbot.changes import filter
-
-c['schedulers'] = []
-
-# append project schedulers in projects/$project.conf
-
-####### BUILDERS
-
-# the 'builders' list defines the Builders. Each one is configured with a
-# dictionary, using the following keys:
-#  name (required): the name used to describe this bilder
-#  slavename (required): which slave to use, must appear in c['bots']
-#  builddir (required): which subdirectory to run the builder in
-#  factory (required): a BuildFactory to define how the build is run
-#  periodicBuildTime (optional): if set, force a build every N seconds
-
-# buildbot/process/factory.py provides several BuildFactory classes you can
-# start with, which implement build processes for common targets (GNU
-# autoconf projects, CPAN perl modules, etc). The factory.BuildFactory is the
-# base class, and is configured with a series of BuildSteps. When the build
-# is run, the appropriate buildslave is told to execute each Step in turn.
-
-# the first BuildStep is typically responsible for obtaining a copy of the
-# sources. There are source-obtaining Steps in buildbot/steps/source.py for
-# CVS, SVN, and others.
-
-# cvsroot = ":pserver:anonymous@cvs.sourceforge.net:/cvsroot/buildbot"
-# cvsmodule = "buildbot"
-
-from buildbot.process.properties import Interpolate
-from buildbot.process import factory
-from buildbot.steps.source import Git
-from buildbot.steps.source.git import Git
-from buildbot.steps.source import SVN
-from buildbot.steps.source.svn import SVN
-from buildbot.steps.shell import Compile
-from buildbot.steps.python_twisted import Trial
-
-# append project builders in projects/$project.conf
-
-c['builders'] = []
-
-
-####### STATUS TARGETS
-
-# 'status' is a list of Status Targets. The results of each build will be
-# pushed to these targets. buildbot/status/*.py has a variety to choose from,
-# including web pages, email senders, and IRC bots.
-
-import json
-with open(FP + "cordova-config.json") as f:
-   json_config = json.load(f)
-
-c['status'] = []
-
-from buildbot.status import html
-from buildbot.status.web import authz, auth
-from buildbot.status.mail import MailNotifier
-
-# change any of these to True to enable; see the manual for more options
-authz_cfg = authz.Authz(auth=auth.BasicAuth([("Cordova", "Cordova")]),
-                        gracefulShutdown=False,
-                        forceBuild=True,  # 'auth', # use this to test your slave once it is set up
-                        forceAllBuilds=False,
-                        pingBuilder=False,
-                        stopBuild='auth',
-                        stopAllBuilds=False,
-                        cancelPendingBuild='auth',
-                        )
-
-mail_from = str(json_config['mail']['from'])
-mail_to = []
-for mt in json_config['mail']['to']:
-    mail_to.append(str(mt))
-
-mail_pw = str(json_config['mail']['password'])
-
-mn1 = MailNotifier(fromaddr=mail_from,
-                   sendToInterestedUsers=False,
-                   mode=('change',),
-                   extraRecipients=mail_to,
-                   relayhost='smtp.gmail.com',
-                   smtpPort=587,
-                   useTls=True,
-                   smtpUser=mail_from,
-                   smtpPassword=mail_pw,
-                   )
-
-c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
-c['status'].append(mn1)
-
-# Include any global imports here that more than one project needs.
-
-from buildbot.steps.master import MasterShellCommand
-from buildbot.steps.transfer import FileUpload
-from buildbot.steps.transfer import FileDownload
-from buildbot.steps.transfer import DirectoryUpload
-from buildbot.steps.shell import ShellCommand, SetProperty
-from buildbot.steps.shell import Configure
-from buildbot.steps.shell import Test
-from buildbot.steps.python import PyFlakes
-from buildbot.process.buildstep import BuildStep
-from buildbot.process.properties import WithProperties
-from buildbot import locks
-
-# import the rat report fileupload class
-
-# from rat_report_upload import rat_report_upload
-
-# Ensure that projects include is below all definition imports.
-
-execfile(FP + "projects.conf", globals(), locals())
-
-# Data Lifetime - how long to keep old build logs and status around.
-
-c['changeHorizon'] = 200
-c['buildHorizon'] = 100
-c['eventHorizon'] = 50
-c['logHorizon'] = 40
-c['buildCacheSize'] = 50 # Not sure about value of this one, should be ok though.
-c['changeCacheSize'] = 10000
-
-
-####### DEBUGGING OPTIONS
-
-# if you set 'debugPassword', then you can connect to the buildmaster with
-# the diagnostic tool in contrib/debugclient.py . From this tool, you can
-# manually force builds and inject changes, which may be useful for testing
-# your buildmaster without actually commiting changes to your repository (or
-# before you have a functioning 'sources' set up). The debug tool uses the
-# same port number as the slaves do: 'slavePortnum'.
-
-#c['debugPassword'] = "debugpassword"
-
-# if you set 'manhole', you can ssh into the buildmaster and get an
-# interactive python shell, which may be useful for debugging buildbot
-# internals. It is probably only useful for buildbot developers. You can also
-# use an authorized_keys file, or plain telnet.
-#from buildbot import manhole
-#c['manhole'] = manhole.PasswordManhole("tcp:9999:interface=127.0.0.1",
-#                                       "admin", "password")
-
-
-####### PROJECT IDENTITY
-
-# the 'projectName' string will be used to describe the project that this
-# buildbot is working on. For example, it is used as the title of the
-# waterfall HTML page. The 'projectURL' string will be used to provide a link
-# from buildbot HTML pages to your project's home page.
-
-c['title'] = "Cordova Testing"
-c['titleURL'] = "http://cordova.apache.org"
-
-# the 'buildbotURL' string should point to the location where the buildbot's
-# internal web server (usually the html.Waterfall page) is visible. This
-# typically uses the port number set in the Waterfall 'status' entry, but
-# with an externally-visible host name which the buildbot cannot figure out
-# without some help.
-
-mail_serverURL = str(json_config['mail']['serverURL'])
-c['buildbotURL'] = mail_serverURL

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 2b23e0d..dff194b 100644
--- a/package.json
+++ b/package.json
@@ -3,30 +3,16 @@
   "version": "0.2.3",
   "description": "continuous integration setup for Apache Cordova",
   "author": "Fil Maj <ma...@gmail.com> (http://filmaj.ca)",
-  "main": "dashboard.js",
-  "scripts": {
-    "start": "node dashboard.js"
-  },
   "dependencies": {
-    "shelljs": "0.1.2",
-    "request": "2.12.0",
+    "commander": "^2.5.0",
     "follow": "0.8.0",
-    "ncallbacks": "1.0.0",
+    "glob":"3.2.6",
     "mime": "1.2.9",
+    "ncallbacks": "1.0.0",
     "optimist": "0.3.5",
-    "glob":"3.2.6",
-    "q":"0.8.6"
-  },
-  "devDependencies": {
-    "elementtree": "0.1.4",
-    "readdirp": "0.2.1",
-    "forever": "0.10.0",
-    "semver": "1.1.0",
-    "jasmine-node": ">=1.0.0",
-    "memwatch": ""
-  },
-  "scripts": {
-    "install": "node install.js"
+    "q":"0.8.6",
+    "request": "2.12.0",
+    "shelljs": "^0.3.0"
   },
   "subdomain": "cordova.medic",
   "engines": {

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/projects.conf
----------------------------------------------------------------------
diff --git a/projects.conf b/projects.conf
deleted file mode 100644
index 926bd74..0000000
--- a/projects.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/python
-
-def one_file(f, symbols_to_keep = set()):
-    globals_copy = globals().copy()
-    execfile(FP + f, globals_copy, globals_copy)
-    for symbol in symbols_to_keep:
-        if symbol in globals_copy:
-            globals().update({symbol: globals_copy[symbol]})
-
-one_file('cordova.conf')

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/src/build/makers/windows.js
----------------------------------------------------------------------
diff --git a/src/build/makers/windows.js b/src/build/makers/windows.js
index 9c9bc22..27d3a4b 100644
--- a/src/build/makers/windows.js
+++ b/src/build/makers/windows.js
@@ -67,7 +67,7 @@ module.exports = function (output, sha, test_timeout, build_target) {
         // patch WindowsStoreAppUtils script to allow app run w/out active desktop/remote session
         if (build_target === "win") {
             log('Patching WindowsStoreAppUtils to allow app to be run in automated mode');
-            shell.cp('-f', path.join(output, '..', '..', '..', 'medic', 'src', 'utils', 'EnableDebuggingForPackage.ps1'),
+            shell.cp('-f', path.join(output, '..', '..', '..', 'cordova-medic', 'src', 'utils', 'EnableDebuggingForPackage.ps1'),
                      path.join(output, 'cordova', 'lib'));
             shell.sed('-i', /^\s*\$appActivator .*$/gim,
                       '$&\n' +

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/src/couchdb/interface.js
----------------------------------------------------------------------
diff --git a/src/couchdb/interface.js b/src/couchdb/interface.js
index cb2960e..ca13ecb 100644
--- a/src/couchdb/interface.js
+++ b/src/couchdb/interface.js
@@ -18,7 +18,7 @@ var request = require('request'),
     follow = require('follow'),
     config = require('../../config');
 
-var couch = config.couchdb.host;
+var couch = config.couchdb.uri;
 
 if (couch.length < 4 || couch.indexOf('http') == -1) {
     throw ('Pretty sure your couch config URL is wrong. Here it is wtf man: ' + couch);
@@ -48,7 +48,7 @@ db.prototype = {
     },
     query_view:function(design, view, callback) {
         // Queries a view.
-        
+
         var db = this;
         var url = this.db_url + '/_design/' + design + '/_view/' + view;
         request.get(url, function(error, response, body) {
@@ -61,10 +61,10 @@ db.prototype = {
         });
     },
     clobber:function(id, document, callback) {
-        // Overwrites a document 
+        // Overwrites a document
         var db = this;
         var url = this.db_url + '/' + id;
-        
+
         request.put({
             url:url,
             json:document
@@ -111,7 +111,7 @@ db.prototype = {
                     }
                 });
             } else callback(true, response.statusCode);
-            
+
         });
     },
     follow:function(callback) {

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/src/utils/createMedicJson.js
----------------------------------------------------------------------
diff --git a/src/utils/createMedicJson.js b/src/utils/createMedicJson.js
index 4098403..a0e5210 100644
--- a/src/utils/createMedicJson.js
+++ b/src/utils/createMedicJson.js
@@ -3,6 +3,6 @@ var fs   = require('fs'),
 
 module.exports = function createMedicJson(output, sha, cfg) {
     console.log('Writing medic.json to ' + output);
-    var medic_config = '{"sha":"' + sha + '","couchdb":"' + cfg.couchdb.host + '","couchdbext":"' + cfg.couchdb.exthost + '"}';
+    var medic_config = '{"sha":"' + sha + '","couchdb":"' + cfg.couchdb.uri + '","couchdbext":"' + cfg.couchdb.exthost + '"}';
     fs.writeFileSync(path.join(output, 'medic.json'), medic_config, 'utf-8');
 };

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/updateconfig.js
----------------------------------------------------------------------
diff --git a/updateconfig.js b/updateconfig.js
index b980bf6..c9125e8 100644
--- a/updateconfig.js
+++ b/updateconfig.js
@@ -8,7 +8,7 @@ var fs     = require('fs'),
 
 //get parameters, that should been written to config.xml
 var entry_point = config.app.entry,
-    couch_host = config.couchdb.host;
+    couch_host = config.couchdb.uri;
 
 var configFile = path.join('mobilespec', 'config.xml'),
     cspFile = path.join('mobilespec', 'www', 'csp-incl.js');


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[2/2] cordova-medic git commit: [CB-8698] Rewriting cordova.conf: factoring out common build code, parametrising builds with Buildbot Properties, and adding extra steps for cleanup. Removing unused plugin code. Cleaning up documentation. Cleaning up file

Posted by an...@apache.org.
[CB-8698] Rewriting cordova.conf: factoring out common build code, parametrising builds with Buildbot Properties, and adding extra steps for cleanup. Removing unused plugin code. Cleaning up documentation. Cleaning up file layout. Adding config extensibility.


Project: http://git-wip-us.apache.org/repos/asf/cordova-medic/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-medic/commit/0e37682d
Tree: http://git-wip-us.apache.org/repos/asf/cordova-medic/tree/0e37682d
Diff: http://git-wip-us.apache.org/repos/asf/cordova-medic/diff/0e37682d

Branch: refs/heads/master
Commit: 0e37682dc95cbff014bef348aa53f81b2b642479
Parents: eb06049
Author: Dmitry Blotsky <dm...@gmail.com>
Authored: Fri Mar 6 21:35:18 2015 -0800
Committer: Dmitry Blotsky <db...@microsoft.com>
Committed: Wed Mar 18 11:02:29 2015 -0700

----------------------------------------------------------------------
 .gitignore                                     |   9 +-
 README.md                                      | 341 ++++++++-------
 SLAVES.md                                      |  39 ++
 bin/checkout.js                                |  53 +++
 build_android.js                               |   2 +-
 build_blackberry10.js                          |   4 +-
 build_ios.js                                   |   2 +-
 build_windows.js                               |   6 +-
 build_wp8.js                                   |   4 +-
 buildbot-conf/cordova-config.json.sample       |  42 ++
 buildbot-conf/cordova-internal.conf            |  92 ++++
 buildbot-conf/cordova-repos.json               | 457 ++++++++++++++++++++
 buildbot-conf/cordova.conf                     | 331 ++++++++++++++
 buildbot-conf/master.cfg                       | 349 +++++++++++++++
 buildbot-conf/private.py.sample                |  11 +
 buildbot-conf/projects.conf                    |  11 +
 checkout.js                                    |  39 --
 cordova-config.json.sample                     |  53 ---
 cordova-plugin-medic-newstyle-tests/plugin.xml |  14 -
 cordova-plugin-medic/LICENSE                   | 202 ---------
 cordova-plugin-medic/README.md                 |   7 -
 cordova-plugin-medic/docs/medic.md             |  61 ---
 cordova-plugin-medic/docs/medic.sha.md         | 109 -----
 cordova-plugin-medic/plugin.xml                |  41 --
 cordova-plugin-medic/www/jasmine-jsreporter.js | 214 ---------
 cordova-plugin-medic/www/medic.js              |  59 ---
 cordova-repos.json                             | 295 -------------
 cordova.conf                                   | 347 ---------------
 install.js                                     |  24 -
 master.cfg                                     | 306 -------------
 package.json                                   |  26 +-
 projects.conf                                  |  10 -
 src/build/makers/windows.js                    |   2 +-
 src/couchdb/interface.js                       |  10 +-
 src/utils/createMedicJson.js                   |   2 +-
 updateconfig.js                                |   2 +-
 36 files changed, 1585 insertions(+), 1991 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 45cf75b..ed0d1eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,3 @@
-temp
 node_modules
-lib
-posts
-.DS_STORE
-/master/
-/slave_windows/
-Makefile*
+cordova-config.json
+private.py

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 6dd3482..2f869d0 100644
--- a/README.md
+++ b/README.md
@@ -1,166 +1,175 @@
-Medic using BuildBot
-=======
-
-> Tools for Automated Testing of Cordova
-
-# Supported Cordova Platforms
-- On Mac
-  - iOS
-  - Android
-- On Windows
-  - Android
-  - Windows Phone 8
-  - Windows Universal Apps (Windows 8.0, Windows 8.1, Windows Phone 8.1)
-
-#Installation
-##Select target OS
-Install on a Mac or Windows depending on target test platform(s)
-
-##Install prerequisites
-medic requires grunt-cli npm package to be installed globally. You can install it by typing `npm install -g grunt-cli` in console.
-
-**Note:** this requires admin privileges on Mac OS.
-
-## Setup CouchDB
-1. Get and install [couchdb](http://couchdb.apache.org/) 1.3.1 
-2. Edit the local.ini to accept request from external host
-
-  `bind_address = 0.0.0.0`
-  
-  Also you may need to add appropriate firewall rules for port 5984.
-  
-  To test access to CouchDB portal try to open \<CouchDB host IP\>:5984 from browser
-
-  **Note:** don't use local IPs (e.g. localhost, 127.0.0.1) for CouchDB as it will produce connection problems for devices and emulators (they will resolve them according to their context)
-
-3. Create the following three databases (functionality for creating of them should be available on \<CouchDB host IP\>:5984/_utils/):
-  - build_errors
-  - mobilespec_results
-  - test_details
-
-4. Add new document to `mobilespec_results` table with the following contents:
-  ```
-  {
-      "_id": "_design/results",
-      "views": {
-          "sha": {
-              "map": "function(doc){emit(doc.sha, {\"total\":doc.mobilespec.total,\"passed\":(doc.mobilespec.total - doc.mobilespec.failed),\"version\":doc.version,\"model\":doc.model,\"fails\":doc.mobilespec.failures});}"
-          }
-      }
-  }
-  ```
-
-5. Set up a wireless access point so that the devices being tested can access the couchDB
-
-## Install BuildBot
-1. Get [buildbot](http://buildbot.net) version 0.8.8
-2. Install buildbot using the buildbot install/tutorial instructions
-    http://docs.buildbot.net/latest/manual/installation.html
-
-    http://trac.buildbot.net/wiki/RunningBuildbotOnWindows
-3. Get the sample running
-4. Stop the slave and the master
-5. Add slaves:
-  - On Mac
-    - buildslave create-slave slave_ios localhost:9889 cordova-ios-slave pass
-    - buildslave create-slave slave_android localhost:9889 cordova-android-slave pass
-  - On Windows
-    - buildslave create-slave slave_windows localhost:9889 cordova-windows-slave pass
- 
-6. Copy the following files from the medic repository to buildbot master directory:
-  - master.cfg
-  - projects.conf
-  - cordova.conf
-  - cordova-repos.json
-  - cordova-config.json.sample
-
-  Then update cordova-config.json.sample with CouchDB host address, test platforms, ios keychain, current release build and _rename_ it to cordova-config.json
-  
-  **Note:** couchdb host must be specified via ip address due to windows platform restrictions.
-
-  **Note 2:** cordova-config.json and cordova-repos.json files should be placed near cordova.conf (for local Medic instance in most cases this means that they need to be placed in BuildBot master directory).
-
-#Running the System
-- start the master with ~buildbot start master
-- start the slaves with:
-  - On Mac
-    -  buildslave start slave_ios
-    -  buildslave start slave_android
-  - On Windows
-    - buildslave start slave_windows
-
-    **Note:**  on Windows slave instance must be run under administrator; git/bin folder must be added to PATH so that rm, cp, mkdir commands are available from the command prompt.
-    
-    **Note:**  if you are using Android emulator, please make sure that it has SD card size bigger than 0 (see [CB-8535](https://issues.apache.org/jira/browse/CB-8535)).
-- point your browser at http://localhost:8010/waterfall to see the buildbot state
-- point your browser to the couchDB http://\<CouchDB host IP\>:5984/_utils/index.html to look at detailed test results
-
-#Controlling
-- restart the master with buildbot restart master
-- stop the master with buildbot stop master
-- force a test by clicking on the test link at the top of the buildbot display and then 'force build'
-
-#Configuring
-- all changes for a local install should only require edits to cordova-config.json in the buildbot base directory
-- new platforms, test procedures, build steps, etc require edits to master.cfg, cordova.conf and cordova-repos.json which should still be global (all platforms)
-- whenever cordova-config.json, cordova-repos.json, cordova.conf or master.cfg changes, you need to restart the master (not slaves)
-
-#Overview
-Buildbot polls all the repositories every few minutes to look for changes. Whenever a change is detected, those changes trigger one or more build requests. 
-
-Buildbot consists of a master that defines all the tests, the repositories, triggers, etc.
-The actual tests are run by slaves that are controlled by the master. The buildbot master describes the steps to run for tests and which slaves those test should run on. 
-Slaves that run tests on devices can only run one test at a time.
-The common slave can run multiple tests at once.
-
-At the start of each test run, the collection of components (git repositories) and the checked out SHA for each is collected into a document and written to the couchDB in test_details. 
-The DB ref from this document is used as the SHA for the test and is what is recorded in mobilespec_results or build_errors
-
-The various test runners are configured to report a fail/pass by device and the buildbot display will report FAIL if any test on any device fails. 
-every command has a link to its output on the main display. When a mobile spec test completes, there is a link to the test result written to the output log.
-
-#Current Test Configuration
-- All slaves (Android, iOS, Windows) are configured to only run a single test at a time.
-- Tools (Coho, CLI, test system) always build from the master branch
-- Changes to tooling or the test scripts will trigger all tests.
-
-- Android tests:
-  - platform, mobilespec, js, and plugins from master branch (cordova-js is built and copied in)
-  - platform and mobilspec 3.0.x branch with the cordova-js embedded in the cordova-android repo, plugins from master
-  - There are additional builder (AndroidWin), which perform builds of mobilespec application for Android in Windows environment.
-
-- iOS tests:
-  - platform, mobilespec, js, and plugins from master branch (cordova-js is built and copied in)
-  - platform and mobilspec 3.0.x branch with the cordova-js embedded in the cordova-ios repo, plugins from master
-
-- Windows Phone8 tests:
-  - platform, mobilespec, js, and plugins from master branch (cordova-js is built and copied in).
-  - There are two separate builders, which performs builds in different environments (VS2012 + MSBuild 4.0 / VS2013 + MSBuild 12.0)
-
-- Windows Universal platform tests:
-  - platform, mobilespec, js, and plugins from master branch (cordova-js is built and copied in)
-  - Tests are executed on Local Machine, mobilespec app for --phone target is launched on emulator. Running mobilespec app on attached devices not supported yet.
-  - There are two separate builders, which performs builds in different environments (VS2012 + MSBuild 4.0 / VS2013 + MSBuild 12.0)
-
-The tests use COHO and CLI for as much as possible to ensure that the developer tool chain is working.
-
-#Configuration Files
-**master.cfg:** The main configuration file for buildbot. It is a python script and defines the triggers, builders and status display.
-It uses both cordova-config.json and cordova-repos.json to determine which platforms and versions to test.
-
-**projects.conf** Configuration script used to load per-project buildbot configurations.
-
-**cordova.conf** Configuration script that contains cordova project-specific buldbot configuration (Build steps, schedulers, build factories definitions, etc.)
-
-The two files above (_projects.conf_ and _cordova.conf_ are necessary to maintain compatibility with Apache Buildbot configuration files structure)
-
-**cordova-config.json:** Used by the buildbot master script and by some of the medic command-line tools. 
-It defines the platforms to test, the current release version, the couchdb url, and the ios keychain. 
-The release version specified here is used anywhere the keyword "RELEASE" is used in a test definition.
-
-**cordova-repos.json:** Contains the definitions for the tests (schedulers) and the various repositories in the project. 
-Tests define the components and branches that should trigger a test run. 
-This requires multiple triggers for each test path since a build might use tools from master, platforms from release and plugins from dev.
-
-For each repo there is a release branch (most recent supported release) and a current branch (tip-of-tree). 
-The branches are used by the python script in conjunction with the tests to set up the trggers.
+Cordova Medic
+=============
+
+# Description
+
+This repository contains Buildbot configuration and automation tools for setting up a continuous integration system for Apache Cordova. It currently supports builds on the following platforms:
+
+- iOS
+- Android (Windows and OS X)
+- Windows Universal Apps (Windows 8.0, Windows 8.1, Windows Phone 8.1)
+- Windows Phone 8
+
+# Prerequisites
+
+## CouchDB
+
+Medic depends on CouchDB for reporting results. The following steps document how to install a CouchDB server for development. If a CouchDB server already exists for use, feel free to skip to the Setting Up section.
+
+### Installation
+
+CouchDB can be installed from [this page][couchdb] as per the documentation provided there. Once CouchDB is installed, configure it to accept requests from external hosts by setting the following value in its `local.ini` file:
+
+    bind_address = 0.0.0.0
+
+Firewall rules for port 5984 (the default CouchDB port) may need to be added to allow access to the server. To test that it is configured correctly, open `http://[COUCHDB_HOST]:5984/_utils/` from a browser.
+
+### Setup
+
+Create the following databases:
+
+- build_errors
+- test_details
+- mobilespec_results
+
+They can be created by going to the CouchDB admin page (located at `http://[COUCHDB_HOST]:5984/_utils/`) and clicking the `Create Database ...` button.
+
+Next, add the following document to the `mobilespec_results` database:
+
+    {
+        "_id": "_design/results",
+        "views": {
+            "sha": {
+                "map": "function(doc){emit(doc.sha, {\"total\":doc.mobilespec.total,\"passed\":(doc.mobilespec.total - doc.mobilespec.failed),\"version\":doc.version,\"model\":doc.model,\"fails\":doc.mobilespec.failures});}"
+            }
+        }
+    }
+
+Lastly, make sure that devices and machines that will be using Medic have access to the Internet and to the CouchDB server that was just created.
+
+## Python
+
+Medic contains Python code and therefore requires Python. Install Python 2.7.x from [here][python]. *Do not install Python 3.x, because Medic does not run on it.* Make sure that the Python package manager, pip, is installed with Python. To verify that Python and pip are installed, run the following:
+
+    python --version
+    pip --version
+
+On Windows, the PyWin32 extensions are required, and they can be acquired [here][pywin32].
+
+## Buildbot
+
+Medic uses Buildbot for running builds and performing continuous integration. Buildbot has the concept of master and slave machines, and has different libraries for each. (More info about Buildbot concepts can be found [here][bbconcepts]). To install the Buildbot library for a master, run the following:
+
+    pip install buildbot
+
+For a machine that will run Buildbot slaves, install the Buildbot slave library by running the following:
+
+    pip install buildbot-slave
+
+## UNIX tools
+
+To run builds, Medic slaves use some standard Unix tools such as `cp`, `rm`, and `git`. To run them on Windows, install Git from [here][git] and make sure to select the option to make basic Unix tools bundled with Git available within `cmd`.
+
+## Cordova
+
+Any core depencencies of Cordova, like Node.js and NPM, are naturally dependencies of the slave machines that will run Cordova builds. Node.js and NPM can be obtained from [here][node].
+
+# Installation
+
+Medic contains configuration for a Buildbot installation to run Apache Cordova continuous integration. Buildbot uses the master-slave paradigm to orchestrate builds, and medic contains configuration for a Buildbot master and slaves, as well as a few extra files, all inside the `buildbot-conf` directory.
+
+The instructions provided below describe a simple development setup, not a full-blown production deployment, which is outside the scope of this document. More official documentation on Buildbot can be found [here][buildbot], and on running Buildbot on Windows can be found [here][buildbot_windows].
+
+Although a Buildbot master and slaves are separate tasks, they do not need to be run on different machines, and the following steps can either be performed on separate machines or the same one. Keep in mind however that a slave can only run builds that its machine's environment supports.
+
+All of the following steps assume that Buildbot's slaves and masters will be installed under `/home/buildbot`.
+
+## Master
+
+First, create a Buildbot master. The following steps are a summary of [these official steps][buildmaster], so please feel free to follow the official ones instead.
+
+Create a master directory at `/home/buildbot/master` by running:
+
+    buildbot create-master /home/buildbot/master
+
+Then, install the Medic master configuration by copying the following files into `/home/buildbot/master`, overwriting any files if prompted:
+
+- master.cfg
+- projects.conf
+- cordova.conf
+- cordova-internal.conf
+- cordova-repos.json
+- *cordova-config.json*<sup>[1]</sup>
+- *private.py*<sup>[1]</sup>
+
+<sup>[1]</sup> These two files do not exist in the repository and must be created for each installation of Medic. Create them from their respective `.sample` files.
+
+## Slaves
+
+Now, create slaves. Similarly to the above instructions, the following steps are a summary of [the official ones][buildslave], so please feel free to follow the official ones.
+
+On OS X:
+
+    buildslave create-slave /home/buildbot/osx http://[MASTER_HOST]:9889 cordova-ios-slave pass
+
+On Linux:
+
+    buildslave create-slave /home/buildbot/linux http://[MASTER_HOST]:9889 cordova-linux-slave pass
+
+On Windows 8 and Windows 8.1:
+
+    buildslave create-slave /home/buildbot/windows http://[MASTER_HOST]:9889 cordova-windows-slave pass
+
+No further steps are necessary to make a slave obey a Medic master. However, every slave needs to be configured appropriately for its platform. For platform-specific details on slave configuration, see [SLAVES.md](SLAVES.md).
+
+# Running
+
+To start the master, run:
+
+    buildbot start /home/buildbot/master
+
+To start a slave (e.g. for Windows), run:
+
+    buildslave start /home/buildbot/windows
+
+To view the master control panel, browse the URI: `http://[MASTER_HOST]/`.
+
+To stop either task, just replace `start` with `stop` in the above commands. **NOTE**: On Windows, the slave task blocks the console, and `Ctrl-C` will stop it. On all other platforms both master and slave run as daemons, and using the `stop` command will terminate them.
+
+To check logs for a master or a slave, look at the `twistd.log` file in its respective directory. Using the `tail` utility is very handy for this, like so:
+
+    tail -n 100 -f /home/buildbot/osx/twistd.log
+
+# Changing Configuration
+
+Buildbot has an unusual configuration mechanism (Python code) and as such requires a restart to reload it. The Buildbot documentation also describes a  `buildbot reconfig` command, but it does not work in all cases. More information is [here][reconfig].
+
+In general, when any of the files in the master directory are changed, a restart/reconfig is necessary. However, slaves do not need to be reconfigured or restarted when the master's configuration changes.
+
+# Configuration Layout
+
+**master.cfg**: The main configuration file for Buildbot. This file is made to be similar to the one used on the Apache Infrastructure Buildbot because Medic runs on there.
+
+**projects.conf**: This file is included because it also mirrors the Apache Infrastructure setup.
+
+**cordova.conf**: This file contains the actual Buildbot configuration that is unique to Apache Cordova.
+
+**cordova-internal.conf**: An extension of `cordova.conf` that is internal to a particular installation of Medic and does not make it into the Apache Infrastructure Buildbot.
+
+**cordova-repos.json:** List of Cordova repositories and their relevant information.
+
+**cordova-config.json**: Installation-specific file that defines miscellaneous parameters like CouchDB host and port, and email credentials. *Only a sample of this file is provided in the repo, with a `.sample` extension.*
+
+**private.py**: Python file containing sensitive configuration. *Only a sample of this file is provided in the repo, with a `.sample` extension.*
+
+[couchdb]:          http://couchdb.apache.org/
+[python]:           https://www.python.org/downloads/
+[pywin32]:          http://sourceforge.net/projects/pywin32/files/
+[buildbot]:         http://docs.buildbot.net/0.8.10/manual/installation.html
+[buildmaster]:      http://docs.buildbot.net/0.8.10/manual/installation.html#creating-a-buildmaster
+[buildslave]:       http://docs.buildbot.net/0.8.10/manual/installation.html#creating-a-buildslave
+[bbconcepts]:       http://docs.buildbot.net/0.8.10/manual/concepts.html
+[git]:              http://git-scm.com/download/win
+[node]:             http://nodejs.org/download/
+[buildbot_windows]: http://trac.buildbot.net/wiki/RunningBuildbotOnWindows
+[reconfig]:         http://docs.buildbot.net/0.8.10/manual/cfg-intro.html#reloading-the-config-file-reconfig

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/SLAVES.md
----------------------------------------------------------------------
diff --git a/SLAVES.md b/SLAVES.md
new file mode 100644
index 0000000..9a1e974
--- /dev/null
+++ b/SLAVES.md
@@ -0,0 +1,39 @@
+Cordova Medic Slaves
+====================
+
+# Introduction
+
+This document describes slave-specific setup for Cordova Medic for running builds on each platform.
+
+### iOS
+
+For iOS slaves, Xcode is required. It can be obtained from the Apple App Store, which requires an Apple ID. For deployment to physical devices, a valid Apple Developer license is also necessary.
+
+Two special NPM packages are also required for Medic builds on iOS: `ios-sim` and `ios-deploy`. You can install them by running the following command with root/Administrator privileges:
+
+    npm install -g ios-deploy ios-sim
+
+### Android
+
+For Android slaves, the Android SDK is required, and can be installed with Android Studio as described [here][android_full] or without Android Studio as described [here][android_cli]. Alternatively, if the slave is running Windows, all tools required for Cordova can be installed in bulk using the the VS [tools for Cordova][vs_cordova].
+
+Once the SDK is installed, Android tools can be installed by running:
+
+    android
+
+For emulation, at least one Android Virtual Device should be available, which can be created by running:
+
+    android avd
+
+**Note:** Due to an [existing issue][issue], configure the AVD such that it has an SD card with space greater than 0KB.
+
+### Windows 8 and Windows 8.1
+
+For Windows slaves, Visual Studio is required. For deployment to devices, a Windows Developer License is also required. To install a developer, run the following from PowerShell:
+
+    Show-WindowsDeveloperLicenseRegistration
+
+[android_full]: http://developer.android.com/sdk/installing/index.html?pkg=studio
+[android_cli]:  http://developer.android.com/sdk/installing/index.html?pkg=tools
+[vs_cordova]:   http://www.visualstudio.com/en-us/explore/cordova-vs.aspx
+[issue]:        https://issues.apache.org/jira/browse/CB-8535

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/bin/checkout.js
----------------------------------------------------------------------
diff --git a/bin/checkout.js b/bin/checkout.js
new file mode 100644
index 0000000..29c6e6f
--- /dev/null
+++ b/bin/checkout.js
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+
+// node dependencies
+var fs = require('fs');
+
+// external dependencies
+var shell = require('shelljs');
+
+// parse args
+var argv = require('optimist')
+    .usage('Usage: $0 --config {path} --exclude {name[,name[,...]]}')
+    .demand('config')
+    .argv;
+
+function cloneProject(projectName, projectsConfig) {
+
+    var project  = projectsConfig[projectName];
+    var codebase = project.codebases[project.codebase];
+    var command  = 'git clone ' + codebase.repo + ' --branch=' + codebase.branch + ' --depth 1'
+
+    shell.exec(command, {silent: false}, function (returnCode, output) {
+        if (returnCode !== 0) {
+            throw 'Command \'' + command + '\' failed with code ' + returnCode;
+        }
+    });
+}
+
+function main () {
+
+    // get args
+    var configFile    = argv.config;
+    var excludedNames = [];
+
+    if (argv.exclude) {
+        excludedNames = argv.exclude.split(',');
+    }
+
+    // shell config
+    shell.config.fatal  = true;
+    shell.config.silent = false;
+
+    // read in config
+    var projectsConfig = JSON.parse(fs.readFileSync(configFile, 'utf8'));
+
+    // clone all projects in the config
+    for (projectName in projectsConfig) {
+        if (excludedNames.indexOf(projectName) === (-1)) {
+            cloneProject(projectName, projectsConfig);
+        }
+    }
+}
+
+main();

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/build_android.js
----------------------------------------------------------------------
diff --git a/build_android.js b/build_android.js
index 71f9e80..40998ad 100644
--- a/build_android.js
+++ b/build_android.js
@@ -30,7 +30,7 @@ buildinfo('Android', BRANCH, function (error, sha) {
 
         android(output_location, sha, test_timeout)
             .then(function onSuccess() {
-                return testcheck(sha, config.couchdb.host);
+                return testcheck(sha, config.couchdb.uri);
             }, function onError(err) {
                 TEST_OK = false;
                 error_writer('android', sha, 'Android tests execution failed.', err);

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/build_blackberry10.js
----------------------------------------------------------------------
diff --git a/build_blackberry10.js b/build_blackberry10.js
index 8442adc..e089524 100644
--- a/build_blackberry10.js
+++ b/build_blackberry10.js
@@ -10,7 +10,7 @@ var testcheck = require('./testchecker');
 
 var TEST_DIR=process.cwd();
 var BRANCH='master';
-var TOOL_DIR=path.join(TEST_DIR,'medic');
+var TOOL_DIR=path.join(TEST_DIR,'cordova-medic');
 var MSPEC_DIR=path.join(TEST_DIR,'mobilespec');
 
 var TEST_OK=true;
@@ -23,7 +23,7 @@ buildinfo('BlackBerry', BRANCH, function (error, sha ) {
     if(error) {
         TEST_OK=false;
     } else {
-        blackberry10(output_location, sha, config.app.entry, config.couchdb.host, function(err){
+        blackberry10(output_location, sha, config.app.entry, config.couchdb.uri, function(err){
             if(err) {
                 console.log('BlackBerry test prepare failed');
                 TEST_OK=false;

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/build_ios.js
----------------------------------------------------------------------
diff --git a/build_ios.js b/build_ios.js
index 21ba58d..1e60751 100644
--- a/build_ios.js
+++ b/build_ios.js
@@ -27,7 +27,7 @@ buildinfo('ios', branch, function (error, sha) {
 
         ios(output_location, sha, test_timeout)
             .then(function () {
-                return testcheck(sha, config.couchdb.host);
+                return testcheck(sha, config.couchdb.uri);
             }, function (err) {
                 TEST_OK = false;
                 error_writer('ios', sha, 'iOS tests execution failed.', err);

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/build_windows.js
----------------------------------------------------------------------
diff --git a/build_windows.js b/build_windows.js
index bab3d69..9187ad9 100644
--- a/build_windows.js
+++ b/build_windows.js
@@ -12,7 +12,7 @@ var fs              = require('fs'),
 
 var TEST_DIR = process.cwd().replace(/\\/g, '\\\\'),
     BRANCH = 'master',
-    TOOL_DIR = path.join(TEST_DIR, 'medic'),
+    TOOL_DIR = path.join(TEST_DIR, 'cordova-medic'),
     MSPEC_DIR = path.join(TEST_DIR, 'mobilespec'),
     TEST_OK = true;
 
@@ -53,7 +53,7 @@ buildinfo('Windows', BRANCH, function (error, sha) {
         if (build_target === "store80") {
             //setTargetStoreVersion('8.0'); // this value is used by default
         } else if (build_target === "store") {
-            // store target configuration is specified via config.xml 
+            // store target configuration is specified via config.xml
             setTargetStoreVersion('8.1');
         }
 
@@ -62,7 +62,7 @@ buildinfo('Windows', BRANCH, function (error, sha) {
 
         windows(output_location, sha, test_timeout, build_target)
             .then(function onSuccess() {
-                return testcheck(sha, config.couchdb.host);
+                return testcheck(sha, config.couchdb.uri);
             }, function onError(err) {
                 TEST_OK = false;
                 error_writer('windows', sha, 'Windows tests execution failed.', err);

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/build_wp8.js
----------------------------------------------------------------------
diff --git a/build_wp8.js b/build_wp8.js
index 73934db..7bd5b69 100644
--- a/build_wp8.js
+++ b/build_wp8.js
@@ -11,7 +11,7 @@ var path            = require('path'),
 
 var TEST_DIR = process.cwd().replace(/\\/g, '\\\\'),
     BRANCH = 'master',
-    TOOL_DIR = path.join(TEST_DIR, 'medic'),
+    TOOL_DIR = path.join(TEST_DIR, 'cordova-medic'),
     MSPEC_DIR = path.join(TEST_DIR, 'mobilespec'),
     TEST_OK = true;
 
@@ -33,7 +33,7 @@ buildinfo('WP8', BRANCH, function (error, sha) {
 
         wp8(output_location, sha, config.wp8.target, test_timeout)
             .then(function onSuccess() {
-                return testcheck(sha, config.couchdb.host);
+                return testcheck(sha, config.couchdb.uri);
             }, function onError(err) {
                 TEST_OK = false;
                 error_writer('wp8', sha, 'WP8 tests execution failed.', err);

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/buildbot-conf/cordova-config.json.sample
----------------------------------------------------------------------
diff --git a/buildbot-conf/cordova-config.json.sample b/buildbot-conf/cordova-config.json.sample
new file mode 100644
index 0000000..1625bc8
--- /dev/null
+++ b/buildbot-conf/cordova-config.json.sample
@@ -0,0 +1,42 @@
+{
+    "couchdb": {
+        "uri":  "http://localhost:5984"
+    },
+    "dashboard": {
+        "port": 8088
+    },
+    "app": {
+        "entry":   "cdvtests/index.html",
+        "timeout": 600
+    },
+    "blackberry": {
+        "devices": {
+            "ips":      [],
+            "password": "password"
+        },
+        "bb10": {
+            "sdk":             "",
+            "signingPassword": ""
+        },
+        "tablet": {
+            "sdk":             "",
+            "signingPassword": ""
+        }
+    },
+    "ios": {
+        "keychainPassword": "",
+        "keychainLocation": ""
+    },
+    "wp8": {
+        "target": "emulator"
+    },
+    "windows8": {
+        "target": "emulator"
+    },
+    "mail": {
+        "to":        ["someone@someplace.com"],
+        "from":      "yourbuildbot@yourEmailService.com",
+        "password":  "yourSMTPpassword",
+        "serverURL": "put your external url here"
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/buildbot-conf/cordova-internal.conf
----------------------------------------------------------------------
diff --git a/buildbot-conf/cordova-internal.conf b/buildbot-conf/cordova-internal.conf
new file mode 100644
index 0000000..e87dd22
--- /dev/null
+++ b/buildbot-conf/cordova-internal.conf
@@ -0,0 +1,92 @@
+import os
+import json
+
+from buildbot.changes.gitpoller import GitPoller
+from buildbot.schedulers.forcesched import ForceScheduler
+
+# config
+MEDIC_CONFIG_FILE    = os.path.join(FP, 'cordova-config.json')
+PROJECTS_CONFIG_FILE = os.path.join(FP, 'cordova-repos.json')
+
+def parse_config_file(file_name):
+    with open(file_name, 'r') as config_file:
+        return json.load(config_file)
+
+medic_config    = parse_config_file(MEDIC_CONFIG_FILE)
+projects_config = parse_config_file(PROJECTS_CONFIG_FILE)
+
+# constants
+GIT_BIN       = 'git' if os.name != 'nt' else 'C:\Program Files (x86)\Git\cmd\git.exe'
+GITPOLLER_DIR = 'gitpoller-workdir'
+
+POLLED_PROJECT_PATTERNS = [
+    'cordova-mobile-spec',
+    'cordova-lib',
+    'cordova-js',
+    'cordova-cli',
+    'cordova-medic',
+    'cordova-plugman',
+    'cordova-windows',
+    'cordova-android',
+]
+
+####### UTILITIES
+
+# helpers
+def is_polled_project(project_name):
+    return True if any(pattern in project_name for pattern in POLLED_PROJECT_PATTERNS) else False
+
+def get_polled_projects():
+    return (project for project_name, project in projects_config.items() if is_polled_project(project_name))
+
+def make_git_poller(repo_uri):
+    # NOTE:
+    #      branches=True means watching all branches
+    return GitPoller(repo_uri, workdir=GITPOLLER_DIR, branches=True, pollinterval=120, gitbin=GIT_BIN)
+
+####### SLAVES
+
+c['slaves'].extend([])
+
+####### CHANGESOURCES
+
+# NOTE:
+#      Apache's (and our) master.cfg sets this to one change source,
+#      so we make it a list before adding our own change sources
+old_change_source  = c['change_source']
+c['change_source'] = list()
+c['change_source'].append(old_change_source)
+
+# add a git poller for each codebase of each project
+for project in get_polled_projects():
+    for codebase_name, codebase in project['codebases'].items():
+        c['change_source'].append(make_git_poller(codebase['repo']))
+
+####### STEPS
+
+# None
+
+####### BUILDERS
+
+c['builders'].extend([])
+
+####### STATUS TARGETS
+
+c['status'].extend([])
+
+####### SCHEDULERS
+
+c['schedulers'].extend([
+    ForceScheduler(
+        name         = 'cordova_force',
+        builderNames = [
+            'cordova-ios',
+            'cordova-android-osx',
+            'cordova-blackberry-osx',
+            'cordova-windows',
+            'cordova-wp8',
+            'cordova-android-win',
+            'cordova-blackberry-win',
+        ]
+    ),
+])

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/buildbot-conf/cordova-repos.json
----------------------------------------------------------------------
diff --git a/buildbot-conf/cordova-repos.json b/buildbot-conf/cordova-repos.json
new file mode 100644
index 0000000..88da448
--- /dev/null
+++ b/buildbot-conf/cordova-repos.json
@@ -0,0 +1,457 @@
+{
+    "mobile-chrome-apps": {
+        "codebase":  "chrome",
+        "codebases": {
+            "chrome": {
+                "repo":   "https://github.com/MobileChromeApps/mobile-chrome-apps.git",
+                "branch": "master"
+            }
+        }
+    },
+
+    "cordova-medic": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-medic.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-medic.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-coho": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-coho.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-coho.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-mobile-spec": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-mobile-spec.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-mobile-spec.git",
+                "branch": "master"
+            }
+        }
+    },
+
+    "cordova-cli": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-cli.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-cli.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugman": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugman.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugman.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-lib": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-lib.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-lib.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-js": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-js.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-js.git",
+                "branch": "master"
+            }
+        }
+    },
+
+    "cordova-android": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-android.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-android.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-ios": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-ios.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-ios.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-wp8": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-wp8.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-wp8.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-windows": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-windows.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-windows.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-blackberry": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-blackberry.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-blackberry.git",
+                "branch": "master"
+            }
+        }
+    },
+
+    "cordova-plugin-test-framework": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-test-framework.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-test-framework.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugins": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugins.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugins.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-battery-status": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-battery-status.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-camera": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-camera.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-console": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-console.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-contacts": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-contacts.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-device": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-device.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-device-motion": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-device-motion.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-device-orientation": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-orientation.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-device-orientation.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-dialogs": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-dialogs.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-file": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-file.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-file-transfer": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-file-transfer.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-geolocation": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-geolocation.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-globalization": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-globalization.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-inappbrowser": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-inappbrowser.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-media": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-media.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-media.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-media-capture": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-media-capture.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-media-capture.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-network-information": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-network-information.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-splashscreen": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-splashscreen.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-statusbar": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-statusbar.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-statusbar.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-vibration": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-vibration.git",
+                "branch": "master"
+            }
+        }
+    },
+    "cordova-plugin-whitelist": {
+        "codebase":  "github",
+        "codebases": {
+            "asf":  {
+                "repo":   "https://git-wip-us.apache.org/repos/asf/cordova-plugin-whitelist.git",
+                "branch": "master"
+            },
+            "github":  {
+                "repo":   "https://github.com/apache/cordova-plugin-whitelist.git",
+                "branch": "master"
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/buildbot-conf/cordova.conf
----------------------------------------------------------------------
diff --git a/buildbot-conf/cordova.conf b/buildbot-conf/cordova.conf
new file mode 100644
index 0000000..743e51c
--- /dev/null
+++ b/buildbot-conf/cordova.conf
@@ -0,0 +1,331 @@
+import os
+import re
+import json
+
+from buildbot.schedulers.timed import Nightly
+
+from buildbot.process.factory import BuildFactory
+from buildbot.config import BuilderConfig
+
+from buildbot.process.properties import renderer
+from buildbot.process.properties import Interpolate as I
+
+from buildbot.steps.source.git import Git
+from buildbot.steps.transfer import FileDownload
+from buildbot.steps.shell import ShellCommand
+from buildbot.steps.master import SetProperty
+
+from buildbot.status.results import SUCCESS
+
+# config
+MEDIC_CONFIG_FILE    = os.path.join(FP, 'cordova-config.json')
+PROJECTS_CONFIG_FILE = os.path.join(FP, 'cordova-repos.json')
+
+def parse_config_file(file_name):
+    with open(file_name, 'r') as config_file:
+        return json.load(config_file)
+
+medic_config    = parse_config_file(MEDIC_CONFIG_FILE)
+projects_config = parse_config_file(PROJECTS_CONFIG_FILE)
+
+# constants
+DEFAULT_REPO_NAME = 'src'
+BASE_WORKDIR      = '.'
+TEST_APP_NAME     = 'mobilespec'
+
+OSX     = 'osx'
+LINUX   = 'linux'
+WINDOWS = 'windows'
+
+# patterns
+CORDOVA_REPO_PATTERN = r'^.*(cordova-[^\.]+)\.git$'
+
+# interpretation of every byte-sized return code as success
+ALWAYS_SUCCESS = {i: SUCCESS for i in range(0, 256)}
+
+####### UTILITIES
+
+# helper functions
+def repo_name_from_url(url):
+    match = re.match(CORDOVA_REPO_PATTERN, url)
+    if match is not None:
+        return match.group(1)
+    return DEFAULT_REPO_NAME
+
+def repo_codebase_from_name(name):
+    repo          = projects_config[name]
+    codebase_name = repo['codebase']
+    return repo['codebases'][codebase_name]
+
+def repo_url_from_name(name):
+    return repo_codebase_from_name(name)['repo']
+
+def repo_branch_from_name(name):
+    return repo_codebase_from_name(name)['branch']
+
+def slugify(string):
+    return string.replace(' ', '-')
+
+def running_tasks_on_platform(platform_name, os_name):
+    """
+    Return the names of tasks possibly started by
+    builds on the given platform and OS.
+    """
+    if platform_name == 'windows':
+        return ['WWAHost.exe']
+    elif platform_name == 'wp8':
+        return ['Xde.exe']
+    elif platform_name == 'ios':
+        return ['iOS Simulator']
+    return []
+
+def can_find_running_tasks(step):
+    """
+    Return true if an OS and a platform is specified. Those are the
+    criteria for finding a task because running_tasks_on_platform uses
+    those properties to determine which tasks could be running.
+    """
+    return (
+        (step.build.getProperty('slaveos') is not None) and
+        (step.build.getProperty('platform') is not None)
+    )
+
+# renderers
+@renderer
+def render_mobilespec_platform(props):
+    platform = props.getProperty('platform')
+    if platform == 'blackberry':
+        platform = 'blackberry10'
+    return '--{0}'.format(platform)
+
+@renderer
+def render_repo_name(props):
+    repo_url = props.getProperty('repository')
+    return repo_name_from_url(repo_url)
+
+@renderer
+def render_task_kill_command(props):
+
+    os_name       = props.getProperty('slaveos')
+    platform_name = props.getProperty('platform')
+    running_tasks = running_tasks_on_platform(platform_name, os_name)
+
+    if not running_tasks:
+        return ['echo', 'No tasks to kill known.']
+
+    if os_name == WINDOWS:
+        command = ['taskkill', '/F']
+        for task in running_tasks:
+            command.append('/IM')
+            command.append(task)
+
+    else:
+        command = ['killall']
+        command.extend(running_tasks)
+
+    return command
+
+# step wrappers
+def DescribedStep(step_class, description, haltOnFailure=True, **kwargs):
+    return step_class(description=description, descriptionDone=description, name=slugify(description), haltOnFailure=haltOnFailure, **kwargs)
+
+def SH(workdir=BASE_WORKDIR, timeout=medic_config['app']['timeout'], **kwargs):
+    return DescribedStep(ShellCommand, workdir=workdir, timeout=timeout, **kwargs)
+
+def NPM(npm_command, command=list(), what='code', **kwargs):
+    return SH(command=['npm', npm_command] + command, description='npm ' + npm_command + 'ing ' + what, **kwargs)
+
+def NPMInstall(command=list(), **kwargs):
+    # NOTE:
+    #      adding the --cache parameter so that we don't use the global
+    #      npm cache, which is shared with other processes
+    return NPM('install', command=command + [I('--cache=%(prop:workdir)s/npm_cache')], **kwargs)
+
+def NPMTest(**kwargs):
+    return NPM('test', **kwargs)
+
+def BuildbotClone(repourl, what='code', workdir=None, **kwargs):
+    if workdir is None:
+        workdir = what
+    return DescribedStep(Git, 'cloning ' + what, repourl=repourl, workdir=workdir, mode='full', method='clobber', shallow=True, **kwargs)
+
+def CordovaClone(project_name, **kwargs):
+    branch   = repo_branch_from_name(project_name)
+    repo_url = repo_url_from_name(project_name)
+    return BuildbotClone(repourl=repo_url, branch=branch, what=project_name, **kwargs)
+
+def MedicClone(config_path, excludes=list(), **kwargs):
+    """
+    Clone repositories using medic's checkout.js script.
+    """
+    command     = ['node', 'cordova-medic/bin/checkout.js', '--config=' + config_path]
+    description = 'cloning configured repos'
+
+    if len(excludes) > 0:
+        excludes_string = ','.join(excludes)
+        command        += ['--exclude', excludes_string]
+        description    += ', except ' + excludes_string
+
+    return SH(command=command, description=description)
+
+def RMRF(path, description=None, **kwargs):
+
+    if description is None:
+        description = 'removing ' + path
+
+    # this is better than 'rm -rf' because it removes excessively long paths on Windows
+    js_script = "var s = require('shelljs'); console.log('removing {path}'); s.rm('-rf', '{path}');".format(path=path)
+
+    return SH(command=['node', '-e', js_script], description=description, **kwargs)
+
+def Set(name, value, **kwargs):
+    return DescribedStep(SetProperty, 'setting ' + name, property=name, value=value, **kwargs)
+
+def Download(mastersrc, slavedest):
+    return FileDownload(mastersrc=mastersrc, slavedest=slavedest, workdir=BASE_WORKDIR)
+
+####### SLAVES
+
+# NOTE:
+#      these slave names refer to the ones specified in master.cfg,
+#      and they must remain defined in master.cfg in order to work
+#      with the master.cfg used on Apache's Buildbot
+OSX_SLAVES     = ['cordova-ios-slave']
+WINDOWS_SLAVES = ['cordova-windows-slave']
+
+####### CHANGESOURCES
+
+# None, because Apache Buildbot's master.cfg manages them, and since
+# this file is shared with Apache Buildbot, we should not touch them.
+
+####### STEPS
+
+get_medic_steps = [
+
+    CordovaClone('cordova-medic'),
+
+    # --production switch is used to speed up installation + fruitstrap dev dependency is not supported on Windows
+    NPMInstall(command=['--production'], what='cordova-medic', workdir='cordova-medic'),
+]
+
+plugins_cleanup_steps = [
+
+    # set build properties
+    Set('repositoryname', render_repo_name),
+
+    # kill running emulators
+    SH(
+        command         = render_task_kill_command,
+        doStepIf        = can_find_running_tasks,
+        description     = 'killing running tasks',
+        haltOnFailure   = False,
+        flunkOnWarnings = False,
+        warnOnWarnings  = False,
+        decodeRC        = ALWAYS_SUCCESS,
+    ),
+
+    # clean up
+    NPMInstall(command=['shelljs'], what='shelljs'),
+    RMRF('~/.cordova/*', description='removing cache', haltOnFailure=False),
+    RMRF(BASE_WORKDIR + '/*', description='cleaning workspace', haltOnFailure=False),
+]
+
+common_plugins_steps = plugins_cleanup_steps + get_medic_steps + [
+
+    # download medic's config to slave
+    Download(mastersrc=PROJECTS_CONFIG_FILE, slavedest='cordova-medic/cordova-repos.json'),
+    Download(mastersrc=MEDIC_CONFIG_FILE, slavedest='cordova-medic/config.json'),
+
+    # clone all repos
+    MedicClone(config_path='cordova-medic/cordova-repos.json', excludes=['cordova-medic']),
+
+    # install tools
+    NPMInstall(what='cordova-coho',        workdir='cordova-coho'),
+    NPMInstall(what='cordova-lib',         workdir='cordova-lib/cordova-lib'),
+    NPMInstall(what='cordova-cli',         workdir='cordova-cli'),
+    NPMInstall(what='cordova-js',          workdir='cordova-js'),
+    NPMInstall(what='cordova-plugman',     workdir='cordova-plugman'),
+    NPMInstall(what='platform',            workdir=I('cordova-%(prop:platform)s')),
+    NPMInstall(what='cordova-mobile-spec', workdir='cordova-mobile-spec/createmobilespec'),
+
+    # link the installed code
+    SH(command=['cordova-coho/coho', 'npm-link'], description='coho link'),
+
+    # prepare the test app
+    SH(
+        command = [
+            'node',
+            'cordova-mobile-spec/createmobilespec/createmobilespec.js',
+            '--copywww',
+            '--skiplink',
+            render_mobilespec_platform,
+            TEST_APP_NAME
+        ],
+        description='creating mobilespec app'
+    ),
+    SH(
+        command=[
+            'node',
+            'cordova-medic/updateconfig.js',
+            I('--%(prop:platform)s'),
+        ],
+        description='preparing mobilespec app'
+    ),
+]
+
+cordova_plugins_all = BuildFactory()
+cordova_plugins_all.addSteps(common_plugins_steps)
+cordova_plugins_all.addSteps([
+    SH(command=['node', I('cordova-medic/build_%(prop:platform)s.js')], description='running tests'),
+])
+
+# WORKAROUND:
+#            this is here to match what medic already does; these
+#            should be their own builders in the future, using a
+#            proper test matrix
+cordova_plugins_windows = BuildFactory()
+cordova_plugins_windows.addSteps(common_plugins_steps)
+cordova_plugins_windows.addSteps([
+    SH(command=['node', I('cordova-medic/build_%(prop:platform)s.js'), "--store80"], haltOnFailure=False, description='running tests (Windows 8.0)'),
+    SH(command=['node', I('cordova-medic/build_%(prop:platform)s.js'), "--store"], haltOnFailure=False, description='running tests (Windows 8.1)'),
+    SH(command=['node', I('cordova-medic/build_%(prop:platform)s.js'), "--phone"], haltOnFailure=False, description='running tests (Windows Phone 8.1)'),
+])
+
+####### BUILDERS
+
+c['builders'].extend([
+
+    # plugins builders
+    BuilderConfig(name='cordova-ios',            slavenames=OSX_SLAVES,     factory=cordova_plugins_all,     properties={'platform': 'ios',        'slaveos': OSX}),
+    BuilderConfig(name='cordova-android-osx',    slavenames=OSX_SLAVES,     factory=cordova_plugins_all,     properties={'platform': 'android',    'slaveos': OSX}),
+    BuilderConfig(name='cordova-blackberry-osx', slavenames=OSX_SLAVES,     factory=cordova_plugins_all,     properties={'platform': 'blackberry', 'slaveos': OSX}),
+    BuilderConfig(name='cordova-windows',        slavenames=WINDOWS_SLAVES, factory=cordova_plugins_windows, properties={'platform': 'windows',    'slaveos': WINDOWS}),
+    BuilderConfig(name='cordova-wp8',            slavenames=WINDOWS_SLAVES, factory=cordova_plugins_all,     properties={'platform': 'wp8',        'slaveos': WINDOWS}),
+    BuilderConfig(name='cordova-android-win',    slavenames=WINDOWS_SLAVES, factory=cordova_plugins_all,     properties={'platform': 'android',    'slaveos': WINDOWS}),
+    BuilderConfig(name='cordova-blackberry-win', slavenames=WINDOWS_SLAVES, factory=cordova_plugins_all,     properties={'platform': 'blackberry', 'slaveos': WINDOWS}),
+])
+
+####### STATUS TARGETS
+
+c['status'].extend([])
+
+####### SCHEDULERS
+
+c['schedulers'].extend([
+    Nightly(
+        name         = 'cordova_plugins_periodic',
+        reason       = 'periodic',
+        branch       = None,
+        minute       = [30],
+        hour         = range(0, 24, 2),
+        builderNames = [
+            'cordova-ios',
+            'cordova-android-osx',
+            'cordova-blackberry-osx',
+            'cordova-windows',
+            'cordova-wp8',
+            'cordova-android-win',
+            'cordova-blackberry-win',
+        ],
+    ),
+])

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/buildbot-conf/master.cfg
----------------------------------------------------------------------
diff --git a/buildbot-conf/master.cfg b/buildbot-conf/master.cfg
new file mode 100644
index 0000000..c3584c0
--- /dev/null
+++ b/buildbot-conf/master.cfg
@@ -0,0 +1,349 @@
+#!/usr/bin/python
+# -*- python -*-
+# ex: set syntax=python:
+
+# This is a sample buildmaster config file. It must be installed as
+# 'master.cfg' in your buildmaster's base directory (although the filename
+# can be changed with the --basedir option to 'mktap buildbot master').
+
+# It has one job: define a dictionary named BuildmasterConfig. This
+# dictionary has a variety of keys to control different aspects of the
+# buildmaster. They are documented in docs/config.xhtml .
+
+
+# This is the dictionary that the buildmaster pays attention to. We also use
+# a shorter alias to save typing.
+
+# Absolute or relative path to buildbot per-project configureations.
+# For local Buildbot installation it is convenient to use the same directory
+# for main master.cfg and projects .conf files
+FP = './'
+
+c = BuildmasterConfig = {}
+
+####### BUILDSLAVES
+
+# import the passwords
+import private
+reload(private)
+
+# c['db_url'] = private.mysqlConnection
+
+c['db'] = {
+    'db_url' : "sqlite:///state.sqlite",
+}
+
+# the 'slaves' list defines the set of allowable buildslaves. Each element is
+# a tuple of bot-name and bot-password. These correspond to values given to
+# the buildslave's mktap invocation.
+from buildbot.buildslave import BuildSlave
+
+c['slaves'] = []
+
+c['slaves'].extend([
+
+    # NOTE:
+    #      these slave definitions have to at least contain the
+    #      same ones as the ones on the ci.apache.org Buildbot's
+    #      master.cfg
+
+    # used slaves
+    BuildSlave(
+        'cordova-ios-slave',
+        private.cordovaIOSSlavePwd,
+        missing_timeout = 300,
+        max_builds      = 1
+    ),
+    BuildSlave(
+        'cordova-windows-slave',
+        private.cordovaWindowsSlavePwd,
+        missing_timeout = 300,
+        max_builds      = 1
+    ),
+
+    # obsolete slaves
+    BuildSlave(
+        'cordova-android-slave',
+        private.cordovaAndroidSlavePwd,
+        missing_timeout = 300,
+        max_builds      = 1
+    ),
+    BuildSlave(
+        'cordova-win8-slave',
+        private.cordovaWin8SlavePwd,
+        missing_timeout = 300,
+        max_builds      = 2
+    ),
+    BuildSlave(
+        'cordova-blackberry-slave',
+        private.cordovaBlackberrySlavePwd,
+        missing_timeout = 300,
+        max_builds      = 1
+    ),
+    BuildSlave(
+        'cordova-common-slave',
+        private.cordovaCommonSlavePwd,
+        missing_timeout = 300,
+        max_builds      = 3
+    ),
+])
+
+# to limit to two concurrent builds on a slave, use
+#  c['slaves'] = [BuildSlave("bot1name", "bot1passwd", max_builds=2)]
+
+# 'slavePortnum' defines the TCP port to listen on. This must match the value
+# configured into the buildslaves (with their --master option)
+
+c['slavePortnum'] = 9889
+
+####### CHANGESOURCES
+
+# the 'change_source' setting tells the buildmaster how it should find out
+# about source code changes. Any class which implements IChangeSource can be
+# put here: there are several in buildbot/changes/*.py to choose from.
+
+from buildbot.changes.pb import PBChangeSource
+
+c['change_source'] = PBChangeSource(
+    port   = 9999,
+    user   = private.pbcsUser,
+    passwd = private.pbcsPwd
+)
+
+# from buildbot.changes.svnpoller import SVNPoller)
+
+# For example, if you had CVSToys installed on your repository, and your
+# CVSROOT/freshcfg file had an entry like this:
+#pb = ConfigurationSet([
+#    (None, None, None, PBService(userpass=('foo', 'bar'), port=4519)),
+#    ])
+
+# then you could use the following buildmaster Change Source to subscribe to
+# the FreshCVS daemon and be notified on every commit:
+#
+#from buildbot.changes.freshcvs import FreshCVSSource
+#fc_source = FreshCVSSource("cvs.example.com", 4519, "foo", "bar")
+#c['change_source'] = fc_source
+
+# or, use a PBChangeSource, and then have your repository's commit script run
+# 'buildbot sendchange', or use contrib/svn_buildbot.py, or
+# contrib/arch_buildbot.py :
+#
+#from buildbot.changes.pb import PBChangeSource
+#c['change_source'] = PBChangeSource()
+
+####### GLOBAL EXCLUDES LIST - DO NOT TRIGGER BUILDS ON THESE FILES
+
+import re
+
+masterExcludes = ['STATUS' , 'README' , 'CHANGES' , 'INSTALL']
+
+def isGlobalImportant(change):
+
+    if not masterExcludes:
+        return True
+
+    for file in change.files:
+        triggerBuild = True
+        for pattern in masterExcludes:
+            match = re.match(pattern, file)
+            if match:
+                triggerBuild = False
+                break
+        if triggerBuild:
+            return True
+
+## NOTES
+#
+# add 'fileIsImportant = isGlobalImportant' to any project scheduler(s)
+# that you want to apply this global list to.
+#
+# Projects can individually extend this global default :
+#
+# Place something like this in the projects/$project.conf file:
+#
+# $projectExcludes = [masterExcludes , "exclude.me" , "andme.too" , "etc..."]
+#
+# def isProjectimportant
+#     if not $projectExcludes:
+#        return True
+#
+#   for file in change.files:
+#        triggerBuild = True
+#        for pattern in $projectExcludes:
+#            match = re.match(pattern, file)
+#            if match:
+#                triggerBuild = False
+#                break
+#        if triggerBuild:
+#            return True
+#
+##
+# Then add 'fileisImportant = is$Projectimportant' to the scheduler.
+# (replace $project in all above with actual project name!)
+##
+
+####### SCHEDULERS
+
+## configure the Schedulers
+from buildbot.scheduler import AnyBranchScheduler, Periodic, Scheduler, Nightly, Dependent
+from buildbot.schedulers.basic  import SingleBranchScheduler
+from buildbot.changes import filter
+
+c['schedulers'] = []
+
+# append project schedulers in projects/$project.conf
+
+####### BUILDERS
+
+# the 'builders' list defines the Builders. Each one is configured with a
+# dictionary, using the following keys:
+#  name (required): the name used to describe this bilder
+#  slavename (required): which slave to use, must appear in c['bots']
+#  builddir (required): which subdirectory to run the builder in
+#  factory (required): a BuildFactory to define how the build is run
+#  periodicBuildTime (optional): if set, force a build every N seconds
+
+# buildbot/process/factory.py provides several BuildFactory classes you can
+# start with, which implement build processes for common targets (GNU
+# autoconf projects, CPAN perl modules, etc). The factory.BuildFactory is the
+# base class, and is configured with a series of BuildSteps. When the build
+# is run, the appropriate buildslave is told to execute each Step in turn.
+
+# the first BuildStep is typically responsible for obtaining a copy of the
+# sources. There are source-obtaining Steps in buildbot/steps/source.py for
+# CVS, SVN, and others.
+
+# cvsroot = ":pserver:anonymous@cvs.sourceforge.net:/cvsroot/buildbot"
+# cvsmodule = "buildbot"
+
+from buildbot.process.properties import Interpolate
+from buildbot.process import factory
+from buildbot.steps.source.git import Git
+from buildbot.steps.source.svn import SVN
+from buildbot.steps.shell import Compile
+from buildbot.steps.python_twisted import Trial
+
+# append project builders in projects/$project.conf
+
+c['builders'] = []
+
+####### STATUS TARGETS
+
+# 'status' is a list of Status Targets. The results of each build will be
+# pushed to these targets. buildbot/status/*.py has a variety to choose from,
+# including web pages, email senders, and IRC bots.
+
+import json
+with open(FP + 'cordova-config.json') as f:
+    json_config = json.load(f)
+
+c['status'] = []
+
+from buildbot.status import html
+from buildbot.status.web import authz, auth
+from buildbot.status.mail import MailNotifier
+
+# change any of these to True to enable, and to 'auth' to
+# enable when authenticated; see the manual for more options
+authz_cfg = authz.Authz(
+    auth               = auth.BasicAuth([(private.webAuthUser, private.webAuthPwd)]),
+    gracefulShutdown   = False,
+    forceBuild         = True,
+    forceAllBuilds     = 'auth',
+    pingBuilder        = False,
+    stopBuild          = 'auth',
+    stopAllBuilds      = 'auth',
+    cancelPendingBuild = 'auth',
+)
+
+mail_from = str(json_config['mail']['from'])
+mail_to = []
+for mt in json_config['mail']['to']:
+    mail_to.append(str(mt))
+
+mail_pw = str(json_config['mail']['password'])
+
+mn1 = MailNotifier(
+    fromaddr              = mail_from,
+    sendToInterestedUsers = False,
+    mode                  = ('change', 'failing', 'warnings'),
+    extraRecipients       = mail_to,
+    relayhost             = 'smtp.gmail.com',
+    smtpPort              = 587,
+    useTls                = True,
+    smtpUser              = mail_from,
+    smtpPassword          = mail_pw,
+)
+
+c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
+c['status'].append(mn1)
+
+# Include any global imports here that more than one project needs.
+
+from buildbot.steps.master import MasterShellCommand
+from buildbot.steps.transfer import FileUpload
+from buildbot.steps.transfer import FileDownload
+from buildbot.steps.transfer import DirectoryUpload
+from buildbot.steps.shell import ShellCommand, SetProperty
+from buildbot.steps.shell import Configure
+from buildbot.steps.shell import Test
+from buildbot.steps.python import PyFlakes
+from buildbot.process.buildstep import BuildStep
+from buildbot.process.properties import WithProperties
+from buildbot import locks
+
+# import the rat report fileupload class
+
+# from rat_report_upload import rat_report_upload
+
+# Ensure that projects include is below all definition imports.
+
+execfile(FP + 'projects.conf', globals(), locals())
+
+# Data Lifetime - how long to keep old build logs and status around.
+
+c['changeHorizon'] = 200
+c['buildHorizon'] = 100
+c['eventHorizon'] = 50
+c['logHorizon'] = 40
+c['buildCacheSize'] = 50 # Not sure about value of this one, should be ok though.
+c['changeCacheSize'] = 10000
+
+####### DEBUGGING OPTIONS
+
+# if you set 'debugPassword', then you can connect to the buildmaster with
+# the diagnostic tool in contrib/debugclient.py . From this tool, you can
+# manually force builds and inject changes, which may be useful for testing
+# your buildmaster without actually commiting changes to your repository (or
+# before you have a functioning 'sources' set up). The debug tool uses the
+# same port number as the slaves do: 'slavePortnum'.
+
+#c['debugPassword'] = "debugpassword"
+
+# if you set 'manhole', you can ssh into the buildmaster and get an
+# interactive python shell, which may be useful for debugging buildbot
+# internals. It is probably only useful for buildbot developers. You can also
+# use an authorized_keys file, or plain telnet.
+#from buildbot import manhole
+#c['manhole'] = manhole.PasswordManhole("tcp:9999:interface=127.0.0.1",
+#                                       "admin", "password")
+
+####### PROJECT IDENTITY
+
+# the 'projectName' string will be used to describe the project that this
+# buildbot is working on. For example, it is used as the title of the
+# waterfall HTML page. The 'projectURL' string will be used to provide a link
+# from buildbot HTML pages to your project's home page.
+
+c['title'] = 'Cordova Testing'
+c['titleURL'] = 'http://cordova.apache.org'
+
+# the 'buildbotURL' string should point to the location where the buildbot's
+# internal web server (usually the html.Waterfall page) is visible. This
+# typically uses the port number set in the Waterfall 'status' entry, but
+# with an externally-visible host name which the buildbot cannot figure out
+# without some help.
+
+mail_serverURL = str(json_config['mail']['serverURL'])
+c['buildbotURL'] = mail_serverURL

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/buildbot-conf/private.py.sample
----------------------------------------------------------------------
diff --git a/buildbot-conf/private.py.sample b/buildbot-conf/private.py.sample
new file mode 100644
index 0000000..776e2b8
--- /dev/null
+++ b/buildbot-conf/private.py.sample
@@ -0,0 +1,11 @@
+pbcsUser    = 'password'
+pbcsPwd     = 'password'
+webAuthUser = 'password'
+webAuthPwd  = 'password'
+
+cordovaIOSSlavePwd        = 'password'
+cordovaWindowsSlavePwd    = 'password'
+cordovaAndroidSlavePwd    = 'password'
+cordovaWin8SlavePwd       = 'password'
+cordovaBlackberrySlavePwd = 'password'
+cordovaCommonSlavePwd     = 'password'

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/buildbot-conf/projects.conf
----------------------------------------------------------------------
diff --git a/buildbot-conf/projects.conf b/buildbot-conf/projects.conf
new file mode 100644
index 0000000..da3051b
--- /dev/null
+++ b/buildbot-conf/projects.conf
@@ -0,0 +1,11 @@
+#!/usr/bin/python
+
+def one_file(f, symbols_to_keep = set()):
+    globals_copy = globals().copy()
+    execfile(FP + f, globals_copy, globals_copy)
+    for symbol in symbols_to_keep:
+        if symbol in globals_copy:
+            globals().update({symbol: globals_copy[symbol]})
+
+one_file('cordova.conf')
+one_file('cordova-internal.conf')

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/checkout.js
----------------------------------------------------------------------
diff --git a/checkout.js b/checkout.js
deleted file mode 100644
index bbe4653..0000000
--- a/checkout.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var path = require ('path');
-var glob=require('glob');
-var shell = require('shelljs');
-var fs = require('fs');
-var argv = require('optimist').argv;
-
-var CAT='TOOLS';
-var isRelease=false;
-var jsonpath ='./repos.json';
-var branch_release = 'release';
-
-function getDir(reponame) {
-   return path.basename(reponame,'.git');
-}
-
-if(argv.cat) CAT = argv.cat;
-if(argv.release) isRelease = true;
-if(argv.path) jsonpath = argv.path;
-if(argv.releasebranch) branch_release = argv.releasebranch;
-
-var repos = JSON.parse(fs.readFileSync(jsonpath, 'utf8'));
-
-repos.repos.forEach( function(repo) {
-    if(repo.category == CAT.toUpperCase()) {
-        var branch = isRelease ? repo.release : repo.current;
-        branch = branch == "RELEASE" ? branch_release : branch;
-        var dir = getDir(repo.repo);
-        var remotename = path.basename(path.dirname(repo.repo));
-
-        if(fs.existsSync(dir + '/.git')) {
-            console.log('Repo ' + repo.repo + ' has already cloned!');
-            process.exit(1);
-        } else {
-            shell.exec('git clone ' + repo.repo + ' --branch=' + branch + ' --depth ' + '1');
-        }
-    }
-});
-
-

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-config.json.sample
----------------------------------------------------------------------
diff --git a/cordova-config.json.sample b/cordova-config.json.sample
deleted file mode 100644
index 366b506..0000000
--- a/cordova-config.json.sample
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-    "couchdb":{
-        "host":"http://localcouchdb:5984"
-    },
-    "dashboard":{
-        "port":8088
-    },
-    "app":{
-        "static":{
-            "path":null
-        },
-        "dynamic":{
-            "commit_hook":"src/build/makers/mobile_spec/commit_hook.js",
-            "builder":"src/build/makers/mobile_spec",
-            "git":"https://git-wip-us.apache.org/repos/asf/cordova-mobile-spec.git"
-        },
-        "entry":"autotest/pages/all.html",
-        "platforms":"android ios windows wp8",
-        "release":"master",
-        "timeout": 600
-    },
-    "blackberry":{
-        "devices":{
-            "ips":[],
-            "password":"password"
-        },
-        "bb10":{
-            "sdk":"/Users/fil/SDKs/BB10-WebWorks-1.0.4.7",
-            "signingPassword":""
-        },
-        "tablet":{
-            "sdk":"/Users/fil/SDKs/WebWorks-Tablet-2.2/bbwp",
-            "signingPassword":""
-        }
-    },
-    "ios":{
-        "keychainPassword":"",
-        "keychainLocation":""
-    },
-    "wp8":{
-        "target": "device",
-        "TODO" : "add several targets support: emulators: WVGA, WXGA, 720p, 1080p or devices: default or specified by id 7988B8C3-3ADE-488d-BA3E-D052AC9DC710"
-    },
-    "windows8": {
-        "target": "local|emulator|device"
-    },
-    "mail":{
-        "to":["someone@someplace.com"],
-        "from":"yourbuildbot@yourEmailService.com",
-        "password":"yourSMTPpassword",
-        "serverURL":"put your external url here"
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-medic/blob/0e37682d/cordova-plugin-medic-newstyle-tests/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-plugin-medic-newstyle-tests/plugin.xml b/cordova-plugin-medic-newstyle-tests/plugin.xml
deleted file mode 100644
index ad9ddaf..0000000
--- a/cordova-plugin-medic-newstyle-tests/plugin.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
-    xmlns:rim="http://www.blackberry.com/ns/widgets"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    id="org.apache.cordova.core.medic-newstyle-tests"
-    version="0.0.1">
-    <name>Medic New Style Tests</name>
-    <license>Apache 2.0</license>
-    <keywords>cordova,medic,testing</keywords>
-
-    <access origin="http://192.168.1.122:6800" />
-    <content src="cdvtests/index.html" />
-</plugin>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org