78
81
# or already present remotely (as git doesn't do ghosts)
81
def queue(self, sha, obj, path, ie=None, inv=None):
84
def queue(self, sha, obj, path, ie=None, inv=None, unusual_modes=None):
86
obj = (ie, inv, unusual_modes)
84
87
self._pending.append((obj, path))
85
88
self._sent_shas.add(sha)
91
94
inv = self.source.get_inventory(revid)
95
rev = self.source.get_revision(revid)
96
unusual_modes = extract_unusual_modes(rev)
96
(sha, object) = self._object_store._get_ie_object_or_sha1(ie, inv)
101
(sha, object) = self._object_store._get_ie_object_or_sha1(ie, inv, unusual_modes)
97
102
if ie.parent_id is None:
99
104
if not self.need_sha(sha):
101
self.queue(sha, object, inv.id2path(ie.file_id), ie, inv)
106
self.queue(sha, object, inv.id2path(ie.file_id), ie, inv, unusual_modes)
102
107
if ie.kind == "directory":
103
108
todo.extend(ie.children.values())
104
109
assert tree_sha is not None
105
commit = self._object_store._get_commit(revid, tree_sha)
106
self.queue(commit.id, commit, None)
110
commit = self._object_store._get_commit(rev, tree_sha)
111
self.queue(commit.id, commit, None, None)
109
114
def __len__(self):