Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDani Megert2011-10-25 07:48:38 +0000
committerDani Megert2011-10-25 07:48:38 +0000
commita350892ff42a4f70722f1a5f36ab98ec161f134c (patch)
treea50cb90c7b05e55c052faee57b1126979fd5ee91
parent72e049524fb42f6dcc2f3d8af5c27231b8089c37 (diff)
downloadeclipse.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.java66
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 {

Back to the top