/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.27 by David Allouche
Flat is better than nested, remove the gitlib hierarchy.
27
from bzrlib.plugins.git import ids
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
31
    def __init__(self, repository):
32
        self.repository = repository
33
34
    def get_tag_dict(self):
35
        ret = {}
36
        for tag in self.repository._git.tags:
37
            ret[tag.name] = ids.convert_revision_id_git_to_bzr(tag.commit.id)
38
        return ret
39
0.200.86 by Jelmer Vernooij
Clearer error when setting tags.
40
    def set_tag(self, name, revid):
41
        raise NotImplementedError(self.set_tag)
42
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
43
44
class GitBranchConfig(config.BranchConfig):
45
    """BranchConfig that uses locations.conf in place of branch.conf"""
46
47
    def __init__(self, branch):
48
        config.BranchConfig.__init__(self, branch)
49
        # do not provide a BranchDataConfig
50
        self.option_sources = self.option_sources[0], self.option_sources[2]
51
52
    def set_user_option(self, name, value, local=False):
53
        """Force local to True"""
54
        config.BranchConfig.set_user_option(self, name, value, local=True)
55
56
57
class GitBranchFormat(branch.BranchFormat):
58
0.200.70 by Jelmer Vernooij
Implement GitBranchFormat.get_format_description.
59
    def get_format_description(self):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
60
        return 'Git Branch'
61
0.200.82 by Jelmer Vernooij
Support listing tags.
62
    def supports_tags(self):
63
        return True
64
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
65
66
class GitBranch(branch.Branch):
67
    """An adapter to git repositories for bzr Branch objects."""
68
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
69
    def __init__(self, bzrdir, repository, head, base, lockfiles):
0.200.82 by Jelmer Vernooij
Support listing tags.
70
        self.repository = repository
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
71
        super(GitBranch, self).__init__()
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
72
        self.control_files = lockfiles
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
73
        self.bzrdir = bzrdir
0.200.57 by Jelmer Vernooij
Fix more tests.
74
        self.head = head
75
        self.base = base
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
76
        self._format = GitBranchFormat()
77
78
    def lock_write(self):
79
        self.control_files.lock_write()
80
81
    @needs_read_lock
82
    def last_revision(self):
83
        # perhaps should escape this ?
0.200.57 by Jelmer Vernooij
Fix more tests.
84
        if self.head is None:
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
85
            return revision.NULL_REVISION
0.200.58 by Jelmer Vernooij
Fix remaining tests.
86
        return ids.convert_revision_id_git_to_bzr(self.head)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
87
0.200.82 by Jelmer Vernooij
Support listing tags.
88
    def _make_tags(self):
89
        return GitTagDict(self.repository)
90
0.200.66 by Jelmer Vernooij
Implement branch.get_parent().
91
    def get_parent(self):
92
        """See Branch.get_parent()."""
93
        return None
94
0.200.67 by Jelmer Vernooij
Implement Branch.get_stacked_on_url.
95
    def get_stacked_on_url(self):
96
        return None
97
0.200.57 by Jelmer Vernooij
Fix more tests.
98
    def _gen_revision_history(self):
0.200.58 by Jelmer Vernooij
Fix remaining tests.
99
        if self.head is None:
100
            return []
0.200.57 by Jelmer Vernooij
Fix more tests.
101
        skip = 0
0.200.58 by Jelmer Vernooij
Fix remaining tests.
102
        cms = None
103
        ret = []
0.200.57 by Jelmer Vernooij
Fix more tests.
104
        max_count = 1000
0.200.64 by Jelmer Vernooij
Only include mainline when generating revision history.
105
        nextid = self.head
0.200.57 by Jelmer Vernooij
Fix more tests.
106
        while cms != []:
0.200.58 by Jelmer Vernooij
Fix remaining tests.
107
            cms = self.repository._git.commits(self.head, max_count=max_count, skip=skip)
108
            skip += max_count
0.200.64 by Jelmer Vernooij
Only include mainline when generating revision history.
109
            for cm in cms:
110
                if cm.id == nextid:
111
                    ret.append(ids.convert_revision_id_git_to_bzr(cm.id))
112
                    if cm.parents == []:
113
                        nextid = None
114
                    else:
115
                        nextid = cm.parents[0].id
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
116
        ret.reverse()
0.200.57 by Jelmer Vernooij
Fix more tests.
117
        return ret
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
118
119
    def get_config(self):
120
        return GitBranchConfig(self)
121
122
    def lock_read(self):
123
        self.control_files.lock_read()
124
125
    def unlock(self):
126
        self.control_files.unlock()
127
0.200.72 by Jelmer Vernooij
Implement Branch.get_physical_lock_status.
128
    def get_physical_lock_status(self):
129
        return False
130
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
131
    def get_push_location(self):
132
        """See Branch.get_push_location."""
133
        push_loc = self.get_config().get_user_option('push_location')
134
        return push_loc
135
136
    def set_push_location(self, location):
137
        """See Branch.set_push_location."""
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
138
        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.
139
                                          local=True)
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
140
141
    def supports_tags(self):
0.200.82 by Jelmer Vernooij
Support listing tags.
142
        return True