diff options
author | Malgorzata Janczarska | 2011-10-14 09:30:47 +0000 |
---|---|---|
committer | Tomasz Zarna | 2011-10-14 09:30:47 +0000 |
commit | 960dba32547fb75ebcb6cd0310340f23c6e61b62 (patch) | |
tree | 2100232b2dc5faf7857be17ab5f17f202d7e249c | |
parent | f0e53ee2640b02d1f95f87dfcfa88331c3336845 (diff) | |
download | eclipse.platform.team-960dba32547fb75ebcb6cd0310340f23c6e61b62.tar.gz eclipse.platform.team-960dba32547fb75ebcb6cd0310340f23c6e61b62.tar.xz eclipse.platform.team-960dba32547fb75ebcb6cd0310340f23c6e61b62.zip |
bug 339990: [Repo view] Module disappears in CVS Repositories viewv20111014-0930
3 files changed, 178 insertions, 7 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java index cc414aba9..b90cc0399 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java @@ -25,6 +25,7 @@ import org.eclipse.team.internal.ccvs.ui.*; import org.eclipse.team.internal.ccvs.ui.Policy; import org.eclipse.team.internal.ccvs.ui.operations.RemoteLogOperation; import org.eclipse.team.internal.ccvs.ui.operations.RemoteLogOperation.LogEntryCache; +import org.eclipse.team.internal.ccvs.ui.tags.TagSource; public class RepositoryRoot extends PlatformObject { @@ -443,15 +444,22 @@ public class RepositoryRoot extends PlatformObject { return (CVSTag[])tagSet.toArray(new CVSTag[0]); } - /* - * Return the cache key (path) for the given folder path. - * This has been changed to cache the tags directly - * with the folder to better support non-root projects. - * However, resources in the local workspace use the folder - * the project is mapped to as the tag source (see TagSource) + /** + * Return the cache key (path) for the given folder path. For root projects + * it returns the folder the project is mapped to as the tag source. For + * non-root projects it returns only the first segment of the path because + * for the time being tag lists are kept for the remote ancestors of the + * resource that is a direct child of the remote root. + * + * @see TagSource + * @see #addTags(String, CVSTag[]) + * + * @param remotePath + * the remote folder path + * @return the cache key (path) for the given folder path */ private String getCachePathFor(String remotePath) { - return remotePath; + return new Path(null, remotePath).segment(0); } /** diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/AllUITests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/AllUITests.java index c595f253a..20ac7e38c 100644 --- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/AllUITests.java +++ b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/AllUITests.java @@ -37,6 +37,7 @@ public class AllUITests extends EclipseTest { suite.addTest(CreatePatchTest.suite()); suite.addTest(CVSHisoryTableProviderTest.suite()); suite.addTest(PatchTreeTest.suite()); + suite.addTest(RepositoriesViewTests.suite()); return suite; } diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/RepositoriesViewTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/RepositoriesViewTests.java new file mode 100644 index 000000000..64e6e172b --- /dev/null +++ b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/RepositoriesViewTests.java @@ -0,0 +1,162 @@ +/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.tests.ccvs.ui;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.team.core.TeamException;
+import org.eclipse.team.internal.ccvs.core.CVSTag;
+import org.eclipse.team.internal.ccvs.core.resources.RemoteFolder;
+import org.eclipse.team.internal.ccvs.core.resources.RemoteResource;
+import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
+import org.eclipse.team.internal.ccvs.ui.model.AllRootsElement;
+import org.eclipse.team.internal.ccvs.ui.model.BranchCategory;
+import org.eclipse.team.internal.ccvs.ui.model.CVSTagElement;
+import org.eclipse.team.internal.ccvs.ui.model.RemoteContentProvider;
+import org.eclipse.team.internal.ccvs.ui.model.RemoteModule;
+import org.eclipse.team.internal.ccvs.ui.model.VersionCategory;
+import org.eclipse.team.internal.ccvs.ui.repo.RepositoryRoot;
+import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
+import org.eclipse.team.tests.ccvs.core.EclipseTest;
+
+public class RepositoriesViewTests extends EclipseTest {
+
+ public RepositoriesViewTests(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ // clear repository root cache
+ RepositoryRoot repositoryRoot = getRepositoryRoot();
+ String remotePaths[] = repositoryRoot.getKnownRemotePaths();
+ for (int i = 0; i < remotePaths.length; i++) {
+ repositoryRoot.removeTags(remotePaths[i],
+ repositoryRoot.getAllKnownTags(remotePaths[i]));
+ }
+ }
+
+ private RepositoryRoot getRepositoryRoot() {
+ RemoteContentProvider rcp = new RemoteContentProvider();
+ AllRootsElement are = new AllRootsElement();
+ Object[] repositoryRoots = rcp.getElements(are);
+ for (int i = 0; i < repositoryRoots.length; i++) {
+ RepositoryRoot repositoryRoot = (RepositoryRoot) repositoryRoots[i];
+ if (getRepository().equals(repositoryRoot.getRoot())) {
+ return repositoryRoot;
+ }
+ }
+ fail(getRepository() + " not found");
+ return null;
+ }
+
+ public static Test suite() {
+ String testName = System.getProperty("eclipse.cvs.testName");
+ if (testName == null) {
+ TestSuite suite = new TestSuite(RepositoriesViewTests.class);
+ return new CVSTestSetup(suite);
+ } else {
+ return new CVSTestSetup(new RepositoriesViewTests(testName));
+ }
+ }
+
+ public void testBranchSubmoduleChildren() throws TeamException,
+ CoreException {
+
+ String time = Long.toString(System.currentTimeMillis());
+ String moduleName = "TestBranchSubmoduleChildrenTestModule" + time;
+ String branchName = "TestBranchSubmoduleChildrenBranch" + time;
+ String versionName = "Root_" + branchName;
+
+ // create project
+ IProject project = getUniqueTestProject("TestBranchSubmoduleChildrenProject");
+ buildResources(project, new String[] { "file1.txt" }, true);
+ // share project under module
+ shareProject(getRepository(), project,
+ moduleName + "/" + project.getName(), DEFAULT_MONITOR);
+ assertValidCheckout(project);
+
+ // make some changes
+ addResources(project, new String[] { "folder1/c.txt" }, false);
+
+ // make branch
+ CVSTag version = new CVSTag(versionName, CVSTag.VERSION);
+ CVSTag branch = new CVSTag(branchName, CVSTag.BRANCH);
+
+ makeBranch(new IResource[] { project }, version, branch, true);
+ commitProject(project);
+
+ // refresh branches
+ CVSUIPlugin
+ .getPlugin()
+ .getRepositoryManager()
+ .refreshDefinedTags(
+ getRepository().getRemoteFolder(moduleName, null),
+ true, true, DEFAULT_MONITOR);
+
+ // check if module is the only branch child
+ RemoteContentProvider rcp = new RemoteContentProvider();
+ Object[] categories = rcp.getChildren(getRepositoryRoot());
+ assertEquals(4, categories.length);
+ assertTrue(categories[1] instanceof BranchCategory);
+ Object[] branches = rcp.getChildren(categories[1]);
+ assertEquals(1, branches.length);
+ assertEquals(branchName, ((CVSTagElement) (branches[0])).getTag()
+ .getName());
+ Object[] modules = rcp.getChildren(branches[0]);
+ assertEquals(1, modules.length);
+ assertEquals(moduleName, ((RemoteResource) modules[0]).getName());
+ }
+
+ public void testTagSubmoduleChildren() throws TeamException, CoreException {
+
+ String time = Long.toString(System.currentTimeMillis());
+ String moduleName = "TestTagSubmoduleChildrenTestModule" + time;
+ String versionName = "TestTagSubmoduleChildrenBranch" + time;
+
+ // create project
+ IProject project = getUniqueTestProject("TestTagSubmoduleChildrenProject");
+ buildResources(project, new String[] { "file1.txt" }, true);
+ // share project under module
+ shareProject(getRepository(), project,
+ moduleName + "/" + project.getName(), DEFAULT_MONITOR);
+ assertValidCheckout(project);
+
+ // tag project
+ CVSTag tag = new CVSTag(versionName, CVSTag.VERSION);
+
+ tagProject(project, tag, true);
+
+ RemoteContentProvider rcp = new RemoteContentProvider();
+ Object[] categories = rcp.getChildren(getRepositoryRoot());
+ assertEquals(4, categories.length);
+
+ // check if version exists for module
+ assertTrue(categories[2] instanceof VersionCategory);
+ Object[] modules = rcp.getChildren(categories[2]);
+ for (int i = 0; i < modules.length; i++) {
+ if (modules[i] instanceof RemoteModule
+ && ((RemoteModule) (modules[i])).getCVSResource().getName()
+ .equals(moduleName)) {
+ Object folders[] = rcp.getChildren(modules[i]);
+ assertEquals(1, folders.length);
+ assertEquals(versionName, ((RemoteFolder) folders[0]).getTag()
+ .getName());
+ return;
+ }
+ }
+ fail(moduleName + " not found");
+ }
+}
|