Merge lp:~jelmer/brz/bzrignore into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/bzrignore
Merge into: lp:brz
Diff against target: 209 lines (+26/-57)
6 files modified
breezy/__init__.py (+0/-3)
breezy/bzr/workingtree.py (+3/-41)
breezy/ignores.py (+5/-5)
breezy/plugins/weave_fmt/workingtree.py (+4/-0)
breezy/tests/per_workingtree/test_is_ignored.py (+11/-8)
breezy/workingtree.py (+3/-0)
To merge this branch: bzr merge lp:~jelmer/brz/bzrignore
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+340633@code.launchpad.net

Commit message

Add a WorkingTreeFormat flag for the ignore pattern filename.

Description of the change

Add a WorkingTreeFormat flag for the ignore pattern filename.

Using this, only run .bzrignore-specific tests on bzr formats.

To post a comment you must log in.
Revision history for this message
Martin Packman (gz) wrote :

This is quite neat.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'breezy/__init__.py'
--- breezy/__init__.py 2017-08-26 19:06:32 +0000
+++ breezy/__init__.py 2018-03-04 23:18:01 +0000
@@ -42,9 +42,6 @@
42import sys42import sys
4343
4444
45IGNORE_FILENAME = ".bzrignore"
46
47
48__copyright__ = "Copyright 2005-2012 Canonical Ltd."45__copyright__ = "Copyright 2005-2012 Canonical Ltd."
4946
50# same format as sys.version_info: "A tuple containing the five components of47# same format as sys.version_info: "A tuple containing the five components of
5148
=== modified file 'breezy/bzr/workingtree.py'
--- breezy/bzr/workingtree.py 2018-02-26 13:36:15 +0000
+++ breezy/bzr/workingtree.py 2018-03-04 23:18:01 +0000
@@ -569,8 +569,8 @@
569 ignore_globs = set()569 ignore_globs = set()
570 ignore_globs.update(ignores.get_runtime_ignores())570 ignore_globs.update(ignores.get_runtime_ignores())
571 ignore_globs.update(ignores.get_user_ignores())571 ignore_globs.update(ignores.get_user_ignores())
572 if self.has_filename(breezy.IGNORE_FILENAME):572 if self.has_filename(self._format.ignore_filename):
573 f = self.get_file(breezy.IGNORE_FILENAME)573 f = self.get_file(self._format.ignore_filename)
574 try:574 try:
575 ignore_globs.update(ignores.parse_ignore_file(f))575 ignore_globs.update(ignores.parse_ignore_file(f))
576 finally:576 finally:
@@ -1715,45 +1715,7 @@
1715class WorkingTreeFormatMetaDir(bzrdir.BzrFormat, WorkingTreeFormat):1715class WorkingTreeFormatMetaDir(bzrdir.BzrFormat, WorkingTreeFormat):
1716 """Base class for working trees that live in bzr meta directories."""1716 """Base class for working trees that live in bzr meta directories."""
17171717
1718 def __init__(self):1718 ignore_filename = '.bzrignore'
1719 WorkingTreeFormat.__init__(self)
1720 bzrdir.BzrFormat.__init__(self)
1721
1722 @classmethod
1723 def find_format_string(klass, controldir):
1724 """Return format name for the working tree object in controldir."""
1725 try:
1726 transport = controldir.get_workingtree_transport(None)
1727 return transport.get_bytes("format")
1728 except errors.NoSuchFile:
1729 raise errors.NoWorkingTree(base=transport.base)
1730
1731 @classmethod
1732 def find_format(klass, controldir):
1733 """Return the format for the working tree object in controldir."""
1734 format_string = klass.find_format_string(controldir)
1735 return klass._find_format(format_registry, 'working tree',
1736 format_string)
1737
1738 def check_support_status(self, allow_unsupported, recommend_upgrade=True,
1739 basedir=None):
1740 WorkingTreeFormat.check_support_status(self,
1741 allow_unsupported=allow_unsupported, recommend_upgrade=recommend_upgrade,
1742 basedir=basedir)
1743 bzrdir.BzrFormat.check_support_status(self, allow_unsupported=allow_unsupported,
1744 recommend_upgrade=recommend_upgrade, basedir=basedir)
1745
1746 def get_controldir_for_branch(self):
1747 """Get the control directory format for creating branches.
1748
1749 This is to support testing of working tree formats that can not exist
1750 in the same control directory as a branch.
1751 """
1752 return self._matchingcontroldir
1753
1754
1755class WorkingTreeFormatMetaDir(bzrdir.BzrFormat, WorkingTreeFormat):
1756 """Base class for working trees that live in bzr meta directories."""
17571719
1758 def __init__(self):1720 def __init__(self):
1759 WorkingTreeFormat.__init__(self)1721 WorkingTreeFormat.__init__(self)
17601722
=== modified file 'breezy/ignores.py'
--- breezy/ignores.py 2018-02-15 19:38:33 +0000
+++ breezy/ignores.py 2018-03-04 23:18:01 +0000
@@ -190,7 +190,7 @@
190 :return: None190 :return: None
191 """191 """
192 # read in the existing ignores set192 # read in the existing ignores set
193 ifn = tree.abspath(breezy.IGNORE_FILENAME)193 ifn = tree.abspath(tree._format.ignore_filename)
194 if tree.has_filename(ifn):194 if tree.has_filename(ifn):
195 with open(ifn, 'rbU') as f:195 with open(ifn, 'rbU') as f:
196 file_contents = f.read()196 file_contents = f.read()
@@ -203,13 +203,13 @@
203 else:203 else:
204 file_contents = b""204 file_contents = b""
205 newline = os.linesep.encode()205 newline = os.linesep.encode()
206 206
207 sio = BytesIO(file_contents)207 sio = BytesIO(file_contents)
208 try:208 try:
209 ignores = parse_ignore_file(sio)209 ignores = parse_ignore_file(sio)
210 finally:210 finally:
211 sio.close()211 sio.close()
212 212
213 # write out the updated ignores set213 # write out the updated ignores set
214 f = atomicfile.AtomicFile(ifn, 'wb')214 f = atomicfile.AtomicFile(ifn, 'wb')
215 try:215 try:
@@ -225,5 +225,5 @@
225 finally:225 finally:
226 f.close()226 f.close()
227227
228 if not tree.is_versioned(breezy.IGNORE_FILENAME):228 if not tree.is_versioned(tree._format.ignore_filename):
229 tree.add([breezy.IGNORE_FILENAME])229 tree.add([tree._format.ignore_filename])
230230
=== modified file 'breezy/plugins/weave_fmt/workingtree.py'
--- breezy/plugins/weave_fmt/workingtree.py 2017-08-29 13:25:07 +0000
+++ breezy/plugins/weave_fmt/workingtree.py 2018-03-04 23:18:01 +0000
@@ -18,6 +18,8 @@
1818
19from __future__ import absolute_import19from __future__ import absolute_import
2020
21import breezy
22
21from ... import (23from ... import (
22 conflicts as _mod_conflicts,24 conflicts as _mod_conflicts,
23 errors,25 errors,
@@ -65,6 +67,8 @@
6567
66 supports_versioned_directories = True68 supports_versioned_directories = True
6769
70 ignore_filename = '.bzrignore'
71
68 def get_format_description(self):72 def get_format_description(self):
69 """See WorkingTreeFormat.get_format_description()."""73 """See WorkingTreeFormat.get_format_description()."""
70 return "Working tree format 2"74 return "Working tree format 2"
7175
=== modified file 'breezy/tests/per_workingtree/test_is_ignored.py'
--- breezy/tests/per_workingtree/test_is_ignored.py 2017-10-27 09:03:47 +0000
+++ breezy/tests/per_workingtree/test_is_ignored.py 2018-03-04 23:18:01 +0000
@@ -15,21 +15,24 @@
15# along with this program; if not, write to the Free Software15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA16# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1717
18from breezy import config, ignores18from breezy import config, ignores, tests
19from breezy.tests.per_workingtree import TestCaseWithWorkingTree19from breezy.tests.per_workingtree import TestCaseWithWorkingTree
2020
2121
22class TestIsIgnored(TestCaseWithWorkingTree):22class TestIsIgnored(TestCaseWithWorkingTree):
2323
24 def setUp(self):
25 super(TestIsIgnored, self).setUp()
26 if self.workingtree_format.ignore_filename != '.bzrignore':
27 raise tests.TestNotApplicable(
28 'format does not use .bzrignore for ignore patterns')
29
24 def _set_user_ignore_content(self, ignores):30 def _set_user_ignore_content(self, ignores):
25 """Create user ignore file and set its content to ignores."""31 """Create user ignore file and set its content to ignores."""
26 config.ensure_config_dir_exists()32 config.ensure_config_dir_exists()
27 user_ignore_file = config.user_ignore_config_filename()33 user_ignore_file = config.user_ignore_config_filename()
28 f = open(user_ignore_file, 'wb')34 with open(user_ignore_file, 'wb') as f:
29 try:
30 f.write(ignores)35 f.write(ignores)
31 finally:
32 f.close()
3336
34 def test_is_ignored(self):37 def test_is_ignored(self):
35 tree = self.make_branch_and_tree('.')38 tree = self.make_branch_and_tree('.')
@@ -76,7 +79,7 @@
76 self.assertEqual("path/from/ro?t", tree.is_ignored('path/from/root'))79 self.assertEqual("path/from/ro?t", tree.is_ignored('path/from/root'))
77 self.assertEqual("path/from/ro?t", tree.is_ignored('path/from/roat'))80 self.assertEqual("path/from/ro?t", tree.is_ignored('path/from/roat'))
78 self.assertEqual(None, tree.is_ignored('roat'))81 self.assertEqual(None, tree.is_ignored('roat'))
79 82
80 self.assertEqual('**/piffle.py', tree.is_ignored('piffle.py'))83 self.assertEqual('**/piffle.py', tree.is_ignored('piffle.py'))
81 self.assertEqual('**/piffle.py', tree.is_ignored('a/piffle.py'))84 self.assertEqual('**/piffle.py', tree.is_ignored('a/piffle.py'))
82 self.assertEqual(None, tree.is_ignored('b/piffle.py')) # exclusion85 self.assertEqual(None, tree.is_ignored('b/piffle.py')) # exclusion
@@ -96,7 +99,7 @@
96 self.assertEqual('*bar', tree.is_ignored(r'foo\nbar'))99 self.assertEqual('*bar', tree.is_ignored(r'foo\nbar'))
97 self.assertEqual('*bar', tree.is_ignored('bar'))100 self.assertEqual('*bar', tree.is_ignored('bar'))
98 self.assertEqual('*bar', tree.is_ignored('.bar'))101 self.assertEqual('*bar', tree.is_ignored('.bar'))
99 102
100 self.assertEqual(None, tree.is_ignored('bazbar')) # exclusion103 self.assertEqual(None, tree.is_ignored('bazbar')) # exclusion
101104
102 self.assertEqual('?foo', tree.is_ignored('afoo'))105 self.assertEqual('?foo', tree.is_ignored('afoo'))
@@ -110,7 +113,7 @@
110113
111 self.assertEqual('dir1/?f2', tree.is_ignored('dir1/ff2'))114 self.assertEqual('dir1/?f2', tree.is_ignored('dir1/ff2'))
112 self.assertEqual('dir1/?f2', tree.is_ignored('dir1/.f2'))115 self.assertEqual('dir1/?f2', tree.is_ignored('dir1/.f2'))
113 116
114 self.assertEqual('RE:dir2/.*\.wombat', tree.is_ignored('dir2/foo.wombat'))117 self.assertEqual('RE:dir2/.*\.wombat', tree.is_ignored('dir2/foo.wombat'))
115 self.assertEqual(None, tree.is_ignored('dir2/foo'))118 self.assertEqual(None, tree.is_ignored('dir2/foo'))
116119
117120
=== modified file 'breezy/workingtree.py'
--- breezy/workingtree.py 2018-02-25 15:31:42 +0000
+++ breezy/workingtree.py 2018-03-04 23:18:01 +0000
@@ -1421,6 +1421,9 @@
14211421
1422 supports_righthand_parent_id_as_ghost = True1422 supports_righthand_parent_id_as_ghost = True
14231423
1424 ignore_filename = None
1425 """Name of file with ignore patterns, if any. """
1426
1424 def initialize(self, controldir, revision_id=None, from_branch=None,1427 def initialize(self, controldir, revision_id=None, from_branch=None,
1425 accelerator_tree=None, hardlink=False):1428 accelerator_tree=None, hardlink=False):
1426 """Initialize a new working tree in controldir.1429 """Initialize a new working tree in controldir.

Subscribers

People subscribed via source and target branches