At http://bazaar.launchpad.net/~jameinel/bzr/2.1.0-dev
------------------------------------------------------------ revno: 4813 [merge] revision-id: [email protected] parent: [email protected] parent: [email protected] committer: John Arbash Meinel <[email protected]> branch nick: 2.1.0-dev timestamp: Tue 2010-02-16 10:08:40 -0600 message: bring in the latest 2.1 changes added: bzrlib/help_topics/en/location-alias.txt locationalias.txt-20100211071747-8cyf9n9xw0j3ypaz-1 modified: NEWS NEWS-20050323055033-4e00b5db738777ff bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1 bzrlib/push.py push.py-20080606021927-5fe39050e8xne9un-1 bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64 bzrlib/tests/per_tree/test_inv.py test_inv.py-20070312023226-0cdvk5uwhutis9vg-1 bzrlib/tree.py tree.py-20050309040759-9d5f2496be663e77
=== modified file 'NEWS' --- a/NEWS 2010-02-11 23:07:09 +0000 +++ b/NEWS 2010-02-16 16:08:40 +0000 @@ -328,6 +328,29 @@ (Martin Pool) +bzr 2.0.5 (not released yet) +############################ + +:Codename: +:2.0.5: + +Bug Fixes +********* + +* Handle renames correctly when there are files or directories that + differ only in case. (Chris Jones, Martin Pool, #368931) + +* If ``bzr push --create-prefix`` triggers an unexpected ``NoSuchFile`` + error, report that error rather than failing with an unhelpful + ``UnboundLocalError``. + (Andrew Bennetts, #423563) + +Documentation +************* + +* Added ``location-alias`` help topic. + (Andrew Bennetts, #337834) + bzr 2.0.4 ######### === modified file 'bzrlib/help_topics/__init__.py' --- a/bzrlib/help_topics/__init__.py 2010-01-20 14:53:08 +0000 +++ b/bzrlib/help_topics/__init__.py 2010-02-16 16:08:40 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2006, 2009 Canonical Ltd +# Copyright (C) 2006-2010 Canonical Ltd # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -269,6 +269,9 @@ bzr+ssh://[email protected]/~/myproject/trunk would refer to ``/home/remote/myproject/trunk``. + +Many commands that accept URLs also accept location aliases too. See +::doc:`location-alias-help`. """ return out @@ -758,6 +761,8 @@ 'Types of conflicts and what to do about them') topic_registry.register('debug-flags', _load_from_file, 'Options to show or record debug information') +topic_registry.register('location-alias', _load_from_file, + 'Aliases for remembered locations') topic_registry.register('log-formats', _load_from_file, 'Details on the logging formats available') === added file 'bzrlib/help_topics/en/location-alias.txt' --- a/bzrlib/help_topics/en/location-alias.txt 1970-01-01 00:00:00 +0000 +++ b/bzrlib/help_topics/en/location-alias.txt 2010-02-11 07:18:20 +0000 @@ -0,0 +1,19 @@ +Location aliases +================ + +Bazaar defines several aliases for locations associated with a branch. These +can be used with most commands that expect a location, such as `bzr push`. + +The aliases are:: + + :parent the parent of this branch + :submit the submit branch for this branch + :public the public location of this branch + :bound the branch this branch is bound to, for bound branches + :push the saved location used for `bzr push` with no arguments + :this this branch + +For example, to push to the parent location:: + + bzr push :parent + === modified file 'bzrlib/push.py' --- a/bzrlib/push.py 2009-12-25 13:47:23 +0000 +++ b/bzrlib/push.py 2010-02-16 16:08:40 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008 Canonical Ltd +# Copyright (C) 2008, 2009, 2010 Canonical Ltd # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -110,6 +110,12 @@ "\nYou may supply --create-prefix to create all" " leading parent directories." % location) + # This shouldn't occur (because create_prefix is true, so + # create_clone_on_transport should be catching NoSuchFile and + # creating the missing directories) but if it does the original + # NoSuchFile error will be more informative than an + # UnboundLocalError for br_to. + raise except errors.TooManyRedirections: raise errors.BzrCommandError("Too many redirections trying " "to make %s." % location) === modified file 'bzrlib/tests/__init__.py' --- a/bzrlib/tests/__init__.py 2010-02-02 08:36:12 +0000 +++ b/bzrlib/tests/__init__.py 2010-02-16 16:08:40 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Canonical Ltd +# Copyright (C) 2005-2010 Canonical Ltd # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -4344,6 +4344,23 @@ CaseInsensitiveFilesystemFeature = _CaseInsensitiveFilesystemFeature() +class _CaseSensitiveFilesystemFeature(Feature): + + def _probe(self): + if CaseInsCasePresFilenameFeature.available(): + return False + elif CaseInsensitiveFilesystemFeature.available(): + return False + else: + return True + + def feature_name(self): + return 'case-sensitive filesystem' + +# new coding style is for feature instances to be lowercase +case_sensitive_filesystem_feature = _CaseSensitiveFilesystemFeature() + + # Kept for compatibility, use bzrlib.tests.features.subunit instead SubUnitFeature = _CompatabilityThunkFeature('bzrlib.tests.features', 'subunit', 'bzrlib.tests.SubUnitFeature', deprecated_in((2,1,0))) === modified file 'bzrlib/tests/per_tree/test_inv.py' --- a/bzrlib/tests/per_tree/test_inv.py 2009-07-10 07:14:02 +0000 +++ b/bzrlib/tests/per_tree/test_inv.py 2010-02-16 16:08:40 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007, 2008 Canonical Ltd +# Copyright (C) 2007-2010 Canonical Ltd # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,7 +23,10 @@ from bzrlib import ( tests, ) -from bzrlib.tests import per_tree +from bzrlib.tests import ( + features, + per_tree, + ) from bzrlib.mutabletree import MutableTree from bzrlib.tests import SymlinkFeature, TestSkipped from bzrlib.transform import _PreviewTree @@ -131,6 +134,8 @@ work_tree.add(['dir', 'dir/file']) if commit: work_tree.commit('commit 1') + # XXX: this isn't actually guaranteed to return the class we want to + # test -- mbp 2010-02-12 return work_tree def test_canonical_path(self): @@ -163,3 +168,21 @@ work_tree = self._make_canonical_test_tree() self.assertEqual('dir/None', work_tree.get_canonical_inventory_path('Dir/None')) + + def test_canonical_tree_name_mismatch(self): + # see <https://bugs.edge.launchpad.net/bzr/+bug/368931> + # some of the trees we want to use can only exist on a disk, not in + # memory - therefore we can only test this if the filesystem is + # case-sensitive. + self.requireFeature(tests.case_sensitive_filesystem_feature) + work_tree = self.make_branch_and_tree('.') + self.build_tree(['test/', 'test/file', 'Test']) + work_tree.add(['test/', 'test/file', 'Test']) + + test_tree = self._convert_tree(work_tree) + test_tree.lock_read() + self.addCleanup(test_tree.unlock) + + self.assertEqual(['test', 'test/file', 'Test', 'test/foo', 'Test/foo'], + test_tree.get_canonical_inventory_paths( + ['test', 'test/file', 'Test', 'test/foo', 'Test/foo'])) === modified file 'bzrlib/tree.py' --- a/bzrlib/tree.py 2009-11-27 23:21:36 +0000 +++ b/bzrlib/tree.py 2010-02-16 16:08:40 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2005, 2009 Canonical Ltd +# Copyright (C) 2005-2010 Canonical Ltd # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -404,16 +404,34 @@ bit_iter = iter(path.split("/")) for elt in bit_iter: lelt = elt.lower() + new_path = None for child in self.iter_children(cur_id): try: + # XXX: it seem like if the child is known to be in the + # tree, we shouldn't need to go from its id back to + # its path -- mbp 2010-02-11 + # + # XXX: it seems like we could be more efficient + # by just directly looking up the original name and + # only then searching all children; also by not + # chopping paths so much. -- mbp 2010-02-11 child_base = os.path.basename(self.id2path(child)) - if child_base.lower() == lelt: + if (child_base == elt): + # if we found an exact match, we can stop now; if + # we found an approximate match we need to keep + # searching because there might be an exact match + # later. cur_id = child - cur_path = osutils.pathjoin(cur_path, child_base) + new_path = osutils.pathjoin(cur_path, child_base) break + elif child_base.lower() == lelt: + cur_id = child + new_path = osutils.pathjoin(cur_path, child_base) except NoSuchId: # before a change is committed we can see this error... continue + if new_path: + cur_path = new_path else: # got to the end of this directory and no entries matched. # Return what matched so far, plus the rest as specified.
-- bazaar-commits mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/bazaar-commits
