OSDN Git Service

SDK Manager: simplify getenv var to override URLs.
authorRaphael Moll <ralf@android.com>
Mon, 11 Oct 2010 17:04:12 +0000 (10:04 -0700)
committerRaphael Moll <ralf@android.com>
Mon, 11 Oct 2010 17:38:54 +0000 (10:38 -0700)
SDK_TEST_URLS is a semicolon-separated list of URLs that can be used to
seed the SDK Updater list. This is only meant as a debugging and QA testing
tool and not for user usage.
To be used, the URLs must either end with the / or end with the canonical
filename expected for an addon list, addon repo or full repo.
This lets QA use URLs ending with / to cover all cases.

Change-Id: Ia7232d5d8a5b6e85d98e735b93a969e42624e919

sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkAddonSource.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkRepoSource.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/SdkSource.java
sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkAddonConstants.java
sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkAddonsListConstants.java
sdkmanager/libs/sdklib/src/com/android/sdklib/repository/SdkRepoConstants.java
sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/SdkAddonSourceTest.java
sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/SdkRepoSourceTest.java
sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java

index 78dfd69..049dad8 100755 (executable)
@@ -51,7 +51,7 @@ public class SdkAddonSource extends SdkSource {
 \r
     @Override\r
     protected String getUrlDefaultXmlFile() {\r
-        return SdkAddonConstants.URL_DEFAULT_XML_FILE;\r
+        return SdkAddonConstants.URL_DEFAULT_FILENAME;\r
     }\r
 \r
     @Override\r
index 85838aa..9b63be3 100755 (executable)
@@ -64,7 +64,7 @@ public class SdkRepoSource extends SdkSource {
 \r
     @Override\r
     protected String getUrlDefaultXmlFile() {\r
-        return SdkRepoConstants.URL_DEFAULT_XML_FILE;\r
+        return SdkRepoConstants.URL_DEFAULT_FILENAME;\r
     }\r
 \r
     @Override\r
index 7c19fab..cee7fd6 100755 (executable)
@@ -286,7 +286,7 @@ public abstract class SdkSource implements IDescription {
                 } else if (version < 1 && tryOtherUrl == 0 && !usingAlternateUrl) {\r
                     // This is obviously not one of our documents.\r
                     mFetchError = String.format(\r
-                            "Failed to find an XML for the repository at URL '%1$s'",\r
+                            "Failed to validate the XML for the repository at URL '%1$s'",\r
                             url);\r
 \r
                     // If we haven't already tried the alternate URL, let's do it now.\r
@@ -310,7 +310,7 @@ public abstract class SdkSource implements IDescription {
                     // The alternate URL is obviously not a valid XML either.\r
                     // We only report the error if we failed to produce one earlier.\r
                     mFetchError = String.format(\r
-                            "Failed to find an XML for the repository at URL '%1$s'",\r
+                            "Failed to validate the XML for the repository at URL '%1$s'",\r
                             url);\r
                 }\r
 \r
index 707fe01..fa75261 100755 (executable)
@@ -28,7 +28,7 @@ public class SdkAddonConstants extends RepoConstants {
 \r
     /** The default name looked for by {@link SdkSource} when trying to load an\r
      * sdk-addon XML if the URL doesn't match an existing resource. */\r
-    public static final String URL_DEFAULT_XML_FILE = "addon.xml";         //$NON-NLS-1$\r
+    public static final String URL_DEFAULT_FILENAME = "addon.xml";         //$NON-NLS-1$\r
 \r
     /** The base of our sdk-addon XML namespace. */\r
     private static final String NS_BASE =\r
index 1793f1f..f8ed181 100755 (executable)
@@ -28,6 +28,9 @@ public class SdkAddonsListConstants {
     public static final String URL_ADDON_LIST =\r
         "https://dl-ssl.google.com/android/repository/addons_list.xml";     //$NON-NLS-1$\r
 \r
+    /** The canonical URL filename for addons-list XML files. */\r
+    public static final String URL_DEFAULT_FILENAME = "addons_list.xml";    //$NON-NLS-1$\r
+\r
     /** The base of our sdk-addons-list XML namespace. */\r
     private static final String NS_BASE =\r
         "http://schemas.android.com/sdk/android/addons-list/";              //$NON-NLS-1$\r
index 626f6d9..f08aa21 100755 (executable)
@@ -32,7 +32,7 @@ public class SdkRepoConstants extends RepoConstants {
 \r
     /** The default name looked for by {@link SdkSource} when trying to load an\r
      * sdk-repository XML if the URL doesn't match an existing resource. */\r
-    public static final String URL_DEFAULT_XML_FILE = "repository.xml";         //$NON-NLS-1$\r
+    public static final String URL_DEFAULT_FILENAME = "repository.xml";         //$NON-NLS-1$\r
 \r
     /** The base of our sdk-repository XML namespace. */\r
     private static final String NS_BASE =\r
index 5b2a3ab..d05c967 100755 (executable)
@@ -151,7 +151,7 @@ public class SdkAddonSourceTest extends TestCase {
 \r
         Boolean[] validatorFound = new Boolean[] { Boolean.FALSE };\r
         String[] validationError = new String[] { null };\r
-        String url = "not-a-valid-url://" + SdkAddonConstants.URL_DEFAULT_XML_FILE;\r
+        String url = "not-a-valid-url://" + SdkAddonConstants.URL_DEFAULT_FILENAME;\r
 \r
         String uri = mSource._validateXml(xmlStream, url, version, validationError, validatorFound);\r
         assertEquals(Boolean.TRUE, validatorFound[0]);\r
index 2bbbd8c..c6d6eb3 100755 (executable)
@@ -169,7 +169,7 @@ public class SdkRepoSourceTest extends TestCase {
 \r
         Boolean[] validatorFound = new Boolean[] { Boolean.FALSE };\r
         String[] validationError = new String[] { null };\r
-        String url = "not-a-valid-url://" + SdkRepoConstants.URL_DEFAULT_XML_FILE;\r
+        String url = "not-a-valid-url://" + SdkRepoConstants.URL_DEFAULT_FILENAME;\r
 \r
         String uri = mSource._validateXml(xmlStream, url, version, validationError, validatorFound);\r
         assertEquals(Boolean.TRUE, validatorFound[0]);\r
@@ -220,7 +220,7 @@ public class SdkRepoSourceTest extends TestCase {
 \r
         Boolean[] validatorFound = new Boolean[] { Boolean.FALSE };\r
         String[] validationError = new String[] { null };\r
-        String url = "not-a-valid-url://" + SdkRepoConstants.URL_DEFAULT_XML_FILE;\r
+        String url = "not-a-valid-url://" + SdkRepoConstants.URL_DEFAULT_FILENAME;\r
 \r
         String uri = mSource._validateXml(xmlStream, url, version, validationError, validatorFound);\r
         assertEquals(Boolean.TRUE, validatorFound[0]);\r
index 8c77e3a..744bb8d 100755 (executable)
@@ -36,6 +36,7 @@ import com.android.sdklib.internal.repository.SdkSourceCategory;
 import com.android.sdklib.internal.repository.SdkSources;\r
 import com.android.sdklib.internal.repository.ToolPackage;\r
 import com.android.sdklib.internal.repository.AddonsListFetcher.Site;\r
+import com.android.sdklib.repository.SdkAddonConstants;\r
 import com.android.sdklib.repository.SdkAddonsListConstants;\r
 import com.android.sdklib.repository.SdkRepoConstants;\r
 import com.android.sdkuilib.internal.repository.icons.ImageFactory;\r
@@ -305,32 +306,41 @@ class UpdaterData {
         // Load user sources\r
         sources.loadUserAddons(getSdkLog());\r
 \r
-        // SDK_UPDATER_URLS is a semicolon-separated list of URLs that can be used to\r
-        // seed the SDK Updater list for full repositories.\r
-        String str = System.getenv("SDK_UPDATER_URLS");\r
+        // SDK_TEST_URLS is a semicolon-separated list of URLs that can be used to\r
+        // seed the SDK Updater list for full repos and addon repositories. This is\r
+        // only meant as a debugging and QA testing tool and not for user usage.\r
+        //\r
+        // To be used, the URLs must either end with the / or end with the canonical\r
+        // filename expected for either a full repo or an add-on repo. This lets QA\r
+        // use URLs ending with / to cover all cases.\r
+        String str = System.getenv("SDK_TEST_URLS");\r
         if (str != null) {\r
             String[] urls = str.split(";");\r
             for (String url : urls) {\r
-                if (url != null && url.length() > 0) {\r
-                    SdkSource s = new SdkRepoSource(url, null/*uiName*/);\r
-                    if (!sources.hasSourceUrl(s)) {\r
-                        sources.add(SdkSourceCategory.GETENV_REPOS, s);\r
+                if (url != null) {\r
+                    url = url.trim();\r
+                    if (url.endsWith("/") || url.endsWith(SdkRepoConstants.URL_DEFAULT_FILENAME)) {\r
+                        String fullUrl = url;\r
+                        if (fullUrl.endsWith("/")) {\r
+                            fullUrl += SdkRepoConstants.URL_DEFAULT_FILENAME;\r
+                        }\r
+\r
+                        SdkSource s = new SdkRepoSource(fullUrl, null/*uiName*/);\r
+                        if (!sources.hasSourceUrl(s)) {\r
+                            sources.add(SdkSourceCategory.GETENV_REPOS, s);\r
+                        }\r
                     }\r
-                }\r
-            }\r
-        }\r
 \r
-        // SDK_UPDATER_USER_URLS is a semicolon-separated list of URLs that can be used to\r
-        // seed the SDK Updater list for user-only repositories. User sources can only provide\r
-        // add-ons and extra packages.\r
-        str = System.getenv("SDK_UPDATER_USER_URLS");\r
-        if (str != null) {\r
-            String[] urls = str.split(";");\r
-            for (String url : urls) {\r
-                if (url != null && url.length() > 0) {\r
-                    SdkSource s = new SdkAddonSource(url, null/*uiName*/);\r
-                    if (!sources.hasSourceUrl(s)) {\r
-                        sources.add(SdkSourceCategory.GETENV_ADDONS, s);\r
+                    if (url.endsWith("/") || url.endsWith(SdkAddonConstants.URL_DEFAULT_FILENAME)) {\r
+                        String fullUrl = url;\r
+                        if (fullUrl.endsWith("/")) {\r
+                            fullUrl += SdkAddonConstants.URL_DEFAULT_FILENAME;\r
+                        }\r
+\r
+                        SdkSource s = new SdkAddonSource(fullUrl, null/*uiName*/);\r
+                        if (!sources.hasSourceUrl(s)) {\r
+                            sources.add(SdkSourceCategory.GETENV_ADDONS, s);\r
+                        }\r
                     }\r
                 }\r
             }\r
@@ -832,30 +842,55 @@ class UpdaterData {
     private void loadRemoteAddonsListInTask(ITaskMonitor monitor) {\r
         mStateFetchRemoteAddonsList = -1;\r
 \r
-        /*\r
-         * This env var can be defined to override the default addons_list.xml\r
-         * location, useful for debugging.\r
-         */\r
-        String url = System.getenv("SDK_UPDATER_ADDONS_LIST");\r
+        // SDK_TEST_URLS is a semicolon-separated list of URLs that can be used to\r
+        // seed the SDK Updater list. This is only meant as a debugging and QA testing\r
+        // tool and not for user usage.\r
+        //\r
+        // To be used, the URLs must either end with the / or end with the canonical\r
+        // filename expected for an addon list. This lets QA use URLs ending with /\r
+        // to cover all cases.\r
+        //\r
+        // Since SDK_TEST_URLS can contain many such URLs, we take the first one that\r
+        // matches our criteria.\r
+        String url = System.getenv("SDK_TEST_URLS");\r
 \r
         if (url == null) {\r
+            // No override, use the canonical URL.\r
             url = SdkAddonsListConstants.URL_ADDON_LIST;\r
-        }\r
-        if (getSettingsController().getForceHttp()) {\r
-            url = url.replaceAll("https://", "http://");  //$NON-NLS-1$ //$NON-NLS-2$\r
+        } else {\r
+            String[] urls = url.split(";");\r
+            url = null;\r
+            for (String u : urls) {\r
+                u = u.trim();\r
+                // This is an URL that comes from the env var. We expect it to either\r
+                // end with a / or the canonical name, otherwise we don't use it.\r
+                if (u.endsWith("/")) {\r
+                    url = u + SdkAddonsListConstants.URL_DEFAULT_FILENAME;\r
+                    break;\r
+                } else if (u.endsWith(SdkAddonsListConstants.URL_DEFAULT_FILENAME)) {\r
+                    url = u;\r
+                    break;\r
+                }\r
+            }\r
         }\r
 \r
-        AddonsListFetcher fetcher = new AddonsListFetcher();\r
-        Site[] sites = fetcher.fetch(monitor, url);\r
-        if (sites != null) {\r
-            mSources.removeAll(SdkSourceCategory.ADDONS_3RD_PARTY);\r
-\r
-            for (Site s : sites) {\r
-                mSources.add(SdkSourceCategory.ADDONS_3RD_PARTY,\r
-                             new SdkAddonSource(s.getUrl(), s.getUiName()));\r
+        if (url != null) {\r
+            if (getSettingsController().getForceHttp()) {\r
+                url = url.replaceAll("https://", "http://");  //$NON-NLS-1$ //$NON-NLS-2$\r
             }\r
 \r
-            mStateFetchRemoteAddonsList = 1;\r
+            AddonsListFetcher fetcher = new AddonsListFetcher();\r
+            Site[] sites = fetcher.fetch(monitor, url);\r
+            if (sites != null) {\r
+                mSources.removeAll(SdkSourceCategory.ADDONS_3RD_PARTY);\r
+\r
+                for (Site s : sites) {\r
+                    mSources.add(SdkSourceCategory.ADDONS_3RD_PARTY,\r
+                                 new SdkAddonSource(s.getUrl(), s.getUiName()));\r
+                }\r
+\r
+                mStateFetchRemoteAddonsList = 1;\r
+            }\r
         }\r
     }\r
 \r