/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

Use BazaarObjectStore to find matching SHA1s for bzr revisions.

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
 
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
    )
 
61
 
32
62
S_IFGITLINK = 0160000
33
63
 
34
64
#S_IFREG | 0664 # *Might* see this; would fail fsck --strict
49
79
        for branch in repo.find_branches(using=True):
50
80
            #FIXME: Look for 'master' or 'trunk' in here, and set HEAD accordingly...
51
81
            #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]
 
82
            rev, mapping = self.mapping.revision_id_bzr_to_foreign(branch.last_revision())
 
83
            ret["refs/heads/"+branch.nick] = rev
53
84
        if 'HEAD' not in ret and branch:
54
 
            ret['HEAD'] = self.mapping.revision_id_bzr_to_foreign(branch.last_revision())[0]
 
85
            rev, mapping = self.mapping.revision_id_bzr_to_foreign(branch.last_revision())
 
86
            ret['HEAD'] = rev
55
87
        return ret
56
88
 
57
89
    def apply_pack(self, refs, read):
105
137
        repo = Repository.open(self.directory)
106
138
 
107
139
        # If this is a Git repository, just use the existing fetch_objects implementation.
108
 
        if getattr(repo, "fetch_objects", None) is None:
 
140
        if getattr(repo, "fetch_objects", None) is not None:
109
141
            return repo.fetch_objects(determine_wants, graph_walker, None, progress)
 
142
        store = BazaarObjectStore(repo)
110
143
 
111
144
        wants = determine_wants(self.get_refs())
112
145
        commits_to_send = set([self.mapping.revision_id_foreign_to_bzr(w) for w in wants])
134
167
 
135
168
                commits_to_send.update([p for p in rev.parent_ids if not p in rev_done])
136
169
 
137
 
                for sha, obj, path in inventory_to_tree_and_blobs(repo, self.mapping, commit):
 
170
                for sha, obj, path in inventory_to_tree_and_blobs(repo.get_inventory(commit), repo.texts, self.mapping):
138
171
                    if sha not in obj_sent:
139
172
                        obj_sent.add(sha)
140
173
                        objects.add((obj, path))
141
174
 
142
 
                objects.add((revision_to_commit(rev, sha, self.mapping.revision_id_bzr_to_foreign), None))
 
175
                objects.add((revision_to_commit(rev, sha, store._lookup_revision_sha1), None))
143
176
 
144
177
        finally:
145
178
            repo.unlock()