/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 server.py

Rename converter -> object_store, provide utility function for getting ObjectStore's.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
from bzrlib.bzrdir import BzrDir
18
 
from bzrlib.repository import Repository
19
 
from bzrlib.inventory import InventoryDirectory, InventoryFile
20
 
from bzrlib.osutils import splitpath
21
 
 
22
 
from bzrlib.plugins.git.fetch import import_git_objects
23
 
from bzrlib.plugins.git.mapping import default_mapping, revision_to_commit, inventory_to_tree_and_blobs
24
 
 
25
 
from dulwich.server import Backend
26
 
from dulwich.pack import Pack, PackData, write_pack_index_v2
27
 
from dulwich.objects import ShaFile, Commit, Tree, Blob
28
 
 
29
 
import os, tempfile
30
 
 
 
17
import os
31
18
import stat
32
 
S_IFGITLINK = 0160000
33
 
 
34
 
#S_IFREG | 0664 # *Might* see this; would fail fsck --strict
 
19
import tempfile
 
20
 
 
21
from bzrlib.bzrdir import (
 
22
    BzrDir,
 
23
    )
 
24
from bzrlib.inventory import (
 
25
    InventoryDirectory,
 
26
    InventoryFile,
 
27
    )
 
28
from bzrlib.osutils import (
 
29
    splitpath,
 
30
    )
 
31
from bzrlib.repository import (
 
32
    Repository,
 
33
    )
 
34
 
 
35
from bzrlib.plugins.git.converter import (
 
36
    BazaarObjectStore,
 
37
    )
 
38
from bzrlib.plugins.git.fetch import (
 
39
    import_git_objects,
 
40
    )
 
41
from bzrlib.plugins.git.mapping import (
 
42
    default_mapping,
 
43
    inventory_to_tree_and_blobs,
 
44
    revision_to_commit,
 
45
    )
 
46
 
 
47
from dulwich.server import (
 
48
    Backend,
 
49
    )
 
50
from dulwich.pack import (
 
51
    Pack,
 
52
    PackData,
 
53
    write_pack_index_v2,
 
54
    )
 
55
from dulwich.objects import (
 
56
    Blob,
 
57
    Commit,
 
58
    ShaFile,
 
59
    Tree,
 
60
    )
35
61
 
36
62
 
37
63
class BzrBackend(Backend):
49
75
        for branch in repo.find_branches(using=True):
50
76
            #FIXME: Look for 'master' or 'trunk' in here, and set HEAD accordingly...
51
77
            #FIXME: Need to get branch path relative to its repository and use this instead of nick
52
 
            ret["refs/heads/"+branch.nick] = self.mapping.revision_id_bzr_to_foreign(branch.last_revision())[0]
 
78
            rev, mapping = self.mapping.revision_id_bzr_to_foreign(branch.last_revision())
 
79
            ret["refs/heads/"+branch.nick] = rev
53
80
        if 'HEAD' not in ret and branch:
54
 
            ret['HEAD'] = self.mapping.revision_id_bzr_to_foreign(branch.last_revision())[0]
 
81
            rev, mapping = self.mapping.revision_id_bzr_to_foreign(branch.last_revision())
 
82
            ret['HEAD'] = rev
55
83
        return ret
56
84
 
57
85
    def apply_pack(self, refs, read):
105
133
        repo = Repository.open(self.directory)
106
134
 
107
135
        # If this is a Git repository, just use the existing fetch_objects implementation.
108
 
        if getattr(repo, "fetch_objects", None) is None:
 
136
        if getattr(repo, "fetch_objects", None) is not None:
109
137
            return repo.fetch_objects(determine_wants, graph_walker, None, progress)
 
138
        store = BazaarObjectStore(repo)
110
139
 
111
140
        wants = determine_wants(self.get_refs())
112
141
        commits_to_send = set([self.mapping.revision_id_foreign_to_bzr(w) for w in wants])
113
142
        rev_done = set()
114
143
        obj_sent = set()
115
 
 
116
144
        objects = set()
117
145
 
118
146
        repo.lock_read()
134
162
 
135
163
                commits_to_send.update([p for p in rev.parent_ids if not p in rev_done])
136
164
 
137
 
                for sha, obj, path in inventory_to_tree_and_blobs(repo, self.mapping, commit):
 
165
                for sha, obj, path in inventory_to_tree_and_blobs(repo.get_inventory(commit), repo.texts, self.mapping):
138
166
                    if sha not in obj_sent:
139
167
                        obj_sent.add(sha)
140
168
                        objects.add((obj, path))
141
169
 
142
 
                objects.add((revision_to_commit(rev, sha, self.mapping.revision_id_bzr_to_foreign), None))
 
170
                objects.add((revision_to_commit(rev, sha, store._lookup_revision_sha1), None))
143
171
 
144
172
        finally:
145
173
            repo.unlock()