Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean Michel-Lemieux2002-03-06 11:04:08 -0500
committerJean Michel-Lemieux2002-03-06 11:04:08 -0500
commitfde61dc3f72c1baedbc31a67abcc49f5a2073308 (patch)
treeb90ee2bf0e741a130903af65d9977b2631265fea
parent349ca75ceb0889162c260669a4fa16aa897fe6df (diff)
downloadeclipse.platform.team-fde61dc3f72c1baedbc31a67abcc49f5a2073308.tar.gz
eclipse.platform.team-fde61dc3f72c1baedbc31a67abcc49f5a2073308.tar.xz
eclipse.platform.team-fde61dc3f72c1baedbc31a67abcc49f5a2073308.zip
Exposed some synchronizer details for test purposes.
Fixed serious bug in checkout -- infinite recursion while expanding modules.
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java5
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSProvider.java6
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Checkout.java2
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java4
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Diff.java4
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ExpandModules.java2
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java2
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java7
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseResource.java4
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java2
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java4
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileUtil.java407
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java158
13 files changed, 28 insertions, 579 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java
index ba90eda1b..6dac0343d 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java
@@ -50,6 +50,11 @@ public interface ICVSFile extends ICVSResource {
void setReadOnly(boolean readOnly) throws CVSException;
/**
+ * Determines if a file is read only or not.
+ */
+ boolean isReadOnly() throws CVSException;
+
+ /**
* Move the resource to another location. Does overwrite without
* promting.
*/
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSProvider.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSProvider.java
index 0eb4f7d8b..78eaafdbf 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSProvider.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSProvider.java
@@ -139,11 +139,5 @@ public interface ICVSProvider {
* Get the names of the registered connection methods.
*/
public String[] getSupportedConnectionMethods();
-
-
- /**
- * Set the print stream to which command message and error output is sent
- */
- public void setPrintStream(PrintStream out);
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Checkout.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Checkout.java
index 0af68f130..3932ec8eb 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Checkout.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Checkout.java
@@ -129,7 +129,7 @@ public class Checkout extends Command {
}
}
- return super.execute(session, globalOptions, localOptions, arguments, listener, Policy.subMonitorFor(monitor, 90));
+ return super.doExecute(session, globalOptions, localOptions, arguments, listener, Policy.subMonitorFor(monitor, 90));
}
/**
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java
index 84d4f6834..25bc8e412 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java
@@ -334,14 +334,14 @@ public abstract class Command {
final IStatus[] status = new IStatus[1];
ICVSRunnable job = new ICVSRunnable() {
public void run(IProgressMonitor monitor) throws CVSException {
- status[0] = doExcecute(session, globalOptions, localOptions, arguments, listener, monitor);
+ status[0] = doExecute(session, globalOptions, localOptions, arguments, listener, monitor);
}
};
session.getLocalRoot().run(job, pm);
return status[0];
}
- protected IStatus doExcecute(Session session, GlobalOption[] globalOptions,
+ protected IStatus doExecute(Session session, GlobalOption[] globalOptions,
LocalOption[] localOptions, String[] arguments, ICommandOutputListener listener,
IProgressMonitor monitor) throws CVSException {
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Diff.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Diff.java
index abe7a9179..84f94d224 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Diff.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Diff.java
@@ -33,10 +33,10 @@ public class Diff extends Command {
* Overwritten to throw the CVSDiffException if the server returns an error, because it just does
* so when there is a difference between the checked files.
*/
- protected IStatus doExcecute(Session session, GlobalOption[] globalOptions, LocalOption[] localOptions,
+ protected IStatus doExecute(Session session, GlobalOption[] globalOptions, LocalOption[] localOptions,
String[] arguments, ICommandOutputListener listener, IProgressMonitor monitor) throws CVSException {
try {
- return super.doExcecute(session, globalOptions, localOptions, arguments, listener, monitor);
+ return super.doExecute(session, globalOptions, localOptions, arguments, listener, monitor);
} catch (CVSServerException e) {
if (e.containsErrors()) throw e;
return e.getStatus();
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 8d2c135fd..2dfb14a09 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
@@ -41,6 +41,6 @@ public class ExpandModules extends Command {
* Convenient execute method
*/
public IStatus execute(Session session, String[] modules, IProgressMonitor monitor) throws CVSException {
- return execute(session, NO_GLOBAL_OPTIONS, NO_LOCAL_OPTIONS, modules, null, monitor);
+ return super.execute(session, NO_GLOBAL_OPTIONS, NO_LOCAL_OPTIONS, modules, null, monitor);
}
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java
index 0f6c5136d..9a2bb693e 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java
@@ -75,7 +75,7 @@ public class RTag extends Command {
ICVSResource resource = resources[i];
arguments.add(resource.getRemoteLocation(null));
}
- return execute(session, globalOptions,
+ return super.execute(session, globalOptions,
(LocalOption[]) modifiedLocalOptions.toArray(new LocalOption[modifiedLocalOptions.size()]),
(String[]) arguments.toArray(new String[arguments.size()]), null, monitor);
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
index a2d430ad0..2a04a3154 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
@@ -193,6 +193,13 @@ class EclipseFile extends EclipseResource implements ICVSFile {
public void setReadOnly(boolean readOnly) throws CVSException {
getIFile().setReadOnly(readOnly);
}
+
+ /*
+ * @see ICVSFile#isReadOnly()
+ */
+ public boolean isReadOnly() throws CVSException {
+ return getIFile().isReadOnly();
+ }
/*
* Typecasting helper
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseResource.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseResource.java
index 47118d698..2be2a08ce 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseResource.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseResource.java
@@ -19,7 +19,7 @@ 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;
-import org.eclipse.team.internal.ccvs.core.util.SyncFileUtil;
+import org.eclipse.team.internal.ccvs.core.util.SyncFileWriter;
import org.eclipse.team.internal.ccvs.core.util.Util;
/**
@@ -116,7 +116,7 @@ abstract class EclipseResource implements ICVSResource {
// initialize matcher with global ignores, basic CVS ignore patterns, and ignore patterns
// from the .cvsignore file.
- FileNameMatcher matcher = new FileNameMatcher(SyncFileUtil.BASIC_IGNORE_PATTERNS);
+ FileNameMatcher matcher = new FileNameMatcher(SyncFileWriter.BASIC_IGNORE_PATTERNS);
String[] cvsIgnorePatterns;;
try {
cvsIgnorePatterns = EclipseSynchronizer.getInstance().getIgnored(resource);
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
index b91b8dc83..ff5a8cc15 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
@@ -478,7 +478,7 @@ public class EclipseSynchronizer {
}
}
- static private void flushAll(final IContainer root, final boolean purgeFromDisk) throws CVSException {
+ static public void flushAll(final IContainer root, final boolean purgeFromDisk) throws CVSException {
if (! (root.exists() || root.isPhantom())) return;
try {
// purge sync information from children
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 6ac193ef2..f1f951764 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
@@ -324,6 +324,10 @@ public class RemoteFile extends RemoteResource implements ICVSRemoteFile, ICVSFi
public void setReadOnly(boolean readOnly) throws CVSException {
}
+ public boolean isReadOnly() throws CVSException {
+ return true;
+ }
+
/**
* @see IManagedFile#getTimeStamp()
*/
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
deleted file mode 100644
index e235330b0..000000000
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileUtil.java
+++ /dev/null
@@ -1,407 +0,0 @@
-package org.eclipse.team.internal.ccvs.core.util;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.Policy;
-import org.eclipse.team.internal.ccvs.core.resources.CVSEntryLineTag;
-import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-
-public class SyncFileUtil {
-
- // All possible files available in the CVS subdir
-
- public static final String REPOSITORY = "Repository"; //$NON-NLS-1$
- public static final String ROOT = "Root"; //$NON-NLS-1$
- public static final String STATIC = "Entries.Static"; //$NON-NLS-1$
- public static final String TAG = "Tag"; //$NON-NLS-1$
- public static final String ENTRIES = "Entries"; //$NON-NLS-1$
- public static final String PERMISSIONS = "Permissions"; //$NON-NLS-1$
- public static final String ENTRIES_LOG="Entries.Log"; //$NON-NLS-1$
-
- // the local workspace file that contains pattern for ignored resources
- public static final String IGNORE_FILE = ".cvsignore"; //$NON-NLS-1$
-
- // Some older CVS clients may of added a line to the entries file consisting
- // of only a 'D'. It is safe to ingnore these entries.
- private static final String FOLDER_TAG="D"; //$NON-NLS-1$
-
- // Command characters found in the Entries.log file
- private static final String ADD_TAG="A "; //$NON-NLS-1$
- private static final String REMOVE_TAG="R "; //$NON-NLS-1$
-
- // 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$ //$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$ //$NON-NLS-2$
-
- /**
- * Reads the CVS/Entry and CVS/Permissions files for the given folder. If the folder does not have a
- * CVS subdirectory then <code>null</code> is returned.
- */
- public static ResourceSyncInfo[] readEntriesFile(File parent) throws CVSException {
-
- File cvsSubDir = getCVSSubdirectory(parent);
-
- if(!cvsSubDir.exists()) {
- return null;
- }
-
- // The Eclipse CVS client does not write to the Entries.log file. Thus
- // merging is required for external command line client compatibility.
- mergeEntriesLogFiles(parent);
-
- Map infos = new TreeMap();
- String[] entries = getContents(new File(cvsSubDir, ENTRIES));
- String[] permissions = getContents(new File(cvsSubDir, PERMISSIONS));
-
- if (entries == null) {
- return null;
- }
-
- for (int i = 0; i < entries.length; i++) {
- String line = entries[i];
- if(!FOLDER_TAG.equals(line) && !"".equals(line)) { //$NON-NLS-1$
- ResourceSyncInfo info = new ResourceSyncInfo(line, null, null);
- infos.put(info.getName(), info);
- }
- }
-
- if (permissions != null) {
- for (int i = 0; i < permissions.length; i++) {
- if ("".equals(permissions[i])) { //$NON-NLS-1$
- continue;
- }
- String line = permissions[i];
- EmptyTokenizer tokenizer = new EmptyTokenizer(line,"/"); //$NON-NLS-1$
- String name = tokenizer.nextToken();
- String perms = tokenizer.nextToken();
- ResourceSyncInfo info = (ResourceSyncInfo) infos.get(name);
- // Running the command line tool will update the Entries file and thus cause
- // the Permissions to be out-of-sync.
- if (info != null) {
- infos.put(name, new ResourceSyncInfo(info.getEntryLine(true), perms, null));
- }
- }
- }
- return (ResourceSyncInfo[])infos.values().toArray(new ResourceSyncInfo[infos.size()]);
- }
-
- public static void writeResourceSync(File file, ResourceSyncInfo info) throws CVSException {
- writeEntriesLog(file, info, ADD_TAG);
- }
-
- /**
- * Append to Entries.log file
- */
- private static void writeEntriesLog(File file, ResourceSyncInfo info, String prefix) throws CVSException {
- FileOutputStream out = null;
- try {
- File entriesLogFile = new File(getCVSSubdirectory(file.getParentFile()), ENTRIES_LOG);
- if(!entriesLogFile.exists()) {
- entriesLogFile.createNewFile();
- }
- String line = prefix + info.getEntryLine(true) +"\n"; //$NON-NLS-1$
- out = new FileOutputStream(entriesLogFile.getAbsolutePath(), true);
- out.write(line.getBytes());
- } catch(IOException e) {
- throw new CVSException(IStatus.ERROR, 0, Policy.bind("SyncFileUtil_Error_writing_to_Entries.log_48"), e); //$NON-NLS-1$
- } finally {
- try {
- if(out!=null) {
- out.close();
- }
- } catch(IOException e) {
- throw new CVSException(IStatus.ERROR, 0, Policy.bind("SyncFileUtil_Cannot_close_Entries.log_49"), e); //$NON-NLS-1$
- }
- }
- }
-
- /**
- * Delete this file from Entries/Permissions file
- */
- public static void deleteSync(File file) throws CVSException {
- if(file.isDirectory()) {
- writeEntriesLog(file, new ResourceSyncInfo(file.getName()), REMOVE_TAG);
- } else {
- writeEntriesLog(file, new ResourceSyncInfo(file.getName(), "0", "", "", null, ""), REMOVE_TAG); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- }
- }
-
- public static boolean isMetaFile(File file) {
- File parent = file.getParentFile();
- if(parent!=null&&parent.getName().equals("CVS")) { //$NON-NLS-1$
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Writes the given resource sync infos into the CVS/Entry and CVS/Permissions files.
- */
- public static void writeEntriesFile(File entryFile, ResourceSyncInfo[] infos) throws CVSException {
-
- String[] entries = new String[infos.length];
- List permissions = new ArrayList(infos.length);
-
- for(int i = 0; i < infos.length; i++){
- entries[i] = infos[i].getEntryLine(true);
- if (!infos[i].isDirectory()) {
- permissions.add(infos[i].getPermissionLine());
- }
- }
- writeLines(entryFile, entries);
- writeLines(new File(entryFile.getParentFile(),PERMISSIONS), (String[])permissions.toArray(new String[permissions.size()]));
- }
-
- /**
- * Read folder sync info, returns <code>null</code> if the folder does not have
- * a CVS subdirectory.
- */
- public static FolderSyncInfo readFolderConfig(File folder) throws CVSException {
-
- File cvsSubDir = getCVSSubdirectory(folder);
-
- if(!cvsSubDir.exists()) {
- return null;
- }
-
- String staticDir = readLine(new File(cvsSubDir, STATIC));
- String repo = readLine(new File(cvsSubDir, REPOSITORY));
- String root = readLine(new File(cvsSubDir, ROOT));
- String tag = readLine(new File(cvsSubDir, TAG));
-
- boolean isStatic = false;
- if (staticDir != null)
- isStatic = true;
-
- if(root == null || repo == null) {
- return null;
- }
-
- CVSTag cvsTag = null;
- if(tag != null) {
- cvsTag = new CVSEntryLineTag(tag);
- }
-
- return new FolderSyncInfo(repo, root, cvsTag, isStatic);
- }
-
- public static File[] getEntrySyncFiles(File folder) {
- File cvsSubDir = getCVSSubdirectory(folder);
- return new File[] { new File(cvsSubDir, ENTRIES), new File(cvsSubDir, PERMISSIONS) };
- }
-
- public static File[] getFolderSyncFiles(File folder) {
- File cvsSubDir = getCVSSubdirectory(folder);
- return new File[] { new File(cvsSubDir, ROOT), new File(cvsSubDir, REPOSITORY), new File(cvsSubDir, STATIC), new File(cvsSubDir, TAG) };
- }
-
- public static void writeFolderConfig(File parent, FolderSyncInfo info) throws CVSException {
-
- if(!getCVSSubdirectory(parent).exists()) {
- getCVSSubdirectory(parent).mkdir();
- }
-
- writeLine(parent, ROOT, info.getRoot());
- if (info.getTag() != null) {
- writeLine(parent, TAG, info.getTag().toEntryLineFormat(false));
- } else {
- writeLine(parent, TAG, null);
- }
- if(info.getIsStatic()) {
- writeLine(parent, STATIC, ""); // touch file //$NON-NLS-1$
- } else {
- writeLine(parent, STATIC, null);
- }
- writeLine(parent, REPOSITORY, info.getRepository());
- }
-
- protected static void setContents(File parent, String filename, String[] contents) throws CVSException {
-
- File propertyFile = new File(getCVSSubdirectory(parent), filename);
-
- if (contents == null) {
- propertyFile.delete();
- } else {
- writeLines(propertyFile,contents);
- }
- }
-
- protected static void writeLine(File parent, String filename, String content) throws CVSException {
- if (content == null) {
- setContents(parent, filename, null);
- } else {
- setContents(parent, filename, new String[]{content});
- }
- }
-
- protected static String readLine(File file) throws CVSException {
- String[] contents = getContents(file);
- if (contents == null) {
- return null;
- } else if (contents.length == 0) {
- return ""; //$NON-NLS-1$
- } else {
- return contents[0];
- }
- }
-
- protected static String[] getContents(File file) throws CVSException {
-
- // If the property does not exsist we return null
- // this is specified
- if (file.exists()) {
- return readLines(file);
- } else {
- return null;
- }
- }
-
- public static File getCVSSubdirectory(File folder) {
- return new File(folder, "CVS"); //$NON-NLS-1$
- }
-
- public static void mergeEntriesLogFiles(File root) throws CVSException {
-
- File logEntriesFile = new File(getCVSSubdirectory(root), ENTRIES_LOG);
- File entriesFile = new File(getCVSSubdirectory(root), ENTRIES);
-
- if (!logEntriesFile.exists()) {
- // If we do not have an Entries.Log file we are done because there is nothing
- // to merge (this includes the case where we do not have CVSDirectory)
- return;
- }
-
- // The map contains the name of the resource as the key and the entryLine as the
- // value
- // "new ResourceSyncInfo(entryLine,null)).getName()" ist used to parse the name
- // out of the entryLine and shoud maybe be replaced sometime
-
- Map mergedEntries = new HashMap();
-
- if(entriesFile.exists()) {
- String[] entries = readLines(entriesFile);
- for (int i = 0; i < entries.length; i++) {
- if (!FOLDER_TAG.equals(entries[i])) {
- mergedEntries.put((new ResourceSyncInfo(entries[i],null, null)).getName(),entries[i]);
- }
- }
- }
-
- String[] logEntries = readLines(logEntriesFile);
- for (int i = 0; i < logEntries.length; i++) {
-
- if (logEntries[i].startsWith(ADD_TAG)) {
- String newEntry = logEntries[i].substring(ADD_TAG.length());
- mergedEntries.put((new ResourceSyncInfo(newEntry,null, null)).getName(),newEntry);
- } else if (logEntries[i].startsWith(REMOVE_TAG)) {
- String newEntry = logEntries[i].substring(REMOVE_TAG.length());
- mergedEntries.remove((new ResourceSyncInfo(newEntry,null, null)).getName());
- }
- }
-
- writeLines(entriesFile,(String[]) mergedEntries.values().toArray(new String[mergedEntries.size()]));
- logEntriesFile.delete();
-
- // Refresh the CVS directory containing the files
- IResource resource = ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(new Path(getCVSSubdirectory(root).getAbsolutePath()));
- try {
- if(resource!=null) {
- resource.refreshLocal(IResource.DEPTH_INFINITE, Policy.monitorFor(null));
- }
- } catch(CoreException e) {
- // XXX Should we throw or log?
- throw new CVSException(IStatus.ERROR, 0, Policy.bind("SyncFileUtil_Error_reloading_sync_information_58"), e); //$NON-NLS-1$
- }
-
- }
-
- public static String[] readLines(File file) throws CVSException {
- BufferedReader fileReader;
- List fileContentStore = new ArrayList();
- String line;
-
- try {
- fileReader = new BufferedReader(new FileReader(file));
- while ((line = fileReader.readLine()) != null) {
- fileContentStore.add(line);
- }
- fileReader.close();
- } catch(FileNotFoundException e) {
- return new String[0];
- } catch (IOException e) {
- throw CVSException.wrapException(e);
- }
-
- return (String[]) fileContentStore.toArray(new String[fileContentStore.size()]);
- }
-
- /**
- * To be compatible with other CVS clients meta files must be written with lines
- * terminating with a carriage return only.
- */
- private static void writeLines(File file, String[] content) throws CVSException {
-
- BufferedWriter fileWriter;
-
- try {
- fileWriter = new BufferedWriter(new FileWriter(file));
- for (int i = 0; i<content.length; i++) {
- fileWriter.write(content[i] + "\n"); //$NON-NLS-1$
- }
- fileWriter.close();
- } catch (IOException e) {
- throw CVSException.wrapException(e);
- }
- }
-
- public static void addCvsIgnoreEntry(File file, String pattern) throws CVSException {
- FileOutputStream out = null;
- try {
- File cvsignore = new File(file.getParentFile(), IGNORE_FILE);
- if(!cvsignore.exists()) {
- cvsignore.createNewFile();
- }
- String line = pattern == null ? file.getName() : pattern;
- line += "\n"; //$NON-NLS-1$
- out = new FileOutputStream(cvsignore.getAbsolutePath(), true /*append*/);
- out.write(line.getBytes());
- } catch(IOException e) {
- throw new CVSException(IStatus.ERROR, 0, Policy.bind("SyncFileUtil_Error_writing_to_.cvsignore_61"), e); //$NON-NLS-1$
- } finally {
- try {
- if(out!=null) {
- out.close();
- }
- } catch(IOException e) {
- throw new CVSException(IStatus.ERROR, 0, Policy.bind("SyncFileUtil_Cannot_close_.cvsignore_62"), e); //$NON-NLS-1$
- }
- }
- }
-} \ No newline at end of file
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 7c94be7f5..6f297ca58 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
@@ -21,159 +21,6 @@ import org.eclipse.team.internal.ccvs.core.Policy;
* Unsorted static helper-methods
*/
public class Util {
-
- 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");
-
-
- /**
- * @see Util#getOptions(String[],String,boolean)
- */
- public static String getOption(String[] options, String key, boolean deleteOption) {
-
- String[] result;
-
- result = getOptions(options,key,deleteOption);
-
- if (result.length == 0) {
- return null;
- } else {
- return result[0];
- }
- }
-
- /**
- * Get an option out of an array of options. It assumes, that
- * the next field to the key contains the parameter to the
- * option.
- *
- * @param options not null
- * @param key not null
- * @param deleteOption nulls both the option-tag and the information
- * @return String[0] if the option could not be found
- */
- public static String[] getOptions(String[] options, String key, boolean deleteOption) {
-
- String[] tmpResult;
- String[] result;
- int size = 0;
-
- Assert.isNotNull(options);
- Assert.isNotNull(key);
-
- tmpResult = new String[options.length];
-
- for (int i=0; i<options.length; i++) {
- if (key.equals(options[i]) && i<options.length-1) {
- tmpResult[size++] = options[i+1];
-
- // This should be done in another way maybe we should
- // have an options Object or give the array modified
- // back.
- // Maybe we are going to change that.
- if (deleteOption) {
- options[i] = null;
- options[i+1] = null;
- }
- }
- }
-
- result = new String[size];
- System.arraycopy(tmpResult,0,result,0,size);
- return result;
- }
-
- /**
- * Checks wether the Array options contains the String
- * key.
- * @param options not null
- * @param key not null
- */
- public static boolean isOption(String[] options, String key) {
-
- Assert.isNotNull(options);
- Assert.isNotNull(key);
-
- for (int i=0; i<options.length; i++) {
- if (key.equals(options[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Remove or get the password out of a repoString.
- */
- // FIXME: This is only used for tests ... move it
- private static String passwordHandle(String repoName, boolean remove) {
-
- int atPlace = -1;
- int colonPlace = -1;
- int colonCount = 0;
- String currentChar;
-
- Assert.isTrue(repoName.indexOf(AT) != -1);
- Assert.isTrue(repoName.indexOf(COLON) != -1);
-
- for (int i=0; i<repoName.length(); i++) {
-
- currentChar = repoName.substring(i,i+1);
-
- if (currentChar.equals(COLON)) {
- colonCount++;
-
- if (colonCount == 3) {
- colonPlace = i;
- }
- }
-
- if (currentChar.equals(AT)) {
- if (colonPlace == -1) {
-
- // If the @ comes before the third colon, then
- // we do not have a password and return with the
- // same string
- return repoName;
- } else {
- atPlace = i;
- }
-
- }
- }
-
- if (atPlace == -1) {
- return repoName;
- }
-
- if (remove) {
- return repoName.substring(0,colonPlace) + repoName.substring(atPlace);
- } else {
- return repoName.substring(colonPlace + 1, atPlace);
- }
- }
-
- /**
- * returns ":pserver:nkrambro@fiji:/home/nkrambro/repo"
- * when you insert ":pserver:nkrambro:password@fiji:/home/nkrambro/repo"
- */
- // FIXME: This is only used for tests ... move it
- public static String removePassword(String root) {
- return passwordHandle(root,true);
- }
-
- /**
- *
- * returns "password"
- * when you insert ":pserver:nkrambro:password@fiji:/home/nkrambro/repo"
- */
- // FIXME: This is only used for tests ... move it
-
- // FIXME: This is only used for tests ... move it
-
/**
* Get the extention of the path of resource
* relative to the path of root
@@ -212,12 +59,11 @@ public class Util {
else
return prefix + Session.SERVER_SEPARATOR + suffix;
}
-
-
+
public static void logError(String message, Throwable throwable) {
CVSProviderPlugin.log(new Status(IStatus.ERROR, CVSProviderPlugin.ID, IStatus.ERROR, message, throwable));
}
-
+
/**
* If the number of segments in the relative path of <code>resource</code> to <code>root</code> is
* greater than <code>split</code> then the returned path is truncated to <code>split</code> number

Back to the top