PR: 12700 Submitted by: Gus Heck <gus dot heck at olin dot edu> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274554 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -302,6 +302,9 @@ Other changes: | |||||
| in <vajload> by using special wildcard characters. Also fixes | in <vajload> by using special wildcard characters. Also fixes | ||||
| Bugzilla Report 2236. | Bugzilla Report 2236. | ||||
| * Users can now modify the list of default excludes using the new | |||||
| defaultexcludes task. Bugzilla Report 12700. | |||||
| Changes from Ant 1.5.2 to Ant 1.5.3 | Changes from Ant 1.5.2 to Ant 1.5.3 | ||||
| =================================== | =================================== | ||||
| @@ -0,0 +1,73 @@ | |||||
| <html> | |||||
| <head> | |||||
| <meta http-equiv="Content-Language" content="en-us"> | |||||
| <title>DefaultExcludes Task</title> | |||||
| </head> | |||||
| <body> | |||||
| <h2><a name="echo">DefaultExcludes</a></h2> | |||||
| <p><em>since Ant 1.6</em></p> | |||||
| <h3>Description</h3> | |||||
| <p>Alters the default excludes for all subsequent processing in the | |||||
| build, and prints out the current default excludes if desired. | |||||
| <h3>Parameters</h3> | |||||
| <table border="1" cellpadding="2" cellspacing="0"> | |||||
| <tr> | |||||
| <td valign="top"><b>Attribute</b></td> | |||||
| <td valign="top"><b>Description</b></td> | |||||
| <td align="center" valign="top"><b>Required</b></td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">echo</td> | |||||
| <td valign="top">whether or not to print out the default excludes.(defaults to false)</td> | |||||
| <td valign="top" align="center">atribute "true" required if no | |||||
| other argument specified</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">add</td> | |||||
| <td valign="top">the pattern to add to the default excludes</td> | |||||
| <td valign="top" align="center">if no other atribute is specified</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">remove</td> | |||||
| <td valign="top">remove the specified pattern from the default excludes</td> | |||||
| <td valign="top" align="center">if no other atribute is specified</td> | |||||
| </tr> | |||||
| </table> | |||||
| <h3>Examples</h3> | |||||
| <p>Print out the default excludes</p> | |||||
| <pre> <defaultexcludes echo="true"/></pre> | |||||
| <p>Print out the default excludes and exclude all *.bak files in | |||||
| <strong>all</strong> further processing</p> | |||||
| <pre> <defaultexcludes echo="true" add="**/*.bak"/></pre> | |||||
| <p>Silently allow several fileset based tasks to operate on emacs | |||||
| backup files and then restore normal behavior</p> | |||||
| <pre> | |||||
| <defaultexcludes remove="**/*~"/> | |||||
| (do several fileset based tasks here) | |||||
| <defaultexcludes add="**/*~"/> | |||||
| </pre> | |||||
| <hr> | |||||
| <p align="center">Copyright © 2003 Apache Software Foundation. All rights | |||||
| Reserved.</p> | |||||
| </body> | |||||
| </html> | |||||
| @@ -36,6 +36,7 @@ | |||||
| <a href="CoreTasks/changelog.html">CvsChangeLog</a><br> | <a href="CoreTasks/changelog.html">CvsChangeLog</a><br> | ||||
| <a href="CoreTasks/cvspass.html">CVSPass</a><br> | <a href="CoreTasks/cvspass.html">CVSPass</a><br> | ||||
| <a href="CoreTasks/cvstagdiff.html">CvsTagDiff</a><br> | <a href="CoreTasks/cvstagdiff.html">CvsTagDiff</a><br> | ||||
| <a href="CoreTasks/defaultexcludes.html">Defaultexcludes</a><br> | |||||
| <a href="CoreTasks/delete.html">Delete</a><br> | <a href="CoreTasks/delete.html">Delete</a><br> | ||||
| <a href="CoreTasks/deltree.html"><i>Deltree</i></a><br> | <a href="CoreTasks/deltree.html"><i>Deltree</i></a><br> | ||||
| <a href="CoreTasks/dependset.html">Dependset</a><br> | <a href="CoreTasks/dependset.html">Dependset</a><br> | ||||
| @@ -261,8 +261,14 @@ directory-based tasks. They are:</p> | |||||
| **/.svn/** | **/.svn/** | ||||
| **/.DS_Store | **/.DS_Store | ||||
| </pre> | </pre> | ||||
| <p>If you do not want these default excludes applied, you may disable them | |||||
| with the <code>defaultexcludes="no"</code> attribute.</p> | |||||
| <p>If you do not want these default excludes applied, you may disable | |||||
| them with the <code>defaultexcludes="no"</code> | |||||
| attribute.</p> | |||||
| <p>This is the default list, note that you can modify the list of | |||||
| default excludes by using the <a | |||||
| href="CoreTasks/defaultexcludes.html">defaultexcludes</a> task.</p> | |||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2000-2003 Apache Software Foundation. All | <p align="center">Copyright © 2000-2003 Apache Software Foundation. All | ||||
| rights Reserved.</p> | rights Reserved.</p> | ||||
| @@ -0,0 +1,19 @@ | |||||
| <?xml version="1.0"?> | |||||
| <project name="echo-test" basedir="." default="test1"> | |||||
| <target name="test1"> | |||||
| <defaultexcludes echo="true"/> | |||||
| </target> | |||||
| <target name="test2"> | |||||
| <defaultexcludes add="foo" echo="true"/> | |||||
| <defaultexcludes remove="foo" echo="false"/> | |||||
| </target> | |||||
| <target name="test3"> | |||||
| <defaultexcludes remove="**/CVS" echo="true"/> | |||||
| <defaultexcludes add="**/CVS" echo="false"/> | |||||
| </target> | |||||
| </project> | |||||
| @@ -155,38 +155,34 @@ import org.apache.tools.ant.util.FileUtils; | |||||
| public class DirectoryScanner | public class DirectoryScanner | ||||
| implements FileScanner, SelectorScanner, ResourceFactory { | implements FileScanner, SelectorScanner, ResourceFactory { | ||||
| /** | /** | ||||
| * Patterns which should be excluded by default. | * Patterns which should be excluded by default. | ||||
| * | * | ||||
| * @see #addDefaultExcludes() | * @see #addDefaultExcludes() | ||||
| */ | */ | ||||
| protected static final String[] DEFAULTEXCLUDES = { | |||||
| // Miscellaneous typical temporary files | |||||
| "**/*~", | |||||
| "**/#*#", | |||||
| "**/.#*", | |||||
| "**/%*%", | |||||
| "**/._*", | |||||
| private static Vector defaultExcludes = new Vector(); | |||||
| // CVS | |||||
| "**/CVS", | |||||
| "**/CVS/**", | |||||
| "**/.cvsignore", | |||||
| static { | |||||
| defaultExcludes.add("**/*~"); | |||||
| defaultExcludes.add("**/#*#"); | |||||
| defaultExcludes.add("**/.#*"); | |||||
| defaultExcludes.add("**/%*%"); | |||||
| defaultExcludes.add("**/._*"); | |||||
| // SCCS | |||||
| "**/SCCS", | |||||
| "**/SCCS/**", | |||||
| defaultExcludes.add("**/CVS"); | |||||
| defaultExcludes.add("**/CVS/**"); | |||||
| defaultExcludes.add("**/.cvsignore"); | |||||
| // Visual SourceSafe | |||||
| "**/vssver.scc", | |||||
| defaultExcludes.add("**/SCCS"); | |||||
| defaultExcludes.add("**/SCCS/**"); | |||||
| // Subversion | |||||
| "**/.svn", | |||||
| "**/.svn/**", | |||||
| defaultExcludes.add("**/vssver.scc"); | |||||
| // Mac | |||||
| "**/.DS_Store" | |||||
| }; | |||||
| defaultExcludes.add("**/.svn"); | |||||
| defaultExcludes.add("**/.svn/**"); | |||||
| defaultExcludes.add("**/.DS_Store"); | |||||
| } | |||||
| /** The base directory to be scanned. */ | /** The base directory to be scanned. */ | ||||
| protected File basedir; | protected File basedir; | ||||
| @@ -381,6 +377,48 @@ public class DirectoryScanner | |||||
| return SelectorUtils.match(pattern, str, isCaseSensitive); | return SelectorUtils.match(pattern, str, isCaseSensitive); | ||||
| } | } | ||||
| /** | |||||
| * Get the list of patterns that should be excluded by default. | |||||
| * | |||||
| * @return An array of <code>String</code> based on the current | |||||
| * contents of the <code>defaultExcludes</code> | |||||
| * <code>Vector</code>. | |||||
| */ | |||||
| public static String[] getDefaultExcludes() { | |||||
| return (String[]) defaultExcludes.toArray(new String[defaultExcludes.size()]); | |||||
| } | |||||
| /** | |||||
| * Add a pattern to the default excludes unless it is already a | |||||
| * default exclude. | |||||
| * | |||||
| * @param s A string to add as an exclude pattern. | |||||
| * @return <code>true</code> if the string was added | |||||
| * <code>false</code> if it already | |||||
| * existed. | |||||
| */ | |||||
| public static boolean addDefaultExclude(String s){ | |||||
| if (defaultExcludes.indexOf(s) == -1) { | |||||
| defaultExcludes.add(s); | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| /** | |||||
| * Remove a string if it is a default exclude. | |||||
| * | |||||
| * @param s The string to attempt to remove. | |||||
| * @return <code>true</code> if <code>s</code> was a default | |||||
| * exclude (and thus was removed), | |||||
| * <code>false</code> if <code>s</code> was not | |||||
| * in the default excludes list to begin with | |||||
| */ | |||||
| public static boolean removeDefaultExclude(String s) { | |||||
| return defaultExcludes.remove(s); | |||||
| } | |||||
| /** | /** | ||||
| * Sets the base directory to be scanned. This is the directory which is | * Sets the base directory to be scanned. This is the directory which is | ||||
| * scanned recursively. All '/' and '\' characters are replaced by | * scanned recursively. All '/' and '\' characters are replaced by | ||||
| @@ -938,13 +976,15 @@ public class DirectoryScanner | |||||
| public void addDefaultExcludes() { | public void addDefaultExcludes() { | ||||
| int excludesLength = excludes == null ? 0 : excludes.length; | int excludesLength = excludes == null ? 0 : excludes.length; | ||||
| String[] newExcludes; | String[] newExcludes; | ||||
| newExcludes = new String[excludesLength + DEFAULTEXCLUDES.length]; | |||||
| newExcludes = new String[excludesLength + defaultExcludes.size()]; | |||||
| if (excludesLength > 0) { | if (excludesLength > 0) { | ||||
| System.arraycopy(excludes, 0, newExcludes, 0, excludesLength); | System.arraycopy(excludes, 0, newExcludes, 0, excludesLength); | ||||
| } | } | ||||
| for (int i = 0; i < DEFAULTEXCLUDES.length; i++) { | |||||
| newExcludes[i + excludesLength] = DEFAULTEXCLUDES[i].replace('/', | |||||
| File.separatorChar).replace('\\', File.separatorChar); | |||||
| String[] defaultExcludesTemp = getDefaultExcludes(); | |||||
| for (int i = 0; i < defaultExcludesTemp.length; i++) { | |||||
| newExcludes[i + excludesLength] = defaultExcludesTemp[i]. | |||||
| replace('/', File.separatorChar). | |||||
| replace('\\', File.separatorChar); | |||||
| } | } | ||||
| excludes = newExcludes; | excludes = newExcludes; | ||||
| } | } | ||||
| @@ -0,0 +1,139 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "Ant" and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs; | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.Project; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| /** | |||||
| * Alters the default excludes for the <strong>entire</strong> build.. | |||||
| * | |||||
| * @author Gus Heck <gus.heck@olin.edu> | |||||
| * | |||||
| * @since Ant 1.6 | |||||
| * | |||||
| * @ant.task category="utility" | |||||
| */ | |||||
| public class DefaultExcludes extends Task { | |||||
| private String add = ""; | |||||
| private String remove = ""; | |||||
| private boolean echo = false; | |||||
| // by default, messages are always displayed | |||||
| private int logLevel = Project.MSG_WARN; | |||||
| /** | |||||
| * Does the work. | |||||
| * | |||||
| * @exception BuildException if someting goes wrong with the build | |||||
| */ | |||||
| public void execute() throws BuildException { | |||||
| if (add.equals("") && remove.equals("") && (echo == false)) { | |||||
| throw new BuildException("<defaultexcludes> task must set "+ | |||||
| "at least one atribute (echo=\"false\""+ | |||||
| " doesn't count since that is the "+ | |||||
| "default"); | |||||
| } | |||||
| if (!add.equals("")) { | |||||
| DirectoryScanner.addDefaultExclude(add); | |||||
| } | |||||
| if (!remove.equals("")) { | |||||
| DirectoryScanner.removeDefaultExclude(remove); | |||||
| } | |||||
| if (echo == true) { | |||||
| StringBuffer message = new StringBuffer("Current Default "+ | |||||
| "Excludes:\n"); | |||||
| String[] excludes = DirectoryScanner.getDefaultExcludes(); | |||||
| for (int i=0;i<excludes.length;i++) { | |||||
| message.append(" " + excludes[i] + "\n"); | |||||
| } | |||||
| log(message.toString(), logLevel); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Pattern to add to the default excludes | |||||
| * | |||||
| * @param add Sets the value for the pattern to exclude. | |||||
| */ | |||||
| public void setAdd(String add) { | |||||
| this.add = add; | |||||
| } | |||||
| /** | |||||
| * Pattern to remove from the default excludes. | |||||
| * | |||||
| * @param msg Sets the value for the pattern that | |||||
| * should nolonger be excluded. | |||||
| */ | |||||
| public void setRemove(String remove) { | |||||
| this.remove = remove; | |||||
| } | |||||
| /** | |||||
| * If true, echo the default excludes. | |||||
| * | |||||
| * @param echo whether or not to echo the contents of | |||||
| * the default excludes. | |||||
| */ | |||||
| public void setEcho(boolean echo) { | |||||
| this.echo = echo; | |||||
| } | |||||
| } | |||||
| @@ -75,6 +75,7 @@ import=org.apache.tools.ant.taskdefs.ImportTask | |||||
| whichresource=org.apache.tools.ant.taskdefs.WhichResource | whichresource=org.apache.tools.ant.taskdefs.WhichResource | ||||
| subant=org.apache.tools.ant.taskdefs.SubAnt | subant=org.apache.tools.ant.taskdefs.SubAnt | ||||
| sync=org.apache.tools.ant.taskdefs.Sync | sync=org.apache.tools.ant.taskdefs.Sync | ||||
| defaultexcludes=org.apache.tools.ant.taskdefs.DefaultExcludes | |||||
| # optional tasks | # optional tasks | ||||
| image=org.apache.tools.ant.taskdefs.optional.image.Image | image=org.apache.tools.ant.taskdefs.optional.image.Image | ||||
| @@ -0,0 +1,129 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "Ant" and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs; | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| /** | |||||
| * @author Gus Heck <gus.heck@olin.edu> | |||||
| */ | |||||
| public class DefaultExcludesTest extends BuildFileTest { | |||||
| public DefaultExcludesTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| public void setUp() { | |||||
| configureProject("src/etc/testcases/taskdefs/defaultexcludes.xml"); | |||||
| } | |||||
| // Output the default excludes | |||||
| public void test1() { | |||||
| expectLog("test1", "Current Default Excludes:\n"+ | |||||
| " **/*~\n"+ | |||||
| " **/#*#\n"+ | |||||
| " **/.#*\n"+ | |||||
| " **/%*%\n"+ | |||||
| " **/._*\n"+ | |||||
| " **/CVS\n"+ | |||||
| " **/CVS/**\n"+ | |||||
| " **/.cvsignore\n"+ | |||||
| " **/SCCS\n"+ | |||||
| " **/SCCS/**\n"+ | |||||
| " **/vssver.scc\n"+ | |||||
| " **/.svn\n"+ | |||||
| " **/.svn/**\n"+ | |||||
| " **/.DS_Store\n"); | |||||
| } | |||||
| // adding something to the excludes' | |||||
| public void test2() { | |||||
| expectLog("test2", "Current Default Excludes:\n"+ | |||||
| " **/*~\n"+ | |||||
| " **/#*#\n"+ | |||||
| " **/.#*\n"+ | |||||
| " **/%*%\n"+ | |||||
| " **/._*\n"+ | |||||
| " **/CVS\n"+ | |||||
| " **/CVS/**\n"+ | |||||
| " **/.cvsignore\n"+ | |||||
| " **/SCCS\n"+ | |||||
| " **/SCCS/**\n"+ | |||||
| " **/vssver.scc\n"+ | |||||
| " **/.svn\n"+ | |||||
| " **/.svn/**\n"+ | |||||
| " **/.DS_Store\n"+ | |||||
| " foo\n"); // foo added | |||||
| } | |||||
| // removing something from the defaults | |||||
| public void test3() { | |||||
| expectLog("test3", "Current Default Excludes:\n"+ | |||||
| " **/*~\n"+ | |||||
| " **/#*#\n"+ | |||||
| " **/.#*\n"+ | |||||
| " **/%*%\n"+ | |||||
| " **/._*\n"+ | |||||
| //CVS missing | |||||
| " **/CVS/**\n"+ | |||||
| " **/.cvsignore\n"+ | |||||
| " **/SCCS\n"+ | |||||
| " **/SCCS/**\n"+ | |||||
| " **/vssver.scc\n"+ | |||||
| " **/.svn\n"+ | |||||
| " **/.svn/**\n"+ | |||||
| " **/.DS_Store\n"); | |||||
| } | |||||
| } | |||||