/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to dir.py

  • Committer: Andrew Bennetts
  • Date: 2009-10-21 11:13:40 UTC
  • mto: This revision was merged to the branch mainline in revision 4762.
  • Revision ID: andrew.bennetts@canonical.com-20091021111340-w7x4d5yf83qwjncc
Add test that WSGI glue allows request handlers to access paths above that request's. backing transport, so long as it is within the WSGI app's backing transport.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
 
19
 
import os
20
 
 
21
 
import bzrlib
22
 
from bzrlib import (
23
 
    bzrdir,
24
 
    lockable_files,
25
 
    urlutils,
26
 
    )
27
 
 
28
 
LockWarner = getattr(lockable_files, "_LockWarner", None)
29
 
 
30
 
from bzrlib.plugins.git import (
31
 
    LocalGitBzrDirFormat,
32
 
    branch,
33
 
    errors,
34
 
    get_rich_root_format,
35
 
    repository,
36
 
    workingtree,
37
 
    )
38
 
 
39
 
 
40
 
class GitLock(object):
41
 
    """A lock that thunks through to Git."""
42
 
 
43
 
    def lock_write(self, token=None):
44
 
        pass
45
 
 
46
 
    def lock_read(self):
47
 
        pass
48
 
 
49
 
    def unlock(self):
50
 
        pass
51
 
 
52
 
    def peek(self):
53
 
        pass
54
 
 
55
 
    def validate_token(self, token):
56
 
        pass
57
 
 
58
 
 
59
 
class GitLockableFiles(lockable_files.LockableFiles):
60
 
    """Git specific lockable files abstraction."""
61
 
 
62
 
    def __init__(self, transport, lock):
63
 
        self._lock = lock
64
 
        self._transaction = None
65
 
        self._lock_mode = None
66
 
        self._transport = transport
67
 
        if LockWarner is None:
68
 
            # Bzr 1.13
69
 
            self._lock_count = 0
70
 
        else:
71
 
            self._lock_warner = LockWarner(repr(self))
72
 
 
73
 
 
74
 
class GitDir(bzrdir.BzrDir):
75
 
    """An adapter to the '.git' dir used by git."""
76
 
 
77
 
    def is_supported(self):
78
 
        return True
79
 
 
80
 
    def cloning_metadir(self, stacked=False):
81
 
        return get_rich_root_format(stacked)
82
 
 
83
 
 
84
 
class LocalGitDir(GitDir):
85
 
    """An adapter to the '.git' dir used by git."""
86
 
 
87
 
    _gitrepository_class = repository.LocalGitRepository
88
 
 
89
 
    def __init__(self, transport, lockfiles, gitrepo, format):
90
 
        self._format = format
91
 
        self.root_transport = transport
92
 
        self._git = gitrepo
93
 
        if gitrepo.bare:
94
 
            self.transport = transport
95
 
        else:
96
 
            self.transport = transport.clone('.git')
97
 
        self._lockfiles = lockfiles
98
 
        self._mode_check_done = None
99
 
 
100
 
    def is_control_filename(self, filename):
101
 
        return filename == '.git' or filename.startswith('.git/')
102
 
 
103
 
    def get_branch_transport(self, branch_format):
104
 
        if branch_format is None:
105
 
            return self.transport
106
 
        if isinstance(branch_format, LocalGitBzrDirFormat):
107
 
            return self.transport
108
 
        raise errors.bzr_errors.IncompatibleFormat(branch_format, self._format)
109
 
 
110
 
    get_repository_transport = get_branch_transport
111
 
    get_workingtree_transport = get_branch_transport
112
 
 
113
 
    def open_branch(self, ignore_fallbacks=None):
114
 
        """'create' a branch for this dir."""
115
 
        repo = self.open_repository()
116
 
        return branch.LocalGitBranch(self, repo, "HEAD", repo._git.head(),
117
 
            self._lockfiles)
118
 
 
119
 
    def open_repository(self, shared=False):
120
 
        """'open' a repository for this dir."""
121
 
        return self._gitrepository_class(self, self._lockfiles)
122
 
 
123
 
    def open_workingtree(self, recommend_upgrade=True):
124
 
        if (not self._git.bare and 
125
 
            os.path.exists(os.path.join(self._git.controldir(), "index"))):
126
 
            return workingtree.GitWorkingTree(self, self.open_repository(), 
127
 
                                                  self.open_branch())
128
 
        loc = urlutils.unescape_for_display(self.root_transport.base, 'ascii')
129
 
        raise errors.bzr_errors.NoWorkingTree(loc)
130
 
 
131
 
    def create_repository(self, shared=False):
132
 
        return self.open_repository()
133
 
 
134
 
    def create_branch(self):
135
 
        return self.open_branch()