diff options
author | Michael Valenta | 2004-08-23 17:41:58 +0000 |
---|---|---|
committer | Michael Valenta | 2004-08-23 17:41:58 +0000 |
commit | 54b0764531039ee4af0256dc97201213817d1070 (patch) | |
tree | 3066f89a25656095e6e52571797fb9a489100620 | |
parent | d3ee894c7a8c04e670613707b6f8df39a19c0d36 (diff) | |
download | eclipse.platform.team-54b0764531039ee4af0256dc97201213817d1070.tar.gz eclipse.platform.team-54b0764531039ee4af0256dc97201213817d1070.tar.xz eclipse.platform.team-54b0764531039ee4af0256dc97201213817d1070.zip |
Bug 39950 [CVS Sync] File timestamps on updates
10 files changed, 245 insertions, 87 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java index babefbd3a..7236be06c 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java @@ -152,8 +152,10 @@ public interface ICVSFile extends ICVSResource, ICVSStorage { /** * This method is invoked by the checked-in handler after the file * has been committed. + * @param entryLine the entry line recieved from the server (can be null) + * @param commit whether the checkin is comming from a cvs commit or not */ - public void checkedIn(String entryLine) throws CVSException; + public void checkedIn(String entryLine, boolean commit) throws CVSException; /** * Answer any pending notification information associated with the receiver. diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CheckedInHandler.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CheckedInHandler.java index 649b08e8c..f5ba4b829 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CheckedInHandler.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CheckedInHandler.java @@ -48,7 +48,7 @@ class CheckedInHandler extends ResponseHandler { // Marked the local file as checked-in monitor.subTask(Policy.bind("CheckInHandler.checkedIn", Util.toTruncatedPath((ICVSResource)mFile, session.getLocalRoot(), 3))); //$NON-NLS-1$ - mFile.checkedIn(entryLine); + mFile.checkedIn(entryLine, session.getCurrentCommand() instanceof Commit); } } diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java index 6c3cbae5b..a5c1b8e49 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java @@ -334,6 +334,7 @@ public abstract class Command extends Request { // run the command try { + session.setCurrentCommand(Command.this); status[0] = doExecute(session, gOptions, lOptions, arguments, listener, monitor); notifyConsoleOnCompletion(session, status[0], null); } catch (CVSException e) { diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Commit.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Commit.java index 61246219f..7f0e8de7d 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Commit.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Commit.java @@ -99,7 +99,7 @@ public class Commit extends Command { // There should be sync info. Log the problem return new Status(IStatus.WARNING, CVSProviderPlugin.ID, 0, Policy.bind("Commit.syncInfoMissing", cvsFile.getIResource().getFullPath().toString()), null); //$NON-NLS-1$ } - cvsFile.checkedIn(null); + cvsFile.checkedIn(null, true /* commit in progress */); return new Status(IStatus.INFO, CVSProviderPlugin.ID, 0, Policy.bind("Commit.timestampReset", cvsFile.getIResource().getFullPath().toString()), null); //$NON-NLS-1$; } diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java index 2b84d7e70..b734ef92f 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java @@ -80,6 +80,8 @@ public class Session { // List of errors accumulated while the command is executing private List errors = new ArrayList(); + + private Command currentCommand; /** * Creates a new CVS session, initially in the CLOSED state. @@ -965,4 +967,12 @@ public class Session { public void clearErrors() { errors.clear(); } + + public void setCurrentCommand(Command c) { + currentCommand = c; + } + + public Command getCurrentCommand() { + return currentCommand; + } } diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java index 1792690ed..b32220b79 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java @@ -415,15 +415,15 @@ public class EclipseFile extends EclipseResource implements ICVSFile { return getNotifyInfo(); } - /** - * @see org.eclipse.team.internal.ccvs.core.ICVSFile#committed(String) + /* (non-Javadoc) + * @see org.eclipse.team.internal.ccvs.core.ICVSFile#checkedIn(java.lang.String) */ - public void checkedIn(String entryLine) throws CVSException { + public void checkedIn(String entryLine, boolean commit) throws CVSException { ResourceSyncInfo oldInfo = getSyncInfo(); ResourceSyncInfo newInfo = null; int modificationState = ICVSFile.CLEAN; if (entryLine == null) { - // The file contents matched the server contents so no entry line was sent + // cvs commit: the file contents matched the server contents so no entry line was sent if (oldInfo == null) return; Date timeStamp = oldInfo.getTimeStamp(); if (timeStamp == null || oldInfo.isMergedWithConflicts()) { @@ -440,14 +440,27 @@ public class EclipseFile extends EclipseResource implements ICVSFile { } // (modified = false) the file will be no longer modified } else if (oldInfo == null) { - // cvs add of a file + // cvs add: addition of a file newInfo = new ResourceSyncInfo(entryLine, null, null); // an added file should show up as modified modificationState = ICVSFile.DIRTY; } else { - // commit of a changed file - newInfo = new ResourceSyncInfo(entryLine, oldInfo.getPermissions(), getTimeStamp()); - // (modified = false) a committed file is no longer modified + // cvs commit: commit of a changed file + // cvs update: update of a file whose contents match the server contents + Date timeStamp; + if (commit) { + // This is a commit. Put the file timestamp in the entry + timeStamp = getTimeStamp(); + } else { + // This is an update. Reset the file timestamp to match the entry + timeStamp = oldInfo.getTimeStamp(); + if (timeStamp == null) { + timeStamp = getTimeStamp(); + } else { + setTimeStamp(timeStamp); + } + } + newInfo = new ResourceSyncInfo(entryLine, oldInfo.getPermissions(), timeStamp); } if (newInfo != null) setSyncInfo(newInfo, modificationState); diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java index c008930d0..c4638fb74 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java @@ -528,7 +528,7 @@ public class RemoteFile extends RemoteResource implements ICVSRemoteFile { /** * @see org.eclipse.team.internal.ccvs.core.ICVSFile#committed(org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo) */ - public void checkedIn(String info) { + public void checkedIn(String info, boolean commit) { // do nothing } /** diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateOperation.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateOperation.java index 87126eec5..a211580b2 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateOperation.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/RefreshDirtyStateOperation.java @@ -55,7 +55,7 @@ public class RefreshDirtyStateOperation extends CVSSubscriberOperation { if (resource.getType() == IResource.FILE) { if (comparator.compareContents((IFile)resource, info.getBase(), Policy.subMonitorFor(monitor, 100))) { ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor((IFile)resource); - cvsFile.checkedIn(null); + cvsFile.checkedIn(null, false /* not a commit */); } } } 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 4f772e39a..9ba3bb1ef 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 @@ -18,12 +18,25 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.*; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; @@ -31,10 +44,20 @@ import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.*; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Text; 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.ui.*; +import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; +import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; +import org.eclipse.team.internal.ccvs.ui.IHelpContextIds; +import org.eclipse.team.internal.ccvs.ui.Policy; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.help.WorkbenchHelp; import org.eclipse.ui.internal.ide.misc.ContainerContentProvider; @@ -47,8 +70,7 @@ public class GenerateDiffFileWizard extends Wizard { private PatchFileSelectionPage mainPage; private PatchFileCreationOptionsPage optionsPage; - - private IStructuredSelection selection; + private IResource resource; /** @@ -56,10 +78,72 @@ public class GenerateDiffFileWizard extends Wizard { * entering a file name that already exists. */ private class PatchFileSelectionPage extends WizardPage { - private Text filenameCombo; + + private final class DefaultValuesStore { + + private static final String PREF_LAST_SELECTION= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.selection"; //$NON-NLS-1$ + private static final String PREF_LAST_FS_PATH= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.fs.path"; //$NON-NLS-1$ + private static final String PREF_LAST_WS_FILENAME= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.ws.filename"; //$NON-NLS-1$ + private static final String PREF_LAST_WS_PATH= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.ws.path"; //$NON-NLS-1$ + + public int getDefaultSelection() { + try { + final int value= getDialogSettings().getInt(PREF_LAST_SELECTION); + return value == CLIPBOARD || value == FILESYSTEM || value == WORKSPACE ? value : CLIPBOARD; + } catch (NumberFormatException e) { + return CLIPBOARD; + } + } + + public String getDefaultFilesystemPath() { + final String lastPath = getDialogSettings().get(PREF_LAST_FS_PATH); + return lastPath != null ? lastPath : ""; //$NON-NLS-1$ + } + + public String getDefaultWorkspaceFilename() { + final String filename= getDialogSettings().get(PREF_LAST_WS_FILENAME); + return filename != null ? filename : ""; //$NON-NLS-1$ + } + + public IContainer getDefaultWorkspaceSelection() { + final String value= getDialogSettings().get(PREF_LAST_WS_PATH); + if ( value != null ) { + final IPath path= new Path(value); + final IResource container= ResourcesPlugin.getWorkspace().getRoot().findMember( path ); + if (container instanceof IContainer) { + return (IContainer)container; + } + } + return null; + } + + public void storeDefaultSelection(int defaultSelection) { + getDialogSettings().put(PREF_LAST_SELECTION, defaultSelection); + } + + public void storeDefaultFilesystemPath(String path) { + getDialogSettings().put(PREF_LAST_FS_PATH, path); + } + + public void storeDefaultWorkspacePath(String path) { + getDialogSettings().put(PREF_LAST_WS_PATH, path); + } + + public void storeDefaultWorkspaceFilename(String filename) { + getDialogSettings().put(PREF_LAST_WS_FILENAME, filename); + } + + private IDialogSettings getDialogSettings() { + return CVSUIPlugin.getPlugin().getDialogSettings(); + } + } + + private final DefaultValuesStore defaultValuesStore; + + protected Text filenameCombo; private Button browseButton; - private TreeViewer treeViewer; + protected TreeViewer treeViewer; private IContainer selectedContainer; private Text workspaceFilename; private Button saveInFilesystem; @@ -74,26 +158,35 @@ public class GenerateDiffFileWizard extends Wizard { private static final int SIZING_SELECTION_PANE_HEIGHT = 125; private static final int SIZING_SELECTION_PANE_WIDTH = 200; - PatchFileSelectionPage(String pageName, String title, ImageDescriptor image, IStructuredSelection selection) { + PatchFileSelectionPage(String pageName, String title, ImageDescriptor image) { super(pageName, title, image); setPageComplete(false); + defaultValuesStore = new DefaultValuesStore(); } /** * Allow the user to finish if a valid file has been entered. */ protected boolean validatePage() { - boolean valid = false; + boolean valid = false; + int selected = getSaveType(); - switch (getSaveType()) { + switch (selected) { case WORKSPACE: if (selectedContainer != null && getWorkspaceFile() != null) { valid = true; + defaultValuesStore.storeDefaultWorkspaceFilename(workspaceFilename.getText()); + final String path= selectedContainer.getFullPath().toOSString(); + defaultValuesStore.storeDefaultWorkspacePath(path); } break; case FILESYSTEM: - File file = new File(getFilesystemFile()); + final String filename = getFilesystemFile(); + final File file = new File(filename); valid = isValidFile(file); + if (valid) { + defaultValuesStore.storeDefaultFilesystemPath(filename); + } break; case CLIPBOARD: valid = true; @@ -105,6 +198,7 @@ public class GenerateDiffFileWizard extends Wizard { if (valid) { setMessage(null); setErrorMessage(null); + defaultValuesStore.storeDefaultSelection(selected); } else { setErrorMessage(Policy.bind("Enter_a_valid_file_name_or_select_the_clipboard_option_1")); //$NON-NLS-1$ } @@ -112,7 +206,7 @@ public class GenerateDiffFileWizard extends Wizard { return valid; } - private boolean isValidFile(File file) { + protected boolean isValidFile(File file) { if (!file.isAbsolute()) return false; if (file.isDirectory()) return false; File parent = file.getParentFile(); @@ -137,7 +231,7 @@ public class GenerateDiffFileWizard extends Wizard { * the patch outside of the workspace. */ public IFile getWorkspaceFile() { - if(saveInWorkspace.getSelection() && selectedContainer !=null) { + if(saveInWorkspace.getSelection() && selectedContainer != null) { String filename = workspaceFilename.getText(); if(filename==null || filename.length() == 0) { return null; @@ -166,22 +260,10 @@ public class GenerateDiffFileWizard extends Wizard { // Clipboard saveToClipboard= new Button(composite, SWT.RADIO); saveToClipboard.setText(Policy.bind("Save_To_Clipboard_2")); //$NON-NLS-1$ - saveToClipboard.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - validatePage(); - updateEnablements(); - } - }); // File System saveInFilesystem= new Button(composite, SWT.RADIO); saveInFilesystem.setText(Policy.bind("Save_In_File_System_3")); //$NON-NLS-1$ - saveInFilesystem.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - validatePage(); - updateEnablements(); - } - }); Composite nameGroup = new Composite(composite,SWT.NONE); layout = new GridLayout(); @@ -194,11 +276,7 @@ public class GenerateDiffFileWizard extends Wizard { filenameCombo= new Text(nameGroup, SWT.BORDER); GridData gd= new GridData(GridData.FILL_HORIZONTAL); filenameCombo.setLayoutData(gd); - filenameCombo.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - validatePage(); - } - }); + filenameCombo.setText(defaultValuesStore.getDefaultFilesystemPath()); browseButton = new Button(nameGroup, SWT.NULL); browseButton.setText(Policy.bind("Browse..._4")); //$NON-NLS-1$ @@ -206,9 +284,56 @@ public class GenerateDiffFileWizard extends Wizard { data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); browseButton.setLayoutData(data); + + // Workspace + saveInWorkspace= new Button(composite, SWT.RADIO); + saveInWorkspace.setText(Policy.bind("Save_In_Workspace_7")); //$NON-NLS-1$ + + createTreeViewer(composite); + + final int selected = defaultValuesStore.getDefaultSelection(); + saveToClipboard.setSelection(selected == CLIPBOARD); + saveInFilesystem.setSelection(selected == FILESYSTEM); + saveInWorkspace.setSelection(selected == WORKSPACE); + + validatePage(); + updateEnablements(); + + /** + * Add listeners. + */ + saveToClipboard.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + validatePage(); + updateEnablements(); + } + }); + saveInFilesystem.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + validatePage(); + updateEnablements(); + } + }); + + saveInWorkspace.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + validatePage(); + updateEnablements(); + } + }); + + filenameCombo.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + validatePage(); + } + }); + browseButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { FileDialog d = new FileDialog(getShell(), SWT.PRIMARY_MODAL | SWT.SAVE); + if (isValidFile(new File(filenameCombo.getText()))) { + d.setFilterPath(filenameCombo.getText()); + } d.setText(Policy.bind("Save_Patch_As_5")); //$NON-NLS-1$ d.setFileName(Policy.bind("patch.txt_6")); //$NON-NLS-1$ String file = d.open(); @@ -218,21 +343,7 @@ public class GenerateDiffFileWizard extends Wizard { } } }); - - // Workspace - saveInWorkspace= new Button(composite, SWT.RADIO); - saveInWorkspace.setText(Policy.bind("Save_In_Workspace_7")); //$NON-NLS-1$ - saveInWorkspace.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event event) { - validatePage(); - updateEnablements(); - } - }); - - createTreeViewer(composite); - saveToClipboard.setSelection(true); - validatePage(); - updateEnablements(); + } /** @@ -262,31 +373,13 @@ public class GenerateDiffFileWizard extends Wizard { treeViewer.getTree().setLayoutData(data); treeViewer.setContentProvider(cp); treeViewer.setLabelProvider(new WorkbenchLabelProvider()); - treeViewer.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - IStructuredSelection selection = (IStructuredSelection)event.getSelection(); - containerSelectionChanged((IContainer) selection.getFirstElement()); // allow null - validatePage(); - } - }); - - treeViewer.addDoubleClickListener( - new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - ISelection selection = event.getSelection(); - if (selection instanceof IStructuredSelection) { - Object item = ((IStructuredSelection)selection).getFirstElement(); - if (treeViewer.getExpandedState(item)) - treeViewer.collapseToLevel(item, 1); - else - treeViewer.expandToLevel(item, 1); - } - } - }); // This has to be done after the viewer has been laid out treeViewer.setInput(ResourcesPlugin.getWorkspace()); + selectedContainer= defaultValuesStore.getDefaultWorkspaceSelection(); + if (selectedContainer != null) { + treeViewer.setSelection(new StructuredSelection(selectedContainer)); + } // name group Composite nameGroup = new Composite(parent,SWT.NONE); @@ -304,13 +397,41 @@ public class GenerateDiffFileWizard extends Wizard { workspaceFilename = new Text(nameGroup,SWT.BORDER); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); workspaceFilename.setLayoutData(data); + workspaceFilename.setText(defaultValuesStore.getDefaultWorkspaceFilename()); + + /** + * Add listeners. + */ + treeViewer.addSelectionChangedListener( + new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + IStructuredSelection s = (IStructuredSelection)event.getSelection(); + containerSelectionChanged((IContainer) s.getFirstElement()); // allow null + validatePage(); + } + }); + + treeViewer.addDoubleClickListener( + new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { + ISelection s= event.getSelection(); + if (s instanceof IStructuredSelection) { + Object item = ((IStructuredSelection)s).getFirstElement(); + if (treeViewer.getExpandedState(item)) + treeViewer.collapseToLevel(item, 1); + else + treeViewer.expandToLevel(item, 1); + } + } + }); + workspaceFilename.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validatePage(); } }); } - + /** * Enable and disable controls based on the selected radio button. */ @@ -444,7 +565,6 @@ public class GenerateDiffFileWizard extends Wizard { public GenerateDiffFileWizard(IStructuredSelection selection, IResource resource) { super(); - this.selection = selection; this.resource = resource; setWindowTitle(Policy.bind("GenerateCVSDiff.title")); //$NON-NLS-1$ initializeDefaultPageImageDescriptor(); @@ -453,7 +573,7 @@ public class GenerateDiffFileWizard extends Wizard { public void addPages() { String pageTitle = Policy.bind("GenerateCVSDiff.pageTitle"); //$NON-NLS-1$ String pageDescription = Policy.bind("GenerateCVSDiff.pageDescription"); //$NON-NLS-1$ - mainPage = new PatchFileSelectionPage(pageTitle, pageTitle, CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_WIZBAN_DIFF), selection); + mainPage = new PatchFileSelectionPage(pageTitle, pageTitle, CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_WIZBAN_DIFF)); mainPage.setDescription(pageDescription); addPage(mainPage); diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java index e2119a429..56d94d0ac 100644 --- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java +++ b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java @@ -10,8 +10,7 @@ *******************************************************************************/ package org.eclipse.team.tests.ccvs.core.provider; import java.io.*; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import junit.framework.Test; @@ -542,5 +541,18 @@ public class CVSProviderTest extends EclipseTest { } } + + public void testUpdateWithNoChange() throws TeamException, CoreException { + IProject project = createProject(new String[] { "a.txt"}); + setContentsAndEnsureModified(project.getFile("a.txt"), "contents"); + commitProject(project); + Date modDate = CVSWorkspaceRoot.getCVSFileFor(project.getFile("a.txt")).getTimeStamp(); + // set the contents to the same value but ensure the local timestamp is different + setContentsAndEnsureModified(project.getFile("a.txt"), "contents"); + // Update and ensure file tiemstamp is what is was before out edit + updateProject(project, null, false); + assertEquals("Timestamp was not properly reset", modDate, CVSWorkspaceRoot.getCVSFileFor(project.getFile("a.txt")).getTimeStamp()); + + } } |