SDK Manager: env var SDK_TEST_BASE_URL. Do not merge.

Support a new env var SDK_TEST_BASE_URL that should
be set to the root of an alternate repo. When set
it will completly override the built-in default
repository base URL.

(cherry picked from commit b0ac9620f74f0b3817a8847178ca53d876b78a09)

Change-Id: I029d322a22b6c24c14880c8ffcf8529198bbebde
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonsListFetcher.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonsListFetcher.java
index c83a3c1..62cc9a4 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonsListFetcher.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonsListFetcher.java
@@ -19,6 +19,7 @@
 import com.android.annotations.VisibleForTesting;

 import com.android.annotations.VisibleForTesting.Visibility;

 import com.android.sdklib.repository.SdkAddonsListConstants;

+import com.android.sdklib.repository.SdkRepoConstants;

 

 import org.w3c.dom.Document;

 import org.w3c.dom.NamedNodeMap;

@@ -444,6 +445,13 @@
     @VisibleForTesting(visibility=Visibility.PRIVATE)

     protected Site[] parseAddonsList(Document doc, String nsUri, ITaskMonitor monitor) {

 

+        String baseUrl = System.getenv("SDK_TEST_BASE_URL");            //$NON-NLS-1$

+        if (baseUrl != null) {

+            if (baseUrl.length() <= 0 || !baseUrl.endsWith("/")) {      //$NON-NLS-1$

+                baseUrl = null;

+            }

+        }

+

         Node root = getFirstChild(doc, nsUri, SdkAddonsListConstants.NODE_SDK_ADDONS_LIST);

         if (root != null) {

             ArrayList<Site> sites = new ArrayList<Site>();

@@ -462,6 +470,12 @@
                         String strUrl  = url.getTextContent().trim();

                         String strName = name.getTextContent().trim();

 

+                        if (baseUrl != null &&

+                                strUrl.startsWith(SdkRepoConstants.URL_GOOGLE_SDK_SITE)) {

+                            strUrl = baseUrl +

+                                   strUrl.substring(SdkRepoConstants.URL_GOOGLE_SDK_SITE.length());

+                        }

+

                         if (strUrl.length() > 0 && strName.length() > 0) {

                             sites.add(new Site(strUrl, strName));

                         }

diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkAddonsListConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkAddonsListConstants.java
index f8ed181..7c6e411 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkAddonsListConstants.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkAddonsListConstants.java
@@ -26,7 +26,7 @@
 

     /** The URL where to find the official addons list fle. */

     public static final String URL_ADDON_LIST =

-        "https://dl-ssl.google.com/android/repository/addons_list.xml";     //$NON-NLS-1$

+        SdkRepoConstants.URL_GOOGLE_SDK_SITE + "addons_list.xml";     //$NON-NLS-1$

 

     /** The canonical URL filename for addons-list XML files. */

     public static final String URL_DEFAULT_FILENAME = "addons_list.xml";    //$NON-NLS-1$

diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java
index bbd5f7a..710ec97 100755
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java
@@ -30,7 +30,8 @@
      *  Valid version numbers are between 1 and this number, included. */

     public static final int NS_LATEST_VERSION = 5;

 

-    /** The URL of the official Google sdk-repository site. */

+    /** The URL of the official Google sdk-repository site.

+     *  The URL ends with a /, allowing easy concatenation. */

     public static final String URL_GOOGLE_SDK_SITE =

         "https://dl-ssl.google.com/android/repository/";                        //$NON-NLS-1$

 

diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
index cb26576..fd961de 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
@@ -370,8 +370,14 @@
         // there's an env var asking to do so anyway.

         if (sources.getAllSources().length == 0 ||

                 System.getenv("SDK_MIX_WITH_TEST_URLS") != null) {

+

+            String baseUrl = System.getenv("SDK_TEST_BASE_URL");                       //$NON-NLS-1$

+            if (baseUrl == null || baseUrl.length() <= 0 || !baseUrl.endsWith("/")) {   //$NON-NLS-1$

+                baseUrl = SdkRepoConstants.URL_GOOGLE_SDK_SITE;

+            }

+

             sources.add(SdkSourceCategory.ANDROID_REPO,

-                    new SdkRepoSource(SdkRepoConstants.URL_GOOGLE_SDK_SITE,

+                    new SdkRepoSource(baseUrl,

                                       SdkSourceCategory.ANDROID_REPO.getUiName()));

 

             // Load user sources

@@ -1089,11 +1095,28 @@
                 } else if (u.endsWith(SdkAddonsListConstants.URL_DEFAULT_FILENAME)) {

                     url = u;

                     break;

+                } else {

+                    monitor.logError("Ignoring invalid SDK_TEST_URLS: %1$s", u);  //$NON-NLS-1$

                 }

+

             }

         }

 

         if (url != null) {

+

+            // We override SdkRepoConstants.URL_GOOGLE_SDK_SITE if this is defined

+            String baseUrl = System.getenv("SDK_TEST_BASE_URL");            //$NON-NLS-1$

+            if (baseUrl != null) {

+                if (baseUrl.length() > 0 && baseUrl.endsWith("/")) {        //$NON-NLS-1$

+                    if (url.startsWith(SdkRepoConstants.URL_GOOGLE_SDK_SITE)) {

+                        url = baseUrl +

+                              url.substring(SdkRepoConstants.URL_GOOGLE_SDK_SITE.length());

+                    }

+                } else {

+                    monitor.logError("Ignoring invalid SDK_TEST_BASE_URL: %1$s", baseUrl);  //$NON-NLS-1$

+                }

+            }

+

             if (getSettingsController().getForceHttp()) {

                 url = url.replaceAll("https://", "http://");    //$NON-NLS-1$ //$NON-NLS-2$

             }