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