[MERGE][Bug #48623] If versioned files match a given ignore pattern, display a warning containing the files in question

Daniel Watkins D.M.Watkins at warwick.ac.uk
Tue Aug 28 12:43:53 BST 2007


Attached is a bundle which adds to 'bzr ignore' so that it checks if any
versioned files match the given ignore pattern(s).  If so, it prints a
warning containing the names of the matching files.

The bug report[0] suggests that ignore should remove files that match
the given ignore pattern.  This is undesirable behaviour (as a number of
the comments on the bug suggest) and a warning is given as an
alternative suggestion.

This seems to me to be desirable for two reasons:
     1. It makes explicit the fact that ignore will not remove files
        that match the given pattern.
     2. It allows users to see what their pattern will actually do,
        which will avoid unintended patterns from causing problems later
        on.

Potentially the files should not be listed unless a command line flag is
given (as running "bzr ignore '*.py'" on bzr.dev produces a fair amount
of output).


Dan

[Footnote 0: https://bugs.launchpad.net/bzr/+bug/48623]
-- 
Daniel Watkins (Odd_Bloke) <D.M.Watkins at warwick.ac.uk>
University of Warwick Christian Focus President
University of Warwick Computing Society WUGLUG Liaison Officer
-------------- next part --------------
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: d.m.watkins at warwick.ac.uk-20070828111427-\
#   pvr0d9bgjl515w1u
# target_branch: file:///home/daniel/devel/bzr/bzr.dev/
# testament_sha1: 09227b5d8fcc48ffdf352aae0d0852d4c954458e
# timestamp: 2007-08-28 13:14:34 +0200
# base_revision_id: pqm at pqm.ubuntu.com-20070824133750-r25v5g25g1flggy6
# 
# Begin patch
=== modified file 'bzrlib/builtins.py'
--- bzrlib/builtins.py	2007-08-21 01:32:29 +0000
+++ bzrlib/builtins.py	2007-08-28 11:14:27 +0000
@@ -1958,6 +1958,19 @@
         if not tree.path2id('.bzrignore'):
             tree.add(['.bzrignore'])
 
+        ignored = globbing.Globster(name_pattern_list)
+        matches = []
+        tree.lock_read()
+        for entry in tree.list_files():
+            id = entry[3]
+            if id is not None:
+                filename = entry[0]
+                if ignored.match(filename):
+                    matches.append(filename.encode('utf-8'))
+        tree.unlock()
+        if len(matches) > 0:
+            print "Warning: the following files are version controlled and" \
+                  " match your ignore pattern:\n%s" % ("\n".join(matches),)
 
 class cmd_ignored(Command):
     """List ignored files and the patterns that matched them.

=== modified file 'bzrlib/tests/blackbox/test_ignore.py'
--- bzrlib/tests/blackbox/test_ignore.py	2007-06-27 19:13:50 +0000
+++ bzrlib/tests/blackbox/test_ignore.py	2007-08-25 12:42:24 +0000
@@ -117,3 +117,24 @@
         self.assertContainsRe(out, 'CVS')
         self.assertEqual('', err)
 
+    def test_ignore_versioned_file(self):
+        tree = self.make_branch_and_tree('.')
+        self.build_tree(['a','b'])
+        tree.add('a')
+
+        # test a single versioned file
+        out, err = self.run_bzr('ignore a')
+        self.assertEqual(out, 
+                         "Warning: the following files are version controlled"\
+                         " and match your ignore pattern:\na\n")
+
+        # test a single unversioned file
+        out, err = self.run_bzr('ignore b')
+        self.assertEqual(out, '')
+
+        # test wildcards
+        tree.add('b')
+        out, err = self.run_bzr('ignore *')
+        self.assertEqual(out, 
+                         "Warning: the following files are version controlled"\
+                         " and match your ignore pattern:\n.bzrignore\na\nb\n")

# Begin bundle
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
XckU4UJBAfLwyA==
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20070828/a6965f52/attachment.pgp 


More information about the bazaar mailing list