/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
44
    def get_branch_description(self):
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.57 by Jelmer Vernooij
Fix more tests.
70
    def _gen_revision_history(self):
0.200.58 by Jelmer Vernooij
Fix remaining tests.
71
        if self.head is None:
72
            return []
0.200.57 by Jelmer Vernooij
Fix more tests.
73
        skip = 0
0.200.58 by Jelmer Vernooij
Fix remaining tests.
74
        cms = None
75
        ret = []
0.200.57 by Jelmer Vernooij
Fix more tests.
76
        max_count = 1000
0.200.64 by Jelmer Vernooij
Only include mainline when generating revision history.
77
        nextid = self.head
0.200.57 by Jelmer Vernooij
Fix more tests.
78
        while cms != []:
0.200.58 by Jelmer Vernooij
Fix remaining tests.
79
            cms = self.repository._git.commits(self.head, max_count=max_count, skip=skip)
80
            skip += max_count
0.200.64 by Jelmer Vernooij
Only include mainline when generating revision history.
81
            for cm in cms:
82
                if cm.id == nextid:
83
                    ret.append(ids.convert_revision_id_git_to_bzr(cm.id))
84
                    if cm.parents == []:
85
                        nextid = None
86
                    else:
87
                        nextid = cm.parents[0].id
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
88
        ret.reverse()
0.200.57 by Jelmer Vernooij
Fix more tests.
89
        return ret
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
90
91
    def get_config(self):
92
        return GitBranchConfig(self)
93
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_push_location(self):
101
        """See Branch.get_push_location."""
102
        push_loc = self.get_config().get_user_option('push_location')
103
        return push_loc
104
105
    def set_push_location(self, location):
106
        """See Branch.set_push_location."""
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
107
        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.
108
                                          local=True)
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
109
110
    def supports_tags(self):
111
        return False