Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge branch 'master' into development
Browse files Browse the repository at this point in the history
  • Loading branch information
Fred Wenzel committed Feb 28, 2011
2 parents 73b40bc + b39e6ad commit d7051d9
Show file tree
Hide file tree
Showing 16 changed files with 135 additions and 66 deletions.
66 changes: 42 additions & 24 deletions apps/themes/cron.py
Expand Up @@ -8,8 +8,9 @@
from textcluster import Corpus, search

from feedback.models import Opinion
from input import (PRODUCT_USAGE, LATEST_BETAS, OPINION_PRAISE, OPINION_ISSUE,
OPINION_IDEA, PLATFORM_USAGE)
from input import (CHANNEL_USAGE, PLATFORM_USAGE, PRODUCT_USAGE,
LATEST_BETAS, LATEST_RELEASE, OPINION_PRAISE,
OPINION_ISSUE, OPINION_IDEA)
from themes.models import Theme, Item

SIM_THRESHOLD = settings.CLUSTER_SIM_THRESHOLD
Expand Down Expand Up @@ -49,39 +50,56 @@ def cluster():

base_qs = Opinion.objects.filter(locale='en-US', created__gte=week_ago)
log.debug('Beginning clustering')
cluster_by_product(base_qs)
cluster_by_product_and_channel(base_qs)


def cluster_by_product(qs):
for prod in PRODUCT_USAGE:
log.debug('Clustering %s(%s)' %
(unicode(prod.pretty), LATEST_BETAS[prod]))
qs_product = qs.filter(product=prod.id, version=LATEST_BETAS[prod])
cluster_by_feeling(qs_product, prod)
def cluster_by_product_and_channel(qs):
def get_version(channel, prod):
return LATEST_BETAS[prod] if channel == 'beta' else LATEST_RELEASE[prod]

for channel in CHANNEL_USAGE:
for prod in PRODUCT_USAGE:
version = get_version(channel.short, prod)
log.debug('Clustering %s (%s: %s)' %
(unicode(prod.pretty), channel.short, version))
qs_product = qs.filter(product=prod.id, version=version)
cluster_by_feeling(qs_product, channel.short, prod)

def cluster_by_feeling(qs, prod):
happy = qs.filter(type=OPINION_PRAISE.id)
sad = qs.filter(type=OPINION_ISSUE.id)
ideas = qs.filter(type=OPINION_IDEA.id)
cluster_by_platform(happy, prod, 'happy')
cluster_by_platform(sad, prod, 'sad')
cluster_by_platform(ideas, prod, 'ideas')

def cluster_by_feeling(qs, channel, prod):
"""Cluster all products by feeling."""
# Sentiments to be considered depend on channel.
cluster_by = {
'beta': (OPINION_PRAISE, OPINION_ISSUE, OPINION_IDEA),
'release': (OPINION_IDEA,),
}
for opinion_type in cluster_by[channel]:
type_qs = qs.filter(type=opinion_type.id)

def cluster_by_platform(qs, prod, feeling):
# We need to create corpii for each platform and manually inspect each
cluster_by_platform(type_qs, channel, prod, opinion_type.short)


def cluster_by_platform(qs, channel, prod, feeling):
"""
Cluster all products/feelings by platform ('all' as well as separate
platforms).
"""
dimensions = dict(product=prod.id, channel=channel, feeling=feeling)
cluster_and_save(qs, dimensions)

# Beta only: Create corpora for each platform and inspect each
# opinion and put it in the right platform bucket.
if channel == 'beta':
for platform in PLATFORM_USAGE:
dimensions['platform'] = platform.short
cluster_and_save(qs.filter(platform=platform.short),
dimensions)


def cluster_and_save(qs, dimensions):
result = cluster_queryset(qs)
dimensions = dict(product=prod.id, feeling=feeling)
save_result(result, dimensions)

for platform in PLATFORM_USAGE:
result = cluster_queryset(qs.filter(platform=platform.short))
dimensions['platform'] = platform.short
save_result(result, dimensions)


def cluster_queryset(qs):
seen = {}
Expand Down
4 changes: 3 additions & 1 deletion apps/themes/models.py
Expand Up @@ -9,8 +9,10 @@ class Theme(ModelBase):
pivot = models.ForeignKey(Opinion, related_name='group')
opinions = models.ManyToManyField(Opinion, through='Item')
num_opinions = models.IntegerField(default=0, db_index=True)
feeling = models.CharField(max_length=20, db_index=True) # happy or sad
feeling = models.CharField(max_length=20, db_index=True) # issue, praise,
# idea
product = models.PositiveSmallIntegerField()
channel = models.CharField(max_length=20) # beta, release
platform = models.CharField(max_length=255, db_index=True)
created = models.DateTimeField(auto_now_add=True, db_index=True)

Expand Down
28 changes: 15 additions & 13 deletions apps/themes/templates/themes/index.html
Expand Up @@ -12,27 +12,29 @@ <h3>{{ _('Product') }}</h3>
{{ filter_list(products) }}
</div>
</div>
<div class="choice" id="filter_type">
<h3>{{ _('Type of Feedback') }}</h3>
<div>
{{ filter_list(sentiments) }}
{% if CHANNEL == 'beta' %}
<div class="choice" id="filter_type">
<h3>{{ _('Type of Feedback') }}</h3>
<div>
{{ filter_list(sentiments) }}
</div>
</div>
</div>
{# No need to show platforms if there is only one non-All platform #}
{% if platforms|length > 2 %}
<div class="choice" id="filter_platform">
<h3>{{ _('Platform') }}</h3>
<div>
{{ filter_list(platforms) }}
{# No need to show platforms if there is only one non-All platform #}
{% if platforms|length > 2 %}
<div class="choice" id="filter_platform">
<h3>{{ _('Platform') }}</h3>
<div>
{{ filter_list(platforms) }}
</div>
</div>
</div>
{% endif %}
{% endif %}
</form>
</div>

<div class="col middle wide">
<div id="messages" class="block">
<h2>{{ _('Common Themes') }}</h2>
<h2>{{ _('Common Themes') if CHANNEL == 'beta' else _('Frequent Ideas') }}</h2>
{{ theme_list(themes) }}

{{ pager() }}
Expand Down
68 changes: 51 additions & 17 deletions apps/themes/views.py
Expand Up @@ -7,8 +7,11 @@
import jingo
from tower import ugettext as _

from input import PRODUCTS, PLATFORMS, FIREFOX, PRODUCT_USAGE
from input.decorators import cache_page
from input import (CHANNEL_BETA, CHANNEL_RELEASE,
OPINION_PRAISE, OPINION_ISSUE, OPINION_IDEA,
PRODUCTS, PLATFORMS, FIREFOX, PRODUCT_USAGE,
get_channel)
from input.decorators import cache_page, negotiate
from input.helpers import urlparams
from input.urlresolvers import reverse
from themes.models import Theme
Expand All @@ -18,33 +21,31 @@


def _get_sentiments(request, sentiment):
"""Get available sentiment filters (beta channel only)."""
sentiments = []
url = request.get_full_path()

f = Filter(urlparams(url, s=None), _('All'), _('All feedback'),
not sentiment)

sentiments.append(f)

f = Filter(urlparams(url, s='happy'), _('Praise'), _('Praise only'),
(sentiment == 'happy'))

f = Filter(urlparams(url, s=OPINION_PRAISE.short), _('Praise'),
_('Praise only'), (sentiment == OPINION_PRAISE.short))
sentiments.append(f)

f = Filter(urlparams(url, s='sad'), _('Issues'), _('Issues only'),
(sentiment == 'sad'))

f = Filter(urlparams(url, s=OPINION_ISSUE.short), _('Issues'),
_('Issues only'), (sentiment == OPINION_ISSUE.short))
sentiments.append(f)

f = Filter(urlparams(url, s='ideas'), _('Ideas'),
_('Ideas only'),
(sentiment == 'ideas'))

f = Filter(urlparams(url, s=OPINION_IDEA.short), _('Ideas'),
_('Ideas only'), (sentiment == OPINION_IDEA.short))
sentiments.append(f)

return sentiments


def _get_platforms(request, product, platform):
"""Get platforms (beta channel only)."""
platforms = []
url = request.get_full_path()

Expand All @@ -66,6 +67,7 @@ def _get_platforms(request, product, platform):


def _get_products(request, product):
"""Get product filters (all channels)."""
products = []
url = request.get_full_path()

Expand All @@ -78,10 +80,10 @@ def _get_products(request, product):


@cache_page(use_get=True)
def index(request):
"""List the various clusters of data we have."""
def beta_index(request):
"""List the themes clusters for beta releases."""

qs = Theme.objects.all()
qs = Theme.objects.filter(channel=CHANNEL_BETA.short)
product = request.GET.get('a', FIREFOX.short)
products = _get_products(request, product)
try:
Expand Down Expand Up @@ -116,10 +118,42 @@ def index(request):
return jingo.render(request, 'themes/index.html', args)


@cache_page(use_get=True)
def release_index(request):
"""List the themes clusters for major releases."""

qs = Theme.objects.filter(channel=CHANNEL_RELEASE.short,
feeling=OPINION_IDEA.short)
product = request.GET.get('a', FIREFOX.short)
products = _get_products(request, product)
try:
qs = qs.filter(product=PRODUCTS[product].id)
except KeyError:
raise http.Http404

args = dict(products=products)
page = request.GET.get('page', 1)

if qs:
pp = settings.SEARCH_PERPAGE
pager = Paginator(qs.select_related(), pp)

try:
args['page'] = pager.page(page)
except (EmptyPage, InvalidPage):
args['page'] = pager.page(pager.num_pages)

args['themes'] = args['page'].object_list

return jingo.render(request, 'themes/index.html', args)

index = negotiate(beta=beta_index, release=release_index)


@cache_page(use_get=True)
def theme(request, theme_id):
try:
theme = Theme.objects.get(id=theme_id)
theme = Theme.objects.get(id=theme_id, channel=get_channel())
except Theme.DoesNotExist:
raise http.Http404

Expand Down
2 changes: 1 addition & 1 deletion lib/product_details_json/firefox_beta_builds.json
@@ -1 +1 @@
{"ast":{"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}}},"es-CL":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}}},"es-MX":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}}},"gd":{"4.0b8":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}}},"kk":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}},"ku":{"3.5.16":[],"3.6.13":{"Windows":{"filesize":7.9},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}},"mn":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":[]},"or":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":8},"OS X":{"filesize":19},"Linux":{"filesize":9.8}}},"rm":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"4.0b8":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}},"ta":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":8},"OS X":{"filesize":19},"Linux":{"filesize":9.8}}},"ta-LK":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.9},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}}}
{"ast":{"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}},"4.0b11":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}},"es-CL":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}}},"es-MX":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}}},"gd":{"4.0b11":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}}},"kk":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}},"ku":{"3.5.16":[],"3.6.13":{"Windows":{"filesize":7.9},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}},"mn":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":[]},"or":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":8},"OS X":{"filesize":19},"Linux":{"filesize":9.8}}},"rm":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"4.0b11":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.5}},"3.6.13":{"Windows":{"filesize":7.8},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}},"ta":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":8},"OS X":{"filesize":19},"Linux":{"filesize":9.8}}},"ta-LK":{"3.5.16":{"Windows":{"filesize":7.6},"OS X":{"filesize":17.4},"Linux":{"filesize":9.2}},"3.6.13":{"Windows":{"filesize":7.9},"OS X":{"filesize":19},"Linux":{"filesize":9.6}}}}
@@ -1 +1 @@
{"1.0rc1":"2004-10-27","1.0rc2":"2004-11-03","1.5rc1":"2005-11-01","1.5rc2":"2005-11-10","1.5rc3":"2005-11-17","2.0b1":"2006-07-12","2.0b2":"2006-08-31","2.0rc1":"2006-09-26","2.0rc2":"2006-10-06","2.0rc3":"2007-10-16","3.0b1":"2007-11-19","3.0b2":"2007-12-18","3.0b3":"2008-02-12","3.0b4":"2008-03-10","3.0b5":"2008-04-02","3.0rc1":"2008-05-16","3.0rc2":"2008-06-03","3.1b1":"2008-08-14","3.1b2":"2008-12-08","3.1b3":"2009-03-12","3.5b4":"2009-04-27","3.5rc2":"2009-06-19","3.5rc3":"2009-06-24","3.6b1":"2009-10-30","3.6b2":"2009-11-10","3.6b3":"2009-11-17","3.6b4":"2009-11-26","3.6b5":"2009-12-17","3.6rc1":"2010-01-08","3.6rc2":"2010-01-17","3.6.3plugin1":"2010-04-08","3.6.4build1":"2010-04-20","3.6.4build3":"2010-05-04","3.6.4build4":"2010-05-14","3.6.4build5":"2010-05-26","3.6.4build6":"2010-05-28","3.6.4build7":"2010-06-14","3.6.7build1":"2010-07-02","4.0b1":"2010-07-06","4.0b2":"2010-07-27","4.0b3":"2010-08-11","4.0b4":"2010-08-24","4.0b5":"2010-09-07","4.0b6":"2010-09-14","4.0b7":"2010-11-10","4.0b8":"2010-12-22"}
{"1.0rc1":"2004-10-27","1.0rc2":"2004-11-03","1.5rc1":"2005-11-01","1.5rc2":"2005-11-10","1.5rc3":"2005-11-17","2.0b1":"2006-07-12","2.0b2":"2006-08-31","2.0rc1":"2006-09-26","2.0rc2":"2006-10-06","2.0rc3":"2007-10-16","3.0b1":"2007-11-19","3.0b2":"2007-12-18","3.0b3":"2008-02-12","3.0b4":"2008-03-10","3.0b5":"2008-04-02","3.0rc1":"2008-05-16","3.0rc2":"2008-06-03","3.1b1":"2008-08-14","3.1b2":"2008-12-08","3.1b3":"2009-03-12","3.5b4":"2009-04-27","3.5rc2":"2009-06-19","3.5rc3":"2009-06-24","3.6b1":"2009-10-30","3.6b2":"2009-11-10","3.6b3":"2009-11-17","3.6b4":"2009-11-26","3.6b5":"2009-12-17","3.6rc1":"2010-01-08","3.6rc2":"2010-01-17","3.6.3plugin1":"2010-04-08","3.6.4build1":"2010-04-20","3.6.4build3":"2010-05-04","3.6.4build4":"2010-05-14","3.6.4build5":"2010-05-26","3.6.4build6":"2010-05-28","3.6.4build7":"2010-06-14","3.6.7build1":"2010-07-02","4.0b1":"2010-07-06","4.0b2":"2010-07-27","4.0b3":"2010-08-11","4.0b4":"2010-08-24","4.0b5":"2010-09-07","4.0b6":"2010-09-14","4.0b7":"2010-11-10","4.0b8":"2010-12-22","4.0b9":"2011-01-14","4.0b10":"2011-01-25","4.0b11":"2011-02-08"}
@@ -1 +1 @@
{"1.0.1":"2005-02-24","1.0.2":"2005-03-23","1.0.3":"2005-04-15","1.0.4":"2005-05-11","1.0.5":"2005-07-12","1.0.6":"2005-07-19","1.0.7":"2005-09-20","1.0.8":"2006-04-13","1.5.0.1":"2006-02-01","1.5.0.2":"2006-04-13","1.5.0.3":"2006-05-02","1.5.0.4":"2006-06-01","1.5.0.5":"2006-07-26","1.5.0.6":"2006-08-02","1.5.0.7":"2006-09-14","1.5.0.8":"2006-11-07","1.5.0.9":"2006-12-19","1.5.0.10":"2007-02-23","1.5.0.11":"2007-03-20","1.5.0.12":"2007-05-30","2.0.0.1":"2006-12-19","2.0.0.2":"2007-02-23","2.0.0.3":"2007-03-20","2.0.0.4":"2007-05-30","2.0.0.5":"2007-07-17","2.0.0.6":"2007-07-30","2.0.0.7":"2007-09-18","2.0.0.8":"2007-10-18","2.0.0.9":"2007-11-01","2.0.0.10":"2007-11-26","2.0.0.11":"2007-11-30","2.0.0.12":"2008-02-07","2.0.0.13":"2008-03-25","2.0.0.14":"2008-04-16","2.0.0.15":"2008-07-01","2.0.0.16":"2008-07-15","2.0.0.17":"2008-09-23","2.0.0.18":"2008-11-12","2.0.0.19":"2008-12-16","2.0.0.20":"2008-12-18","3.0.1":"2008-07-16","3.0.2":"2008-09-23","3.0.3":"2008-09-26","3.0.4":"2008-11-12","3.0.5":"2008-12-16","3.0.6":"2009-02-03","3.0.7":"2009-03-04","3.0.8":"2009-03-27","3.0.9":"2009-04-21","3.0.10":"2009-04-27","3.0.11":"2009-06-11","3.0.12":"2009-07-21","3.0.13":"2009-08-03","3.0.14":"2009-09-09","3.0.15":"2009-10-27","3.0.16":"2009-12-15","3.0.17":"2010-01-05","3.0.18":"2010-02-17","3.0.19":"2010-03-30","3.5.1":"2009-07-17","3.5.2":"2009-08-03","3.5.3":"2009-09-09","3.5.4":"2009-10-27","3.5.5":"2009-11-05","3.5.6":"2009-12-15","3.5.7":"2010-01-05","3.5.8":"2010-02-17","3.5.9":"2010-03-30","3.5.10":"2010-06-22","3.5.11":"2010-07-20","3.5.12":"2010-09-07","3.5.13":"2010-09-15","3.5.14":"2010-10-19","3.5.15":"2010-10-27","3.6.16":"2010-12-09","3.6.2":"2010-03-22","3.6.3":"2010-04-01","3.6.4":"2010-06-22","3.6.6":"2010-06-26","3.6.7":"2010-07-20","3.6.8":"2010-07-23","3.6.9":"2010-09-07","3.6.10":"2010-09-15","3.6.11":"2010-10-19","3.6.12":"2010-10-27","3.6.13":"2010-12-09"}
{"1.0.1":"2005-02-24","1.0.2":"2005-03-23","1.0.3":"2005-04-15","1.0.4":"2005-05-11","1.0.5":"2005-07-12","1.0.6":"2005-07-19","1.0.7":"2005-09-20","1.0.8":"2006-04-13","1.5.0.1":"2006-02-01","1.5.0.2":"2006-04-13","1.5.0.3":"2006-05-02","1.5.0.4":"2006-06-01","1.5.0.5":"2006-07-26","1.5.0.6":"2006-08-02","1.5.0.7":"2006-09-14","1.5.0.8":"2006-11-07","1.5.0.9":"2006-12-19","1.5.0.10":"2007-02-23","1.5.0.11":"2007-03-20","1.5.0.12":"2007-05-30","2.0.0.1":"2006-12-19","2.0.0.2":"2007-02-23","2.0.0.3":"2007-03-20","2.0.0.4":"2007-05-30","2.0.0.5":"2007-07-17","2.0.0.6":"2007-07-30","2.0.0.7":"2007-09-18","2.0.0.8":"2007-10-18","2.0.0.9":"2007-11-01","2.0.0.10":"2007-11-26","2.0.0.11":"2007-11-30","2.0.0.12":"2008-02-07","2.0.0.13":"2008-03-25","2.0.0.14":"2008-04-16","2.0.0.15":"2008-07-01","2.0.0.16":"2008-07-15","2.0.0.17":"2008-09-23","2.0.0.18":"2008-11-12","2.0.0.19":"2008-12-16","2.0.0.20":"2008-12-18","3.0.1":"2008-07-16","3.0.2":"2008-09-23","3.0.3":"2008-09-26","3.0.4":"2008-11-12","3.0.5":"2008-12-16","3.0.6":"2009-02-03","3.0.7":"2009-03-04","3.0.8":"2009-03-27","3.0.9":"2009-04-21","3.0.10":"2009-04-27","3.0.11":"2009-06-11","3.0.12":"2009-07-21","3.0.13":"2009-08-03","3.0.14":"2009-09-09","3.0.15":"2009-10-27","3.0.16":"2009-12-15","3.0.17":"2010-01-05","3.0.18":"2010-02-17","3.0.19":"2010-03-30","3.5.1":"2009-07-17","3.5.2":"2009-08-03","3.5.3":"2009-09-09","3.5.4":"2009-10-27","3.5.5":"2009-11-05","3.5.6":"2009-12-15","3.5.7":"2010-01-05","3.5.8":"2010-02-17","3.5.9":"2010-03-30","3.5.10":"2010-06-22","3.5.11":"2010-07-20","3.5.12":"2010-09-07","3.5.13":"2010-09-15","3.5.14":"2010-10-19","3.5.15":"2010-10-27","3.5.16":"2010-12-09","3.6.2":"2010-03-22","3.6.3":"2010-04-01","3.6.4":"2010-06-22","3.6.6":"2010-06-26","3.6.7":"2010-07-20","3.6.8":"2010-07-23","3.6.9":"2010-09-07","3.6.10":"2010-09-15","3.6.11":"2010-10-19","3.6.12":"2010-10-27","3.6.13":"2010-12-09"}
2 changes: 1 addition & 1 deletion lib/product_details_json/firefox_primary_builds.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion lib/product_details_json/firefox_versions.json
@@ -1 +1 @@
{"LATEST_FIREFOX_VERSION":"3.6.13","LATEST_FIREFOX_DEVEL_VERSION":"4.0b8","LATEST_FIREFOX_RELEASED_DEVEL_VERSION":"4.0b8","LATEST_FIREFOX_OLDER_VERSION":"3.5.16"}
{"LATEST_FIREFOX_VERSION":"3.6.13","LATEST_FIREFOX_DEVEL_VERSION":"4.0b11","LATEST_FIREFOX_RELEASED_DEVEL_VERSION":"4.0b11","LATEST_FIREFOX_OLDER_VERSION":"3.5.16"}

0 comments on commit d7051d9

Please sign in to comment.