diff options
author | Dani Megert | 2011-10-25 07:48:38 +0000 |
---|---|---|
committer | Dani Megert | 2011-10-25 07:48:38 +0000 |
commit | a350892ff42a4f70722f1a5f36ab98ec161f134c (patch) | |
tree | a50cb90c7b05e55c052faee57b1126979fd5ee91 | |
parent | 72e049524fb42f6dcc2f3d8af5c27231b8089c37 (diff) | |
download | eclipse.platform.team-a350892ff42a4f70722f1a5f36ab98ec161f134c.tar.gz eclipse.platform.team-a350892ff42a4f70722f1a5f36ab98ec161f134c.tar.xz eclipse.platform.team-a350892ff42a4f70722f1a5f36ab98ec161f134c.zip |
Fixed bug 361793: Apply Patch uses wrong line delimiter for new text
files when pasting via clipboard
-rw-r--r-- | bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java index a059819db..dbed2d138 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2010 IBM Corporation and others. + * Copyright (c) 2000, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -26,6 +26,30 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.preferences.IScopeContext; +import org.eclipse.core.runtime.preferences.InstanceScope; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IStorage; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ProjectScope; + +import org.eclipse.core.filebuffers.FileBuffers; + +import org.eclipse.jface.text.TextUtilities; + import org.eclipse.compare.internal.core.Messages; import org.eclipse.compare.internal.core.patch.DiffProject; import org.eclipse.compare.internal.core.patch.FileDiffResult; @@ -35,20 +59,6 @@ import org.eclipse.compare.internal.core.patch.PatchReader; import org.eclipse.compare.patch.IHunk; import org.eclipse.compare.patch.IHunkFilter; import org.eclipse.compare.patch.PatchConfiguration; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IStorage; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.SubProgressMonitor; /** * A Patcher @@ -353,6 +363,18 @@ public class Patcher implements IHunkFilter { */ protected void store(String contents, IFile file, IProgressMonitor pm) throws CoreException { + if (!file.exists()) { + if (FileBuffers.getTextFileBufferManager().isTextFileLocation(file.getFullPath(), true)) { + // For new text files use the line delimiter as defined in the workspace + String expectedLD= getLineDelimiterPreference(file); + if (expectedLD != null) { + String patchLD= TextUtilities.determineLineDelimiter(contents, expectedLD); + if (!expectedLD.equals(patchLD)) + contents= contents.replaceAll(patchLD, expectedLD); + } + } + } + byte[] bytes; try { bytes= contents.getBytes(Utilities.getCharset(file)); @@ -364,6 +386,20 @@ public class Patcher implements IHunkFilter { store(bytes,file, pm); } + private static String getLineDelimiterPreference(IFile file) { + IScopeContext[] scopeContext; + if (file != null && file.getProject() != null) { + // project preference + scopeContext= new IScopeContext[] { new ProjectScope(file.getProject()) }; + String lineDelimiter= Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext); + if (lineDelimiter != null) + return lineDelimiter; + } + // workspace preference + scopeContext= new IScopeContext[] { InstanceScope.INSTANCE }; + return Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext); + } + protected void store(byte[] bytes, IFile file, IProgressMonitor pm) throws CoreException { InputStream is= new ByteArrayInputStream(bytes); try { |