~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

(Andrew Bennetts, Robert Collins, Martin Pool) Allow make_bzrdir on TestCaseWithTransport to create it correctly on all transports, allowing directory formats that require a non-local transport to be testable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1220
1220
        if relpath is not None and relpath != '.':
1221
1221
            if not base.endswith('/'):
1222
1222
                base = base + '/'
1223
 
            base = base + urlutils.escape(relpath)
 
1223
            # XXX: Really base should be a url; we did after all call
 
1224
            # get_url()!  But sometimes it's just a path (from
 
1225
            # LocalAbspathServer), and it'd be wrong to append urlescaped data
 
1226
            # to a non-escaped local path.
 
1227
            if base.startswith('./') or base.startswith('/'):
 
1228
                base += relpath
 
1229
            else:
 
1230
                base += urlutils.escape(relpath)
1224
1231
        return base
1225
1232
 
1226
1233
    def get_transport(self):
1246
1253
 
1247
1254
    def make_bzrdir(self, relpath, format=None):
1248
1255
        try:
1249
 
            url = self.get_url(relpath)
1250
 
            mutter('relpath %r => url %r', relpath, url)
1251
 
            segments = url.split('/')
1252
 
            if segments and segments[-1] not in ('', '.'):
1253
 
                parent = '/'.join(segments[:-1])
1254
 
                t = get_transport(parent)
 
1256
            # might be a relative or absolute path
 
1257
            maybe_a_url = self.get_url(relpath)
 
1258
            segments = maybe_a_url.rsplit('/', 1)
 
1259
            t = get_transport(maybe_a_url)
 
1260
            if len(segments) > 1 and segments[-1] not in ('', '.'):
1255
1261
                try:
1256
 
                    t.mkdir(segments[-1])
 
1262
                    t.mkdir('.')
1257
1263
                except errors.FileExists:
1258
1264
                    pass
1259
1265
            if format is None:
1260
 
                format=bzrlib.bzrdir.BzrDirFormat.get_default_format()
1261
 
            # FIXME: make this use a single transport someday. RBC 20060418
1262
 
            return format.initialize_on_transport(get_transport(relpath))
 
1266
                format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
1267
            return format.initialize_on_transport(t)
1263
1268
        except errors.UninitializableFormat:
1264
1269
            raise TestSkipped("Format %s is not initializable." % format)
1265
1270
 
1291
1296
        try:
1292
1297
            return b.bzrdir.create_workingtree()
1293
1298
        except errors.NotLocalUrl:
1294
 
            # new formats - catch No tree error and create
1295
 
            # a branch reference and a checkout.
1296
 
            # old formats at that point - raise TestSkipped.
1297
 
            # TODO: rbc 20060208
1298
 
            return WorkingTreeFormat2().initialize(bzrdir.BzrDir.open(relpath))
 
1299
            # We can only make working trees locally at the moment.  If the
 
1300
            # transport can't support them, then reopen the branch on a local
 
1301
            # transport, and create the working tree there.  
 
1302
            #
 
1303
            # Possibly we should instead keep
 
1304
            # the non-disk-backed branch and create a local checkout?
 
1305
            bd = bzrdir.BzrDir.open(relpath)
 
1306
            return bd.create_workingtree()
1299
1307
 
1300
1308
    def assertIsDirectory(self, relpath, transport):
1301
1309
        """Assert that relpath within transport is a directory.