def test_no_signature_rejected(self): # An unsigned changes file is rejected. path = datadir('signatures/unsigned.changes') changesfile = ChangesFile(path, InsecureUploadPolicy(), BufferLogger()) errors = list(changesfile.parseChanges()) self.assertIsInstance(errors[0], UploadError) self.assertEqual(1, len(errors))
def createChangesFile(self, filename, changes): tempdir = self.makeTemporaryDirectory() path = os.path.join(tempdir, filename) with open(path, "w") as changes_fd: changes.dump(changes_fd) changesfile = ChangesFile(path, self.policy, self.logger) self.assertEqual([], list(changesfile.parseChanges())) return changesfile
def createChangesFile(self, filename, changes): tempdir = self.makeTemporaryDirectory() path = os.path.join(tempdir, filename) changes_fd = open(path, "w") try: changes.dump(changes_fd) finally: changes_fd.close() changesfile = ChangesFile(path, self.policy, self.logger) for error in changesfile.parseChanges(): raise error return changesfile
def test_valid_signature_accepted(self): # A correctly signed changes file is accepted, and all its # content is parsed. path = datadir('signatures/signed.changes') changesfile = ChangesFile(path, InsecureUploadPolicy(), BufferLogger()) self.assertEqual([], list(changesfile.parseChanges())) self.assertEqual( getUtility(IPersonSet).getByEmail('*****@*****.**'), changesfile.signer) expected = "\AFormat: 1.7\n.*foo_1.0-1.diff.gz\Z" self.assertTextMatchesExpressionIgnoreWhitespace( expected, changesfile.parsed_content)
def test_prefix_ignored(self): # A signed changes file with an unsigned prefix has only the # signed part parsed. path = datadir('signatures/prefixed.changes') changesfile = ChangesFile(path, InsecureUploadPolicy(), BufferLogger()) self.assertEqual([], list(changesfile.parseChanges())) self.assertEqual( getUtility(IPersonSet).getByEmail('*****@*****.**'), changesfile.signer) expected = "\AFormat: 1.7\n.*foo_1.0-1.diff.gz\Z" self.assertTextMatchesExpressionIgnoreWhitespace( expected, changesfile.parsed_content) self.assertEqual("breezy", changesfile.suite_name) self.assertNotIn("evil", changesfile.changes_comment)
def createChangesFile(self, filename, changes): tempdir = self.makeTemporaryDirectory() path = os.path.join(tempdir, filename) changes_fd = open(path, "w") try: changes.dump(changes_fd) finally: changes_fd.close() return ChangesFile(path, self.policy, self.logger)
def from_changesfile_path(cls, changesfile_path, policy, logger): """Create a NascentUpload from the given changesfile path. May raise UploadError due to unrecoverable problems building the ChangesFile object. :param changesfile_path: path to the changesfile to be uploaded. :param policy: the upload policy to be used. :param logger: the logger to be used. """ changesfile = ChangesFile(changesfile_path, policy, logger) return cls(changesfile, policy, logger)
def fetch_information(spr, bprs, changes, previous_version=None): changedby = None changedby_displayname = None maintainer = None maintainer_displayname = None if changes: changesfile = ChangesFile.formatChangesComment( sanitize_string(changes.get('Changes'))) date = changes.get('Date') changedby = sanitize_string(changes.get('Changed-By')) maintainer = sanitize_string(changes.get('Maintainer')) changedby_displayname = changedby maintainer_displayname = maintainer elif spr or bprs: if not spr and bprs: spr = bprs[0].build.source_package_release changesfile = spr.aggregate_changelog(previous_version) date = spr.dateuploaded changedby = person_to_email(spr.creator) maintainer = person_to_email(spr.maintainer) if changedby: addr = formataddr( (spr.creator.displayname, spr.creator.preferredemail.email)) changedby_displayname = sanitize_string(addr) if maintainer: addr = formataddr((spr.maintainer.displayname, spr.maintainer.preferredemail.email)) maintainer_displayname = sanitize_string(addr) else: changesfile = date = None return { 'changelog': changesfile, 'date': date, 'changedby': changedby, 'changedby_displayname': changedby_displayname, 'maintainer': maintainer, 'maintainer_displayname': maintainer_displayname, }
def fetch_information(spr, bprs, changes, previous_version=None): changedby = None changedby_displayname = None maintainer = None maintainer_displayname = None if changes: changesfile = ChangesFile.formatChangesComment( sanitize_string(changes.get('Changes'))) date = changes.get('Date') changedby = sanitize_string(changes.get('Changed-By')) maintainer = sanitize_string(changes.get('Maintainer')) changedby_displayname = changedby maintainer_displayname = maintainer elif spr or bprs: if not spr and bprs: spr = bprs[0].build.source_package_release changesfile = spr.aggregate_changelog(previous_version) date = spr.dateuploaded changedby = person_to_email(spr.creator) maintainer = person_to_email(spr.maintainer) if changedby: addr = formataddr((spr.creator.displayname, spr.creator.preferredemail.email)) changedby_displayname = sanitize_string(addr) if maintainer: addr = formataddr((spr.maintainer.displayname, spr.maintainer.preferredemail.email)) maintainer_displayname = sanitize_string(addr) else: changesfile = date = None return { 'changelog': changesfile, 'date': date, 'changedby': changedby, 'changedby_displayname': changedby_displayname, 'maintainer': maintainer, 'maintainer_displayname': maintainer_displayname, }
def fetch_information(spr, bprs, changes, previous_version=None): changelog = date = changedby = maintainer = None notify_changed_by = False if changes: changelog = ChangesFile.formatChangesComment( sanitize_string(changes.get('Changes'))) date = changes.get('Date') try: changedby = parse_maintainer_bytes(changes.get('Changed-By'), 'Changed-By') except ParseMaintError: pass try: maintainer = parse_maintainer_bytes(changes.get('Maintainer'), 'Maintainer') except ParseMaintError: pass notify_changed_by = changes.get('Launchpad-Notify-Changed-By', '') == 'yes' elif spr or bprs: if not spr and bprs: spr = bprs[0].build.source_package_release changelog = spr.aggregate_changelog(previous_version) date = spr.dateuploaded if spr.creator and spr.creator.preferredemail: changedby = (spr.creator.displayname, spr.creator.preferredemail.email) if spr.maintainer and spr.maintainer.preferredemail: maintainer = (spr.maintainer.displayname, spr.maintainer.preferredemail.email) return { 'changelog': changelog, 'date': date, 'changedby': changedby, 'maintainer': maintainer, 'notify_changed_by': notify_changed_by, }
def createChangesFile(self, filename, changes): tempdir = self.makeTemporaryDirectory() path = os.path.join(tempdir, filename) with open(path, "w") as changes_fd: changes.dump(changes_fd) return ChangesFile(path, self.policy, self.logger)