[EGIT PATCH] Add support for writing/appending .gitignore file
From: Alex Blewitt <hidden>
Date: 2016-06-15 22:46:37
This is in addition to the other patches mailed earlier and attached with issue 64 From 34fd7fc8cd721c4f44b5b31d3d5960f89b59bf8b Mon Sep 17 00:00:00 2001 From: Alex Blewitt <redacted> Date: Sun, 19 Apr 2009 14:03:46 +0100 Subject: [PATCH] Added support for writing/appending .gitignore file --- .../egit/ui/internal/actions/IgnoreAction.java | 48 +++++++++++ ++++++--- 1 files changed, 42 insertions(+), 6 deletions(-)
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/ actions/IgnoreAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ ui/internal/actions/IgnoreAction.java index 1215823..832b098 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/ IgnoreAction.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/ IgnoreAction.java
@@ -7,7 +7,17 @@
*******************************************************************************/ package org.spearce.egit.ui.internal.actions; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.Team;
@@ -17,17 +27,43 @@ */ public class IgnoreAction extends RepositoryAction { + private static final String GITIGNORE_ENCODING = "UTF-8"; + private static final String GITIGNORE = ".gitignore"; + @SuppressWarnings("restriction") @Override public void run(IAction action) { - + NullProgressMonitor m = new NullProgressMonitor(); IResource[] resources = getSelectedResources(); - for (IResource resource : resources) { - // NB This does the same thing in DecoratableResourceAdapter, but
neither currently consult .gitignore
- if (!Team.isIgnoredHint(resource))
- {
- // TODO Actually add to .gitignore here
+ try {
+ for (IResource resource : resources) {
+ // TODO This is pretty inefficient; multiple ignores in the same
directory cause multiple writes.
+ // NB This does the same thing in DecoratableResourceAdapter, but
neither currently consult .gitignore
+ if (!Team.isIgnoredHint(resource)) {
+ IContainer container = resource.getParent();
+ IFile gitignore = container.getFile(new Path(GITIGNORE));
+ String entry = "/" + resource.getName() + "\n"; //$NON-NLS-1$ //
$NON-NLS-2$
+ // TODO What is the character set and new-line convention?
+ if(gitignore.exists()) {
+ // This is ugly. CVS uses an internal representation of
the .gitignore to re-write/overwrite each time.
+ ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
+ out.write(entry.getBytes(GITIGNORE_ENCODING)); // TODO Default
encoding?
+ gitignore.appendContents(new
ByteArrayInputStream(out.toByteArray()),true,true,m);
+ } else {
+ ByteArrayInputStream bais = new
ByteArrayInputStream( entry.getBytes(GITIGNORE_ENCODING) ); //$NON-
NLS-1$
+ gitignore.create( bais,true,m);
+ }
+ }
}
+ } catch (UnsupportedEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
return;
}
--
1.6.2.2