예제 #1
0
def rebuild(location, upload, sdk_source_dir, hashtag,
        package_overrides={}, filename=None, pingback=None, post=None,
        **kwargs):
    """creates a Repackage instance, downloads xpi and rebuilds it

    :params:
        * location (String) location of the file to download rebuild ``XPI``
        * sdk_source_dir (String) absolute path of the SDK
        * hashtag (String) filename for the buid XPI
        * package_overrides (dict) override original ``package.json`` fields
        * filename (String) desired filename for the downloaded ``XPI``
        * pingback (String) URL to pass the result
        * post (String) urlified ``request.POST``
        * kwargs is just collecting the task decorator overhead

    :returns: (list) ``cfx xpi`` response where ``[0]`` is ``stdout`` and
              ``[1]`` ``stderr``
    """
    rep = Repackage()
    if location:
        log.info("[%s] Starting package rebuild... (%s)" % (hashtag, location))
        rep.download(location)
        log.debug("[%s] XPI file downloaded (%s)" % (hashtag, location))
        if not filename:
            filename = '.'.join(
                os.path.basename(urlparse(location).path).split('.')[0:-1])

    elif upload:
        log.info("[%s] Starting package rebuild from upload" % hashtag)
        rep.retrieve(upload)
        log.debug("[%s] XPI file retrieved from upload" % hashtag)
        if not filename:
            filename = '.'.join(upload.name.split('.')[0:-1])

    else:
        log.error("[%s] No location or upload provided" % hashtag)
        raise ValueError("No location or upload provided")

    response = rep.rebuild(sdk_source_dir, hashtag, package_overrides)
    log.debug('[%s] Response from rebuild: %s' % (hashtag, str(response)))

    if pingback:
        data = {
            'id': rep.manifest['id'],
            'secret': settings.AMO_SECRET_KEY,
            'result': 'success' if not response[1] else 'failure',
            'msg': response[1] or response[0],
            'location': "%s%s" % (settings.SITE_URL,
                reverse('jp_download_xpi', args=[hashtag, filename]))}
        if post:
            data['request'] = post
        log.debug('[%s] Pingback: %s' % (hashtag, pingback))
        urllib.urlopen(pingback, data=urllib.urlencode(data))
    log.info("[%s] Finished package rebuild." % hashtag)
    return response
예제 #2
0
 def test_forcing_version(self):
     for sample in self.sample_addons:
         rep = Repackage()
         rep.download(os.path.join(self.xpi_file_prefix, sample))
         rep.get_manifest({'version': 'force.version'})
     eq_(rep.manifest['version'], 'force.version')
예제 #3
0
 def test_repackage(self):
     for sample in self.sample_addons:
         rep = Repackage()
         rep.download(os.path.join(self.xpi_file_prefix, sample))
         response = rep.rebuild(self.sdk_source_dir, self.hashtag)
         assert not response[1]