diff options
29 files changed, 1189 insertions, 1123 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ExpandModules.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ExpandModules.java index fb1d2132e..9d8ffb4c7 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ExpandModules.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ExpandModules.java @@ -18,7 +18,7 @@ public class ExpandModules extends Command { * @see Command#getCommandId() */ protected String getCommandId() { - return "expand-modules"; + return "expand-modules"; //$NON-NLS-1$ } /* diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ModuleExpansionHandler.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ModuleExpansionHandler.java index 2a0aefdee..657377c44 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ModuleExpansionHandler.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ModuleExpansionHandler.java @@ -14,7 +14,7 @@ public class ModuleExpansionHandler extends ResponseHandler { * @see ResponseHandler#getResponseID() */ public String getResponseID() { - return "Module-expansion"; + return "Module-expansion";//$NON-NLS-1$ } /* diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties index aea7aa4a5..e566369b9 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties @@ -77,10 +77,17 @@ ResponseDispatcher.receiving=Receiving reponse FileProperties.invalidEntryLine=Invalid entry line: {0} +LocalResource.invalidResourceClass=Two different implementations of ICVSResource used +LocalFile.invalidDateFormat=Invalid date format received: {0} +LocalFile.moveFailed=Move from {0} to {1} failed +LocalFolder.invalidChild=Invalid resource {0} + +RemoteResource.invalidResourceClass=Two different implementations of ICVSResource used +RemoteResource.invalidOperation=Invalid operation performed on remote resource RemoteFolder.errorFetchingRevisions=Error fetching file revision numbers RemoteFolder.invalidChild=Resource {0} is not a child of folder {1} -RemoteManagedResource.invalidOperation=Invalid operation performed on remote resource -RemoteManagedFolder.invalidChild=Invalid folder {0} received during remote operation +RemoteFolder.invalidChild=Invalid folder {0} received during remote operation +RemoteFolder.errorFetchingRevisions=Error fetching file revisions RemoteFile.noContentsReceived=No contents received from server for {0} Session.readError=Read finished prematurely @@ -166,4 +173,9 @@ FileModificationValidator.isReadOnly=File is Read Only. EXTServerConnection.invalidPort=A port cannot be specified for the ext connection method. EXTServerConnection.varsNotSet=Cannot run external ext program because CVS_RSH and CVS_SERVER variables are not initialized. -EXTServerConnection.ioError=Error starting external connection program: {0}. Ensure that the path is correct and that you can connect manually using this program.
\ No newline at end of file +EXTServerConnection.ioError=Error starting external connection program: {0}. Ensure that the path is correct and that you can connect manually using this program. + +CVSRemoteSyncElement.alreadyManaged=Error making a remote folder in sync with the server. The local folder is already managed. +Util.Internal_error,_resource_does_not_start_with_root_3=Internal error, resource does not start with root + + diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSRemoteSyncElement.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSRemoteSyncElement.java index fb12638b9..2601ebf00 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSRemoteSyncElement.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSRemoteSyncElement.java @@ -159,7 +159,7 @@ public class CVSRemoteSyncElement extends RemoteSyncElement { if (local.exists()) {
// We could have an incoming change or deletion
if (remote == null) {
- info = new ResourceSyncInfo(local.getName(), ResourceSyncInfo.ADDED_REVISION, ResourceSyncInfo.DUMMY_TIMESTAMP, CVSProvider.isText(local.getName())?"":"-kb", local.getParent().getFolderSyncInfo().getTag(), null);
+ info = new ResourceSyncInfo(local.getName(), ResourceSyncInfo.ADDED_REVISION, ResourceSyncInfo.DUMMY_TIMESTAMP, CVSProvider.isText(local.getName())?ResourceSyncInfo.USE_SERVER_MODE:ResourceSyncInfo.BINARY_TAG, local.getParent().getFolderSyncInfo().getTag(), null);
revision = info.getRevision();
} else {
info = remote.getSyncInfo();
@@ -249,7 +249,7 @@ public class CVSRemoteSyncElement extends RemoteSyncElement { } else {
// If the folder already has CVS info, check that the remote and local match
if(local.isManaged() && local.isCVSFolder() && ! remote.getFolderSyncInfo().equals(local.getFolderSyncInfo())) {
- throw new CVSException(IStatus.ERROR, 0, "Error making a remote folder in sync with the server. The local folder is already managed.");
+ throw new CVSException(IStatus.ERROR, 0, Policy.bind("CVSRemoteSyncElement.alreadyManaged"));//$NON-NLS-1$
}
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFile.java index e6c3d2b69..2c9bca629 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFile.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFile.java @@ -77,7 +77,7 @@ public class LocalFile extends LocalResource implements ICVSFile { EntryFileDateFormat timestamp = new EntryFileDateFormat();
millSec = timestamp.toDate(date).getTime();
} catch (ParseException e) {
- throw new CVSException(0,0,"Format of the Date for a TimeStamp not parseable",e);
+ throw new CVSException(Policy.bind("LocalFile.invalidDateFormat", date), e); //$NON-NLS-1$
}
}
ioResource.setLastModified(millSec);
@@ -135,7 +135,7 @@ public class LocalFile extends LocalResource implements ICVSFile { boolean success = ioResource.renameTo(file.getFile());
if (!success) {
- throw new CVSException("Move from " + ioResource + " to " + file + " was not possible");
+ throw new CVSException(Policy.bind("LocalFile.moveFailed", ioResource.toString(), file.toString())); //$NON-NLS-1$
}
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFolder.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFolder.java index 881150691..4c689b834 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFolder.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalFolder.java @@ -99,7 +99,7 @@ public class LocalFolder extends LocalResource implements ICVSFolder { * @see ICVSFolder#createFolder(String)
*/
public ICVSFolder getFolder(String name) throws CVSException {
- if ((".".equals(name)) || (("." + SEPARATOR).equals(name)))
+ if ((CURRENT_LOCAL_FOLDER.equals(name)) || ((CURRENT_LOCAL_FOLDER + SEPARATOR).equals(name)))
return this;
return new LocalFolder(new File(ioResource, name));
}
@@ -125,7 +125,7 @@ public class LocalFolder extends LocalResource implements ICVSFolder { LocalFile localFile = new LocalFile(child);
ResourceSyncInfo info = localFile.getSyncInfo();
if (info == null)
- throw new CVSFileNotFoundException(Policy.bind("LocalFolder.invalidChild", child.getAbsolutePath()));
+ throw new CVSFileNotFoundException(Policy.bind("LocalFolder.invalidChild", child.getAbsolutePath())); //$NON-NLS-1$
isDirectory = info.isDirectory();
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalResource.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalResource.java index 0fbfa74ef..e3b2a06b6 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalResource.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/LocalResource.java @@ -10,8 +10,9 @@ import java.io.File; import org.eclipse.team.ccvs.core.CVSProviderPlugin;
import org.eclipse.team.core.IIgnoreInfo;
import org.eclipse.team.core.TeamPlugin;
-import org.eclipse.team.core.internal.IgnoreInfo;
import org.eclipse.team.internal.ccvs.core.CVSException;
+import org.eclipse.team.internal.ccvs.core.Policy;
+import org.eclipse.team.internal.ccvs.core.client.Session;
import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
import org.eclipse.team.internal.ccvs.core.util.Assert;
import org.eclipse.team.internal.ccvs.core.util.FileNameMatcher;
@@ -30,7 +31,8 @@ public abstract class LocalResource implements ICVSResource { // The seperator that must be used when creating CVS resource paths. Never use
// the platform default seperator since it is not compatible with CVS resources.
- protected static final String SEPARATOR = "/";
+ protected static final String SEPARATOR = Session.SERVER_SEPARATOR;
+ protected static final String CURRENT_LOCAL_FOLDER = Session.CURRENT_LOCAL_FOLDER;
/**
* The local file represented by this handle.
@@ -60,7 +62,7 @@ public abstract class LocalResource implements ICVSResource { try {
rootFolder = (LocalResource)root;
} catch (ClassCastException e) {
- throw new CVSException(0,0,"two different implementations of ICVSResource used",e);
+ throw new CVSException(Policy.bind("LocalResource.invalidResourceClass"),e); //$NON-NLS-1$
}
result = Util.getRelativePath(rootFolder.getPath(),getPath());
@@ -115,7 +117,7 @@ public abstract class LocalResource implements ICVSResource { for (int i = 0; i < ignorePatterns.length; i++) {
IIgnoreInfo info = ignorePatterns[i];
if(info.getEnabled()) {
- matcher.register(info.getPattern(), "true");
+ matcher.register(info.getPattern(), "true"); //$NON-NLS-1$
}
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java index 4876a00ba..8fea7a8a4 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java @@ -121,12 +121,11 @@ public class RemoteFile extends RemoteResource implements ICVSRemoteFile, ICVSFi */ // XXX do we need the first two constructors? public RemoteFile(RemoteFolder parent, int workspaceSyncState, String name, CVSTag tag) { - this(parent, workspaceSyncState, name, "0", tag); + this(parent, workspaceSyncState, name, ResourceSyncInfo.ADDED_REVISION, tag); } public RemoteFile(RemoteFolder parent, int workspaceSyncState, String name, String revision, CVSTag tag) { - this(parent, workspaceSyncState, new ResourceSyncInfo(name, revision, "dummy", "", tag, "u=rw,g=rw,o=rw")); - // A blank keyword mode will use the type provided by the server to transfer the file contents + this(parent, workspaceSyncState, new ResourceSyncInfo(name, revision, ResourceSyncInfo.DUMMY_TIMESTAMP, ResourceSyncInfo.USE_SERVER_MODE, tag, ResourceSyncInfo.DEFAULT_PERMISSIONS)); } public RemoteFile(RemoteFolder parent, ResourceSyncInfo info) { @@ -173,7 +172,7 @@ public class RemoteFile extends RemoteResource implements ICVSRemoteFile, ICVSFi } } if (contents == null) - throw new CVSException(Policy.bind("RemoteFile.noContentsReceived", getRemoteLocation(null))); + throw new CVSException(Policy.bind("RemoteFile.noContentsReceived", getRemoteLocation(null))); //$NON-NLS-1$ return new ByteArrayInputStream(contents); } catch(CVSException e) { return null; diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolder.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolder.java index 47b99962a..a86058f4d 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolder.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolder.java @@ -54,8 +54,6 @@ import org.eclipse.team.internal.ccvs.core.util.Util; * */ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, ICVSFolder { - - public static final String VIRTUAL_DIRECTORY = "CVSROOT/Emptydir"; protected FolderSyncInfo folderInfo; private ICVSRemoteResource[] children; @@ -66,7 +64,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC */ public RemoteFolder(RemoteFolder parent, ICVSRepositoryLocation repository, IPath repositoryRelativePath, CVSTag tag) { this(parent, - repositoryRelativePath.lastSegment() == null ? "" : repositoryRelativePath.lastSegment(), + repositoryRelativePath.lastSegment() == null ? "" : repositoryRelativePath.lastSegment(), //$NON-NLS-1$ repository, repositoryRelativePath, tag, @@ -113,7 +111,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC } if (count[0] != fileNames.length) - throw new CVSException(Policy.bind("RemoteFolder.errorFetchingRevisions")); + throw new CVSException(Policy.bind("RemoteFolder.errorFetchingRevisions")); //$NON-NLS-1$ } /** @@ -250,7 +248,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC IStatus status = Command.UPDATE.execute(s, new GlobalOption[] { Command.DO_NOT_CHANGE }, (LocalOption[])localOptions.toArray(new LocalOption[localOptions.size()]), - new String[] { "." }, + new String[] { Session.CURRENT_LOCAL_FOLDER }, new UpdateListener(listener), monitor); if (status.getCode() == CVSStatus.SERVER_ERROR) { @@ -341,7 +339,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC ICVSResource child = getChild(name); if (child.isFolder()) return (ICVSFolder)child; - throw new CVSException(Policy.bind("RemoteFolder.invalidChild", new Object[] {name})); + throw new CVSException(Policy.bind("RemoteFolder.invalidChild", new Object[] {name})); //$NON-NLS-1$ } /** @@ -351,7 +349,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC ICVSResource child = getChild(name); if (!child.isFolder()) return (ICVSFile)child; - throw new CVSException(Policy.bind("RemoteFolder.invalidChild", new Object[] {name})); + throw new CVSException(Policy.bind("RemoteFolder.invalidChild", new Object[] {name})); //$NON-NLS-1$ } @@ -374,13 +372,13 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC public String getRelativePath(ICVSFolder ancestor) throws CVSException { if (ancestor == this) - return "."; + return Session.CURRENT_LOCAL_FOLDER; RemoteResource rootFolder; try { rootFolder = (RemoteResource)ancestor; } catch (ClassCastException e) { - throw new CVSException(0,0,"two different implementations of ICVSResource used",e); + throw new CVSException(Policy.bind("RemoteResource.invalidResourceClass"),e); //$NON-NLS-1$ } return Util.getRelativePath(rootFolder.getLocalPath(), getLocalPath()); @@ -426,7 +424,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC return this; ICVSRemoteResource[] children = getChildren(); if (children == null) - throw new CVSException(Policy.bind("RemoteFolder.invalidChild", path, getName())); + throw new CVSException(Policy.bind("RemoteFolder.invalidChild", path, getName()));//$NON-NLS-1$ if (path.indexOf(Session.SERVER_SEPARATOR) == -1) { for (int i=0;i<children.length;i++) { if (children[i].getName().equals(path)) @@ -438,17 +436,17 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC return ((RemoteFolder)getChild(p.segment(0))).getChild(p.removeFirstSegments(1).toString()); } catch (CVSException e) { // regenerate the exception to give as much info as possible - throw new CVSException(Policy.bind("RemoteFolder.invalidChild", path, getName())); + throw new CVSException(Policy.bind("RemoteFolder.invalidChild", path, getName()));//$NON-NLS-1$ } } - throw new CVSException(Policy.bind("RemoteFolder.invalidChild", path, getName())); + throw new CVSException(Policy.bind("RemoteFolder.invalidChild", path, getName()));//$NON-NLS-1$ } /** * @see ICVSFolder#mkdir() */ public void mkdir() throws CVSException { - throw new CVSException(Policy.bind("RemoteResource.invalidOperation")); + throw new CVSException(Policy.bind("RemoteResource.invalidOperation"));//$NON-NLS-1$ } /** @@ -482,7 +480,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC * @see ICVSFolder#acceptChildren(ICVSResourceVisitor) */ public void acceptChildren(ICVSResourceVisitor visitor) throws CVSException { - throw new CVSException(Policy.bind("RemoteResource.invalidOperation")); + throw new CVSException(Policy.bind("RemoteResource.invalidOperation"));//$NON-NLS-1$ } /* @@ -538,7 +536,7 @@ public class RemoteFolder extends RemoteResource implements ICVSRemoteFolder, IC public void setFolderSyncInfo(FolderSyncInfo folderInfo) throws CVSException { this.folderInfo = folderInfo; // XXX temporary to see if this ever occurs - throw new CVSException(Policy.bind("RemoteResource.invalidOperation")); + throw new CVSException(Policy.bind("RemoteResource.invalidOperation"));//$NON-NLS-1$ } /** diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolderTree.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolderTree.java index c7b4354e3..2bf59497e 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolderTree.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolderTree.java @@ -59,7 +59,7 @@ public class RemoteFolderTree extends RemoteFolder { protected String getLocalPath() { if (parent == null) - return ""; + return ""; //$NON-NLS-1$ return Util.appendPath(parent.getLocalPath(), getName()); } } 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 705b73fc4..ac14521cb 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 @@ -33,8 +33,6 @@ import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo; * @author */ public class RemoteModule extends RemoteFolder { - - public static final String VIRTUAL_DIRECTORY = "CVSROOT/Emptydir"; private String label; private ICVSRemoteResource[] referencedModules; @@ -222,7 +220,7 @@ public class RemoteModule extends RemoteFolder { super(parent, localName == null ? label : localName, repository, - repositoryRelativePath == null ? new Path(VIRTUAL_DIRECTORY) : repositoryRelativePath, + repositoryRelativePath == null ? new Path(FolderSyncInfo.VIRTUAL_DIRECTORY) : repositoryRelativePath, tag, isStatic); this.localOptions = localOptions; diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteResource.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteResource.java index 2fa0df9d9..0b817fa0f 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteResource.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteResource.java @@ -88,7 +88,7 @@ public abstract class RemoteResource extends PlatformObject implements ICVSRemot * @see ICVSResource#getParent() */ public ICVSFolder getParent() { - throw new UnsupportedOperationException(Policy.bind("RemoteManagedResource.invalidOperation")); + throw new UnsupportedOperationException(Policy.bind("RemoteResource.invalidOperation")); //$NON-NLS-1$ } /* diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/FolderSyncInfo.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/FolderSyncInfo.java index 0883688b2..a8d9ce289 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/FolderSyncInfo.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/FolderSyncInfo.java @@ -20,6 +20,9 @@ import org.eclipse.team.internal.ccvs.core.Policy; */ public class FolderSyncInfo { + // The Repository value for virtual directories (i.e. local with no corresponding remote) + public static final String VIRTUAL_DIRECTORY = "CVSROOT/Emptydir"; //$NON-NLS-1$ + // relative path of this folder in the repository, project1/folder1/folder2 private String repository; diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java index 2d5094cea..f7aca5223 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.java @@ -32,6 +32,7 @@ public class ResourceSyncInfo { // utility constants private static final String DIRECTORY_PREFIX = "D/"; //$NON-NLS-1$ public static final String BINARY_TAG = "-kb"; //$NON-NLS-1$ + public static final String USE_SERVER_MODE = ""; //$NON-NLS-1$ private static final String SEPERATOR = "/"; //$NON-NLS-1$ // Timestamp constants used to identify special cases diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/RemoteFolderTreeBuilder.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/RemoteFolderTreeBuilder.java index 11c07115c..10ce7a171 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/RemoteFolderTreeBuilder.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/RemoteFolderTreeBuilder.java @@ -69,10 +69,10 @@ public class RemoteFolderTreeBuilder { private boolean projectDoesNotExist = false;
- private static String UNKNOWN = "";
- private static String DELETED = "DELETED";
- private static String ADDED = "ADDED";
- private static String FOLDER = "FOLDER";
+ private static String UNKNOWN = ""; //$NON-NLS-1$
+ private static String DELETED = "DELETED"; //$NON-NLS-1$
+ private static String ADDED = "ADDED"; //$NON-NLS-1$
+ private static String FOLDER = "FOLDER"; //$NON-NLS-1$
private static Map EMPTY_MAP = new HashMap();
@@ -414,7 +414,7 @@ public class RemoteFolderTreeBuilder { IStatus status = Command.UPDATE.execute(session,
new GlobalOption[] { Command.DO_NOT_CHANGE },
updateLocalOptions,
- new String[] { "." },
+ new String[] { Session.CURRENT_LOCAL_FOLDER },
new UpdateListener(listener),
monitor);
return changedFiles;
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ResourceDeltaVisitor.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ResourceDeltaVisitor.java index f400af600..d7cd2db43 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ResourceDeltaVisitor.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ResourceDeltaVisitor.java @@ -61,7 +61,7 @@ public abstract class ResourceDeltaVisitor implements IResourceDeltaVisitor { } visitor.handle(); } catch (CoreException e) { - Util.logError(Policy.bind("ResourceDeltaVisitor.visitError"), e); + Util.logError(Policy.bind("ResourceDeltaVisitor.visitError"), e);//$NON-NLS-1$ } } }; diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ServerDateFormat.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ServerDateFormat.java index 7f90b3af4..123b0ca60 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ServerDateFormat.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ServerDateFormat.java @@ -20,11 +20,11 @@ import java.util.TimeZone; */ public class ServerDateFormat extends SimpleDateFormat { - public static final String FORMAT = "dd MMM yyyy HH:mm:ss"; + public static final String FORMAT = "dd MMM yyyy HH:mm:ss";//$NON-NLS-1$ public ServerDateFormat() { super(FORMAT, Locale.US); - setTimeZone(TimeZone.getTimeZone("GMT")); + setTimeZone(TimeZone.getTimeZone("GMT"));//$NON-NLS-1$ } /** @@ -32,8 +32,8 @@ public class ServerDateFormat extends SimpleDateFormat { */ public Date toDate(String text) throws ParseException { // FIXME this cuts the timezone which we do not want - if (text.indexOf("-") != -1) { - text = text.substring(0,text.indexOf("-")); + if (text.indexOf("-") != -1) {//$NON-NLS-1$ + text = text.substring(0,text.indexOf("-"));//$NON-NLS-1$ } return parse(text); } diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/StringMatcher.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/StringMatcher.java index 5b5b7829e..9936f7ac9 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/StringMatcher.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/StringMatcher.java @@ -1,388 +1,388 @@ -package org.eclipse.team.internal.ccvs.core.util;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-import java.util.*;
-
-/**
- * A string pattern matcher, suppporting * and ? wildcards.
- * Note: code copied from org.eclipse.jdt.internal.core.util.StringMatcher on April 3, 2001
- * (version 0.1 - 010901H18 [rename jbl]).
- */
-public class StringMatcher {
- protected String fPattern;
- protected int fLength; // pattern length
- protected boolean fIgnoreWildCards;
- protected boolean fIgnoreCase;
- protected boolean fHasLeadingStar;
- protected boolean fHasTrailingStar;
- protected String fSegments[]; //the given pattern is split into * separated segments
-
- /* boundary value beyond which we don't need to search in the text */
- protected int fBound = 0;
-
-
- protected static final char fSingleWildCard = '\u0000';
-
- public static class Position {
- int start; //inclusive
- int end; //exclusive
- public Position(int start, int end) {
- this.start = start;
- this.end = end;
- }
- public int getStart() {
- return start;
- }
- public int getEnd() {
- return end;
- }
- }
- /**
- * Find the first occurrence of the pattern between <code>start</code)(inclusive)
- * and <code>end</code>(exclusive).
- * @param <code>text</code>, the String object to search in
- * @param <code>start</code>, the starting index of the search range, inclusive
- * @param <code>end</code>, the ending index of the search range, exclusive
- * @return an <code>StringMatcher.Position</code> object that keeps the starting
- * (inclusive) and ending positions (exclusive) of the first occurrence of the
- * pattern in the specified range of the text; return null if not found or subtext
- * is empty (start==end). A pair of zeros is returned if pattern is empty string
- * Note that for pattern like "*abc*" with leading and trailing stars, position of "abc"
- * is returned. For a pattern like"*??*" in text "abcdf", (1,3) is returned
- */
-
- public StringMatcher.Position find(String text, int start, int end) {
- if (fPattern == null|| text == null)
- throw new IllegalArgumentException();
-
- int tlen = text.length();
- if (start < 0)
- start = 0;
- if (end > tlen)
- end = tlen;
- if (end < 0 ||start >= end )
- return null;
- if (fLength == 0)
- return new Position(start, start);
- if (fIgnoreWildCards) {
- int x = posIn(text, start, end);
- if (x < 0)
- return null;
- return new Position(x, x+fLength);
- }
-
- int segCount = fSegments.length;
- if (segCount == 0)//pattern contains only '*'(s)
- return new Position (start, end);
-
- int curPos = start;
- int matchStart = -1;
- int i;
- for (i = 0; i < segCount && curPos < end; ++i) {
- String current = fSegments[i];
- int nextMatch = regExpPosIn(text, curPos, end, current);
- if (nextMatch < 0 )
- return null;
- if(i == 0)
- matchStart = nextMatch;
- curPos = nextMatch + current.length();
- }
- if (i < segCount)
- return null;
- return new Position(matchStart, curPos);
- }
- /**
- * StringMatcher constructor takes in a String object that is a simple
- * pattern which may contain * for 0 and many characters and
- * ? for exactly one character.
- *
- * Literal '*' and '?' characters must be escaped in the pattern
- * e.g., "\*" means literal "*", etc.
- *
- * Escaping any other character (including the escape character itself),
- * just results in that character in the pattern.
- * e.g., "\a" means "a" and "\\" means "\"
- *
- * If invoking the StringMatcher with string literals in Java, don't forget
- * escape characters are represented by "\\".
- *
- * @param aPattern the pattern to match text against
- * @param ignoreCase if true, case is ignored
- * @param ignoreWildCards if true, wild cards and their escape sequences are ignored
- * (everything is taken literally).
- */
- public StringMatcher(String aPattern, boolean ignoreCase, boolean ignoreWildCards) {
- fIgnoreCase = ignoreCase;
- fIgnoreWildCards = ignoreWildCards;
- fLength = aPattern.length();
-
- /* convert case */
- if (fIgnoreCase) {
- fPattern = aPattern.toUpperCase();
- } else {
- fPattern = aPattern;
- }
-
- if (fIgnoreWildCards) {
- parseNoWildCards();
- } else {
- parseWildCards();
- }
- }
- /**
- * Given the starting (inclusive) and the ending (exclusive) poisitions in the
- * <code>text</code>, determine if the given substring matches with aPattern
- * @return true if the specified portion of the text matches the pattern
- * @param String <code>text</code>, a String object that contains the substring to match
- * @param int <code>start<code> marks the starting position (inclusive) of the substring
- * @param int <code>end<code> marks the ending index (exclusive) of the substring
- */
- public boolean match(String text, int start, int end) {
- if (null == fPattern || null == text)
- throw new IllegalArgumentException();
-
- if (start >= end)
- return false;
-
- if (fIgnoreWildCards)
- return fPattern.regionMatches(fIgnoreCase, 0, text, start, fLength);
- int segCount = fSegments.length;
- if (segCount == 0)//pattern contains only '*'(s) or empty pattern
- return true;
- if (start == end)
- return fLength == 0;
- if (fLength == 0)
- return start == end;
-
- int tlen = text.length();
- if (start < 0)
- start = 0;
- if (end > tlen)
- end = tlen;
-
- int tCurPos = start;
- int bound = end - fBound;
- if ( bound < 0)
- return false;
- int i=0;
- String current = fSegments[i];
- int segLength = current.length();
-
- /* process first segment */
- if (!fHasLeadingStar){
- if(!regExpRegionMatches(text, start, current, 0, segLength)) {
- return false;
- } else {
- ++i;
- tCurPos = tCurPos + segLength;
- }
- }
-
- /* process middle segments */
- for ( ; i < segCount && tCurPos <= bound; ++i) {
- current = fSegments[i];
- int currentMatch;
- int k = current.indexOf(fSingleWildCard);
- if (k < 0) {
- currentMatch = textPosIn(text, tCurPos, end, current);
- if (currentMatch < 0)
- return false;
- } else {
- currentMatch = regExpPosIn(text, tCurPos, end, current);
- if (currentMatch < 0)
- return false;
- }
- tCurPos = currentMatch + current.length();
- }
-
- /* process final segment */
- if (!fHasTrailingStar && tCurPos != end) {
- int clen = current.length();
- return regExpRegionMatches(text, end - clen, current, 0, clen);
- }
- return i == segCount ;
- }
- /**
- * match the given <code>text</code> with the pattern
- * @return true if matched eitherwise false
- * @param <code>text</code>, a String object
- */
- public boolean match(String text) {
- return match(text, 0, text.length());
- }
- /**
- * This method parses the given pattern into segments seperated by wildcard '*' characters.
- * Since wildcards are not being used in this case, the pattern consists of a single segment.
- */
- private void parseNoWildCards() {
- fSegments = new String[1];
- fSegments[0] = fPattern;
- fBound = fLength;
- }
- /**
- * This method parses the given pattern into segments seperated by wildcard '*' characters.
- * @param p, a String object that is a simple regular expression with * and/or ?
- */
- private void parseWildCards() {
- if(fPattern.startsWith("*"))
- fHasLeadingStar = true;
- if(fPattern.endsWith("*")) {
- /* make sure it's not an escaped wildcard */
- if (fLength > 1 && fPattern.charAt(fLength - 2) != '\\') {
- fHasTrailingStar = true;
- }
- }
-
- Vector temp = new Vector();
-
- int pos = 0;
- StringBuffer buf = new StringBuffer();
- while (pos < fLength) {
- char c = fPattern.charAt(pos++);
- switch (c) {
- case '\\':
- if (pos >= fLength) {
- buf.append(c);
- } else {
- char next = fPattern.charAt(pos++);
- /* if it's an escape sequence */
- if (next == '*' || next == '?' || next == '\\') {
- buf.append(next);
- } else {
- /* not an escape sequence, just insert literally */
- buf.append(c);
- buf.append(next);
- }
- }
- break;
- case '*':
- if (buf.length() > 0) {
- /* new segment */
- temp.addElement(buf.toString());
- fBound += buf.length();
- buf.setLength(0);
- }
- break;
- case '?':
- /* append special character representing single match wildcard */
- buf.append(fSingleWildCard);
- break;
- default:
- buf.append(c);
- }
- }
-
- /* add last buffer to segment list */
- if (buf.length() > 0) {
- temp.addElement(buf.toString());
- fBound += buf.length();
- }
-
- fSegments = new String[temp.size()];
- temp.copyInto(fSegments);
- }
- /**
- * @param <code>text</code>, a string which contains no wildcard
- * @param <code>start</code>, the starting index in the text for search, inclusive
- * @param <code>end</code>, the stopping point of search, exclusive
- * @return the starting index in the text of the pattern , or -1 if not found
- */
- protected int posIn(String text, int start, int end) {//no wild card in pattern
- int max = end - fLength;
-
- if (!fIgnoreCase) {
- int i = text.indexOf(fPattern, start);
- if (i == -1 || i > max)
- return -1;
- return i;
- }
-
- for (int i = start; i <= max; ++i) {
- if (text.regionMatches(true, i, fPattern, 0, fLength))
- return i;
- }
-
- return -1;
- }
- /**
- * @param <code>text</code>, a simple regular expression that may only contain '?'(s)
- * @param <code>start</code>, the starting index in the text for search, inclusive
- * @param <code>end</code>, the stopping point of search, exclusive
- * @param <code>p</code>, a simple regular expression that may contains '?'
- * @param <code>caseIgnored</code>, wether the pattern is not casesensitive
- * @return the starting index in the text of the pattern , or -1 if not found
- */
- protected int regExpPosIn(String text, int start, int end, String p) {
- int plen = p.length();
-
- int max = end - plen;
- for (int i = start; i <= max; ++i) {
- if (regExpRegionMatches(text, i, p, 0, plen))
- return i;
- }
- return -1;
- }
- /**
- *
- * @return boolean
- * @param <code>text</code>, a String to match
- * @param <code>start</code>, int that indicates the starting index of match, inclusive
- * @param <code>end</code> int that indicates the ending index of match, exclusive
- * @param <code>p</code>, String, String, a simple regular expression that may contain '?'
- * @param <code>ignoreCase</code>, boolean indicating wether code>p</code> is case sensitive
- */
- protected boolean regExpRegionMatches(String text, int tStart, String p, int pStart, int plen) {
- while (plen-- > 0) {
- char tchar = text.charAt(tStart++);
- char pchar = p.charAt(pStart++);
-
- /* process wild cards */
- if (!fIgnoreWildCards) {
- /* skip single wild cards */
- if (pchar == fSingleWildCard) {
- continue;
- }
- }
- if (pchar == tchar)
- continue;
- if (fIgnoreCase) {
- char tc = Character.toUpperCase(tchar);
- if (tc == pchar)
- continue;
- }
- return false;
- }
- return true;
- }
- /**
- * @param <code>text</code>, the string to match
- * @param <code>start</code>, the starting index in the text for search, inclusive
- * @param <code>end</code>, the stopping point of search, exclusive
- * @param code>p</code>, a string that has no wildcard
- * @param <code>ignoreCase</code>, boolean indicating wether code>p</code> is case sensitive
- * @return the starting index in the text of the pattern , or -1 if not found
- */
- protected int textPosIn(String text, int start, int end, String p) {
-
- int plen = p.length();
- int max = end - plen;
-
- if (!fIgnoreCase) {
- int i = text.indexOf(p, start);
- if (i == -1 || i > max)
- return -1;
- return i;
- }
-
- for (int i = 0; i <= max; ++i) {
- if (text.regionMatches(true, i, p, 0, plen))
- return i;
- }
-
- return -1;
- }
-}
+package org.eclipse.team.internal.ccvs.core.util; + +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ + +import java.util.*; + +/** + * A string pattern matcher, suppporting * and ? wildcards. + * Note: code copied from org.eclipse.jdt.internal.core.util.StringMatcher on April 3, 2001 + * (version 0.1 - 010901H18 [rename jbl]). + */ +public class StringMatcher { + protected String fPattern; + protected int fLength; // pattern length + protected boolean fIgnoreWildCards; + protected boolean fIgnoreCase; + protected boolean fHasLeadingStar; + protected boolean fHasTrailingStar; + protected String fSegments[]; //the given pattern is split into * separated segments + + /* boundary value beyond which we don't need to search in the text */ + protected int fBound = 0; + + + protected static final char fSingleWildCard = '\u0000'; + + public static class Position { + int start; //inclusive + int end; //exclusive + public Position(int start, int end) { + this.start = start; + this.end = end; + } + public int getStart() { + return start; + } + public int getEnd() { + return end; + } + } + /** + * Find the first occurrence of the pattern between <code>start</code)(inclusive) + * and <code>end</code>(exclusive). + * @param <code>text</code>, the String object to search in + * @param <code>start</code>, the starting index of the search range, inclusive + * @param <code>end</code>, the ending index of the search range, exclusive + * @return an <code>StringMatcher.Position</code> object that keeps the starting + * (inclusive) and ending positions (exclusive) of the first occurrence of the + * pattern in the specified range of the text; return null if not found or subtext + * is empty (start==end). A pair of zeros is returned if pattern is empty string + * Note that for pattern like "*abc*" with leading and trailing stars, position of "abc" + * is returned. For a pattern like"*??*" in text "abcdf", (1,3) is returned + */ + + public StringMatcher.Position find(String text, int start, int end) { + if (fPattern == null|| text == null) + throw new IllegalArgumentException(); + + int tlen = text.length(); + if (start < 0) + start = 0; + if (end > tlen) + end = tlen; + if (end < 0 ||start >= end ) + return null; + if (fLength == 0) + return new Position(start, start); + if (fIgnoreWildCards) { + int x = posIn(text, start, end); + if (x < 0) + return null; + return new Position(x, x+fLength); + } + + int segCount = fSegments.length; + if (segCount == 0)//pattern contains only '*'(s) + return new Position (start, end); + + int curPos = start; + int matchStart = -1; + int i; + for (i = 0; i < segCount && curPos < end; ++i) { + String current = fSegments[i]; + int nextMatch = regExpPosIn(text, curPos, end, current); + if (nextMatch < 0 ) + return null; + if(i == 0) + matchStart = nextMatch; + curPos = nextMatch + current.length(); + } + if (i < segCount) + return null; + return new Position(matchStart, curPos); + } + /** + * StringMatcher constructor takes in a String object that is a simple + * pattern which may contain * for 0 and many characters and + * ? for exactly one character. + * + * Literal '*' and '?' characters must be escaped in the pattern + * e.g., "\*" means literal "*", etc. + * + * Escaping any other character (including the escape character itself), + * just results in that character in the pattern. + * e.g., "\a" means "a" and "\\" means "\" + * + * If invoking the StringMatcher with string literals in Java, don't forget + * escape characters are represented by "\\". + * + * @param aPattern the pattern to match text against + * @param ignoreCase if true, case is ignored + * @param ignoreWildCards if true, wild cards and their escape sequences are ignored + * (everything is taken literally). + */ + public StringMatcher(String aPattern, boolean ignoreCase, boolean ignoreWildCards) { + fIgnoreCase = ignoreCase; + fIgnoreWildCards = ignoreWildCards; + fLength = aPattern.length(); + + /* convert case */ + if (fIgnoreCase) { + fPattern = aPattern.toUpperCase(); + } else { + fPattern = aPattern; + } + + if (fIgnoreWildCards) { + parseNoWildCards(); + } else { + parseWildCards(); + } + } + /** + * Given the starting (inclusive) and the ending (exclusive) poisitions in the + * <code>text</code>, determine if the given substring matches with aPattern + * @return true if the specified portion of the text matches the pattern + * @param String <code>text</code>, a String object that contains the substring to match + * @param int <code>start<code> marks the starting position (inclusive) of the substring + * @param int <code>end<code> marks the ending index (exclusive) of the substring + */ + public boolean match(String text, int start, int end) { + if (null == fPattern || null == text) + throw new IllegalArgumentException(); + + if (start >= end) + return false; + + if (fIgnoreWildCards) + return fPattern.regionMatches(fIgnoreCase, 0, text, start, fLength); + int segCount = fSegments.length; + if (segCount == 0)//pattern contains only '*'(s) or empty pattern + return true; + if (start == end) + return fLength == 0; + if (fLength == 0) + return start == end; + + int tlen = text.length(); + if (start < 0) + start = 0; + if (end > tlen) + end = tlen; + + int tCurPos = start; + int bound = end - fBound; + if ( bound < 0) + return false; + int i=0; + String current = fSegments[i]; + int segLength = current.length(); + + /* process first segment */ + if (!fHasLeadingStar){ + if(!regExpRegionMatches(text, start, current, 0, segLength)) { + return false; + } else { + ++i; + tCurPos = tCurPos + segLength; + } + } + + /* process middle segments */ + for ( ; i < segCount && tCurPos <= bound; ++i) { + current = fSegments[i]; + int currentMatch; + int k = current.indexOf(fSingleWildCard); + if (k < 0) { + currentMatch = textPosIn(text, tCurPos, end, current); + if (currentMatch < 0) + return false; + } else { + currentMatch = regExpPosIn(text, tCurPos, end, current); + if (currentMatch < 0) + return false; + } + tCurPos = currentMatch + current.length(); + } + + /* process final segment */ + if (!fHasTrailingStar && tCurPos != end) { + int clen = current.length(); + return regExpRegionMatches(text, end - clen, current, 0, clen); + } + return i == segCount ; + } + /** + * match the given <code>text</code> with the pattern + * @return true if matched eitherwise false + * @param <code>text</code>, a String object + */ + public boolean match(String text) { + return match(text, 0, text.length()); + } + /** + * This method parses the given pattern into segments seperated by wildcard '*' characters. + * Since wildcards are not being used in this case, the pattern consists of a single segment. + */ + private void parseNoWildCards() { + fSegments = new String[1]; + fSegments[0] = fPattern; + fBound = fLength; + } + /** + * This method parses the given pattern into segments seperated by wildcard '*' characters. + * @param p, a String object that is a simple regular expression with * and/or ? + */ + private void parseWildCards() { + if(fPattern.startsWith("*"))//$NON-NLS-1$ + fHasLeadingStar = true; + if(fPattern.endsWith("*")) {//$NON-NLS-1$ + /* make sure it's not an escaped wildcard */ + if (fLength > 1 && fPattern.charAt(fLength - 2) != '\\') { + fHasTrailingStar = true; + } + } + + Vector temp = new Vector(); + + int pos = 0; + StringBuffer buf = new StringBuffer(); + while (pos < fLength) { + char c = fPattern.charAt(pos++); + switch (c) { + case '\\': + if (pos >= fLength) { + buf.append(c); + } else { + char next = fPattern.charAt(pos++); + /* if it's an escape sequence */ + if (next == '*' || next == '?' || next == '\\') { + buf.append(next); + } else { + /* not an escape sequence, just insert literally */ + buf.append(c); + buf.append(next); + } + } + break; + case '*': + if (buf.length() > 0) { + /* new segment */ + temp.addElement(buf.toString()); + fBound += buf.length(); + buf.setLength(0); + } + break; + case '?': + /* append special character representing single match wildcard */ + buf.append(fSingleWildCard); + break; + default: + buf.append(c); + } + } + + /* add last buffer to segment list */ + if (buf.length() > 0) { + temp.addElement(buf.toString()); + fBound += buf.length(); + } + + fSegments = new String[temp.size()]; + temp.copyInto(fSegments); + } + /** + * @param <code>text</code>, a string which contains no wildcard + * @param <code>start</code>, the starting index in the text for search, inclusive + * @param <code>end</code>, the stopping point of search, exclusive + * @return the starting index in the text of the pattern , or -1 if not found + */ + protected int posIn(String text, int start, int end) {//no wild card in pattern + int max = end - fLength; + + if (!fIgnoreCase) { + int i = text.indexOf(fPattern, start); + if (i == -1 || i > max) + return -1; + return i; + } + + for (int i = start; i <= max; ++i) { + if (text.regionMatches(true, i, fPattern, 0, fLength)) + return i; + } + + return -1; + } + /** + * @param <code>text</code>, a simple regular expression that may only contain '?'(s) + * @param <code>start</code>, the starting index in the text for search, inclusive + * @param <code>end</code>, the stopping point of search, exclusive + * @param <code>p</code>, a simple regular expression that may contains '?' + * @param <code>caseIgnored</code>, wether the pattern is not casesensitive + * @return the starting index in the text of the pattern , or -1 if not found + */ + protected int regExpPosIn(String text, int start, int end, String p) { + int plen = p.length(); + + int max = end - plen; + for (int i = start; i <= max; ++i) { + if (regExpRegionMatches(text, i, p, 0, plen)) + return i; + } + return -1; + } + /** + * + * @return boolean + * @param <code>text</code>, a String to match + * @param <code>start</code>, int that indicates the starting index of match, inclusive + * @param <code>end</code> int that indicates the ending index of match, exclusive + * @param <code>p</code>, String, String, a simple regular expression that may contain '?' + * @param <code>ignoreCase</code>, boolean indicating wether code>p</code> is case sensitive + */ + protected boolean regExpRegionMatches(String text, int tStart, String p, int pStart, int plen) { + while (plen-- > 0) { + char tchar = text.charAt(tStart++); + char pchar = p.charAt(pStart++); + + /* process wild cards */ + if (!fIgnoreWildCards) { + /* skip single wild cards */ + if (pchar == fSingleWildCard) { + continue; + } + } + if (pchar == tchar) + continue; + if (fIgnoreCase) { + char tc = Character.toUpperCase(tchar); + if (tc == pchar) + continue; + } + return false; + } + return true; + } + /** + * @param <code>text</code>, the string to match + * @param <code>start</code>, the starting index in the text for search, inclusive + * @param <code>end</code>, the stopping point of search, exclusive + * @param code>p</code>, a string that has no wildcard + * @param <code>ignoreCase</code>, boolean indicating wether code>p</code> is case sensitive + * @return the starting index in the text of the pattern , or -1 if not found + */ + protected int textPosIn(String text, int start, int end, String p) { + + int plen = p.length(); + int max = end - plen; + + if (!fIgnoreCase) { + int i = text.indexOf(p, start); + if (i == -1 || i > max) + return -1; + return i; + } + + for (int i = 0; i <= max; ++i) { + if (text.regionMatches(true, i, p, 0, plen)) + return i; + } + + return -1; + } +} diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileUtil.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileUtil.java index 9efe948f4..e235330b0 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileUtil.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileUtil.java @@ -51,13 +51,13 @@ public class SyncFileUtil { // file and folder patterns that are ignored by default by the CVS server on import.
public static final String[] PREDEFINED_IGNORE_PATTERNS = {
- "CVS", ".#*", "#*", ",*", "_$*", "*~", "*$", "*.a", "*.bak", "*.BAK", //$NON-NLS-1$
- "*.elc", "*.exe", "*.ln", "*.o", "*.obj", "*.olb", "*.old", "*.orig", "*.rej", "*.so", //$NON-NLS-1$
- "*.Z", ".del-*", ".make.state", ".nse_depinfo", "CVS.adm", //$NON-NLS-1$
- "cvslog.*", "RCS", "RCSLOG", "SCCS", "tags", "TAGS"}; //$NON-NLS-1$
+ "CVS", ".#*", "#*", ",*", "_$*", "*~", "*$", "*.a", "*.bak", "*.BAK", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+ "*.elc", "*.exe", "*.ln", "*.o", "*.obj", "*.olb", "*.old", "*.orig", "*.rej", "*.so", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
+ "*.Z", ".del-*", ".make.state", ".nse_depinfo", "CVS.adm", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ "cvslog.*", "RCS", "RCSLOG", "SCCS", "tags", "TAGS"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
// file and folder patterns that are ignored by default by the CVS server on import.
- public static final String[] BASIC_IGNORE_PATTERNS = {"CVS", ".#*"}; //$NON-NLS-1$
+ public static final String[] BASIC_IGNORE_PATTERNS = {"CVS", ".#*"}; //$NON-NLS-1$ //$NON-NLS-2$
/**
* Reads the CVS/Entry and CVS/Permissions files for the given folder. If the folder does not have a
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java index 3a7c7d0ca..2775fe4cd 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java @@ -10,14 +10,15 @@ import org.eclipse.core.runtime.Status; import org.eclipse.team.ccvs.core.CVSProviderPlugin; import org.eclipse.team.internal.ccvs.core.CVSException; import org.eclipse.team.internal.ccvs.core.client.Session; +import org.eclipse.team.internal.ccvs.core.Policy; /** * Unsorted static helper-methods */ public class Util { - private static final String AT = "@"; - private static final String COLON = ":"; + private static final String AT = "@"; //$NON-NLS-1$ + private static final String COLON = ":"; //$NON-NLS-1$ // private static final String newLine = System.getProperty("line.separator"); @@ -250,13 +251,13 @@ public class Util { throws CVSException { if (!resourceName.startsWith(rootName)) { - throw new CVSException("Internal error, resource does not start with root."); + throw new CVSException(Policy.bind("Util.Internal_error,_resource_does_not_start_with_root_3")); //$NON-NLS-1$ } // Otherwise we would get an ArrayOutOfBoundException // in case of two equal Resources if (rootName.length() == resourceName.length()) { - return ""; + return ""; //$NON-NLS-1$ } // Get rid of the seperator, that would be in the diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Cipher.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Cipher.java index 83a397955..14c6270d2 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Cipher.java +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Cipher.java @@ -1,19 +1,19 @@ -package org.eclipse.team.internal.ccvs.ssh;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-public abstract class Cipher {
-public abstract void decipher(byte[] src, int srcPos, byte[] dst, int dstPos, int len);
-public abstract void encipher(byte[] src, int srcPos, byte[] dst, int dstPos, int len);
-public static Cipher getInstance(String algorithm) {
- try {
- Class c = Class.forName("org.eclipse.team.internal.ccvs.ssh." + algorithm);
- return (Cipher) c.newInstance();
- } catch (Exception e) {
- return null;
- }
-}
-public abstract void setKey(byte[] key);
-}
+package org.eclipse.team.internal.ccvs.ssh; + +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ +public abstract class Cipher { +public abstract void decipher(byte[] src, int srcPos, byte[] dst, int dstPos, int len); +public abstract void encipher(byte[] src, int srcPos, byte[] dst, int dstPos, int len); +public static Cipher getInstance(String algorithm) { + try { + Class c = Class.forName("org.eclipse.team.internal.ccvs.ssh." + algorithm); //$NON-NLS-1$ + return (Cipher) c.newInstance(); + } catch (Exception e) { + return null; + } +} +public abstract void setKey(byte[] key); +} diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Client.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Client.java index 992149db9..e853dd105 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Client.java +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Client.java @@ -22,7 +22,7 @@ import org.eclipse.team.internal.ccvs.core.connection.CVSAuthenticationException public class Client { // client identification string - private static final String clientId = "SSH-1.5-Java 1.2.2\n"; + private static final String clientId = "SSH-1.5-Java 1.2.2\n"; //$NON-NLS-1$ // server identification string private static String serverId = null; @@ -49,7 +49,7 @@ public class Client { private static final int SSH_MSG_DEBUG = 36; // cipher names - private static String[] cipherNames = { "None", "IDEA", "DES", "3DES", "TSS", "RC4", "Blowfish" }; + private static String[] cipherNames = { "None", "IDEA", "DES", "3DES", "TSS", "RC4", "Blowfish" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ // cipher types private static int SSH_CIPHER_NONE = 0; @@ -95,7 +95,7 @@ public class Client { public int available() throws IOException { if (closed) { - throw new IOException(SSHPlugin.getResourceString("closed")); + throw new IOException(Policy.bind("closed")); //$NON-NLS-1$ } int available = buffer == null ? 0 : buffer.available(); @@ -122,7 +122,7 @@ public class Client { public int read() throws IOException { if (closed) { - throw new IOException(SSHPlugin.getResourceString("closed")); + throw new IOException(Policy.bind("closed"));//$NON-NLS-1$ } if (atEnd) { @@ -138,7 +138,7 @@ public class Client { public int read(byte b[], int off, int len) throws IOException { if (closed) { - throw new IOException(SSHPlugin.getResourceString("closed")); + throw new IOException(Policy.bind("closed"));//$NON-NLS-1$ } if (atEnd) { @@ -177,7 +177,7 @@ public class Client { send(SSH_CMSG_EXIT_CONFIRMATION, null); break; default : - throw new IOException(SSHPlugin.getResourceString("Client.packetType", new Object[] {new Integer(packetType)} )); + throw new IOException(Policy.bind("Client.packetType", new Object[] {new Integer(packetType)} ));//$NON-NLS-1$ } } } @@ -200,7 +200,7 @@ public class Client { public void flush() throws IOException { if (closed) { - throw new IOException(SSHPlugin.getResourceString("closed")); + throw new IOException(Policy.bind("closed"));//$NON-NLS-1$ } if (bufpos > 0) { @@ -211,7 +211,7 @@ public class Client { public void write(int b) throws IOException { if (closed) { - throw new IOException(SSHPlugin.getResourceString("closed")); + throw new IOException(Policy.bind("closed"));//$NON-NLS-1$ } buffer[bufpos++] = (byte) b; @@ -223,7 +223,7 @@ public class Client { public void write(byte b[], int off, int len) throws IOException { if (closed) { - throw new IOException(SSHPlugin.getResourceString("closed")); + throw new IOException(Policy.bind("closed")); //$NON-NLS-1$ } int bytesWritten = 0; @@ -325,7 +325,7 @@ public void connect(IProgressMonitor monitor) throws IOException, CVSAuthenticat socket = new Socket(host, port); } catch (InterruptedIOException e) { // If we get this exception, chances are the host is not responding - throw new InterruptedIOException(SSHPlugin.getResourceString("Client.socket", new Object[] {host})); + throw new InterruptedIOException(Policy.bind("Client.socket", new Object[] {host}));//$NON-NLS-1$ } if (timeout >= 0) { @@ -342,7 +342,7 @@ public void connect(IProgressMonitor monitor) throws IOException, CVSAuthenticat int c; while ((c = socketIn.read()) != '\n') { if (c == -1) - throw new IOException(SSHPlugin.getResourceString("Client.socketClosed")); + throw new IOException(Policy.bind("Client.socketClosed"));//$NON-NLS-1$ buf.append((char) c); } serverId = buf.toString(); @@ -386,14 +386,14 @@ public void disconnect() throws IOException { } public InputStream getInputStream() throws IOException { if (!connected) { - throw new IOException(SSHPlugin.getResourceString("Client.notConnected")); + throw new IOException(Policy.bind("Client.notConnected"));//$NON-NLS-1$ } return is; } public OutputStream getOutputStream() throws IOException { if (!connected) { - throw new IOException(SSHPlugin.getResourceString("Client.notConnected")); + throw new IOException(Policy.bind("Client.notConnected"));//$NON-NLS-1$ } return os; @@ -410,7 +410,7 @@ private void startShell() throws IOException { packetType = packet.getType(); if (packetType != SSH_SMSG_SUCCESS) { - throw new IOException(SSHPlugin.getResourceString("Client.packetType", new Object[] {new Integer(packetType)} )); + throw new IOException(Policy.bind("Client.packetType", new Object[] {new Integer(packetType)} ));//$NON-NLS-1$ } } finally { if (packet != null) { @@ -434,7 +434,7 @@ private void login() throws IOException, CVSAuthenticationException { packetType = packet.getType(); if (packetType != SSH_SMSG_PUBLIC_KEY) { - throw new IOException(SSHPlugin.getResourceString("Client.packetType", new Object[] {new Integer(packetType)} )); + throw new IOException(Policy.bind("Client.packetType", new Object[] {new Integer(packetType)} ));//$NON-NLS-1$ } receive_SSH_SMSG_PUBLIC_KEY(packet); @@ -449,7 +449,7 @@ private void login() throws IOException, CVSAuthenticationException { packetType = packet.getType(); if (packetType != SSH_SMSG_SUCCESS) { - throw new IOException(SSHPlugin.getResourceString("Client.packetType", new Object[] {new Integer(packetType)} )); + throw new IOException(Policy.bind("Client.packetType", new Object[] {new Integer(packetType)} ));//$NON-NLS-1$ } } finally { if (packet != null) { @@ -464,7 +464,7 @@ private void login() throws IOException, CVSAuthenticationException { packetType = packet.getType(); if (packetType != SSH_SMSG_FAILURE) { - throw new IOException(SSHPlugin.getResourceString("Client.packetType", new Object[] {new Integer(packetType)} )); + throw new IOException(Policy.bind("Client.packetType", new Object[] {new Integer(packetType)} ));//$NON-NLS-1$ } } finally { if (packet != null) { @@ -479,11 +479,11 @@ private void login() throws IOException, CVSAuthenticationException { packetType = packet.getType(); if (packetType == SSH_SMSG_FAILURE) { - throw new CVSAuthenticationException(SSHPlugin.getResourceString("Client.authenticationFailed")); + throw new CVSAuthenticationException(Policy.bind("Client.authenticationFailed"));//$NON-NLS-1$ } if (packetType != SSH_SMSG_SUCCESS) { - throw new IOException(SSHPlugin.getResourceString("Client.packetType", new Object[] {new Integer(packetType)} )); + throw new IOException(Policy.bind("Client.packetType", new Object[] {new Integer(packetType)} ));//$NON-NLS-1$ } } finally { if (packet != null) { @@ -523,7 +523,7 @@ private void receive_SSH_SMSG_PUBLIC_KEY(ServerPacket packet) throws IOException send_SSH_CMSG_SESSION_KEY(anti_spoofing_cookie, server_key_public_modulus, host_key_public_modulus, supported_ciphers_mask, server_key_public_exponent, host_key_public_exponent); } private void send(int packetType, String s) throws IOException { - byte[] data = s == null ? new byte[0] : s.getBytes("UTF-8"); + byte[] data = s == null ? new byte[0] : s.getBytes("UTF-8"); //$NON-NLS-1$ send(packetType, data, 0, data.length); } private void send(int packetType, byte[] data, int off, int len) throws IOException { @@ -535,7 +535,7 @@ private void send(int packetType, byte[] data, int off, int len) throws IOExcept private void send_SSH_CMSG_REQUEST_PTY() throws IOException { byte packet_type = SSH_CMSG_REQUEST_PTY; - byte[] termType = Misc.lengthEncode("dumb".getBytes(), 0, 4); + byte[] termType = Misc.lengthEncode("dumb".getBytes(), 0, 4);//$NON-NLS-1$ byte[] row = {0, 0, 0, 0}; byte[] col = {0, 0, 0, 0}; byte[] XPixels = {0, 0, 0, 0}; @@ -593,7 +593,7 @@ private void send_SSH_CMSG_SESSION_KEY(byte[] anti_spoofing_cookie, byte[] serve } if (!foundSupportedCipher) { - throw new IOException(SSHPlugin.getResourceString("Client.cipher")); + throw new IOException(Policy.bind("Client.cipher"));//$NON-NLS-1$ } // session_key diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Misc.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Misc.java index e8561a5ff..3251c6be3 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Misc.java +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Misc.java @@ -1,449 +1,449 @@ -package org.eclipse.team.internal.ccvs.ssh;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-
-class Misc {
- private static MessageDigest md5 = null;
- private static SecureRandom random = null;
- private static long crc32_tab[] = {
- 0x00000000L,
- 0x77073096L,
- 0xee0e612cL,
- 0x990951baL,
- 0x076dc419L,
- 0x706af48fL,
- 0xe963a535L,
- 0x9e6495a3L,
- 0x0edb8832L,
- 0x79dcb8a4L,
- 0xe0d5e91eL,
- 0x97d2d988L,
- 0x09b64c2bL,
- 0x7eb17cbdL,
- 0xe7b82d07L,
- 0x90bf1d91L,
- 0x1db71064L,
- 0x6ab020f2L,
- 0xf3b97148L,
- 0x84be41deL,
- 0x1adad47dL,
- 0x6ddde4ebL,
- 0xf4d4b551L,
- 0x83d385c7L,
- 0x136c9856L,
- 0x646ba8c0L,
- 0xfd62f97aL,
- 0x8a65c9ecL,
- 0x14015c4fL,
- 0x63066cd9L,
- 0xfa0f3d63L,
- 0x8d080df5L,
- 0x3b6e20c8L,
- 0x4c69105eL,
- 0xd56041e4L,
- 0xa2677172L,
- 0x3c03e4d1L,
- 0x4b04d447L,
- 0xd20d85fdL,
- 0xa50ab56bL,
- 0x35b5a8faL,
- 0x42b2986cL,
- 0xdbbbc9d6L,
- 0xacbcf940L,
- 0x32d86ce3L,
- 0x45df5c75L,
- 0xdcd60dcfL,
- 0xabd13d59L,
- 0x26d930acL,
- 0x51de003aL,
- 0xc8d75180L,
- 0xbfd06116L,
- 0x21b4f4b5L,
- 0x56b3c423L,
- 0xcfba9599L,
- 0xb8bda50fL,
- 0x2802b89eL,
- 0x5f058808L,
- 0xc60cd9b2L,
- 0xb10be924L,
- 0x2f6f7c87L,
- 0x58684c11L,
- 0xc1611dabL,
- 0xb6662d3dL,
- 0x76dc4190L,
- 0x01db7106L,
- 0x98d220bcL,
- 0xefd5102aL,
- 0x71b18589L,
- 0x06b6b51fL,
- 0x9fbfe4a5L,
- 0xe8b8d433L,
- 0x7807c9a2L,
- 0x0f00f934L,
- 0x9609a88eL,
- 0xe10e9818L,
- 0x7f6a0dbbL,
- 0x086d3d2dL,
- 0x91646c97L,
- 0xe6635c01L,
- 0x6b6b51f4L,
- 0x1c6c6162L,
- 0x856530d8L,
- 0xf262004eL,
- 0x6c0695edL,
- 0x1b01a57bL,
- 0x8208f4c1L,
- 0xf50fc457L,
- 0x65b0d9c6L,
- 0x12b7e950L,
- 0x8bbeb8eaL,
- 0xfcb9887cL,
- 0x62dd1ddfL,
- 0x15da2d49L,
- 0x8cd37cf3L,
- 0xfbd44c65L,
- 0x4db26158L,
- 0x3ab551ceL,
- 0xa3bc0074L,
- 0xd4bb30e2L,
- 0x4adfa541L,
- 0x3dd895d7L,
- 0xa4d1c46dL,
- 0xd3d6f4fbL,
- 0x4369e96aL,
- 0x346ed9fcL,
- 0xad678846L,
- 0xda60b8d0L,
- 0x44042d73L,
- 0x33031de5L,
- 0xaa0a4c5fL,
- 0xdd0d7cc9L,
- 0x5005713cL,
- 0x270241aaL,
- 0xbe0b1010L,
- 0xc90c2086L,
- 0x5768b525L,
- 0x206f85b3L,
- 0xb966d409L,
- 0xce61e49fL,
- 0x5edef90eL,
- 0x29d9c998L,
- 0xb0d09822L,
- 0xc7d7a8b4L,
- 0x59b33d17L,
- 0x2eb40d81L,
- 0xb7bd5c3bL,
- 0xc0ba6cadL,
- 0xedb88320L,
- 0x9abfb3b6L,
- 0x03b6e20cL,
- 0x74b1d29aL,
- 0xead54739L,
- 0x9dd277afL,
- 0x04db2615L,
- 0x73dc1683L,
- 0xe3630b12L,
- 0x94643b84L,
- 0x0d6d6a3eL,
- 0x7a6a5aa8L,
- 0xe40ecf0bL,
- 0x9309ff9dL,
- 0x0a00ae27L,
- 0x7d079eb1L,
- 0xf00f9344L,
- 0x8708a3d2L,
- 0x1e01f268L,
- 0x6906c2feL,
- 0xf762575dL,
- 0x806567cbL,
- 0x196c3671L,
- 0x6e6b06e7L,
- 0xfed41b76L,
- 0x89d32be0L,
- 0x10da7a5aL,
- 0x67dd4accL,
- 0xf9b9df6fL,
- 0x8ebeeff9L,
- 0x17b7be43L,
- 0x60b08ed5L,
- 0xd6d6a3e8L,
- 0xa1d1937eL,
- 0x38d8c2c4L,
- 0x4fdff252L,
- 0xd1bb67f1L,
- 0xa6bc5767L,
- 0x3fb506ddL,
- 0x48b2364bL,
- 0xd80d2bdaL,
- 0xaf0a1b4cL,
- 0x36034af6L,
- 0x41047a60L,
- 0xdf60efc3L,
- 0xa867df55L,
- 0x316e8eefL,
- 0x4669be79L,
- 0xcb61b38cL,
- 0xbc66831aL,
- 0x256fd2a0L,
- 0x5268e236L,
- 0xcc0c7795L,
- 0xbb0b4703L,
- 0x220216b9L,
- 0x5505262fL,
- 0xc5ba3bbeL,
- 0xb2bd0b28L,
- 0x2bb45a92L,
- 0x5cb36a04L,
- 0xc2d7ffa7L,
- 0xb5d0cf31L,
- 0x2cd99e8bL,
- 0x5bdeae1dL,
- 0x9b64c2b0L,
- 0xec63f226L,
- 0x756aa39cL,
- 0x026d930aL,
- 0x9c0906a9L,
- 0xeb0e363fL,
- 0x72076785L,
- 0x05005713L,
- 0x95bf4a82L,
- 0xe2b87a14L,
- 0x7bb12baeL,
- 0x0cb61b38L,
- 0x92d28e9bL,
- 0xe5d5be0dL,
- 0x7cdcefb7L,
- 0x0bdbdf21L,
- 0x86d3d2d4L,
- 0xf1d4e242L,
- 0x68ddb3f8L,
- 0x1fda836eL,
- 0x81be16cdL,
- 0xf6b9265bL,
- 0x6fb077e1L,
- 0x18b74777L,
- 0x88085ae6L,
- 0xff0f6a70L,
- 0x66063bcaL,
- 0x11010b5cL,
- 0x8f659effL,
- 0xf862ae69L,
- 0x616bffd3L,
- 0x166ccf45L,
- 0xa00ae278L,
- 0xd70dd2eeL,
- 0x4e048354L,
- 0x3903b3c2L,
- 0xa7672661L,
- 0xd06016f7L,
- 0x4969474dL,
- 0x3e6e77dbL,
- 0xaed16a4aL,
- 0xd9d65adcL,
- 0x40df0b66L,
- 0x37d83bf0L,
- 0xa9bcae53L,
- 0xdebb9ec5L,
- 0x47b2cf7fL,
- 0x30b5ffe9L,
- 0xbdbdf21cL,
- 0xcabac28aL,
- 0x53b39330L,
- 0x24b4a3a6L,
- 0xbad03605L,
- 0xcdd70693L,
- 0x54de5729L,
- 0x23d967bfL,
- 0xb3667a2eL,
- 0xc4614ab8L,
- 0x5d681b02L,
- 0x2a6f2b94L,
- 0xb40bbe37L,
- 0xc30c8ea1L,
- 0x5a05df1bL,
- 0x2d02ef8dL
- };
-static public long crc32(byte[] b, int off, int len) {
- return crc32(b, off, len, 0);
-}
-/**
- * Compute the crc Cyclic Redundancy Check, with the polynomial 0xedb88320,
- * The polynomial is X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
- * We take it "backwards" and put the highest-order term in the lowest-order bit.
- * The X^32 term is "implied"; the LSB is the X^31 term, etc.
- * The X^0 term (usually shown as "+1") results in the MSB being 1.
- * so the poly is 0x04c11db7 (used for Ethernet)
- * The buf will be the Padding, Packet type, and Data fields.
- * The crc is computed before any encryption.
- * R =X^n * M rem P M message P polynomial crc R : crc calculated.
- * T(x) = x^n * M(x) + R(x) property: T rem P = 0
- */
-static public long crc32(byte[] b, int off, int len, long crc32val) {
- for (int i = 0; i < len; i++) {
- crc32val = crc32_tab[(int) ((crc32val ^ b[off + i]) & 0xff)] ^ (crc32val >> 8);
- }
-
- return crc32val;
-}
-static public byte[] lengthEncode(byte[] b, int off, int len) throws IOException {
- byte[] result = new byte[len + 4];
- writeInt(len, result, 0);
- System.arraycopy(b, off, result, 4, len);
- return result;
-}
-static public byte[] readMpInt(InputStream is) throws IOException {
- int a = (byte) is.read();
- int b = (byte) is.read();
-
- if(a == -1 || b == -1){
- throw new IOException(SSHPlugin.getResourceString("stream"));
- }
-
- int bits = (a << 8) + b;
- int bytes = (bits + 7) / 8;
-
- byte[] result = new byte[bytes];
-
- readFully(is, result);
-
- return result;
-}
-public static byte[] md5(byte[] b) {
- if (md5 == null) {
- try {
- md5 = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException e) {
- }
- }
-
- return md5.digest(b);
-}
-public static byte[] md5(String s) {
- return md5(s.getBytes());
-}
-public static void readFully(InputStream is, byte[] b) throws IOException {
- readFully(is, b, 0, b.length);
-}
-public static void readFully(InputStream is, byte[] b, int off, int len) throws IOException {
- int bytesRead = 0;
- int totalBytesRead = 0;
-
- while (totalBytesRead < len) {
- bytesRead = is.read(b, totalBytesRead + off, len - totalBytesRead);
-
- if (bytesRead == -1) {
- throw new IOException(SSHPlugin.getResourceString("stream"));
- }
-
- totalBytesRead += bytesRead;
- }
-}
-public static int readInt(byte[] arr, int off) throws IOException {
- int a = arr[off] & 0xff;
- int b = arr[off + 1] & 0xff;
- int c = arr[off + 2] & 0xff;
- int d = arr[off + 3] & 0xff;
-
- return (a << 24) + (b << 16) + (c << 8) + d;
-}
-public static int readInt(InputStream is) throws IOException {
- int a = is.read();
- int b = is.read();
- int c = is.read();
- int d = is.read();
-
- if (a == -1 || b == -1 || c == -1 || d == -1) {
- throw new IOException(SSHPlugin.getResourceString("stream"));
- }
-
- return (a << 24) + (b << 16) + (c << 8) + d;
-}
-public static void skipFully(InputStream is, long n) throws IOException {
- while (n != 0) {
- int b = is.read();
-
- if (b == -1) {
- if (n > 0) {
- throw new IOException(SSHPlugin.getResourceString("stream"));
- }
-
- return;
- }
-
- --n;
- }
-}
-public static void writeInt(int i, byte[] b, int off) {
- b[off] = (byte) ((i >> 24) & 0xff);
- b[off + 1] = (byte) ((i >> 16) & 0xff);
- b[off + 2] = (byte) ((i >> 8) & 0xff);
- b[off + 3] = (byte) (i & 0xff);
-}
-static public void xor(byte[] src_a, int off_a, byte[] src_b, int off_b, byte[] dst, int dst_off, int len) {
- for(int i = 0; i < len; ++i){
- dst[i + dst_off] = (byte) (src_a[i + off_a] ^ src_b[i + off_b]);
- }
-}
-static public void random(byte[] b, int off, int len, boolean allowZeroBytes) {
- if (random == null) {
- try {
- random = SecureRandom.getInstance("SHA1PRNG");
- } catch (NoSuchAlgorithmException e) {
- }
- }
-
- for(int i = off; i < off + len; ++i){
- do {
- b[i] = (byte) random.nextInt();
- } while(!allowZeroBytes && b[i] == 0);
- }
-}
-static public byte[] encryptRSAPkcs1(byte[] data, byte[] public_key_exponent, byte[] public_key_modulus) {
- byte[] block;
-
- int offset = 0;
- block = new byte[public_key_modulus.length];
- block[offset++] = 0;
- block[offset++] = 2;
-
- Misc.random(block, offset, block.length - data.length - 3, false);
- offset += block.length - data.length - 3;
-
- block[offset++] = 0;
-
- for (int i = 0; i < data.length; i++){
- block[offset++] = data[i];
- }
-
- BigInteger m, e, message;
- byte[] messageByte;
-
- m = new BigInteger(1, public_key_modulus);
- e = new BigInteger(1, public_key_exponent);
- message = new BigInteger(1, block);
- message = message.modPow(e, m);
-
- byte[] messageByteTemp = message.toByteArray();
- messageByte = new byte[public_key_modulus.length];
-
- int tempOffset = 0;
- while (messageByteTemp[tempOffset] == 0){
- tempOffset++;
- }
-
- for (int i = messageByte.length - messageByteTemp.length + tempOffset; i < messageByte.length; i++){
- messageByte[i] = messageByteTemp[tempOffset++];
- }
-
- return messageByte;
-}
-}
+package org.eclipse.team.internal.ccvs.ssh; + +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ +import java.io.IOException; +import java.io.InputStream; +import java.math.BigInteger; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +class Misc { + private static MessageDigest md5 = null; + private static SecureRandom random = null; + private static long crc32_tab[] = { + 0x00000000L, + 0x77073096L, + 0xee0e612cL, + 0x990951baL, + 0x076dc419L, + 0x706af48fL, + 0xe963a535L, + 0x9e6495a3L, + 0x0edb8832L, + 0x79dcb8a4L, + 0xe0d5e91eL, + 0x97d2d988L, + 0x09b64c2bL, + 0x7eb17cbdL, + 0xe7b82d07L, + 0x90bf1d91L, + 0x1db71064L, + 0x6ab020f2L, + 0xf3b97148L, + 0x84be41deL, + 0x1adad47dL, + 0x6ddde4ebL, + 0xf4d4b551L, + 0x83d385c7L, + 0x136c9856L, + 0x646ba8c0L, + 0xfd62f97aL, + 0x8a65c9ecL, + 0x14015c4fL, + 0x63066cd9L, + 0xfa0f3d63L, + 0x8d080df5L, + 0x3b6e20c8L, + 0x4c69105eL, + 0xd56041e4L, + 0xa2677172L, + 0x3c03e4d1L, + 0x4b04d447L, + 0xd20d85fdL, + 0xa50ab56bL, + 0x35b5a8faL, + 0x42b2986cL, + 0xdbbbc9d6L, + 0xacbcf940L, + 0x32d86ce3L, + 0x45df5c75L, + 0xdcd60dcfL, + 0xabd13d59L, + 0x26d930acL, + 0x51de003aL, + 0xc8d75180L, + 0xbfd06116L, + 0x21b4f4b5L, + 0x56b3c423L, + 0xcfba9599L, + 0xb8bda50fL, + 0x2802b89eL, + 0x5f058808L, + 0xc60cd9b2L, + 0xb10be924L, + 0x2f6f7c87L, + 0x58684c11L, + 0xc1611dabL, + 0xb6662d3dL, + 0x76dc4190L, + 0x01db7106L, + 0x98d220bcL, + 0xefd5102aL, + 0x71b18589L, + 0x06b6b51fL, + 0x9fbfe4a5L, + 0xe8b8d433L, + 0x7807c9a2L, + 0x0f00f934L, + 0x9609a88eL, + 0xe10e9818L, + 0x7f6a0dbbL, + 0x086d3d2dL, + 0x91646c97L, + 0xe6635c01L, + 0x6b6b51f4L, + 0x1c6c6162L, + 0x856530d8L, + 0xf262004eL, + 0x6c0695edL, + 0x1b01a57bL, + 0x8208f4c1L, + 0xf50fc457L, + 0x65b0d9c6L, + 0x12b7e950L, + 0x8bbeb8eaL, + 0xfcb9887cL, + 0x62dd1ddfL, + 0x15da2d49L, + 0x8cd37cf3L, + 0xfbd44c65L, + 0x4db26158L, + 0x3ab551ceL, + 0xa3bc0074L, + 0xd4bb30e2L, + 0x4adfa541L, + 0x3dd895d7L, + 0xa4d1c46dL, + 0xd3d6f4fbL, + 0x4369e96aL, + 0x346ed9fcL, + 0xad678846L, + 0xda60b8d0L, + 0x44042d73L, + 0x33031de5L, + 0xaa0a4c5fL, + 0xdd0d7cc9L, + 0x5005713cL, + 0x270241aaL, + 0xbe0b1010L, + 0xc90c2086L, + 0x5768b525L, + 0x206f85b3L, + 0xb966d409L, + 0xce61e49fL, + 0x5edef90eL, + 0x29d9c998L, + 0xb0d09822L, + 0xc7d7a8b4L, + 0x59b33d17L, + 0x2eb40d81L, + 0xb7bd5c3bL, + 0xc0ba6cadL, + 0xedb88320L, + 0x9abfb3b6L, + 0x03b6e20cL, + 0x74b1d29aL, + 0xead54739L, + 0x9dd277afL, + 0x04db2615L, + 0x73dc1683L, + 0xe3630b12L, + 0x94643b84L, + 0x0d6d6a3eL, + 0x7a6a5aa8L, + 0xe40ecf0bL, + 0x9309ff9dL, + 0x0a00ae27L, + 0x7d079eb1L, + 0xf00f9344L, + 0x8708a3d2L, + 0x1e01f268L, + 0x6906c2feL, + 0xf762575dL, + 0x806567cbL, + 0x196c3671L, + 0x6e6b06e7L, + 0xfed41b76L, + 0x89d32be0L, + 0x10da7a5aL, + 0x67dd4accL, + 0xf9b9df6fL, + 0x8ebeeff9L, + 0x17b7be43L, + 0x60b08ed5L, + 0xd6d6a3e8L, + 0xa1d1937eL, + 0x38d8c2c4L, + 0x4fdff252L, + 0xd1bb67f1L, + 0xa6bc5767L, + 0x3fb506ddL, + 0x48b2364bL, + 0xd80d2bdaL, + 0xaf0a1b4cL, + 0x36034af6L, + 0x41047a60L, + 0xdf60efc3L, + 0xa867df55L, + 0x316e8eefL, + 0x4669be79L, + 0xcb61b38cL, + 0xbc66831aL, + 0x256fd2a0L, + 0x5268e236L, + 0xcc0c7795L, + 0xbb0b4703L, + 0x220216b9L, + 0x5505262fL, + 0xc5ba3bbeL, + 0xb2bd0b28L, + 0x2bb45a92L, + 0x5cb36a04L, + 0xc2d7ffa7L, + 0xb5d0cf31L, + 0x2cd99e8bL, + 0x5bdeae1dL, + 0x9b64c2b0L, + 0xec63f226L, + 0x756aa39cL, + 0x026d930aL, + 0x9c0906a9L, + 0xeb0e363fL, + 0x72076785L, + 0x05005713L, + 0x95bf4a82L, + 0xe2b87a14L, + 0x7bb12baeL, + 0x0cb61b38L, + 0x92d28e9bL, + 0xe5d5be0dL, + 0x7cdcefb7L, + 0x0bdbdf21L, + 0x86d3d2d4L, + 0xf1d4e242L, + 0x68ddb3f8L, + 0x1fda836eL, + 0x81be16cdL, + 0xf6b9265bL, + 0x6fb077e1L, + 0x18b74777L, + 0x88085ae6L, + 0xff0f6a70L, + 0x66063bcaL, + 0x11010b5cL, + 0x8f659effL, + 0xf862ae69L, + 0x616bffd3L, + 0x166ccf45L, + 0xa00ae278L, + 0xd70dd2eeL, + 0x4e048354L, + 0x3903b3c2L, + 0xa7672661L, + 0xd06016f7L, + 0x4969474dL, + 0x3e6e77dbL, + 0xaed16a4aL, + 0xd9d65adcL, + 0x40df0b66L, + 0x37d83bf0L, + 0xa9bcae53L, + 0xdebb9ec5L, + 0x47b2cf7fL, + 0x30b5ffe9L, + 0xbdbdf21cL, + 0xcabac28aL, + 0x53b39330L, + 0x24b4a3a6L, + 0xbad03605L, + 0xcdd70693L, + 0x54de5729L, + 0x23d967bfL, + 0xb3667a2eL, + 0xc4614ab8L, + 0x5d681b02L, + 0x2a6f2b94L, + 0xb40bbe37L, + 0xc30c8ea1L, + 0x5a05df1bL, + 0x2d02ef8dL + }; +static public long crc32(byte[] b, int off, int len) { + return crc32(b, off, len, 0); +} +/** + * Compute the crc Cyclic Redundancy Check, with the polynomial 0xedb88320, + * The polynomial is X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 + * We take it "backwards" and put the highest-order term in the lowest-order bit. + * The X^32 term is "implied"; the LSB is the X^31 term, etc. + * The X^0 term (usually shown as "+1") results in the MSB being 1. + * so the poly is 0x04c11db7 (used for Ethernet) + * The buf will be the Padding, Packet type, and Data fields. + * The crc is computed before any encryption. + * R =X^n * M rem P M message P polynomial crc R : crc calculated. + * T(x) = x^n * M(x) + R(x) property: T rem P = 0 + */ +static public long crc32(byte[] b, int off, int len, long crc32val) { + for (int i = 0; i < len; i++) { + crc32val = crc32_tab[(int) ((crc32val ^ b[off + i]) & 0xff)] ^ (crc32val >> 8); + } + + return crc32val; +} +static public byte[] lengthEncode(byte[] b, int off, int len) throws IOException { + byte[] result = new byte[len + 4]; + writeInt(len, result, 0); + System.arraycopy(b, off, result, 4, len); + return result; +} +static public byte[] readMpInt(InputStream is) throws IOException { + int a = (byte) is.read(); + int b = (byte) is.read(); + + if(a == -1 || b == -1){ + throw new IOException(Policy.bind("stream"));//$NON-NLS-1$ + } + + int bits = (a << 8) + b; + int bytes = (bits + 7) / 8; + + byte[] result = new byte[bytes]; + + readFully(is, result); + + return result; +} +public static byte[] md5(byte[] b) { + if (md5 == null) { + try { + md5 = MessageDigest.getInstance("MD5");//$NON-NLS-1$ + } catch (NoSuchAlgorithmException e) { + } + } + + return md5.digest(b); +} +public static byte[] md5(String s) { + return md5(s.getBytes()); +} +public static void readFully(InputStream is, byte[] b) throws IOException { + readFully(is, b, 0, b.length); +} +public static void readFully(InputStream is, byte[] b, int off, int len) throws IOException { + int bytesRead = 0; + int totalBytesRead = 0; + + while (totalBytesRead < len) { + bytesRead = is.read(b, totalBytesRead + off, len - totalBytesRead); + + if (bytesRead == -1) { + throw new IOException(Policy.bind("stream"));//$NON-NLS-1$ + } + + totalBytesRead += bytesRead; + } +} +public static int readInt(byte[] arr, int off) throws IOException { + int a = arr[off] & 0xff; + int b = arr[off + 1] & 0xff; + int c = arr[off + 2] & 0xff; + int d = arr[off + 3] & 0xff; + + return (a << 24) + (b << 16) + (c << 8) + d; +} +public static int readInt(InputStream is) throws IOException { + int a = is.read(); + int b = is.read(); + int c = is.read(); + int d = is.read(); + + if (a == -1 || b == -1 || c == -1 || d == -1) { + throw new IOException(Policy.bind("stream"));//$NON-NLS-1$ + } + + return (a << 24) + (b << 16) + (c << 8) + d; +} +public static void skipFully(InputStream is, long n) throws IOException { + while (n != 0) { + int b = is.read(); + + if (b == -1) { + if (n > 0) { + throw new IOException(Policy.bind("stream"));//$NON-NLS-1$ + } + + return; + } + + --n; + } +} +public static void writeInt(int i, byte[] b, int off) { + b[off] = (byte) ((i >> 24) & 0xff); + b[off + 1] = (byte) ((i >> 16) & 0xff); + b[off + 2] = (byte) ((i >> 8) & 0xff); + b[off + 3] = (byte) (i & 0xff); +} +static public void xor(byte[] src_a, int off_a, byte[] src_b, int off_b, byte[] dst, int dst_off, int len) { + for(int i = 0; i < len; ++i){ + dst[i + dst_off] = (byte) (src_a[i + off_a] ^ src_b[i + off_b]); + } +} +static public void random(byte[] b, int off, int len, boolean allowZeroBytes) { + if (random == null) { + try { + random = SecureRandom.getInstance("SHA1PRNG");//$NON-NLS-1$ + } catch (NoSuchAlgorithmException e) { + } + } + + for(int i = off; i < off + len; ++i){ + do { + b[i] = (byte) random.nextInt(); + } while(!allowZeroBytes && b[i] == 0); + } +} +static public byte[] encryptRSAPkcs1(byte[] data, byte[] public_key_exponent, byte[] public_key_modulus) { + byte[] block; + + int offset = 0; + block = new byte[public_key_modulus.length]; + block[offset++] = 0; + block[offset++] = 2; + + Misc.random(block, offset, block.length - data.length - 3, false); + offset += block.length - data.length - 3; + + block[offset++] = 0; + + for (int i = 0; i < data.length; i++){ + block[offset++] = data[i]; + } + + BigInteger m, e, message; + byte[] messageByte; + + m = new BigInteger(1, public_key_modulus); + e = new BigInteger(1, public_key_exponent); + message = new BigInteger(1, block); + message = message.modPow(e, m); + + byte[] messageByteTemp = message.toByteArray(); + messageByte = new byte[public_key_modulus.length]; + + int tempOffset = 0; + while (messageByteTemp[tempOffset] == 0){ + tempOffset++; + } + + for (int i = messageByte.length - messageByteTemp.length + tempOffset; i < messageByte.length; i++){ + messageByte[i] = messageByteTemp[tempOffset++]; + } + + return messageByte; +} +} diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Policy.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Policy.java new file mode 100644 index 000000000..efa38c8fe --- /dev/null +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Policy.java @@ -0,0 +1,50 @@ +package org.eclipse.team.internal.ccvs.ssh; + +/* + * (c) Copyright IBM Corp. 2000, 2002. + * All Rights Reserved. + */ + +import java.text.MessageFormat; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class Policy { + protected static ResourceBundle bundle = null; + + /** + * Creates a NLS catalog for the given locale. + */ + public static void localize(String bundleName) { + bundle = ResourceBundle.getBundle(bundleName); + } + + /** + * Gets a string from the resource bundle. We don't want to crash because of a missing String. + * Returns the key if not found. + */ + public static String bind(String key) { + try { + return bundle.getString(key); + } catch (MissingResourceException e) { + return key; + } catch (NullPointerException e) { + return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ + } + } + + /** + * Gets a string from the resource bundle and binds it with the given arguments. If the key is + * not found, return the key. + */ + public static String bind(String key, Object[] args) { + try { + return MessageFormat.format(bind(key), args); + } catch (MissingResourceException e) { + return key; + } catch (NullPointerException e) { + return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ + } + } + +}
\ No newline at end of file diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHMethod.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHMethod.java index 64908f8eb..8ef89fd3f 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHMethod.java +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHMethod.java @@ -1,26 +1,26 @@ -package org.eclipse.team.internal.ccvs.ssh;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-import org.eclipse.team.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.ccvs.core.IConnectionMethod;
-import org.eclipse.team.ccvs.core.IServerConnection;
-
-public class SSHMethod implements IConnectionMethod {
- /**
- * @see IConnectionMethod#getName
- */
- public String getName() {
- return "extssh";
- }
-
- /**
- * @see IConnectionMethod#createConnection
- */
- public IServerConnection createConnection(ICVSRepositoryLocation repositoryRoot, String password) {
- return new SSHServerConnection(repositoryRoot, password);
- }
-
-}
+package org.eclipse.team.internal.ccvs.ssh; + +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ +import org.eclipse.team.ccvs.core.ICVSRepositoryLocation; +import org.eclipse.team.ccvs.core.IConnectionMethod; +import org.eclipse.team.ccvs.core.IServerConnection; + +public class SSHMethod implements IConnectionMethod { + /** + * @see IConnectionMethod#getName + */ + public String getName() { + return "extssh";//$NON-NLS-1$ + } + + /** + * @see IConnectionMethod#createConnection + */ + public IServerConnection createConnection(ICVSRepositoryLocation repositoryRoot, String password) { + return new SSHServerConnection(repositoryRoot, password); + } + +} diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPlugin.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPlugin.java index 7cf1eec15..762ababf1 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPlugin.java +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPlugin.java @@ -1 +1 @@ -package org.eclipse.team.internal.ccvs.ssh;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.core.runtime.IPluginDescriptor;
import org.eclipse.core.runtime.Plugin;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import java.text.MessageFormat;
public class SSHPlugin extends Plugin {
private static ResourceBundle resourceBundle;
public static String ID = "org.eclipse.team.cvs.ssh";
/**
* Constructor for SSHPlugin
*/
public SSHPlugin(IPluginDescriptor d) {
super(d);
try {
resourceBundle = ResourceBundle.getBundle("org.eclipse.team.internal.ccvs.ssh.SSHPluginResources");
} catch (MissingResourceException e) {
resourceBundle = null;
}
}
/**
* Gets a string from the resource bundle.
* We don't want to crash because of a missing String.
* Returns the key if not found.
*/
public static String getResourceString(String key) {
try {
return resourceBundle.getString(key);
} catch (MissingResourceException e) {
return key;
} catch (NullPointerException e) {
return "!" + key + "!";
}
}
/**
* Gets a string from the resource bundle and binds it
* with the given arguments. If the key is not found,
* return the key.
*/
public static String getResourceString(String key, Object[] args) {
try {
return MessageFormat.format(getResourceString(key), args);
} catch (MissingResourceException e) {
return key;
} catch (NullPointerException e) {
return "!" + key + "!";
}
}
}
\ No newline at end of file +package org.eclipse.team.internal.ccvs.ssh;
/*
* (c) Copyright IBM Corp. 2000, 2002.
* All Rights Reserved.
*/
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPluginDescriptor;
import org.eclipse.core.runtime.Plugin;
public class SSHPlugin extends Plugin {
public static String ID = "org.eclipse.team.cvs.ssh";//$NON-NLS-1$
/**
* Constructor for SSHPlugin
*/
public SSHPlugin(IPluginDescriptor d) {
super(d);
}
/**
* @see Plugin#startup()
*/
public void startup() throws CoreException {
super.startup();
Policy.localize("org.eclipse.team.internal.ccvs.ssh.messages"); //$NON-NLS-1$
}
}
\ No newline at end of file diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHServerConnection.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHServerConnection.java index 28fd43708..6a568bdaa 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHServerConnection.java +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHServerConnection.java @@ -16,7 +16,7 @@ import org.eclipse.team.internal.ccvs.core.connection.CVSAuthenticationException public class SSHServerConnection implements IServerConnection { // command to start remote cvs in server mode - private static final String INVOKE_SVR_CMD = "cvs server"; + private static final String INVOKE_SVR_CMD = "cvs server"; //$NON-NLS-1$ private static final int DEFAULT_PORT = 22; @@ -64,7 +64,7 @@ public class SSHServerConnection implements IServerConnection { * @see Connection.open() */ public void open(IProgressMonitor monitor) throws IOException, CVSAuthenticationException { - monitor.subTask("Authenticating over extssh"); + monitor.subTask(Policy.bind("SSHServerConnection.authenticating")); //$NON-NLS-1$ monitor.worked(1); String hostname = location.getHost(); String username = location.getUsername(); diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ServerPacket.java b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ServerPacket.java index c3e7b1022..7fcc895b2 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ServerPacket.java +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ServerPacket.java @@ -1,158 +1,158 @@ -package org.eclipse.team.internal.ccvs.ssh;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-class ServerPacket extends Packet {
- private PacketInputStream pis = null;
-
- private static class PacketInputStream extends FilterInputStream {
- private static int MAX_BUFFER_SIZE = 1024;
-
- private byte[] buffer = new byte[MAX_BUFFER_SIZE];
- private int bufpos = 0;
- private int buflen = 0;
- private int bufrem = 0;
-
- private long remaining = 0;
- private Cipher cipher = null;
-
- private long crc = 0;
- private boolean closed = false;
-
- public PacketInputStream(InputStream in, long length, Cipher cipher) {
- super(in);
-
- this.remaining = length;
- this.cipher = cipher;
- }
-
- public int available() throws IOException {
- if (closed) {
- throw new IOException(SSHPlugin.getResourceString("closed"));
- }
-
- return (int) Math.min(remaining - 4, Integer.MAX_VALUE);
- }
-
- public void close() throws IOException {
- close(true);
- }
-
- public void close(boolean doCrcCheck) throws IOException {
- if (!closed) {
- try {
- long toRead = doCrcCheck ? remaining - 4 : remaining;
-
- try {
- Misc.skipFully(this, toRead);
- } catch(IOException e) {
- // we tried our best, keep going
- }
-
- if(doCrcCheck) {
- if ((int) crc != Misc.readInt(buffer, bufpos)) {
- throw new IOException(SSHPlugin.getResourceString("ServerPacket.crc"));
- }
- }
- } finally {
- closed = true;
- }
- }
- }
-
- private void fill() throws IOException {
- if (bufrem > 0) {
- System.arraycopy(buffer, bufpos, buffer, 0, bufrem);
- }
-
- int totalBytesRead = bufrem;
- int read = 0;
- int toRead = (int)Math.min(remaining - totalBytesRead, MAX_BUFFER_SIZE - totalBytesRead);
-
- while (toRead > 0) {
- read = in.read(buffer, totalBytesRead, toRead);
-
- if (read == -1) {
- throw new IOException(SSHPlugin.getResourceString("stream"));
- }
-
- totalBytesRead += read;
- toRead -= read;
- }
-
- bufpos = 0;
-
- buflen = (totalBytesRead / 8) * 8;
- bufrem = totalBytesRead - buflen;
-
- if (cipher != null) {
- cipher.decipher(buffer, 0, buffer, 0, buflen);
- }
-
- crc = Misc.crc32(buffer, 0, buflen == remaining ? buflen - 4 : buflen, crc);
- }
-
- public int read() throws IOException {
- if (closed) {
- throw new IOException(SSHPlugin.getResourceString("closed"));
- }
-
- if (remaining - 4 == 0) {
- return -1;
- }
-
- if (bufpos == buflen) {
- fill();
- }
-
- int b = buffer[bufpos] & 0xff;
-
- ++bufpos;
- --remaining;
-
- return b;
- }
-
- public int read(byte b[], int off, int len) throws IOException {
- if (closed) {
- throw new IOException(SSHPlugin.getResourceString("closed"));
- }
-
- if (remaining - 4 == 0) {
- return -1;
- }
-
- if (bufpos == buflen) {
- fill();
- }
-
- len = (int) Math.min(len, (buflen == remaining + bufpos ? buflen - 4 : buflen) - bufpos);
-
- System.arraycopy(buffer, bufpos, b, off, len);
-
- bufpos += len;
- remaining -= len;
-
- return len;
- }
- }
-public ServerPacket(InputStream is, Cipher cipher) throws java.io.IOException {
- packetLength = Misc.readInt(is);
- paddingLength = 8 - (packetLength % 8);
- pis = new PacketInputStream(is, packetLength + paddingLength, cipher);
- Misc.skipFully(pis, paddingLength);
- packetType = (byte) pis.read();
-}
-public void close(boolean doCrcCheck) throws IOException {
- pis.close(doCrcCheck);
-}
-public InputStream getInputStream() {
- return pis;
-}
-}
+package org.eclipse.team.internal.ccvs.ssh; + +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +class ServerPacket extends Packet { + private PacketInputStream pis = null; + + private static class PacketInputStream extends FilterInputStream { + private static int MAX_BUFFER_SIZE = 1024; + + private byte[] buffer = new byte[MAX_BUFFER_SIZE]; + private int bufpos = 0; + private int buflen = 0; + private int bufrem = 0; + + private long remaining = 0; + private Cipher cipher = null; + + private long crc = 0; + private boolean closed = false; + + public PacketInputStream(InputStream in, long length, Cipher cipher) { + super(in); + + this.remaining = length; + this.cipher = cipher; + } + + public int available() throws IOException { + if (closed) { + throw new IOException(Policy.bind("closed"));//$NON-NLS-1$ + } + + return (int) Math.min(remaining - 4, Integer.MAX_VALUE); + } + + public void close() throws IOException { + close(true); + } + + public void close(boolean doCrcCheck) throws IOException { + if (!closed) { + try { + long toRead = doCrcCheck ? remaining - 4 : remaining; + + try { + Misc.skipFully(this, toRead); + } catch(IOException e) { + // we tried our best, keep going + } + + if(doCrcCheck) { + if ((int) crc != Misc.readInt(buffer, bufpos)) { + throw new IOException(Policy.bind("ServerPacket.crc"));//$NON-NLS-1$ + } + } + } finally { + closed = true; + } + } + } + + private void fill() throws IOException { + if (bufrem > 0) { + System.arraycopy(buffer, bufpos, buffer, 0, bufrem); + } + + int totalBytesRead = bufrem; + int read = 0; + int toRead = (int)Math.min(remaining - totalBytesRead, MAX_BUFFER_SIZE - totalBytesRead); + + while (toRead > 0) { + read = in.read(buffer, totalBytesRead, toRead); + + if (read == -1) { + throw new IOException(Policy.bind("stream"));//$NON-NLS-1$ + } + + totalBytesRead += read; + toRead -= read; + } + + bufpos = 0; + + buflen = (totalBytesRead / 8) * 8; + bufrem = totalBytesRead - buflen; + + if (cipher != null) { + cipher.decipher(buffer, 0, buffer, 0, buflen); + } + + crc = Misc.crc32(buffer, 0, buflen == remaining ? buflen - 4 : buflen, crc); + } + + public int read() throws IOException { + if (closed) { + throw new IOException(Policy.bind("closed"));//$NON-NLS-1$ + } + + if (remaining - 4 == 0) { + return -1; + } + + if (bufpos == buflen) { + fill(); + } + + int b = buffer[bufpos] & 0xff; + + ++bufpos; + --remaining; + + return b; + } + + public int read(byte b[], int off, int len) throws IOException { + if (closed) { + throw new IOException(Policy.bind("closed"));//$NON-NLS-1$ + } + + if (remaining - 4 == 0) { + return -1; + } + + if (bufpos == buflen) { + fill(); + } + + len = (int) Math.min(len, (buflen == remaining + bufpos ? buflen - 4 : buflen) - bufpos); + + System.arraycopy(buffer, bufpos, b, off, len); + + bufpos += len; + remaining -= len; + + return len; + } + } +public ServerPacket(InputStream is, Cipher cipher) throws java.io.IOException { + packetLength = Misc.readInt(is); + paddingLength = 8 - (packetLength % 8); + pis = new PacketInputStream(is, packetLength + paddingLength, cipher); + Misc.skipFully(pis, paddingLength); + packetType = (byte) pis.read(); +} +public void close(boolean doCrcCheck) throws IOException { + pis.close(doCrcCheck); +} +public InputStream getInputStream() { + return pis; +} +} diff --git a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPluginResources.properties b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/messages.properties index 5e05ca9cc..9ced29bfc 100644 --- a/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPluginResources.properties +++ b/bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/messages.properties @@ -18,3 +18,5 @@ Client.socket=Cannot connect to host: {0} ServerPacket.crc=crc error +SSHServerConnection.authenticating=Authenticating over extssh + |