Skip to content

Commit

Permalink
Merge pull request mozilla#177 from zalun/bug_818125-add_sdk_1.12
Browse files Browse the repository at this point in the history
Fixes Bug 818125
  • Loading branch information
seanmonstar committed Dec 11, 2012
2 parents 4882b6b + 267a41c commit e242946
Show file tree
Hide file tree
Showing 8 changed files with 155 additions and 82 deletions.
117 changes: 67 additions & 50 deletions apps/jetpack/management/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,44 +204,53 @@ def _create_lib(author, manifest, full_name, name, id_number, version):
return revision


def update_SDK(sdk_dir_name, options=None, version=None):
def update_SDK(sdk_dir_name, options=None, version=None, should_import=False):
" add new jetpack-core revision "

check_SDK_dir(sdk_dir_name)

sdk_source = os.path.join(settings.SDK_SOURCE_DIR, sdk_dir_name)

core_author = get_or_create_core_author()
core_manifest, core_name, core_fullname = get_core_manifest(sdk_source)

core = Package.objects.get(id_number=settings.MINIMUM_PACKAGE_ID)
core.name = core_name
core.full_name = core_fullname
core.save()
# default values for SDK >= 1.12
core_manifest = {}
core_revision = None
kit_manifest = None
kit_revision = None

if not version:
version = core_manifest['version']

core_revision = _update_lib(core, core_author, core_manifest, version)
add_core_modules(sdk_source, core_revision, core_author, core_name)
add_core_attachments(sdk_source, sdk_dir_name, core_revision, core_author,
core_name)

kit_name = 'addon-kit'
kit_manifest = get_manifest(sdk_source, core_name=kit_name)
if kit_manifest:
try:
kit = Package.objects.get(
id_number=settings.MINIMUM_PACKAGE_ID - 1)
kit_revision = _update_lib(kit, core_author, kit_manifest, version)
except Exception: # TODO: be precise
kit_revision = _create_lib(
core_author, kit_manifest, 'Addon Kit', kit_name,
settings.MINIMUM_PACKAGE_ID - 1, version)
# import code
if should_import:
core_manifest, core_name, core_fullname = get_core_manifest(sdk_source)

core = Package.objects.get(id_number=settings.MINIMUM_PACKAGE_ID)
core.name = core_name
core.full_name = core_fullname
core.save()

add_core_modules(sdk_source, kit_revision, core_author, kit_name)
add_core_attachments(sdk_source, sdk_dir_name, kit_revision,
core_author, kit_name)
if not version:
version = core_manifest['version']

core_revision = _update_lib(core, core_author, core_manifest, version)
add_core_modules(sdk_source, core_revision, core_author, core_name)
add_core_attachments(sdk_source, sdk_dir_name, core_revision, core_author,
core_name)

kit_name = 'addon-kit'
kit_manifest = get_manifest(sdk_source, core_name=kit_name)
if kit_manifest:
try:
kit = Package.objects.get(
id_number=settings.MINIMUM_PACKAGE_ID - 1)
kit_revision = _update_lib(kit, core_author, kit_manifest, version)
except Exception: # TODO: be precise
kit_revision = _create_lib(
core_author, kit_manifest, 'Addon Kit', kit_name,
settings.MINIMUM_PACKAGE_ID - 1, version)

add_core_modules(sdk_source, kit_revision, core_author, kit_name)
add_core_attachments(sdk_source, sdk_dir_name, kit_revision,
core_author, kit_name)

# create SDK
sdk = SDK.objects.create(
Expand All @@ -253,35 +262,43 @@ def update_SDK(sdk_dir_name, options=None, version=None):
)


def create_SDK(sdk_dir_name, options=None, version=None):
def create_SDK(sdk_dir_name, options=None, version=None, should_import=None):
" create first jetpack-core revision "
print "creating core"

check_SDK_dir(sdk_dir_name)

sdk_source = os.path.join(settings.SDK_SOURCE_DIR, sdk_dir_name)
core_author = get_or_create_core_author()
core_manifest, core_name, core_fullname = get_core_manifest(sdk_source)

if not version:
version = core_manifest['version']

core_revision = _create_lib(
core_author, core_manifest, core_fullname, core_name,
settings.MINIMUM_PACKAGE_ID, version)
add_core_modules(sdk_source, core_revision, core_author, core_name)
add_core_attachments(sdk_source, sdk_dir_name, core_revision, core_author,
core_name)

kit_name = 'addon-kit'
kit_manifest = get_manifest(sdk_source, core_name=kit_name)
if kit_manifest:
kit_revision = _create_lib(
core_author, kit_manifest, 'Addon Kit', 'addon-kit',
settings.MINIMUM_PACKAGE_ID - 1, version)
add_core_modules(sdk_source, kit_revision, core_author, kit_name)
add_core_attachments(sdk_source, sdk_dir_name, kit_revision,
core_author, kit_name)

# default values for SDK >= 1.12
core_manifest = {}
core_revision = None
kit_manifest = None
kit_revision = None

if should_import:
core_manifest, core_name, core_fullname = get_core_manifest(sdk_source)

if not version:
version = core_manifest['version']

core_revision = _create_lib(
core_author, core_manifest, core_fullname, core_name,
settings.MINIMUM_PACKAGE_ID, version)
add_core_modules(sdk_source, core_revision, core_author, core_name)
add_core_attachments(sdk_source, sdk_dir_name, core_revision, core_author,
core_name)

kit_name = 'addon-kit'
kit_manifest = get_manifest(sdk_source, core_name=kit_name)
if kit_manifest:
kit_revision = _create_lib(
core_author, kit_manifest, 'Addon Kit', 'addon-kit',
settings.MINIMUM_PACKAGE_ID - 1, version)
add_core_modules(sdk_source, kit_revision, core_author, kit_name)
add_core_attachments(sdk_source, sdk_dir_name, kit_revision,
core_author, kit_name)

# create SDK
sdk = SDK.objects.create(
Expand Down
19 changes: 14 additions & 5 deletions apps/jetpack/management/commands/add_core_lib.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from optparse import make_option
from optparse import make_option, OptionParser

from django.core.management.base import BaseCommand
from jetpack.management import create_SDK, update_SDK
Expand All @@ -15,11 +15,20 @@ class Command(BaseCommand):
make_option('--useversion',
dest="version",
default=None,
help="Version string to show in Builder"),)
help="Version string to show in Builder"),
make_option('-i', '--import',
dest='should_import',
action='store_true',
default=False,
help="Import code to Builder"),
)

def handle(self, sdk_dir_name, options=None, version=None, *args, **kwargs):
def handle(self, sdk_dir_name, options=None, version=None,
should_import=False, *args, **kwargs):
if SDK.objects.count() > 0:
update_SDK(sdk_dir_name, options=options, version=version)
update_SDK(sdk_dir_name, options=options, version=version,
should_import=should_import)
else:
create_SDK(sdk_dir_name, options=options, version=version)
create_SDK(sdk_dir_name, options=options, version=version,
should_import=should_import)
print "SDK instances created"
6 changes: 3 additions & 3 deletions apps/jetpack/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,8 @@ def make_dir(self, packages_dir):
"""
package_dir = self.get_dir_name(packages_dir)
if not os.path.isdir(package_dir):
os.mkdir(package_dir)
# makedirs as SDK 1.12 doesn't have the packages directory
os.makedirs(package_dir)
else:
return False

Expand Down Expand Up @@ -1466,7 +1467,6 @@ def build_xpi(self, modules=None, attachments=None, hashtag=None,
log.debug("[xpi:%s] SDK %s copied from %s (time %dms)" % (
hashtag, sdk.version, sdk_source, t1))


packages_dir = os.path.join(sdk_dir, 'packages')
package_dir = self.make_dir(packages_dir)
# XPI: create manifest (from memory to local)
Expand Down Expand Up @@ -2514,7 +2514,7 @@ class SDK(BaseModel):
# It has to be accompanied with a core library
# needs to exist before SDK is created
core_lib = models.OneToOneField(PackageRevision,
related_name="parent_sdk_core+")
related_name="parent_sdk_core+", blank=True, null=True)
kit_lib = models.OneToOneField(PackageRevision,
related_name="parent_sdk_kit+", blank=True, null=True)
#core_name = models.CharField(max_length=100, default='jetpack-core')
Expand Down
62 changes: 42 additions & 20 deletions apps/jetpack/templates/addon_edit.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,48 @@

{% block core_library %}
{% if revision.sdk %}
<li class="UI_File_Normal Core_library"
id="core_library_lib"
title="{{ revision.get_sdk_revision().package.full_name }}"
data-id-number="{{ revision.get_sdk_revision().package.name }}">
<a class="expand" href="#"></a>
<div class="holder">
<a href="{{ revision.get_sdk_revision().get_absolute_url() }}" target="_blank">
<span class="label">{{ revision.get_sdk_revision().package.full_name }}</span>
</a>
<span class="icon"></span>
<select id="jetpack_core_sdk_version">
{% for s in sdk_list %}
<option value="{{ s.id }}" {% if s.is_deprecated() %}disabled{% endif %}
{% if revision.sdk.id == s.id %} selected{% endif %}>
{{ s.version }}
</option>
{% endfor %}
</select>
</div>
</li>
{% if revision.get_sdk_revision() %}
<li class="UI_File_Normal Core_library"
id="core_library_lib"
title="{{ revision.get_sdk_revision().package.full_name }}"
data-id-number="{{ revision.get_sdk_revision().package.name }}">
<a class="expand" href="#"></a>
<div class="holder">
<a href="{{ revision.get_sdk_revision().get_absolute_url() }}" target="_blank">
<span class="label">{{ revision.get_sdk_revision().package.full_name }}</span>
</a>
<span class="icon"></span>
<select id="jetpack_core_sdk_version">
{% for s in sdk_list %}
<option value="{{ s.id }}" {% if s.is_deprecated() %}disabled{% endif %}
{% if revision.sdk.id == s.id %} selected{% endif %}>
{{ s.version }}
</option>
{% endfor %}
</select>
</div>
</li>
{% else %}
<li class="UI_File_Normal Core_library"
id="core_library_lib"
title="SDK">
<a class="expand" href="#"></a>
<div class="holder">
<a href="#">
<span class="label">SDK</span>
</a>
<span class="icon"></span>
<select id="jetpack_core_sdk_version">
{% for s in sdk_list %}
<option value="{{ s.id }}" {% if s.is_deprecated() %}disabled{% endif %}
{% if revision.sdk.id == s.id %} selected{% endif %}>
{{ s.version }}
</option>
{% endfor %}
</select>
</div>
</li>
{% endif %}
{% endif %}
{% endblock %}

Expand Down
4 changes: 2 additions & 2 deletions apps/jetpack/templates/json/sdk_switched.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
{% include "json/_edit_urls.json" %}
"message_title": "Success",
"message": "Switched to Add-on Kit {{ sdk.version }}",
"lib_name": "{{ sdk_lib.full_name }}",
"lib_url": "{{ sdk_lib.get_absolute_url() }}"
"lib_name": "{% if sdk_lib %}{{ sdk_lib.full_name }}{% else %}SDK{% endif %}",
"lib_url": "{% if sdk_lib %}{{ sdk_lib.get_absolute_url() }}{% else %}#{% endif %}"
}
9 changes: 7 additions & 2 deletions apps/jetpack/tests/revision_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@

from jetpack.tasks import calculate_activity_rating
from jetpack.models import Package, PackageRevision, Module, Attachment, SDK
from jetpack.errors import SelfDependencyException, FilenameExistException, \
DependencyException
from jetpack.errors import (SelfDependencyException, FilenameExistException,
DependencyException)

from utils import validator

Expand Down Expand Up @@ -522,6 +522,11 @@ def test_zip_lib(self):
self.library.latest.zip_source(hashtag=self.hashtag)
assert os.path.isfile(self.zip_file)

def test_create_package_with_no_libs_in_sdk(self):
sdk = SDK.objects.create(version='1.12', dir='addon-sdk-1.12')
package = Package.objects.create(author=self.author, type='a')
eq_(package.latest.sdk.id, sdk.id)


"""
Althought not supported on view and front-end,
Expand Down
19 changes: 19 additions & 0 deletions apps/xpi/tests/test_building.py
Original file line number Diff line number Diff line change
Expand Up @@ -489,3 +489,22 @@ def test_components_classes(self):
assert response[1]
assert not os.path.isfile('%s.xpi' % self.target_basename)
assert os.path.exists('%s.json' % self.target_basename)

def test_building_xpi_with_1_12(self):
sdk = SDK.objects.create(version='1.12', dir='addon-sdk-1.12')
package = Package.objects.create(author=self.author, type='a')

tstart = time.time()
xpi_utils.sdk_copy(self.addonrev.sdk.get_source_dir(), self.SDKDIR)
package.latest.export_keys(self.SDKDIR)
package.latest.export_files_with_dependencies(
'%s/packages' % self.SDKDIR)
err = xpi_utils.build(
self.SDKDIR,
package.latest.get_dir_name('%s/packages' % self.SDKDIR),
package.name, self.hashtag, tstart=tstart)
# assert no error output
assert not err[1]
# assert xpi was created
assert os.path.isfile('%s.xpi' % self.target_basename)
assert os.path.isfile('%s.json' % self.target_basename)
1 change: 1 addition & 0 deletions migrations/033-sdk_core_lib_NULL.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE jetpack_sdk CHANGE core_lib_id core_lib_id INT;

0 comments on commit e242946

Please sign in to comment.