aboutsummaryrefslogtreecommitdiffstats
path: root/sdkmanager
diff options
context:
space:
mode:
authorRaphael Moll <ralf@android.com>2011-08-05 10:50:29 -0700
committerRaphael Moll <ralf@android.com>2011-08-05 10:54:35 -0700
commit5ef93c336ae68b70689970209ccd7ab67a21a752 (patch)
tree6ada4f4863b3654eec989a8f3aba82387ea68973 /sdkmanager
parent591d6494c335b131bdbdac53418bd31a3f4a8cc4 (diff)
downloadsdk-5ef93c336ae68b70689970209ccd7ab67a21a752.zip
sdk-5ef93c336ae68b70689970209ccd7ab67a21a752.tar.gz
sdk-5ef93c336ae68b70689970209ccd7ab67a21a752.tar.bz2
SdkMan2: Fix load when there are no remote sources.
There was a bug where the package loader would not show all locally installed packages if it didn't find any remote source (e.g. when there's no network). This fixes it. Also adds a UT to cover this case. Change-Id: I5ccfd91895cfece54f2c2cdff58040c5ae8d1e98
Diffstat (limited to 'sdkmanager')
-rwxr-xr-xsdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java8
-rwxr-xr-xsdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java3
-rwxr-xr-xsdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java35
3 files changed, 41 insertions, 5 deletions
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java
index 276c999..871bf1b 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogic.java
@@ -231,11 +231,15 @@ class PackagesDiffLogic {
continue;
}
- // Remove all items which obsolete source we have not been visited.
+ // Remove all *remote* items which obsolete source we have not been visited.
+ // This detects packages which have disappeared from a remote source during an
+ // update and removes from the current list.
+ // Locally installed item are never removed.
for (Iterator<PkgItem> itemIt = cat.getItems().iterator();
itemIt.hasNext(); ) {
PkgItem item = itemIt.next();
- if (!mVisitedSources.contains(item.getSource())) {
+ if (item.getState() == PkgState.NEW &&
+ !mVisitedSources.contains(item.getSource())) {
itemIt.remove();
hasChanged = true;
}
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java
index 718cf60..6450c27 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java
@@ -537,9 +537,6 @@ public class PackagesPage extends UpdaterPage
mDiffLogic.updateStart();
mDiffLogic.getPackageLoader().loadPackages(new ISourceLoadedCallback() {
- // We'll need to refresh the tree if the tree is not display the categories
- // for the current sort type.
-
public boolean onUpdateSource(SdkSource source, Package[] newPackages) {
// This runs in a thread and must not access UI directly.
final boolean changed = mDiffLogic.updateSourcePackages(
diff --git a/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java b/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java
index c109180..923a5fe 100755
--- a/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java
+++ b/sdkmanager/libs/sdkuilib/tests/com/android/sdkuilib/internal/repository/sdkman2/PackagesDiffLogicTest.java
@@ -298,6 +298,41 @@ public class PackagesDiffLogicTest extends TestCase {
getTree(m, true /*displaySortByApi*/));
}
+ public void testSortByApi_NoRemoteSources() {
+ SdkSource src1 = new SdkRepoSource("http://repo.com/url1", "repo1");
+ SdkSource src2 = new SdkRepoSource("http://repo.com/url2", "repo2");
+
+ // We have a couple installed packages
+ m.updateStart();
+ // local packages
+ assertTrue(m.updateSourcePackages(true /*sortByApi*/, null /*locals*/, new Package[] {
+ new MockToolPackage(src1, 10, 3),
+ new MockPlatformToolPackage(src1, 3),
+ new MockExtraPackage(src2, "carrier", "custom_rom", 1, 0),
+ new MockExtraPackage(src2, "android", "usb_driver", 5, 3),
+ }));
+ // and no remote sources have been loaded (e.g. because there's no network)
+ assertFalse(m.updateEnd(true /*sortByApi*/));
+
+ assertEquals(
+ "PkgCategoryApi <API=TOOLS, label=Tools, #items=2>\n" +
+ "-- <INSTALLED, pkg:Android SDK Tools, revision 10>\n" +
+ "-- <INSTALLED, pkg:Android SDK Platform-tools, revision 3>\n" +
+ "PkgCategoryApi <API=EXTRAS, label=Extras, #items=2>\n" +
+ "-- <INSTALLED, pkg:Android USB Driver package, revision 5>\n" +
+ "-- <INSTALLED, pkg:Carrier Custom Rom package, revision 1>\n",
+ getTree(m, true /*displaySortByApi*/));
+
+ assertEquals(
+ "PkgCategorySource <source=repo1 (repo.com), #items=2>\n" +
+ "-- <INSTALLED, pkg:Android SDK Tools, revision 10>\n" +
+ "-- <INSTALLED, pkg:Android SDK Platform-tools, revision 3>\n" +
+ "PkgCategorySource <source=repo2 (repo.com), #items=2>\n" +
+ "-- <INSTALLED, pkg:Android USB Driver package, revision 5>\n" +
+ "-- <INSTALLED, pkg:Carrier Custom Rom package, revision 1>\n",
+ getTree(m, false /*displaySortByApi*/));
+ }
+
public void testSortByApi_CompleteUpdate() {
SdkSource src1 = new SdkRepoSource("http://repo.com/url1", "repo1");
SdkSource src2 = new SdkRepoSource("http://repo.com/url2", "repo2");