=== modified file 'bzrlib/branch.py' --- bzrlib/branch.py 2009-02-02 05:47:08 +0000 +++ bzrlib/branch.py 2009-02-16 14:56:27 +0000 @@ -1565,12 +1565,17 @@ def get_reference(self, a_bzrdir): """See BranchFormat.get_reference().""" transport = a_bzrdir.get_branch_transport(None) - return transport.get('location').read() + return urlutils.join(a_bzrdir.root_transport.base, + transport.get('location').read()) - def set_reference(self, a_bzrdir, to_branch): + def set_reference(self, a_bzrdir, to_branch, use_relpath=False): """See BranchFormat.set_reference().""" transport = a_bzrdir.get_branch_transport(None) - location = transport.put_bytes('location', to_branch.base) + ref_url = to_branch.base + if use_relpath: + ref_url = urlutils.relative_url( + a_bzrdir.root_transport.base, ref_url) + location = transport.put_bytes('location', ref_url) def initialize(self, a_bzrdir, target_branch=None): """Create a branch of this format in a_bzrdir.""" === modified file 'bzrlib/tests/test_branch.py' --- bzrlib/tests/test_branch.py 2008-10-07 11:54:11 +0000 +++ bzrlib/tests/test_branch.py 2009-02-16 14:58:12 +0000 @@ -396,7 +396,7 @@ self.assertEqual(opened_branch.base, target_branch.base) def test_get_reference(self): - """For a BranchReference, get_reference should reutrn the location.""" + """For a BranchReference, get_reference should return the location.""" branch = self.make_branch('target') checkout = branch.create_checkout('checkout', lightweight=True) reference_url = branch.bzrdir.root_transport.abspath('') + '/' @@ -406,6 +406,20 @@ self.assertEqual(reference_url, _mod_branch.BranchReferenceFormat().get_reference(checkout.bzrdir)) + def test_get_reference_relpath(self): + """For a BranchReference, get_reference should return the location.""" + branch = self.make_branch('target') + checkout = branch.create_checkout('checkout', lightweight=True) + # set relative reference + _mod_branch.BranchReferenceFormat().set_reference(checkout.bzrdir, + branch, use_relpath=True) + reference_url = branch.bzrdir.root_transport.abspath('') + '/' + # if the api for create_checkout changes to return different checkout types + # then this file read will fail. + self.assertFileEqual('../target/', 'checkout/.bzr/branch/location') + self.assertEqual(reference_url, + _mod_branch.BranchReferenceFormat().get_reference(checkout.bzrdir)) + class TestHooks(TestCase):