164
167
fileid_map = dict(basis_tree._fileid_map.file_ids)
165
168
except AttributeError:
167
for path, file_id in self._override_fileids.iteritems():
168
if type(path) is not str:
170
for path, file_id in viewitems(self._override_fileids):
171
if not isinstance(path, bytes):
169
172
raise TypeError(path)
170
173
if file_id is None:
171
174
if path in fileid_map:
172
175
del fileid_map[path]
174
if type(file_id) is not str:
177
if not isinstance(file_id, bytes):
175
178
raise TypeError(file_id)
176
179
fileid_map[path] = file_id
194
197
def finish_inventory(self):
195
198
# eliminate blobs that were removed
196
for path, entry in iter(self._blobs.items()):
198
del self._blobs[path]
199
self._blobs = {k: v for (k, v) in viewitems(self._blobs) if v is not None}
200
201
def _iterblobs(self):
201
return ((path, sha, mode) for (path, (mode, sha)) in self._blobs.iteritems())
202
return ((path, sha, mode) for (path, (mode, sha)) in viewitems(self._blobs))
203
204
def commit(self, message):
204
205
self._validate_unicode_text(message, 'commit message')
206
207
c.parents = [self.repository.lookup_bzr_revision_id(revid)[0] for revid in self.parents]
207
208
c.tree = commit_tree(self.store, self._iterblobs())
208
c.encoding = self._revprops.pop(u'git-explicit-encoding', 'utf-8')
209
c.committer = fix_person_identifier(self._committer.encode(c.encoding))
210
c.author = fix_person_identifier(self._revprops.pop('author', self._committer).encode(c.encoding))
209
encoding = self._revprops.pop(u'git-explicit-encoding', 'utf-8')
210
c.encoding = encoding.encode('ascii')
211
c.committer = fix_person_identifier(self._committer.encode(encoding))
212
c.author = fix_person_identifier(self._revprops.pop('author', self._committer).encode(encoding))
211
213
if self._revprops:
212
214
raise NotImplementedError(self._revprops)
213
215
c.commit_time = int(self._timestamp)
214
216
c.author_time = int(self._timestamp)
215
217
c.commit_timezone = self._timezone
216
218
c.author_timezone = self._timezone
217
c.message = message.encode(c.encoding)
219
c.message = message.encode(encoding)
218
220
if self._config_stack.get('create_signatures') == _mod_config.SIGN_ALWAYS:
219
221
strategy = gpg.GPGStrategy(self._config_stack)
220
222
c.gpgsig = strategy.sign(c.as_raw_string(), gpg.MODE_DETACH)