diff --git a/WHATSNEW b/WHATSNEW index 8f1b8f184..754e1f502 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -42,6 +42,10 @@ Changes that could break older environments: of Ant 1.8.1. Bugzilla Report 49373. + * The files and directories used by Git, Mercurial and Bazaar to + store their information are now excluded by the defaultexcludes. + Bugzilla Report 49624. + Fixed bugs: ----------- diff --git a/docs/manual/dirtasks.html b/docs/manual/dirtasks.html index 28a4daf03..9d4e145e2 100644 --- a/docs/manual/dirtasks.html +++ b/docs/manual/dirtasks.html @@ -265,7 +265,7 @@ as an implicit fileset.

Default Excludes

There are a set of definitions that are excluded by default from all -directory-based tasks. They are:

+directory-based tasks. As of Ant 1.8.1 they are:

      **/*~
      **/#*#
@@ -282,6 +282,23 @@ directory-based tasks. They are:

**/.svn/** **/.DS_Store
+

Ant 1.8.2 adds the folllowing default excludes:

+
+     **/.git
+     **/.git/**
+     **/.gitattributes
+     **/.gitignore
+     **/.gitmodules
+     **/.hg
+     **/.hg/**
+     **/.hgignore
+     **/.hgsub
+     **/.hgsubstate
+     **/.hgtags
+     **/.bzr
+     **/.bzr/**
+     **/.bzrignore
+

If you do not want these default excludes applied, you may disable them with the defaultexcludes="no" attribute.

diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java index 7531954d4..94973bbb6 100644 --- a/src/main/org/apache/tools/ant/DirectoryScanner.java +++ b/src/main/org/apache/tools/ant/DirectoryScanner.java @@ -170,6 +170,26 @@ public class DirectoryScanner SelectorUtils.DEEP_TREE_MATCH + "/.svn", SelectorUtils.DEEP_TREE_MATCH + "/.svn/" + SelectorUtils.DEEP_TREE_MATCH, + // Git + SelectorUtils.DEEP_TREE_MATCH + "/.git", + SelectorUtils.DEEP_TREE_MATCH + "/.git/" + SelectorUtils.DEEP_TREE_MATCH, + SelectorUtils.DEEP_TREE_MATCH + "/.gitattributes", + SelectorUtils.DEEP_TREE_MATCH + "/.gitignore", + SelectorUtils.DEEP_TREE_MATCH + "/.gitmodules", + + // Mercurial + SelectorUtils.DEEP_TREE_MATCH + "/.hg", + SelectorUtils.DEEP_TREE_MATCH + "/.hg/" + SelectorUtils.DEEP_TREE_MATCH, + SelectorUtils.DEEP_TREE_MATCH + "/.hgignore", + SelectorUtils.DEEP_TREE_MATCH + "/.hgsub", + SelectorUtils.DEEP_TREE_MATCH + "/.hgsubstate", + SelectorUtils.DEEP_TREE_MATCH + "/.hgtags", + + // Bazaar + SelectorUtils.DEEP_TREE_MATCH + "/.bzr", + SelectorUtils.DEEP_TREE_MATCH + "/.bzr/" + SelectorUtils.DEEP_TREE_MATCH, + SelectorUtils.DEEP_TREE_MATCH + "/.bzrignore", + // Mac SelectorUtils.DEEP_TREE_MATCH + "/.DS_Store" }; diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java index 040eaa805..86efc6855 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java @@ -53,6 +53,20 @@ public class DefaultExcludesTest extends BuildFileTest { "**/vssver.scc", "**/.svn", "**/.svn/**", + "**/.git", + "**/.git/**", + "**/.gitattributes", + "**/.gitignore", + "**/.gitmodules", + "**/.hg", + "**/.hg/**", + "**/.hgignore", + "**/.hgsub", + "**/.hgsubstate", + "**/.hgtags", + "**/.bzr", + "**/.bzr/**", + "**/.bzrignore", "**/.DS_Store"}; project.executeTarget("test1"); assertEquals("current default excludes", expected, DirectoryScanner.getDefaultExcludes()); @@ -74,6 +88,20 @@ public class DefaultExcludesTest extends BuildFileTest { "**/vssver.scc", "**/.svn", "**/.svn/**", + "**/.git", + "**/.git/**", + "**/.gitattributes", + "**/.gitignore", + "**/.gitmodules", + "**/.hg", + "**/.hg/**", + "**/.hgignore", + "**/.hgsub", + "**/.hgsubstate", + "**/.hgtags", + "**/.bzr", + "**/.bzr/**", + "**/.bzrignore", "**/.DS_Store", "foo"}; project.executeTarget("test2"); @@ -96,6 +124,20 @@ public class DefaultExcludesTest extends BuildFileTest { "**/vssver.scc", "**/.svn", "**/.svn/**", + "**/.git", + "**/.git/**", + "**/.gitattributes", + "**/.gitignore", + "**/.gitmodules", + "**/.hg", + "**/.hg/**", + "**/.hgignore", + "**/.hgsub", + "**/.hgsubstate", + "**/.hgtags", + "**/.bzr", + "**/.bzr/**", + "**/.bzrignore", "**/.DS_Store"}; project.executeTarget("test3"); assertEquals("current default excludes", expected, DirectoryScanner.getDefaultExcludes());