/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
0.200.261 by Jelmer Vernooij
More formatting fixes.
17
"""An adapter between a Git control dir and a Bazaar BzrDir."""
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
18
19
from bzrlib import (
20
    bzrdir,
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
21
    errors as bzr_errors,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
22
    lockable_files,
23
    urlutils,
24
    )
25
0.200.280 by Jelmer Vernooij
Support bzr.dev.
26
LockWarner = getattr(lockable_files, "_LockWarner", None)
27
0.200.27 by David Allouche
Flat is better than nested, remove the gitlib hierarchy.
28
from bzrlib.plugins.git import (
0.200.280 by Jelmer Vernooij
Support bzr.dev.
29
    LocalGitBzrDirFormat,
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
30
    get_rich_root_format,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
31
    )
32
0.200.123 by Jelmer Vernooij
Use central git module.
33
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
34
class GitLock(object):
35
    """A lock that thunks through to Git."""
36
0.200.84 by Jelmer Vernooij
Fix lock_write argument.
37
    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.
38
        pass
39
40
    def lock_read(self):
41
        pass
42
43
    def unlock(self):
44
        pass
45
0.200.73 by Jelmer Vernooij
Implement GitLock.peek().
46
    def peek(self):
47
        pass
48
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
49
    def validate_token(self, token):
50
        pass
51
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
52
53
class GitLockableFiles(lockable_files.LockableFiles):
54
    """Git specific lockable files abstraction."""
55
0.200.129 by Jelmer Vernooij
merge dulwich.
56
    def __init__(self, transport, lock):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
57
        self._lock = lock
58
        self._transaction = None
59
        self._lock_mode = None
0.200.129 by Jelmer Vernooij
merge dulwich.
60
        self._transport = transport
0.200.280 by Jelmer Vernooij
Support bzr.dev.
61
        if LockWarner is None:
62
            # Bzr 1.13
63
            self._lock_count = 0
64
        else:
65
            self._lock_warner = LockWarner(repr(self))
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
66
67
68
class GitDir(bzrdir.BzrDir):
69
    """An adapter to the '.git' dir used by git."""
70
0.200.148 by Jelmer Vernooij
Share more infrastructure between LocalGitDir and RemoteGitDir.
71
    def is_supported(self):
72
        return True
73
0.200.155 by Jelmer Vernooij
Fix formatting, remove catch-all for exceptions when opening local repositories.
74
    def cloning_metadir(self, stacked=False):
0.200.328 by Jelmer Vernooij
Support stacking, depend on bzr 1.15.
75
        return get_rich_root_format(stacked)
0.200.155 by Jelmer Vernooij
Fix formatting, remove catch-all for exceptions when opening local repositories.
76
0.200.148 by Jelmer Vernooij
Share more infrastructure between LocalGitDir and RemoteGitDir.
77
78
class LocalGitDir(GitDir):
79
    """An adapter to the '.git' dir used by git."""
80
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
81
    def _get_gitrepository_class(self):
82
        from bzrlib.plugins.git.repository import LocalGitRepository
83
        return LocalGitRepository
84
85
    _gitrepository_class = property(_get_gitrepository_class)
0.202.2 by David Allouche
GitRepository.get_inventory and .revision_tree work for the null revision. Support for testing GitRepository without disk data.
86
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
87
    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.
88
        self._format = format
89
        self.root_transport = transport
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
90
        self._git = gitrepo
91
        if gitrepo.bare:
92
            self.transport = transport
93
        else:
94
            self.transport = transport.clone('.git')
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
95
        self._lockfiles = lockfiles
0.200.381 by Jelmer Vernooij
Support working trees properly, status and ls.
96
        self._mode_check_done = None
97
98
    def is_control_filename(self, filename):
99
        return filename == '.git' or filename.startswith('.git/')
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
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.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
106
        raise 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
0.200.320 by Jelmer Vernooij
Handle lightweight checkouts.
111
    def open_branch(self, ignore_fallbacks=None):
0.200.57 by Jelmer Vernooij
Fix more tests.
112
        """'create' a branch for this dir."""
113
        repo = self.open_repository()
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
114
        from bzrlib.plugins.git.branch import LocalGitBranch
115
        return LocalGitBranch(self, repo, "HEAD", self._lockfiles)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
116
117
    def open_repository(self, shared=False):
118
        """'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.
119
        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.
120
0.203.1 by Aaron Bentley
Make checkouts work
121
    def open_workingtree(self, recommend_upgrade=True):
0.200.535 by Jelmer Vernooij
use standard version to check for index.
122
        if not self._git.bare and self._git.has_index():
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
123
            from bzrlib.plugins.git.workingtree import GitWorkingTree
124
            return GitWorkingTree(self, self.open_repository(), 
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
125
                                                  self.open_branch())
0.200.392 by Jelmer Vernooij
Fix some tests now that working trees are supported.
126
        loc = urlutils.unescape_for_display(self.root_transport.base, 'ascii')
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
127
        raise bzr_errors.NoWorkingTree(loc)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
128
0.200.108 by Jelmer Vernooij
Support bzr init --git.
129
    def create_repository(self, shared=False):
130
        return self.open_repository()
0.200.288 by Jelmer Vernooij
Add test for init-repo.
131
132
    def create_branch(self):
133
        return self.open_branch()
0.200.535 by Jelmer Vernooij
use standard version to check for index.
134
135
    def backup_bzrdir(self):
136
        if self._git.bare:
137
            self.root_transport.copy_tree(".git", ".git.backup")
138
            return (self.root_transport.abspath(".git"),
139
                    self.root_transport.abspath(".git.backup"))
140
        else:
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
141
            raise bzr_errors.BzrError("Unable to backup bare repositories")
0.200.535 by Jelmer Vernooij
use standard version to check for index.
142
143
    def create_workingtree(self, revision_id=None, from_branch=None,
144
        accelerator_tree=None, hardlink=False):
145
        if self._git.bare:
0.239.13 by Jelmer Vernooij
Don't break "bzr info -v" when Dulwich is not installed.
146
            raise bzr_errors.BzrError("Can't create working tree in a bare repo")
0.200.535 by Jelmer Vernooij
use standard version to check for index.
147
        from dulwich.index import write_index
0.200.613 by Jelmer Vernooij
Support creating working tree for existing git repo.
148
        from dulwich.pack import SHA1Writer
149
        f = open(self.transport.local_abspath("index"), 'w+')
150
        try:
151
            f = SHA1Writer(f)
152
            write_index(f, [])
153
        finally:
154
            f.close()
0.200.535 by Jelmer Vernooij
use standard version to check for index.
155
        return self.open_workingtree()