888
888
def store_revision_signature(self, gpg_strategy, plaintext, revision_id):
889
889
with self.lock_write():
890
signature = gpg_strategy.sign(plaintext)
890
signature = gpg_strategy.sign(plaintext, gpg.MODE_CLEAR)
891
891
self.add_signature_text(revision_id, signature)
893
893
def add_signature_text(self, revision_id, signature):
1104
1104
return gpg.SIGNATURE_NOT_SIGNED, None
1105
1105
signature = self.get_signature_text(revision_id)
1107
testament = _mod_testament.Testament.from_revision(
1109
plaintext = testament.as_short_text()
1107
testament = _mod_testament.Testament.from_revision(self, revision_id)
1111
return gpg_strategy.verify(signature, plaintext)
1109
(status, key, signed_plaintext) = gpg_strategy.verify(signature)
1110
if testament.as_short_text() != signed_plaintext:
1111
return gpg.SIGNATURE_NOT_VALID, None
1112
return (status, key)
1113
1114
def verify_revision_signatures(self, revision_ids, gpg_strategy):
1114
1115
"""Verify revision signatures for a number of revisions.
1579
1580
:param to_convert: The disk object to convert.
1580
1581
:param pb: a progress bar to use for progress information.
1582
pb = ui.ui_factory.nested_progress_bar()
1585
# this is only useful with metadir layouts - separated repo content.
1586
# trigger an assertion if not such
1587
repo._format.get_format_string()
1588
self.repo_dir = repo.controldir
1589
pb.update(gettext('Moving repository to repository.backup'))
1590
self.repo_dir.transport.move('repository', 'repository.backup')
1591
backup_transport = self.repo_dir.transport.clone('repository.backup')
1592
repo._format.check_conversion_target(self.target_format)
1593
self.source_repo = repo._format.open(self.repo_dir,
1595
_override_transport=backup_transport)
1596
pb.update(gettext('Creating new repository'))
1597
converted = self.target_format.initialize(self.repo_dir,
1598
self.source_repo.is_shared())
1599
converted.lock_write()
1601
pb.update(gettext('Copying content'))
1602
self.source_repo.copy_content_into(converted)
1605
pb.update(gettext('Deleting old repository content'))
1606
self.repo_dir.transport.delete_tree('repository.backup')
1607
ui.ui_factory.note(gettext('repository converted'))
1583
with ui.ui_factory.nested_progress_bar() as pb:
1586
# this is only useful with metadir layouts - separated repo content.
1587
# trigger an assertion if not such
1588
repo._format.get_format_string()
1589
self.repo_dir = repo.controldir
1590
pb.update(gettext('Moving repository to repository.backup'))
1591
self.repo_dir.transport.move('repository', 'repository.backup')
1592
backup_transport = self.repo_dir.transport.clone('repository.backup')
1593
repo._format.check_conversion_target(self.target_format)
1594
self.source_repo = repo._format.open(self.repo_dir,
1596
_override_transport=backup_transport)
1597
pb.update(gettext('Creating new repository'))
1598
converted = self.target_format.initialize(self.repo_dir,
1599
self.source_repo.is_shared())
1600
converted.lock_write()
1602
pb.update(gettext('Copying content'))
1603
self.source_repo.copy_content_into(converted)
1606
pb.update(gettext('Deleting old repository content'))
1607
self.repo_dir.transport.delete_tree('repository.backup')
1608
ui.ui_factory.note(gettext('repository converted'))
1611
1611
def _strip_NULL_ghosts(revision_graph):