Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteModule.java')
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteModule.java77
1 files changed, 52 insertions, 25 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteModule.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteModule.java
index ac14521cb..b85a273e2 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteModule.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteModule.java
@@ -37,6 +37,7 @@ public class RemoteModule extends RemoteFolder {
private String label;
private ICVSRemoteResource[] referencedModules;
private LocalOption[] localOptions;
+ private boolean expandable;
public static RemoteModule[] getRemoteModules(ICVSRepositoryLocation repository, CVSTag tag, IProgressMonitor monitor) throws TeamException {
@@ -74,7 +75,6 @@ public class RemoteModule extends RemoteFolder {
// Read the options associated with the module
List localOptionsList = new ArrayList();
String next = tokenizer.nextToken();
- String localName = null;
while (next.charAt(0) == '-') {
switch (next.charAt(1)) {
case 'a': // alias
@@ -84,7 +84,7 @@ public class RemoteModule extends RemoteFolder {
localOptionsList.add(Checkout.DO_NOT_RECURSE);
break;
case 'd': // directory
- localName = tokenizer.nextToken();
+ localOptionsList.add(Checkout.makeDirectoryNameOption(tokenizer.nextToken()));
break;
case 'e':
case 'i':
@@ -115,11 +115,11 @@ public class RemoteModule extends RemoteFolder {
expansions.add(tokenizer.nextToken());
moduleAliases.put(moduleName, (String[]) expansions.toArray(new String[expansions.size()]));
- modules.put(moduleName, new RemoteModule(moduleName, null, null, repository, null, localOptions, tag, true));
+ modules.put(moduleName, new RemoteModule(moduleName, null, repository, null, localOptions, tag, true));
} else {
- // The module definition must have a leading directory which can be followed by some files
+ // The module definition may have a leading directory which can be followed by some files
if (!(next.charAt(0) == '&')) {
String directory = next;
List files = new ArrayList();
@@ -128,7 +128,7 @@ public class RemoteModule extends RemoteFolder {
if ((next.charAt(0) != '&'))
files.add(next);
}
- RemoteModule remoteModule = new RemoteModule(moduleName, null, localName, repository, new Path(directory), localOptions, tag, ! files.isEmpty());
+ RemoteModule remoteModule = new RemoteModule(moduleName, null, repository, new Path(directory), localOptions, tag, ! files.isEmpty());
modules.put(moduleName, remoteModule);
if ( ! files.isEmpty()) {
ICVSRemoteResource[] children = new ICVSRemoteResource[files.size()];
@@ -138,7 +138,7 @@ public class RemoteModule extends RemoteFolder {
}
}
} else {
- modules.put(moduleName, new RemoteModule(moduleName, null, localName, repository, null, localOptions, tag, true));
+ modules.put(moduleName, new RemoteModule(moduleName, null, repository, null, localOptions, tag, true));
}
// Record any referenced modules so that can be cross-referenced below
@@ -160,35 +160,37 @@ public class RemoteModule extends RemoteFolder {
RemoteModule module = (RemoteModule)modules.get(moduleName);
String[] expansion = (String[])moduleAliases.get(moduleName);
List referencedFolders = new ArrayList();
- boolean acceptable = true;
+ boolean expandable = true;
for (int i = 0; i < expansion.length; i++) {
if (expansion[i].charAt(0) == '!') {
// XXX Unsupported for now
- acceptable = false;
+ expandable = false;
} else {
IPath path = new Path(expansion[i]);
if (path.segmentCount() > 1) {
// XXX Unsupported for now
- acceptable = false;
+ expandable = false;
} else {
RemoteModule child = (RemoteModule)modules.get(expansion[i]);
if (child == null) {
referencedFolders.add(new RemoteFolder(null, repository, path, tag));
} else {
- acceptable = false;
// Need to check if the child is a module alias
-// if (child.isAlias()) {
-// // XXX Unsupported for now
-// } else {
-// referencedFolders.add(child);
-// }
+ if (child.isAlias()) {
+ // XXX Unsupported for now
+ expandable = false;
+ } else {
+ referencedFolders.add(child);
+ }
}
}
}
}
- module.setChildren((ICVSRemoteResource[]) referencedFolders.toArray(new ICVSRemoteResource[referencedFolders.size()]));
- if (acceptable)
- acceptableModules.add(module);
+ if (expandable) {
+ module.setChildren((ICVSRemoteResource[]) referencedFolders.toArray(new ICVSRemoteResource[referencedFolders.size()]));
+ } else {
+ module.setExpandable(false);
+ }
}
// Third pass: Cross reference remote modules where necessary
@@ -199,32 +201,43 @@ public class RemoteModule extends RemoteFolder {
if (children != null) {
RemoteModule module = (RemoteModule)modules.get(moduleName);
List referencedFolders = new ArrayList();
+ boolean expandable = true;
for (int i = 0; i < children.length; i++) {
RemoteModule child = (RemoteModule)modules.get(children[i].substring(1));
if (child.isAlias()) {
// Include alias children in-line
- referencedFolders.addAll(Arrays.asList(child.getChildren()));
+ expandable = false;
+// referencedFolders.addAll(Arrays.asList(child.getChildren()));
} else {
- referencedFolders.add(child);
+ // XXX not expandable if child has local directory option (-d)
+ if (Command.findOption(child.getLocalOptions(), "-d") != null) {
+ expandable = false;
+ } else {
+ referencedFolders.add(child);
+ }
}
}
- module.setReferencedModules((ICVSRemoteResource[]) referencedFolders.toArray(new ICVSRemoteResource[referencedFolders.size()]));
+ if (expandable) {
+ module.setReferencedModules((ICVSRemoteResource[]) referencedFolders.toArray(new ICVSRemoteResource[referencedFolders.size()]));
+ } else {
+ module.setExpandable(false);
+ }
}
}
- // return (RemoteModule[])modules.values().toArray(new RemoteModule[modules.size()]);
- return (RemoteModule[])acceptableModules.toArray(new RemoteModule[acceptableModules.size()]);
+ return (RemoteModule[])modules.values().toArray(new RemoteModule[modules.size()]);
}
- public RemoteModule(String label, RemoteFolder parent, String localName, ICVSRepositoryLocation repository, IPath repositoryRelativePath, LocalOption[] localOptions, CVSTag tag, boolean isStatic) {
+ public RemoteModule(String label, RemoteFolder parent, ICVSRepositoryLocation repository, IPath repositoryRelativePath, LocalOption[] localOptions, CVSTag tag, boolean isStatic) {
super(parent,
- localName == null ? label : localName,
+ label,
repository,
repositoryRelativePath == null ? new Path(FolderSyncInfo.VIRTUAL_DIRECTORY) : repositoryRelativePath,
tag,
isStatic);
this.localOptions = localOptions;
this.label = label;
+ this.expandable = true;
}
public LocalOption[] getLocalOptions() {
@@ -234,6 +247,9 @@ public class RemoteModule extends RemoteFolder {
* Override of inherited getMembers in order to combine the physical members with any referenced modules
*/
public ICVSRemoteResource[] getMembers(CVSTag tagName, IProgressMonitor monitor) throws TeamException {
+
+ if ( ! expandable) return new ICVSRemoteResource[0];
+
ICVSRemoteResource[] physicalChildren;
if ( folderInfo.getIsStatic()) {
physicalChildren = getChildren();
@@ -279,4 +295,15 @@ public class RemoteModule extends RemoteFolder {
return Checkout.ALIAS.isElementOf(localOptions);
}
+ /**
+ * @see ICVSRemoteFolder#isExpandable()
+ */
+ public boolean isExpandable() {
+ return expandable;
+ }
+
+ private void setExpandable(boolean expandable) {
+ this.expandable = expandable;
+ }
+
}

Back to the top