Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2007-01-10 16:29:37 +0000
committerMichael Valenta2007-01-10 16:29:37 +0000
commit4b61a6e3dd472abeab4d7b05120e624782e4541b (patch)
tree9580cd5dcd60e244be27782896a62170646cbf39 /bundles/org.eclipse.team.cvs.ui/src
parentb98e31e537d50c47f23dab304b243c7adbe74448 (diff)
downloadeclipse.platform.team-4b61a6e3dd472abeab4d7b05120e624782e4541b.tar.gz
eclipse.platform.team-4b61a6e3dd472abeab4d7b05120e624782e4541b.tar.xz
eclipse.platform.team-4b61a6e3dd472abeab4d7b05120e624782e4541b.zip
Bug 67306 [Patching] Errors creating patches with icons (binary file)
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java2
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties2
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java92
3 files changed, 96 insertions, 0 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java
index 3cbffec1a..2dcb1acad 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIMessages.java
@@ -68,6 +68,8 @@ public class CVSUIMessages extends NLS {
public static String CVSPreferencesPage_50;
public static String CVSPreferencesPage_51;
public static String CVSPreferencesPage_QuickDiffAnnotate;
+ public static String GenerateDiffFileWizard_11;
+ public static String GenerateDiffFileWizard_12;
public static String PasswordManagementPreferencePage_2;
public static String PasswordManagementPreferencePage_3;
public static String PasswordManagementPreferencePage_4;
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
index e839f411b..c97f75e92 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
@@ -955,6 +955,8 @@ GenerateDiffFileWizard_7=&Project
GenerateDiffFileWizard_8=S&election
GenerateDiffFileWizard_9=Save Patch in Workspace
GenerateDiffFileWizard_10=Patch Root
+GenerateDiffFileWizard_11=Include Binary Files?
+GenerateDiffFileWizard_12=The selected resources include files marked as binary. CVS does not handle the creation of patches for binary files. Should the files marked as binary be included?
GenerateDiffFileWizard_File_multisegments=File name cannot contain multiple segments
GenerateDiffFileWizard_SelectAll=Select &All
GenerateDiffFileWizard_DeselectAll=&Deselect All
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java
index d0251da78..964593ca5 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java
@@ -34,11 +34,19 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
+import org.eclipse.team.core.Team;
import org.eclipse.team.core.TeamException;
+import org.eclipse.team.core.diff.IDiff;
+import org.eclipse.team.core.diff.IDiffVisitor;
+import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
import org.eclipse.team.core.synchronize.SyncInfoSet;
import org.eclipse.team.internal.ccvs.core.CVSException;
+import org.eclipse.team.internal.ccvs.core.ICVSFile;
+import org.eclipse.team.internal.ccvs.core.client.Command;
import org.eclipse.team.internal.ccvs.core.client.Diff;
import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
+import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
+import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
import org.eclipse.team.internal.ccvs.ui.*;
import org.eclipse.team.internal.ccvs.ui.IHelpContextIds;
import org.eclipse.team.internal.ccvs.ui.operations.*;
@@ -920,6 +928,70 @@ public class GenerateDiffFileWizard extends Wizard {
job.schedule();
return fParticipant.getSyncInfoSet();
}
+
+ public boolean hasBinaryFiles() {
+ try {
+ final boolean[] found = new boolean[] { false };
+ fParticipant.getSubscriber().accept(resources, IResource.DEPTH_INFINITE, new IDiffVisitor() {
+ public boolean visit(IDiff diff) {
+ if (isBinaryFile(diff))
+ found[0] = true;
+ return true;
+ }
+ });
+ return found[0];
+ } catch (CoreException e) {
+ CVSUIPlugin.log(e);
+ }
+ return false;
+ }
+
+ protected boolean isBinaryFile(IDiff diff) {
+ IFile file = getFile(diff);
+ if (file != null) {
+ ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(file);
+ try {
+ byte[] bytes = cvsFile.getSyncBytes();
+ if (bytes != null) {
+ return ResourceSyncInfo.getKeywordMode(bytes).toMode().equals(
+ Command.KSUBST_BINARY.toMode());
+ }
+ } catch (CVSException e) {
+ CVSUIPlugin.log(e);
+ }
+ return (Team.getFileContentManager().getType(file) == Team.BINARY);
+ }
+ return false;
+ }
+
+ protected IFile getFile(IDiff diff) {
+ IResource resource = ResourceDiffTree.getResourceFor(diff);
+ if (resource instanceof IFile) {
+ IFile file = (IFile) resource;
+ return file;
+ }
+ return null;
+ }
+
+ public void removeBinaryFiles() {
+ try {
+ final List nonBinaryFiles = new ArrayList();
+ fParticipant.getSubscriber().accept(resources, IResource.DEPTH_INFINITE, new IDiffVisitor() {
+ public boolean visit(IDiff diff) {
+ if (!isBinaryFile(diff)) {
+ IFile file = getFile(diff);
+ if (file != null)
+ nonBinaryFiles.add(file);
+ }
+ return true;
+ }
+ });
+ resources = (IResource[]) nonBinaryFiles
+ .toArray(new IResource[nonBinaryFiles.size()]);
+ } catch (CoreException e) {
+ CVSUIPlugin.log(e);
+ }
+ }
}
@@ -1273,6 +1345,15 @@ public class GenerateDiffFileWizard extends Wizard {
optionsPage.unified_projectRelativeOption.getSelection())
useProjectRelativePaths=true;
+ // TODO: Check for binary files
+ if (locationPage.hasBinaryFiles()) {
+ int result = promptToIncludeBinary();
+ if (result == 2)
+ return false;
+ if (result == 1)
+ locationPage.removeBinaryFiles();
+ }
+
/**
* Perform diff operation.
*/
@@ -1321,6 +1402,17 @@ public class GenerateDiffFileWizard extends Wizard {
return true;
}
+ private int promptToIncludeBinary() {
+ MessageDialog dialog = new MessageDialog(getShell(), CVSUIMessages.GenerateDiffFileWizard_11, null, // accept
+ // the
+ // default
+ // window
+ // icon
+ CVSUIMessages.GenerateDiffFileWizard_12, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL,
+ IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 1); // no is the default
+ return dialog.open();
+ }
+
private void generateDiffToClipboard(boolean multiPatch, boolean useProjectRelativePaths) throws TeamException {
DiffOperation diffop = new ClipboardDiffOperation(part,RepositoryProviderOperation.asResourceMappers(resources),optionsPage.getOptions(),multiPatch, useProjectRelativePaths, optionsPage.patchRoot);
try {

Back to the top