/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
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,
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
22
    revision,
0.200.82 by Jelmer Vernooij
Support listing tags.
23
    tag,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
24
    )
25
from bzrlib.decorators import needs_read_lock
26
0.200.111 by Jelmer Vernooij
Merge bzr-foreign.
27
from bzrlib.plugins.git.foreign import ForeignBranch
0.200.20 by John Arbash Meinel
All tests are passing again
28
0.200.82 by Jelmer Vernooij
Support listing tags.
29
class GitTagDict(tag.BasicTags):
30
0.200.89 by Jelmer Vernooij
Support sprouting branches.
31
    def __init__(self, branch):
32
        self.branch = branch
33
        self.repository = branch.repository
0.200.82 by Jelmer Vernooij
Support listing tags.
34
35
    def get_tag_dict(self):
36
        ret = {}
0.200.180 by Jelmer Vernooij
Simplify tag handling.
37
        for k,v in self.repository._git.tags.iteritems():
38
            ret[k] = self.branch.mapping.revision_id_foreign_to_bzr(v)
0.200.82 by Jelmer Vernooij
Support listing tags.
39
        return ret
40
0.200.86 by Jelmer Vernooij
Clearer error when setting tags.
41
    def set_tag(self, name, revid):
0.200.181 by Jelmer Vernooij
Support setting tags.
42
        self.repository._git.tags[name] = revid
0.200.86 by Jelmer Vernooij
Clearer error when setting tags.
43
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
44
45
class GitBranchConfig(config.BranchConfig):
46
    """BranchConfig that uses locations.conf in place of branch.conf"""
47
48
    def __init__(self, branch):
49
        config.BranchConfig.__init__(self, branch)
50
        # do not provide a BranchDataConfig
51
        self.option_sources = self.option_sources[0], self.option_sources[2]
52
53
    def set_user_option(self, name, value, local=False):
54
        """Force local to True"""
55
        config.BranchConfig.set_user_option(self, name, value, local=True)
56
57
58
class GitBranchFormat(branch.BranchFormat):
59
0.200.70 by Jelmer Vernooij
Implement GitBranchFormat.get_format_description.
60
    def get_format_description(self):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
61
        return 'Git Branch'
62
0.200.82 by Jelmer Vernooij
Support listing tags.
63
    def supports_tags(self):
64
        return True
65
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
66
0.200.111 by Jelmer Vernooij
Merge bzr-foreign.
67
class GitBranch(ForeignBranch):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
68
    """An adapter to git repositories for bzr Branch objects."""
69
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
70
    def __init__(self, bzrdir, repository, name, head, lockfiles):
0.200.82 by Jelmer Vernooij
Support listing tags.
71
        self.repository = repository
0.222.1 by Jelmer Vernooij
Retrieve mapping from repository rather than just using the default mapping.
72
        super(GitBranch, self).__init__(repository.get_mapping())
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
73
        self.control_files = lockfiles
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
74
        self.bzrdir = bzrdir
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
75
        self.name = name
0.200.57 by Jelmer Vernooij
Fix more tests.
76
        self.head = head
0.200.143 by Jelmer Vernooij
Reoncile InterGitRepository objects.
77
        self.base = bzrdir.transport.base
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
78
        self._format = GitBranchFormat()
79
80
    def lock_write(self):
81
        self.control_files.lock_write()
82
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
83
    def get_stacked_on_url(self):
84
        # Git doesn't do stacking (yet...)
85
        return None
86
87
    def get_parent(self):
88
        """See Branch.get_parent()."""
89
        return None
90
0.200.175 by Jelmer Vernooij
Add optimized handling when fetching from git to git.
91
    def set_parent(self, url):
92
        pass
93
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
94
    def lock_read(self):
95
        self.control_files.lock_read()
96
97
    def unlock(self):
98
        self.control_files.unlock()
99
100
    def get_physical_lock_status(self):
101
        return False
102
103
 
104
class LocalGitBranch(GitBranch):
105
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
106
    @needs_read_lock
107
    def last_revision(self):
108
        # perhaps should escape this ?
0.200.57 by Jelmer Vernooij
Fix more tests.
109
        if self.head is None:
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
110
            return revision.NULL_REVISION
0.200.112 by Jelmer Vernooij
Fix the build.
111
        return self.mapping.revision_id_foreign_to_bzr(self.head)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
112
0.200.82 by Jelmer Vernooij
Support listing tags.
113
    def _make_tags(self):
0.200.89 by Jelmer Vernooij
Support sprouting branches.
114
        return GitTagDict(self)
0.200.82 by Jelmer Vernooij
Support listing tags.
115
0.200.57 by Jelmer Vernooij
Fix more tests.
116
    def _gen_revision_history(self):
0.200.58 by Jelmer Vernooij
Fix remaining tests.
117
        if self.head is None:
118
            return []
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
119
        ret = list(self.repository.iter_reverse_revision_history(self.last_revision()))
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
120
        ret.reverse()
0.200.57 by Jelmer Vernooij
Fix more tests.
121
        return ret
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
122
123
    def get_config(self):
124
        return GitBranchConfig(self)
125
126
    def get_push_location(self):
127
        """See Branch.get_push_location."""
128
        push_loc = self.get_config().get_user_option('push_location')
129
        return push_loc
130
131
    def set_push_location(self, location):
132
        """See Branch.set_push_location."""
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
133
        self.get_config().set_user_option('push_location', location,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
134
                                          local=True)
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
135
136
    def supports_tags(self):
0.200.82 by Jelmer Vernooij
Support listing tags.
137
        return True
0.200.96 by Jelmer Vernooij
Fix branch.
138
139
    def sprout(self, to_bzrdir, revision_id=None):
140
        """See Branch.sprout()."""
141
        result = to_bzrdir.create_branch()
142
        self.copy_content_into(result, revision_id=revision_id)
143
        result.set_parent(self.bzrdir.root_transport.base)
144
        return result
145