### Eclipse Workspace Patch 1.0 #P org.eclipse.compare Index: compare/org/eclipse/compare/internal/ComparePreferencePage.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java,v retrieving revision 1.54 diff -u -r1.54 ComparePreferencePage.java --- compare/org/eclipse/compare/internal/ComparePreferencePage.java 4 Apr 2007 17:54:21 -0000 1.54 +++ compare/org/eclipse/compare/internal/ComparePreferencePage.java 1 Apr 2008 13:19:26 -0000 @@ -10,30 +10,49 @@ *******************************************************************************/ package org.eclipse.compare.internal; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import org.eclipse.ui.*; +import org.eclipse.compare.CompareConfiguration; +import org.eclipse.compare.IEncodedStreamContentAccessor; +import org.eclipse.compare.ITypedElement; +import org.eclipse.compare.contentmergeviewer.TextMergeViewer; +import org.eclipse.compare.structuremergeviewer.DiffNode; +import org.eclipse.compare.structuremergeviewer.Differencer; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.preference.RadioGroupFieldEditor; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PreferenceLinkArea; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; import org.eclipse.ui.texteditor.AbstractTextEditor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.preference.*; -import org.eclipse.jface.util.*; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; -import org.eclipse.compare.structuremergeviewer.*; - public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { @@ -76,6 +95,8 @@ public static final String HIGHLIGHT_TOKEN_CHANGES= PREFIX + "HighlightTokenChanges"; //$NON-NLS-1$ //public static final String USE_RESOLVE_UI= PREFIX + "UseResolveUI"; //$NON-NLS-1$ public static final String PATH_FILTER= PREFIX + "PathFilter"; //$NON-NLS-1$ + public static final String ADDED_LINES_REGEX= PREFIX + "AddedLinesRegex"; //$NON-NLS-1$ + public static final String REMOVED_LINES_REGEX= PREFIX + "RemovedLinesRegex"; //$NON-NLS-1$ private TextMergeViewer fPreviewViewer; @@ -84,6 +105,8 @@ private OverlayPreferenceStore fOverlayStore; private Map fCheckBoxes= new HashMap(); private Text fFilters; + private Text addedLinesRegex; + private Text removeLinesRegex; private SelectionListener fCheckBoxListener; @@ -96,6 +119,8 @@ new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_MORE_INFO), new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IGNORE_WHITESPACE), new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PREF_SAVE_ALL_EDITORS), + new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ADDED_LINES_REGEX), + new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, REMOVED_LINES_REGEX), new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND), new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT), @@ -118,6 +143,8 @@ store.setDefault(SHOW_MORE_INFO, false); store.setDefault(IGNORE_WHITESPACE, false); store.setDefault(PREF_SAVE_ALL_EDITORS, false); + store.setDefault(ADDED_LINES_REGEX, ""); //$NON-NLS-1$ + store.setDefault(REMOVED_LINES_REGEX, ""); //$NON-NLS-1$ //store.setDefault(USE_SPLINES, false); store.setDefault(USE_SINGLE_LINE, true); store.setDefault(HIGHLIGHT_TOKEN_CHANGES, true); @@ -158,6 +185,9 @@ * @see PreferencePage#performOk() */ public boolean performOk() { + fOverlayStore.setValue(ADDED_LINES_REGEX, addedLinesRegex.getText()); + fOverlayStore.setValue(REMOVED_LINES_REGEX, removeLinesRegex.getText()); + fOverlayStore.propagate(); editor.store(); return true; @@ -250,7 +280,7 @@ new Label(composite, SWT.NONE); Label l= new Label(composite, SWT.WRAP); - l.setText(Utilities.getString("ComparePreferencePage.filter.description")); //$NON-NLS-1$ + l.setText(Utilities.getString("ComparePreferencePage.regex.description")); //$NON-NLS-1$ Composite c2= new Composite(composite, SWT.NONE); c2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); @@ -259,9 +289,33 @@ c2.setLayout(layout); l= new Label(c2, SWT.NONE); + l.setText(Utilities.getString("ComparePreferencePage.regexAdded.label")); //$NON-NLS-1$ + addedLinesRegex = new Text(c2, SWT.BORDER); + addedLinesRegex.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + addedLinesRegex.setText(fOverlayStore.getString(ADDED_LINES_REGEX)); + + l= new Label(c2, SWT.NONE); + l.setText(Utilities.getString("ComparePreferencePage.regexRemoved.label")); //$NON-NLS-1$ + removeLinesRegex = new Text(c2, SWT.BORDER); + removeLinesRegex.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + removeLinesRegex.setText(fOverlayStore.getString(REMOVED_LINES_REGEX)); + + // a spacer + new Label(composite, SWT.NONE); + + l= new Label(composite, SWT.WRAP); + l.setText(Utilities.getString("ComparePreferencePage.filter.description")); //$NON-NLS-1$ + + Composite c3= new Composite(composite, SWT.NONE); + c3.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + layout= new GridLayout(2, false); + layout.marginWidth= 0; + c3.setLayout(layout); + + l= new Label(c3, SWT.NONE); l.setText(Utilities.getString("ComparePreferencePage.filter.label")); //$NON-NLS-1$ - fFilters= new Text(c2, SWT.BORDER); + fFilters= new Text(c3, SWT.BORDER); fFilters.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fFilters.setText(fOverlayStore.getString(PATH_FILTER)); fFilters.addModifyListener( Index: compare/org/eclipse/compare/internal/patch/PatchMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties,v retrieving revision 1.47 diff -u -r1.47 PatchMessages.properties --- compare/org/eclipse/compare/internal/patch/PatchMessages.properties 3 Mar 2008 13:30:41 -0000 1.47 +++ compare/org/eclipse/compare/internal/patch/PatchMessages.properties 1 Apr 2008 13:19:26 -0000 @@ -102,6 +102,7 @@ PreviewPatchPage_FuzzUsed=(fuzz factor used: {0}) PreviewPatchPage_AllContextIgnored=(fuzz factor used: {0}, all context lines ignored) PreviewPatchPage2_ShowMatched=Show &matched hunks +PreviewPatchPage2_AddedRemovedLines=Patch contains {0} added and {1} removed lines. PreviewPatchLabelDecorator_ProjectDoesNotExist=(Project does not exist in workspace) # Index: compare/org/eclipse/compare/internal/patch/PatchMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java,v retrieving revision 1.25 diff -u -r1.25 PatchMessages.java --- compare/org/eclipse/compare/internal/patch/PatchMessages.java 3 Mar 2008 13:30:41 -0000 1.25 +++ compare/org/eclipse/compare/internal/patch/PatchMessages.java 1 Apr 2008 13:19:26 -0000 @@ -105,6 +105,7 @@ public static String PreviewPatchPage2_RetargetAction; public static String PreviewPatchPage2_RetargetTooltip; public static String PreviewPatchPage2_ShowMatched; + public static String PreviewPatchPage2_AddedRemovedLines; public static String RetargetPatchElementDialog_0; public static String RetargetPatchElementDialog_1; } Index: compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java,v retrieving revision 1.34 diff -u -r1.34 PreviewPatchPage2.java --- compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java 28 Feb 2008 16:47:01 -0000 1.34 +++ compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java 1 Apr 2008 13:19:27 -0000 @@ -12,9 +12,11 @@ import java.lang.reflect.InvocationTargetException; import java.util.Iterator; +import java.util.regex.Pattern; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; +import org.eclipse.compare.internal.ComparePreferencePage; import org.eclipse.compare.internal.CompareUIPlugin; import org.eclipse.compare.internal.ICompareUIConstants; import org.eclipse.core.runtime.Assert; @@ -27,6 +29,7 @@ import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; @@ -37,6 +40,7 @@ import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; @@ -148,7 +152,14 @@ }}); c.setLayoutData(new GridData(GridData.FILL_BOTH)); - + + String text = calculateLines(); + if (text != null) { + Label l = new Label(composite, SWT.NONE); + l.setText(text); + GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL); + l.setLayoutData(gd); + } setControl(composite); restoreWidgetValues(); @@ -670,6 +681,40 @@ void saveWidgetValues() { settings.put(EXPAND_PATCH_OPTIONS, patchOptions.isExpanded()); } + + private String calculateLines() { + int added = 0, removed = 0; + + IPreferenceStore store = CompareUIPlugin.getDefault().getPreferenceStore(); + String addedLinesRegex = store.getString(ComparePreferencePage.ADDED_LINES_REGEX); + String removedLinesRegex = store.getString(ComparePreferencePage.REMOVED_LINES_REGEX); + + if ((addedLinesRegex == null || "".equals(addedLinesRegex)) //$NON-NLS-1$ + && (removedLinesRegex == null || "".equals(removedLinesRegex))) { //$NON-NLS-1$ + return null; + } + + Pattern addedPattern = Pattern.compile(addedLinesRegex); + Pattern removedPattern = Pattern.compile(removedLinesRegex); + + FileDiff[] fileDiffs = fPatcher.getDiffs(); + for (int i = 0; i < fileDiffs.length; i++) { + Hunk[] hunks = fileDiffs[i].getHunks(); + for (int j = 0; j < hunks.length; j++) { + String[] lines = hunks[j].getLines(); + for (int k = 0; k < lines.length; k++) { + String line = lines[k]; + if (addedPattern.matcher(line).find()) + added++; + if (removedPattern.matcher(line).find()) + removed++; + } + } + } + + return NLS.bind(PatchMessages.PreviewPatchPage2_AddedRemovedLines, + new String[] { added + "", removed + "" }); //$NON-NLS-1$ //$NON-NLS-2$ + } } Index: plugin.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/plugin.properties,v retrieving revision 1.90 diff -u -r1.90 plugin.properties --- plugin.properties 23 Jan 2008 13:39:25 -0000 1.90 +++ plugin.properties 1 Apr 2008 13:19:26 -0000 @@ -110,6 +110,10 @@ ComparePreferencePage.ignoreWhitespace.label= Ignore &white space ComparePreferencePage.saveBeforePatching.label= A&utomatically save dirty editors before browsing patches +ComparePreferencePage.regex.description=Enter regular expressions used to identify an added or removed line in a patch\n(e.g. '^\\+\\s*\\S' for an added line with at least one word character). +ComparePreferencePage.regexAdded.label=Added lines +ComparePreferencePage.regexRemoved.label=Removed lines + ComparePreferencePage.filter.description= Enter member names that should be excluded from 'Compare With Each Other'.\nList is comma separated (e.g. '*.class, .project, bin/') ComparePreferencePage.filter.label= &Filtered Members: ComparePreferencePage.filter.invalidsegment.error= Filter is invalid: {0}