/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to branch.py

  • Committer: John Arbash Meinel
  • Date: 2010-01-12 22:51:31 UTC
  • mto: This revision was merged to the branch mainline in revision 4955.
  • Revision ID: john@arbash-meinel.com-20100112225131-he8h411p6aeeb947
Delay grabbing an output stream until we actually go to show a diff.

This makes the test suite happy, but it also seems to be reasonable.
If we aren't going to write anything, we don't need to hold an
output stream open.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007 Canonical Ltd
2
 
#
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
#
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
#
13
 
# You should have received a copy of the GNU General Public License
14
 
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
"""An adapter between a Git Branch and a Bazaar Branch"""
18
 
 
19
 
from bzrlib import (
20
 
    branch,
21
 
    config,
22
 
    revision,
23
 
    tag,
24
 
    )
25
 
from bzrlib.decorators import needs_read_lock
26
 
 
27
 
from bzrlib.plugins.git.foreign import ForeignBranch
28
 
from bzrlib.plugins.git.mapping import default_mapping
29
 
 
30
 
class GitTagDict(tag.BasicTags):
31
 
 
32
 
    def __init__(self, branch):
33
 
        self.branch = branch
34
 
        self.repository = branch.repository
35
 
 
36
 
    def get_tag_dict(self):
37
 
        ret = {}
38
 
        for tag in self.repository._git.tags:
39
 
            ret[tag.name] = self.branch.mapping.revision_id_foreign_to_bzr(tag.ref)
40
 
        return ret
41
 
 
42
 
    def set_tag(self, name, revid):
43
 
        raise NotImplementedError(self.set_tag)
44
 
 
45
 
 
46
 
class GitBranchConfig(config.BranchConfig):
47
 
    """BranchConfig that uses locations.conf in place of branch.conf"""
48
 
 
49
 
    def __init__(self, branch):
50
 
        config.BranchConfig.__init__(self, branch)
51
 
        # do not provide a BranchDataConfig
52
 
        self.option_sources = self.option_sources[0], self.option_sources[2]
53
 
 
54
 
    def set_user_option(self, name, value, local=False):
55
 
        """Force local to True"""
56
 
        config.BranchConfig.set_user_option(self, name, value, local=True)
57
 
 
58
 
 
59
 
class GitBranchFormat(branch.BranchFormat):
60
 
 
61
 
    def get_format_description(self):
62
 
        return 'Git Branch'
63
 
 
64
 
    def supports_tags(self):
65
 
        return True
66
 
 
67
 
 
68
 
class GitBranch(ForeignBranch):
69
 
    """An adapter to git repositories for bzr Branch objects."""
70
 
 
71
 
    def __init__(self, bzrdir, repository, name, head, lockfiles):
72
 
        self.repository = repository
73
 
        super(GitBranch, self).__init__(default_mapping)
74
 
        self.control_files = lockfiles
75
 
        self.bzrdir = bzrdir
76
 
        self.name = name
77
 
        self.head = head
78
 
        self.base = bzrdir.transport.base
79
 
        self._format = GitBranchFormat()
80
 
 
81
 
    def lock_write(self):
82
 
        self.control_files.lock_write()
83
 
 
84
 
    def get_stacked_on_url(self):
85
 
        # Git doesn't do stacking (yet...)
86
 
        return None
87
 
 
88
 
    def get_parent(self):
89
 
        """See Branch.get_parent()."""
90
 
        return None
91
 
 
92
 
    def lock_read(self):
93
 
        self.control_files.lock_read()
94
 
 
95
 
    def unlock(self):
96
 
        self.control_files.unlock()
97
 
 
98
 
    def get_physical_lock_status(self):
99
 
        return False
100
 
 
101
 
 
102
 
class LocalGitBranch(GitBranch):
103
 
 
104
 
    @needs_read_lock
105
 
    def last_revision(self):
106
 
        # perhaps should escape this ?
107
 
        if self.head is None:
108
 
            return revision.NULL_REVISION
109
 
        return self.mapping.revision_id_foreign_to_bzr(self.head)
110
 
 
111
 
    def _make_tags(self):
112
 
        return GitTagDict(self)
113
 
 
114
 
    def _gen_revision_history(self):
115
 
        if self.head is None:
116
 
            return []
117
 
        ret = list(self.repository.iter_reverse_revision_history(self.last_revision()))
118
 
        ret.reverse()
119
 
        return ret
120
 
 
121
 
    def get_config(self):
122
 
        return GitBranchConfig(self)
123
 
 
124
 
    def get_push_location(self):
125
 
        """See Branch.get_push_location."""
126
 
        push_loc = self.get_config().get_user_option('push_location')
127
 
        return push_loc
128
 
 
129
 
    def set_push_location(self, location):
130
 
        """See Branch.set_push_location."""
131
 
        self.get_config().set_user_option('push_location', location,
132
 
                                          local=True)
133
 
 
134
 
    def supports_tags(self):
135
 
        return True
136
 
 
137
 
    def sprout(self, to_bzrdir, revision_id=None):
138
 
        """See Branch.sprout()."""
139
 
        result = to_bzrdir.create_branch()
140
 
        self.copy_content_into(result, revision_id=revision_id)
141
 
        result.set_parent(self.bzrdir.root_transport.base)
142
 
        return result
143