Index: plugin.properties
===================================================================
--- plugin.properties	(revision 5024)
+++ plugin.properties	(working copy)
@@ -226,3 +226,6 @@
 CheckoutAsProjectIntoAction.label=&Check Out As Project Into ..
 CheckoutAsAction.tooltip =&Check out a folder from the repository to the workspace into a directory
 MenuIconsPreferencePage.name=Menu Icons
+
+ShowHideExcludedFilesAction.name=&Show/Hide Excluded Files
+ShowHideExcludedFilesAction.tooltip=&Show/Hide Excluded Files
\ No newline at end of file
Index: plugin.xml
===================================================================
--- plugin.xml	(revision 5024)
+++ plugin.xml	(working copy)
@@ -759,6 +759,19 @@
                id="org.tigris.subversion.ui.actions.NewRepositoryAction">
          </action>
       </viewContribution>
+
+      <viewContribution
+            targetID="org.eclipse.team.sync.views.SynchronizeView"
+            id="org.tigris.subversion.subclipse.u.syncview_actions">
+         <action
+               label="%ShowHideExcludedFilesAction.name"
+               icon="icons/full/elcl16/filter_history.gif"
+               class="org.tigris.subversion.subclipse.ui.subscriber.ShowHideExcludedFilesAction"
+               tooltip="%ShowHideExcludedFilesAction.tooltip"
+               toolbarPath="actions"
+               id="org.tigris.subversion.subclipse.ui.subscriber.ShowHideExcludedFilesAction">
+         </action>
+      </viewContribution>
    </extension>
    <extension
          point="org.eclipse.team.ui.configurationWizards">
Index: src/org/tigris/subversion/subclipse/ui/repository/RepositoryManager.java
===================================================================
--- src/org/tigris/subversion/subclipse/ui/repository/RepositoryManager.java	(revision 5024)
+++ src/org/tigris/subversion/subclipse/ui/repository/RepositoryManager.java	(working copy)
@@ -35,6 +35,7 @@
 import org.tigris.subversion.subclipse.core.SVNException;
 import org.tigris.subversion.subclipse.core.SVNProviderPlugin;
 import org.tigris.subversion.subclipse.core.SVNTeamProvider;
+import org.tigris.subversion.subclipse.core.excludedfiles.ExcludedFilesManager;
 import org.tigris.subversion.subclipse.core.repo.ISVNListener;
 import org.tigris.subversion.subclipse.ui.Policy;
 import org.tigris.subversion.subclipse.ui.authentication.KeyFilesManager;
@@ -54,6 +55,7 @@
 
 	private CommentsManager commentsManager = new CommentsManager();
 	private KeyFilesManager keyFilesManager = new KeyFilesManager();
+	private ExcludedFilesManager excludedFilesManager = new ExcludedFilesManager();
 	
 	/**
 	 * Answer an array of all known remote roots.
@@ -182,6 +184,7 @@
         commentsManager.saveCommentHistory();
         commentsManager.saveCommentTemplates();
         keyFilesManager.saveKeyFilesHistory();
+        excludedFilesManager.saveExcludedFiles();
 	}
 
 
Index: src/org/tigris/subversion/subclipse/ui/subscriber/ExcludeFromCommitAction.java
===================================================================
--- src/org/tigris/subversion/subclipse/ui/subscriber/ExcludeFromCommitAction.java	(revision 0)
+++ src/org/tigris/subversion/subclipse/ui/subscriber/ExcludeFromCommitAction.java	(revision 0)
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Subclipse project 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Subclipse project committers - initial API and implementation
+ ******************************************************************************/
+package org.tigris.subversion.subclipse.ui.subscriber;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.ui.synchronize.ISynchronizeModelElement;
+import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
+import org.eclipse.team.ui.synchronize.ModelParticipantAction;
+import org.eclipse.ui.PlatformUI;
+import org.tigris.subversion.subclipse.core.excludedfiles.ExcludedFilesManager;
+
+/**
+ * @author sinan.yumak
+ *
+ */
+public class ExcludeFromCommitAction extends ModelParticipantAction {
+
+	public ExcludeFromCommitAction(String text, ISynchronizePageConfiguration configuration) {
+		super(text, configuration);
+	}
+
+	public void run() {
+		try {
+			PlatformUI.getWorkbench().getProgressService().run(true, true, new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor) throws InvocationTargetException,
+						InterruptedException {
+					try {
+						Iterator iter = getStructuredSelection().iterator();
+						while(iter.hasNext()) {
+					    	ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next();
+							ExcludedFilesManager.addExcludedFile(element.getResource());
+						}
+					} catch (Exception e) {
+						throw new InvocationTargetException(e);
+					}
+				}
+			});
+		} catch (InvocationTargetException e) {
+			Utils.handle(e);
+		} catch (InterruptedException e) {
+			// Ignore
+		}
+	}
+
+	protected boolean isEnabledForSelection(IStructuredSelection selection) {
+		// Only enable if the selected elements adapt to IResource
+		if (selection.isEmpty())
+			return false;
+		for (Iterator iter = selection.iterator(); iter.hasNext();) {
+			Object element = iter.next();
+			if (Utils.getResource(element) == null) {
+				return false;
+			}
+			if (ExcludedFilesManager.getExcludedFiles().contains(Utils.getResource(element))) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+}
Index: src/org/tigris/subversion/subclipse/ui/subscriber/IncludeInCommitAction.java
===================================================================
--- src/org/tigris/subversion/subclipse/ui/subscriber/IncludeInCommitAction.java	(revision 0)
+++ src/org/tigris/subversion/subclipse/ui/subscriber/IncludeInCommitAction.java	(revision 0)
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Subclipse project 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Subclipse project committers - initial API and implementation
+ ******************************************************************************/
+package org.tigris.subversion.subclipse.ui.subscriber;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.ui.synchronize.ISynchronizeModelElement;
+import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
+import org.eclipse.team.ui.synchronize.ModelParticipantAction;
+import org.eclipse.ui.PlatformUI;
+import org.tigris.subversion.subclipse.core.excludedfiles.ExcludedFilesManager;
+
+/**
+ * @author sinan.yumak
+ *
+ */
+public class IncludeInCommitAction extends ModelParticipantAction {
+
+	public IncludeInCommitAction(String text, ISynchronizePageConfiguration configuration) {
+		super(text, configuration);
+	}
+
+	public void run() {
+		try {
+			PlatformUI.getWorkbench().getProgressService().run(true, true, new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor) throws InvocationTargetException,
+						InterruptedException {
+					try {
+						Iterator iter = getStructuredSelection().iterator();
+						while(iter.hasNext()) {
+					    	ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next();
+							ExcludedFilesManager.removeExcludedFile(element.getResource());
+						}
+					} catch (Exception e) {
+						throw new InvocationTargetException(e);
+					}
+				}
+			});
+		} catch (InvocationTargetException e) {
+			Utils.handle(e);
+		} catch (InterruptedException e) {
+			// Ignore
+		}
+	}
+
+	protected boolean isEnabledForSelection(IStructuredSelection selection) {
+		// Only enable if the selected elements adapt to IResource
+		if (selection.isEmpty())
+			return false;
+		for (Iterator iter = selection.iterator(); iter.hasNext();) {
+			Object element = iter.next();
+			if (Utils.getResource(element) == null) {
+				return false;
+			}
+			if (!ExcludedFilesManager.getExcludedFiles().contains(Utils.getResource(element))) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+}
Index: src/org/tigris/subversion/subclipse/ui/subscriber/SVNSynchronizeParticipant.java
===================================================================
--- src/org/tigris/subversion/subclipse/ui/subscriber/SVNSynchronizeParticipant.java	(revision 5024)
+++ src/org/tigris/subversion/subclipse/ui/subscriber/SVNSynchronizeParticipant.java	(working copy)
@@ -23,8 +23,8 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.synchronize.FastSyncInfoFilter;
-import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter;
+import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.internal.ui.synchronize.ChangeSetCapability;
 import org.eclipse.team.internal.ui.synchronize.IChangeSetProvider;
 import org.eclipse.team.ui.TeamUI;
@@ -262,6 +262,20 @@
 					ISynchronizePageConfiguration.P_CONTEXT_MENU, 
 					CONTEXT_MENU_CONTRIBUTION_GROUP_1,
 					resolveAction);
+
+			ExcludeFromCommitAction excludeFromCommitAction = new ExcludeFromCommitAction("Exclude From Commit", configuration);
+			excludeFromCommitAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_RESOLVE));
+			appendToGroup(
+					ISynchronizePageConfiguration.P_CONTEXT_MENU, 
+					CONTEXT_MENU_CONTRIBUTION_GROUP_1,
+					excludeFromCommitAction);
+
+			IncludeInCommitAction includeInCommitAction = new IncludeInCommitAction("Include In Commit", configuration);
+			includeInCommitAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_RESOLVE));
+			appendToGroup(
+					ISynchronizePageConfiguration.P_CONTEXT_MENU, 
+					CONTEXT_MENU_CONTRIBUTION_GROUP_1,
+					includeInCommitAction);
 			
 			final Viewer viewer = configuration.getPage().getViewer();
 			
Index: src/org/tigris/subversion/subclipse/ui/subscriber/ShowHideExcludedFilesAction.java
===================================================================
--- src/org/tigris/subversion/subclipse/ui/subscriber/ShowHideExcludedFilesAction.java	(revision 0)
+++ src/org/tigris/subversion/subclipse/ui/subscriber/ShowHideExcludedFilesAction.java	(revision 0)
@@ -0,0 +1,102 @@
+package org.tigris.subversion.subclipse.ui.subscriber;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.team.core.synchronize.SyncInfo;
+import org.eclipse.team.core.synchronize.SyncInfoSet;
+import org.eclipse.team.internal.core.subscribers.WorkingSetFilteredSyncInfoCollector;
+import org.eclipse.team.internal.ui.synchronize.SubscriberParticipantPage;
+import org.eclipse.team.internal.ui.synchronize.SynchronizeView;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.PlatformUI;
+import org.tigris.subversion.subclipse.core.SVNProviderPlugin;
+import org.tigris.subversion.subclipse.core.excludedfiles.ExcludedFilesManager;
+import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber;
+
+/**
+ * @author sinan.yumak
+ *
+ */
+public class ShowHideExcludedFilesAction extends Action implements IViewActionDelegate {
+	private SubscriberParticipantPage page;
+	
+	public void run() {
+	}
+
+	public void run(IAction action) {
+		init((IViewPart)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart());
+		if (SVNProviderPlugin.getPlugin().isShowExcludedFiles()) {
+			showExcludedFiles();
+		} else {
+			hideExcludedFiles();
+		}
+		page.reset();
+	}
+	
+	private void hideExcludedFiles() {
+		SVNProviderPlugin.getPlugin().setShowExcludedFiles(true);
+
+		final WorkingSetFilteredSyncInfoCollector collector = page.getCollector();
+		collector.run(new IWorkspaceRunnable() {
+			public void run(IProgressMonitor monitor) throws CoreException {
+				SyncInfoSet infoSet = getSyncInfoSet();
+				if (infoSet == null) return;
+
+				collector.getWorkingSetSyncInfoSet().removeAll(infoSet.getResources());
+			}
+		});
+	}
+
+	private void showExcludedFiles() {
+		SVNProviderPlugin.getPlugin().setShowExcludedFiles(false);
+		
+		final WorkingSetFilteredSyncInfoCollector collector = page.getCollector();
+		collector.run(new IWorkspaceRunnable() {
+			public void run(IProgressMonitor monitor) throws CoreException {
+				SyncInfoSet infoSet = getSyncInfoSet();
+				if (infoSet == null) return;
+
+				collector.getWorkingSetSyncInfoSet().addAll(infoSet);
+			}
+		});
+	}
+
+	private SyncInfoSet getSyncInfoSet() {
+		List syncInfos = new ArrayList();
+		
+		List excludedFiles = new ArrayList(ExcludedFilesManager.getExcludedFiles());
+		Iterator iterator = excludedFiles.iterator();
+		
+		while (iterator.hasNext()) {
+			try {
+				SyncInfo syncInfo = SVNWorkspaceSubscriber.getInstance().getSyncInfo((IResource)iterator.next());
+				if (syncInfo != null) {
+					syncInfos.add(syncInfo);
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return syncInfos.size() != 0 ? new SyncInfoSet((SyncInfo[])syncInfos.toArray(new SyncInfo[]{})) : null;		
+	}
+	
+	public void selectionChanged(IAction action, ISelection selection) {
+		//do nothing!
+	}
+
+	public void init(IViewPart view) {
+		SynchronizeView syncView = (SynchronizeView)view;
+		page = (SubscriberParticipantPage)syncView.getCurrentPage();
+	}
+	
+}
Index: src/org/tigris/subversion/subclipse/ui/wizards/dialogs/SvnWizardCommitPage.java
===================================================================
--- src/org/tigris/subversion/subclipse/ui/wizards/dialogs/SvnWizardCommitPage.java	(revision 5024)
+++ src/org/tigris/subversion/subclipse/ui/wizards/dialogs/SvnWizardCommitPage.java	(working copy)
@@ -51,6 +51,7 @@
 import org.eclipse.ui.PlatformUI;
 import org.tigris.subversion.subclipse.core.ISVNLocalResource;
 import org.tigris.subversion.subclipse.core.SVNException;
+import org.tigris.subversion.subclipse.core.excludedfiles.ExcludedFilesManager;
 import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot;
 import org.tigris.subversion.subclipse.ui.IHelpContextIds;
 import org.tigris.subversion.subclipse.ui.ISVNUIConstants;
@@ -116,6 +117,7 @@
 			 SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT);    
 		
 		this.resourcesToCommit = resourcesToCommit;
+		removeExcludedFiles();
 //		this.url = url;
 		this.projectProperties = projectProperties;
 		this.statusMap = statusMap;
@@ -144,6 +146,18 @@
 		}
 	}
 
+	private void removeExcludedFiles() {
+		System.out.println("Removing excluded files...");
+
+		List result = new ArrayList();
+		for (int i=0; i<resourcesToCommit.length;i++) {
+			if (!ExcludedFilesManager.getExcludedFiles().contains(resourcesToCommit[i])) {
+				result.add(resourcesToCommit[i]);
+			}
+		}
+		resourcesToCommit = (IResource[]) result.toArray(new IResource[result.size()]);
+	}
+
 	public void createControls(Composite composite) {
         horizontalSash = new SashForm(composite, SWT.HORIZONTAL);
         horizontalSash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

