def add_unique_user_ignores(new_ignores): """Add entries to the user's ignore list if not present. :param new_ignores: A list of ignore patterns :return: The list of ignores that were added """ ignored = get_user_ignores() to_add = [] for ignore in new_ignores: ignore = globbing.normalize_pattern(ignore) if ignore not in ignored: ignored.add(ignore) to_add.append(ignore) if not to_add: return [] f = open(config.user_ignore_config_filename(), 'ab') try: for pattern in to_add: f.write(pattern.encode('utf8') + '\n') finally: f.close() return to_add
def _set_user_ignore_content(self, ignores): """Create user ignore file and set its content to ignores.""" config.ensure_config_dir_exists() user_ignore_file = config.user_ignore_config_filename() f = open(user_ignore_file, 'wb') try: f.write(ignores) finally: f.close()
def test_global_ignored(self): tree = self.make_branch_and_tree('.') config.ensure_config_dir_exists() user_ignore_file = config.user_ignore_config_filename() f = open(user_ignore_file, 'wb') try: f.write('*.py[co]\n' './.shelf\n' '# comment line\n' '\n' #Blank line '\r\n' #Blank dos line ' * \n' #Trailing and suffix spaces 'crlf\r\n' # dos style line '*\xc3\xa5*\n' # u'\xe5'.encode('utf8') ) finally: f.close() # Rooted self.assertEqual('./.shelf', tree.is_ignored('.shelf')) self.assertEqual(None, tree.is_ignored('foo/.shelf')) # Glob style self.assertEqual('*.py[co]', tree.is_ignored('foo.pyc')) self.assertEqual('*.py[co]', tree.is_ignored('foo.pyo')) self.assertEqual(None, tree.is_ignored('foo.py')) # Glob in subdir self.assertEqual('*.py[co]', tree.is_ignored('bar/foo.pyc')) self.assertEqual('*.py[co]', tree.is_ignored('bar/foo.pyo')) self.assertEqual(None, tree.is_ignored('bar/foo.py')) # Unicode self.assertEqual(u'*\xe5*', tree.is_ignored(u'b\xe5gfors')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'\xe5gfors')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'\xe5')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'b\xe5')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'b/\xe5')) # Whitespace self.assertEqual(' * ', tree.is_ignored(' bbb ')) self.assertEqual(' * ', tree.is_ignored('subdir/ bbb ')) self.assertEqual(None, tree.is_ignored('bbb ')) self.assertEqual(None, tree.is_ignored(' bbb')) # Dos lines self.assertEqual('crlf', tree.is_ignored('crlf')) self.assertEqual('crlf', tree.is_ignored('subdir/crlf')) # Comment line should be ignored self.assertEqual(None, tree.is_ignored('# comment line')) # Blank line should also be ignored self.assertEqual(None, tree.is_ignored('')) self.assertEqual(None, tree.is_ignored('baz/'))
def test_global_ignored(self): tree = self.make_branch_and_tree('.') config.ensure_config_dir_exists() user_ignore_file = config.user_ignore_config_filename() self._set_user_ignore_content( '*.py[co]\n' './.shelf\n' '# comment line\n' '\n' #Blank line '\r\n' #Blank dos line ' * \n' #Trailing and suffix spaces 'crlf\r\n' # dos style line '*\xc3\xa5*\n' # u'\xe5'.encode('utf8') ) # Rooted self.assertEqual('./.shelf', tree.is_ignored('.shelf')) self.assertEqual(None, tree.is_ignored('foo/.shelf')) # Glob style self.assertEqual('*.py[co]', tree.is_ignored('foo.pyc')) self.assertEqual('*.py[co]', tree.is_ignored('foo.pyo')) self.assertEqual(None, tree.is_ignored('foo.py')) # Glob in subdir self.assertEqual('*.py[co]', tree.is_ignored('bar/foo.pyc')) self.assertEqual('*.py[co]', tree.is_ignored('bar/foo.pyo')) self.assertEqual(None, tree.is_ignored('bar/foo.py')) # Unicode self.assertEqual(u'*\xe5*', tree.is_ignored(u'b\xe5gfors')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'\xe5gfors')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'\xe5')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'b\xe5')) self.assertEqual(u'*\xe5*', tree.is_ignored(u'b/\xe5')) # Whitespace self.assertEqual(' * ', tree.is_ignored(' bbb ')) self.assertEqual(' * ', tree.is_ignored('subdir/ bbb ')) self.assertEqual(None, tree.is_ignored('bbb ')) self.assertEqual(None, tree.is_ignored(' bbb')) # Dos lines self.assertEqual('crlf', tree.is_ignored('crlf')) self.assertEqual('crlf', tree.is_ignored('subdir/crlf')) # Comment line should be ignored self.assertEqual(None, tree.is_ignored('# comment line')) # Blank line should also be ignored self.assertEqual(None, tree.is_ignored('')) self.assertEqual(None, tree.is_ignored('baz/'))
def test_create_if_missing(self): # $HOME should be set to '.' ignore_path = config.user_ignore_config_filename() self.failIfExists(ignore_path) user_ignores = ignores.get_user_ignores() self.assertEqual(set(ignores.USER_DEFAULTS), user_ignores) self.failUnlessExists(ignore_path) f = open(ignore_path, 'rb') try: entries = ignores.parse_ignore_file(f) finally: f.close() self.assertEqual(set(ignores.USER_DEFAULTS), entries)
def test_create_if_missing(self): # $HOME should be set to '.' ignore_path = config.user_ignore_config_filename() self.assertPathDoesNotExist(ignore_path) user_ignores = ignores.get_user_ignores() self.assertEqual(set(ignores.USER_DEFAULTS), user_ignores) self.assertPathExists(ignore_path) f = open(ignore_path, 'rb') try: entries = ignores.parse_ignore_file(f) finally: f.close() self.assertEqual(set(ignores.USER_DEFAULTS), entries)
def _set_user_ignores(patterns): """Fill out the user ignore file with the given patterns This may raise an error if it doesn't have permission to write to the user ignore file. This is mostly used for testing, since it would be bad form to rewrite a user's ignore list. bzrlib only writes this file if it does not exist. """ ignore_path = config.user_ignore_config_filename() config.ensure_config_dir_exists() # Create an empty file f = open(ignore_path, 'wb') try: for pattern in patterns: f.write(pattern.encode('utf8') + '\n') finally: f.close()
def get_user_ignores(): """Get the list of user ignored files, possibly creating it.""" path = config.user_ignore_config_filename() patterns = set(USER_DEFAULTS) try: f = open(path, 'rb') except (IOError, OSError), e: # open() shouldn't return an IOError without errno, but just in case err = getattr(e, 'errno', None) if err not in (errno.ENOENT,): raise # Create the ignore file, and just return the default # We want to ignore if we can't write to the file # since get_* should be a safe operation try: _set_user_ignores(USER_DEFAULTS) except (IOError, OSError), e: if e.errno not in (errno.EPERM,): raise
def test_use_empty(self): ignores._set_user_ignores([]) ignore_path = config.user_ignore_config_filename() self.check_file_contents(ignore_path, '') self.assertEqual(set([]), ignores.get_user_ignores())