~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to bzrtools.py

  • Committer: Aaron Bentley
  • Date: 2007-12-22 02:01:03 UTC
  • Revision ID: aaron.bentley@utoronto.ca-20071222020103-ggjszok7n974e1l2
Update branches, multi-pull to new APIs, create trees

Show diffs side-by-side

added added

removed removed

Lines of Context:
353
353
        yield url.rstrip('/')
354
354
 
355
355
 
356
 
def iter_branches(t, lister=None):
357
 
    """Iterate through all the branches under a transport"""
358
 
    for bzrdir in iter_bzrdirs(t, lister):
359
 
        try:
360
 
            branch = bzrdir.open_branch()
361
 
            if branch.bzrdir is bzrdir:
362
 
                yield branch
363
 
        except (NotBranchError, UnsupportedFormatError):
364
 
            pass
 
356
def list_branches(t):
 
357
    def is_inside(branch):
 
358
        return bool(branch.base.startswith(t.base))
 
359
 
 
360
    if t.base.startswith('http://'):
 
361
        def evaluate(bzrdir):
 
362
            try:
 
363
                branch = bzrdir.open_branch()
 
364
                if is_inside(branch):
 
365
                    return True, branch
 
366
                else:
 
367
                    return True, None
 
368
            except errors.NotBranchError:
 
369
                return True, None
 
370
        return [b for b in BzrDir.find_bzrdirs(t, list_current=apache_ls,
 
371
                evaluate=evaluate) if b is not None]
 
372
    elif not t.listable():
 
373
        raise BzrCommandError("Can't list this type of location.")
 
374
    return [b for b in BzrDir.find_branches(t) if is_inside(b)]
 
375
 
 
376
 
 
377
def evaluate_branch_tree(bzrdir):
 
378
    try:
 
379
        tree, branch = bzrdir._get_tree_branch()
 
380
    except NotBranchError:
 
381
        return True, None
 
382
    else:
 
383
        return True, (branch, tree)
365
384
 
366
385
 
367
386
def iter_branch_tree(t, lister=None):
368
 
    for bzrdir in iter_bzrdirs(t, lister):
369
 
        try:
370
 
            wt = bzrdir.open_workingtree()
371
 
            yield wt.branch, wt
372
 
        except NoWorkingTree, UnsupportedFormatError:
373
 
            try:
374
 
                branch = bzrdir.open_branch()
375
 
                if branch.bzrdir is bzrdir:
376
 
                    yield branch, None
377
 
            except (NotBranchError, UnsupportedFormatError):
378
 
                continue
379
 
 
380
 
 
381
 
def iter_bzrdirs(t, lister=None):
382
 
    if lister is None:
383
 
        def lister(t):
384
 
            return t.list_dir('.')
385
 
    try:
386
 
        bzrdir = bzrdir_from_transport(t)
387
 
        yield bzrdir
388
 
    except (ConnectionError):
389
 
        raise
390
 
    except (NotBranchError, UnsupportedFormatError, TransportError,
391
 
            PermissionDenied):
392
 
        pass
393
 
    try:
394
 
        for directory in lister(t):
395
 
            if directory == ".bzr":
396
 
                continue
397
 
            try:
398
 
                subt = t.clone(directory)
399
 
            except UnicodeDecodeError:
400
 
                continue
401
 
            for bzrdir in iter_bzrdirs(subt, lister):
402
 
                yield bzrdir
403
 
    except (NoSuchFile, PermissionDenied, TransportError):
404
 
        pass
405
 
 
406
 
 
407
 
def bzrdir_from_transport(t):
408
 
    """Open a bzrdir from a transport (not a location)"""
409
 
    format = BzrDirFormat.find_format(t)
410
 
    BzrDir._check_supported(format, False)
411
 
    return format.open(t)
 
387
    return (x for x in BzrDir.find_bzrdirs(t, evaluate=evaluate_branch_tree,
 
388
            list_current=lister) if x is not None)
412
389
 
413
390
 
414
391
def open_from_url(location):