/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
51
    def __init__(self, gitdir, lockfiles):
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
52
        super(GitBranch, self).__init__()
0.200.27 by David Allouche
Flat is better than nested, remove the gitlib hierarchy.
53
        from bzrlib.plugins.git import git_repository
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
54
        self.bzrdir = gitdir
55
        self.control_files = lockfiles
56
        self.repository = git_repository.GitRepository(gitdir, lockfiles)
57
        self.base = gitdir.root_transport.base
58
        if '.git' not in gitdir.root_transport.list_dir('.'):
59
            raise errors.NotBranchError(self.base)
60
        self._format = GitBranchFormat()
61
62
    def lock_write(self):
63
        self.control_files.lock_write()
64
65
    @needs_read_lock
66
    def last_revision(self):
67
        # perhaps should escape this ?
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
68
        head_git_id = self.repository._git.get_head()
69
        if head_git_id is None:
70
            return revision.NULL_REVISION
71
        return ids.convert_revision_id_git_to_bzr(head_git_id)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
72
73
    @needs_read_lock
74
    def revision_history(self):
75
        node = self.last_revision()
0.200.20 by John Arbash Meinel
All tests are passing again
76
        if node == revision.NULL_REVISION:
77
            return []
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
78
        ancestors = self.repository.get_revision_graph(node)
79
        history = []
80
        while node is not None:
81
            history.append(node)
82
            if len(ancestors[node]) > 0:
83
                node = ancestors[node][0]
84
            else:
85
                node = None
86
        return list(reversed(history))
87
88
    def get_config(self):
89
        return GitBranchConfig(self)
90
91
    def lock_read(self):
92
        self.control_files.lock_read()
93
94
    def unlock(self):
95
        self.control_files.unlock()
96
97
    def get_push_location(self):
98
        """See Branch.get_push_location."""
99
        push_loc = self.get_config().get_user_option('push_location')
100
        return push_loc
101
102
    def set_push_location(self, location):
103
        """See Branch.set_push_location."""
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
104
        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.
105
                                          local=True)
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
106
107
    def supports_tags(self):
108
        return False