~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
456
456
        return bzrdir.create_workingtree()
457
457
 
458
458
    def create_workingtree(self, revision_id=None, from_branch=None,
459
 
        accelerator_tree=None):
 
459
        accelerator_tree=None, hardlink=False):
460
460
        """Create a working tree at this BzrDir.
461
461
        
462
462
        :param revision_id: create it as of this revision id.
748
748
    def _get_tree_branch(self):
749
749
        """Return the branch and tree, if any, for this bzrdir.
750
750
 
751
 
        Return None for tree if not present.
 
751
        Return None for tree if not present or inaccessible.
752
752
        Raise NotBranchError if no branch is present.
753
753
        :return: (tree, branch)
754
754
        """
890
890
 
891
891
    def sprout(self, url, revision_id=None, force_new_repo=False,
892
892
               recurse='down', possible_transports=None,
893
 
               accelerator_tree=None):
 
893
               accelerator_tree=None, hardlink=False):
894
894
        """Create a copy of this bzrdir prepared for use as a new line of
895
895
        development.
896
896
 
907
907
            contents more quickly than the revision tree, i.e. a workingtree.
908
908
            The revision tree will be used for cases where accelerator_tree's
909
909
            content is different.
 
910
        :param hardlink: If true, hard-link files from accelerator_tree,
 
911
            where possible.
910
912
        """
911
913
        target_transport = get_transport(url, possible_transports)
912
914
        target_transport.ensure_base()
951
953
            result.create_branch()
952
954
        if isinstance(target_transport, LocalTransport) and (
953
955
            result_repo is None or result_repo.make_working_trees()):
954
 
            wt = result.create_workingtree(accelerator_tree=accelerator_tree)
 
956
            wt = result.create_workingtree(accelerator_tree=accelerator_tree,
 
957
                hardlink=hardlink)
955
958
            wt.lock_write()
956
959
            try:
957
960
                if wt.path2id('') is None:
1046
1049
        raise errors.UnsupportedOperation(self.destroy_repository, self)
1047
1050
 
1048
1051
    def create_workingtree(self, revision_id=None, from_branch=None,
1049
 
                           accelerator_tree=None):
 
1052
                           accelerator_tree=None, hardlink=False):
1050
1053
        """See BzrDir.create_workingtree."""
1051
1054
        # this looks buggy but is not -really-
1052
1055
        # because this format creates the workingtree when the bzrdir is
1120
1123
        return format.open(self, _found=True)
1121
1124
 
1122
1125
    def sprout(self, url, revision_id=None, force_new_repo=False,
1123
 
               possible_transports=None, accelerator_tree=None):
 
1126
               possible_transports=None, accelerator_tree=None,
 
1127
               hardlink=False):
1124
1128
        """See BzrDir.sprout()."""
1125
1129
        from bzrlib.workingtree import WorkingTreeFormat2
1126
1130
        self._make_tail(url)
1135
1139
            pass
1136
1140
        # we always want a working tree
1137
1141
        WorkingTreeFormat2().initialize(result,
1138
 
                                        accelerator_tree=accelerator_tree)
 
1142
                                        accelerator_tree=accelerator_tree,
 
1143
                                        hardlink=hardlink)
1139
1144
        return result
1140
1145
 
1141
1146
 
1230
1235
        self.transport.delete_tree('repository')
1231
1236
 
1232
1237
    def create_workingtree(self, revision_id=None, from_branch=None,
1233
 
                           accelerator_tree=None):
 
1238
                           accelerator_tree=None, hardlink=False):
1234
1239
        """See BzrDir.create_workingtree."""
1235
1240
        return self._format.workingtree_format.initialize(
1236
1241
            self, revision_id, from_branch=from_branch,
1237
 
            accelerator_tree=accelerator_tree)
 
1242
            accelerator_tree=accelerator_tree, hardlink=hardlink)
1238
1243
 
1239
1244
    def destroy_workingtree(self):
1240
1245
        """See BzrDir.destroy_workingtree."""
1431
1436
        try:
1432
1437
            return klass._formats[format_string]
1433
1438
        except KeyError:
1434
 
            raise errors.UnknownFormatError(format=format_string)
 
1439
            raise errors.UnknownFormatError(format=format_string, kind='bzrdir')
1435
1440
 
1436
1441
    @classmethod
1437
1442
    def get_default_format(klass):
1486
1491
        mutter('created control directory in ' + transport.base)
1487
1492
        control = transport.clone('.bzr')
1488
1493
        utf8_files = [('README', 
1489
 
                       "This is a Bazaar-NG control directory.\n"
1490
 
                       "Do not change any files in this directory.\n"),
 
1494
                       "This is a Bazaar control directory.\n"
 
1495
                       "Do not change any files in this directory.\n"
 
1496
                       "See http://bazaar-vcs.org/ for more information about Bazaar.\n"),
1491
1497
                      ('branch-format', self.get_format_string()),
1492
1498
                      ]
1493
1499
        # NB: no need to escape relative paths that are url safe.
2447
2453
    e.g. BzrDirMeta1 with weave repository.  Also, it's more user-oriented.
2448
2454
    """
2449
2455
 
 
2456
    def __init__(self):
 
2457
        """Create a BzrDirFormatRegistry."""
 
2458
        self._aliases = set()
 
2459
        super(BzrDirFormatRegistry, self).__init__()
 
2460
 
 
2461
    def aliases(self):
 
2462
        """Return a set of the format names which are aliases."""
 
2463
        return frozenset(self._aliases)
 
2464
 
2450
2465
    def register_metadir(self, key,
2451
2466
             repository_format, help, native=True, deprecated=False,
2452
2467
             branch_format=None,
2453
2468
             tree_format=None,
2454
2469
             hidden=False,
2455
 
             experimental=False):
 
2470
             experimental=False,
 
2471
             alias=False):
2456
2472
        """Register a metadir subformat.
2457
2473
 
2458
2474
        These all use a BzrDirMetaFormat1 bzrdir, but can be parameterized
2491
2507
                bd.repository_format = _load(repository_format)
2492
2508
            return bd
2493
2509
        self.register(key, helper, help, native, deprecated, hidden,
2494
 
            experimental)
 
2510
            experimental, alias)
2495
2511
 
2496
2512
    def register(self, key, factory, help, native=True, deprecated=False,
2497
 
                 hidden=False, experimental=False):
 
2513
                 hidden=False, experimental=False, alias=False):
2498
2514
        """Register a BzrDirFormat factory.
2499
2515
        
2500
2516
        The factory must be a callable that takes one parameter: the key.
2503
2519
        This function mainly exists to prevent the info object from being
2504
2520
        supplied directly.
2505
2521
        """
2506
 
        registry.Registry.register(self, key, factory, help, 
 
2522
        registry.Registry.register(self, key, factory, help,
2507
2523
            BzrDirFormatInfo(native, deprecated, hidden, experimental))
 
2524
        if alias:
 
2525
            self._aliases.add(key)
2508
2526
 
2509
2527
    def register_lazy(self, key, module_name, member_name, help, native=True,
2510
 
                      deprecated=False, hidden=False, experimental=False):
2511
 
        registry.Registry.register_lazy(self, key, module_name, member_name, 
 
2528
        deprecated=False, hidden=False, experimental=False, alias=False):
 
2529
        registry.Registry.register_lazy(self, key, module_name, member_name,
2512
2530
            help, BzrDirFormatInfo(native, deprecated, hidden, experimental))
 
2531
        if alias:
 
2532
            self._aliases.add(key)
2513
2533
 
2514
2534
    def set_default(self, key):
2515
2535
        """Set the 'default' key to be a clone of the supplied key.
2516
2536
        
2517
2537
        This method must be called once and only once.
2518
2538
        """
2519
 
        registry.Registry.register(self, 'default', self.get(key), 
 
2539
        registry.Registry.register(self, 'default', self.get(key),
2520
2540
            self.get_help(key), info=self.get_info(key))
 
2541
        self._aliases.add('default')
2521
2542
 
2522
2543
    def set_default_repository(self, key):
2523
2544
        """Set the FormatRegistry default and Repository default.
2626
2647
        ' bzr < 1.0',
2627
2648
    branch_format='bzrlib.branch.BzrBranchFormat6',
2628
2649
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
2629
 
    hidden=False,
2630
2650
    )
2631
2651
format_registry.register_metadir('dirstate-with-subtree',
2632
2652
    'bzrlib.repofmt.knitrepo.RepositoryFormatKnit3',
2635
2655
        'bzr branches. Incompatible with bzr < 0.15.',
2636
2656
    branch_format='bzrlib.branch.BzrBranchFormat6',
2637
2657
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
 
2658
    experimental=True,
2638
2659
    hidden=True,
2639
2660
    )
2640
2661
format_registry.register_metadir('pack-0.92',
2647
2668
        'http://doc.bazaar-vcs.org/latest/developers/packrepo.html.',
2648
2669
    branch_format='bzrlib.branch.BzrBranchFormat6',
2649
2670
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
2650
 
    experimental=True,
2651
2671
    )
2652
2672
format_registry.register_metadir('pack-0.92-subtree',
2653
2673
    'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack3',
2669
2689
        ' bzr < 1.0',
2670
2690
    branch_format='bzrlib.branch.BzrBranchFormat6',
2671
2691
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
2672
 
    hidden=False,
 
2692
    )
 
2693
# The following two formats should always just be aliases.
 
2694
format_registry.register_metadir('development',
 
2695
    'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment0',
 
2696
    help='Current development format. Can convert data to and from pack-0.92 '
 
2697
        '(and anything compatible with pack-0.92) format repositories. '
 
2698
        'Repositories in this format can only be read by bzr.dev. '
 
2699
        'Please read '
 
2700
        'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
 
2701
        'before use.',
 
2702
    branch_format='bzrlib.branch.BzrBranchFormat6',
 
2703
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
 
2704
    experimental=True,
 
2705
    alias=True,
 
2706
    )
 
2707
format_registry.register_metadir('development-subtree',
 
2708
    'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment0Subtree',
 
2709
    help='Current development format, subtree variant. Can convert data to and '
 
2710
        'from pack-0.92 (and anything compatible with pack-0.92) format '
 
2711
        'repositories. Repositories in this format can only be read by '
 
2712
        'bzr.dev. Please read '
 
2713
        'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
 
2714
        'before use.',
 
2715
    branch_format='bzrlib.branch.BzrBranchFormat6',
 
2716
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
 
2717
    experimental=True,
 
2718
    alias=True,
 
2719
    )
 
2720
# And the development formats which the will have aliased one of follow:
 
2721
format_registry.register_metadir('development0',
 
2722
    'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment0',
 
2723
    help='Trivial rename of pack-0.92 to provide a development format. '
 
2724
        'Please read '
 
2725
        'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
 
2726
        'before use.',
 
2727
    branch_format='bzrlib.branch.BzrBranchFormat6',
 
2728
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
 
2729
    hidden=True,
 
2730
    experimental=True,
 
2731
    )
 
2732
format_registry.register_metadir('development0-subtree',
 
2733
    'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment0Subtree',
 
2734
    help='Trivial rename of pack-0.92-subtree to provide a development format. '
 
2735
        'Please read '
 
2736
        'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
 
2737
        'before use.',
 
2738
    branch_format='bzrlib.branch.BzrBranchFormat6',
 
2739
    tree_format='bzrlib.workingtree.WorkingTreeFormat4',
 
2740
    hidden=True,
2673
2741
    experimental=True,
2674
2742
    )
2675
2743
format_registry.set_default('pack-0.92')