diff options
author | Michael Valenta | 2007-01-10 16:29:37 +0000 |
---|---|---|
committer | Michael Valenta | 2007-01-10 16:29:37 +0000 |
commit | 4b61a6e3dd472abeab4d7b05120e624782e4541b (patch) | |
tree | 9580cd5dcd60e244be27782896a62170646cbf39 /bundles/org.eclipse.team.cvs.ui/src | |
parent | b98e31e537d50c47f23dab304b243c7adbe74448 (diff) | |
download | eclipse.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')
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 { |