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)
Exemple #6
0
 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)
Exemple #7
0
    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,
        }
Exemple #10
0
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)