/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 control dir and a Bazaar BzrDir"""
18
0.200.123 by Jelmer Vernooij
Use central git module.
19
import os
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
20
0.200.109 by Jelmer Vernooij
Cope with new argument to cloning_metadir.
21
import bzrlib
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
22
from bzrlib.lazy_import import lazy_import
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
23
from bzrlib import (
24
    bzrdir,
25
    lockable_files,
26
    urlutils,
27
    )
28
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
29
lazy_import(globals(), """
0.200.248 by Jelmer Vernooij
Fix locking.
30
from bzrlib.lockable_files import (
31
    TransportLock,
32
    )
0.200.27 by David Allouche
Flat is better than nested, remove the gitlib hierarchy.
33
from bzrlib.plugins.git import (
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
34
    errors,
0.200.94 by Jelmer Vernooij
Eliminate (duplicate) git_ prefix.
35
    branch,
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
36
    get_rich_root_format,
0.200.94 by Jelmer Vernooij
Eliminate (duplicate) git_ prefix.
37
    repository,
38
    workingtree,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
39
    )
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
40
""")
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
41
0.200.201 by Jelmer Vernooij
Try to import nothing other than __init__ when not opening git repositories.
42
from bzrlib.plugins.git import LocalGitBzrDirFormat
43
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
44
0.200.123 by Jelmer Vernooij
Use central git module.
45
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
46
class GitLock(object):
47
    """A lock that thunks through to Git."""
48
0.200.84 by Jelmer Vernooij
Fix lock_write argument.
49
    def lock_write(self, token=None):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
50
        pass
51
52
    def lock_read(self):
53
        pass
54
55
    def unlock(self):
56
        pass
57
0.200.73 by Jelmer Vernooij
Implement GitLock.peek().
58
    def peek(self):
59
        pass
60
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
61
    def validate_token(self, token):
62
        pass
63
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
64
65
class GitLockableFiles(lockable_files.LockableFiles):
66
    """Git specific lockable files abstraction."""
67
0.200.129 by Jelmer Vernooij
merge dulwich.
68
    def __init__(self, transport, lock):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
69
        self._lock = lock
70
        self._transaction = None
71
        self._lock_mode = None
0.200.129 by Jelmer Vernooij
merge dulwich.
72
        self._transport = transport
0.200.251 by Jelmer Vernooij
Revert locking fixes for now, as they break bzr 1.13 compatibility.
73
        self._lock_count = 0
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
74
75
76
class GitDir(bzrdir.BzrDir):
77
    """An adapter to the '.git' dir used by git."""
78
0.200.148 by Jelmer Vernooij
Share more infrastructure between LocalGitDir and RemoteGitDir.
79
    def is_supported(self):
80
        return True
81
0.200.155 by Jelmer Vernooij
Fix formatting, remove catch-all for exceptions when opening local repositories.
82
    def cloning_metadir(self, stacked=False):
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
83
        return get_rich_root_format()
0.200.155 by Jelmer Vernooij
Fix formatting, remove catch-all for exceptions when opening local repositories.
84
0.200.148 by Jelmer Vernooij
Share more infrastructure between LocalGitDir and RemoteGitDir.
85
86
class LocalGitDir(GitDir):
87
    """An adapter to the '.git' dir used by git."""
88
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
89
    _gitrepository_class = repository.LocalGitRepository
0.202.2 by David Allouche
GitRepository.get_inventory and .revision_tree work for the null revision. Support for testing GitRepository without disk data.
90
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
91
    def __init__(self, transport, lockfiles, gitrepo, format):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
92
        self._format = format
93
        self.root_transport = transport
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
94
        self._git = gitrepo
95
        if gitrepo.bare:
96
            self.transport = transport
97
        else:
98
            self.transport = transport.clone('.git')
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
99
        self._lockfiles = lockfiles
100
101
    def get_branch_transport(self, branch_format):
102
        if branch_format is None:
103
            return self.transport
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
104
        if isinstance(branch_format, LocalGitBzrDirFormat):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
105
            return self.transport
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
106
        raise errors.bzr_errors.IncompatibleFormat(branch_format, self._format)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
107
108
    get_repository_transport = get_branch_transport
109
    get_workingtree_transport = get_branch_transport
110
111
    def open_branch(self, ignored=None):
0.200.57 by Jelmer Vernooij
Fix more tests.
112
        """'create' a branch for this dir."""
113
        repo = self.open_repository()
0.200.147 by Jelmer Vernooij
Merge new dulwich; fetching objects from local repository works now; they aren't converted yet though.
114
        return branch.LocalGitBranch(self, repo, "HEAD", repo._git.head(), self._lockfiles)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
115
116
    def open_repository(self, shared=False):
117
        """'open' a repository for this dir."""
0.202.2 by David Allouche
GitRepository.get_inventory and .revision_tree work for the null revision. Support for testing GitRepository without disk data.
118
        return self._gitrepository_class(self, self._lockfiles)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
119
0.203.1 by Aaron Bentley
Make checkouts work
120
    def open_workingtree(self, recommend_upgrade=True):
0.200.250 by Jelmer Vernooij
Remove support for working trees for now.
121
        loc = urlutils.unescape_for_display(self.root_transport.base, 'ascii')
122
        raise errors.bzr_errors.NoWorkingTree(loc)
0.200.173 by Jelmer Vernooij
Merge changes, open index.
123
        if (not self._git.bare and 
124
            os.path.exists(os.path.join(self._git.controldir(), "index"))):
0.200.94 by Jelmer Vernooij
Eliminate (duplicate) git_ prefix.
125
            return workingtree.GitWorkingTree(self, self.open_repository(), 
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
126
                                                  self.open_branch())
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
127
0.200.108 by Jelmer Vernooij
Support bzr init --git.
128
    def create_repository(self, shared=False):
129
        return self.open_repository()