Skip to content

Commit 0f16149

Browse files
committed
Merge pull request tobami#169 from nomeata/submit
My upstreamable changes so far Closes tobami#168
2 parents be64549 + 11c30b4 commit 0f16149

4 files changed

Lines changed: 161 additions & 18 deletions

File tree

codespeed/admin.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,14 @@ class ResultAdmin(admin.ModelAdmin):
5757
admin.site.register(Result, ResultAdmin)
5858

5959

60+
def recalculate_report(modeladmin, request, queryset):
61+
for report in queryset:
62+
report.save()
63+
recalculate_report.short_description = "Recalculate reports"
64+
6065
class ReportAdmin(admin.ModelAdmin):
6166
list_display = ('revision', 'summary', 'colorcode')
6267
ordering = ['-revision']
68+
actions = [recalculate_report]
6369

6470
admin.site.register(Report, ReportAdmin)
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# -*- coding: utf-8 -*-
2+
from south.utils import datetime_utils as datetime
3+
from south.db import db
4+
from south.v2 import SchemaMigration
5+
from django.db import models
6+
7+
8+
class Migration(SchemaMigration):
9+
10+
def forwards(self, orm):
11+
12+
# Changing field 'Revision.author'
13+
db.alter_column(u'codespeed_revision', 'author', self.gf('django.db.models.fields.CharField')(max_length=100))
14+
15+
# Changing field 'Environment.kernel'
16+
db.alter_column(u'codespeed_environment', 'kernel', self.gf('django.db.models.fields.CharField')(max_length=100))
17+
18+
# Changing field 'Environment.name'
19+
db.alter_column(u'codespeed_environment', 'name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=100))
20+
21+
# Changing field 'Environment.memory'
22+
db.alter_column(u'codespeed_environment', 'memory', self.gf('django.db.models.fields.CharField')(max_length=100))
23+
24+
# Changing field 'Environment.os'
25+
db.alter_column(u'codespeed_environment', 'os', self.gf('django.db.models.fields.CharField')(max_length=100))
26+
27+
# Changing field 'Environment.cpu'
28+
db.alter_column(u'codespeed_environment', 'cpu', self.gf('django.db.models.fields.CharField')(max_length=100))
29+
30+
# Changing field 'Benchmark.name'
31+
db.alter_column(u'codespeed_benchmark', 'name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=100))
32+
33+
def backwards(self, orm):
34+
35+
# Changing field 'Revision.author'
36+
db.alter_column(u'codespeed_revision', 'author', self.gf('django.db.models.fields.CharField')(max_length=30))
37+
38+
# Changing field 'Environment.kernel'
39+
db.alter_column(u'codespeed_environment', 'kernel', self.gf('django.db.models.fields.CharField')(max_length=30))
40+
41+
# Changing field 'Environment.name'
42+
db.alter_column(u'codespeed_environment', 'name', self.gf('django.db.models.fields.CharField')(max_length=30, unique=True))
43+
44+
# Changing field 'Environment.memory'
45+
db.alter_column(u'codespeed_environment', 'memory', self.gf('django.db.models.fields.CharField')(max_length=30))
46+
47+
# Changing field 'Environment.os'
48+
db.alter_column(u'codespeed_environment', 'os', self.gf('django.db.models.fields.CharField')(max_length=30))
49+
50+
# Changing field 'Environment.cpu'
51+
db.alter_column(u'codespeed_environment', 'cpu', self.gf('django.db.models.fields.CharField')(max_length=30))
52+
53+
# Changing field 'Benchmark.name'
54+
db.alter_column(u'codespeed_benchmark', 'name', self.gf('django.db.models.fields.CharField')(max_length=30, unique=True))
55+
56+
models = {
57+
u'codespeed.benchmark': {
58+
'Meta': {'object_name': 'Benchmark'},
59+
'benchmark_type': ('django.db.models.fields.CharField', [], {'default': "'C'", 'max_length': '1'}),
60+
'default_on_comparison': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
61+
'description': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
62+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63+
'lessisbetter': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
64+
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
65+
'parent': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['codespeed.Benchmark']", 'null': 'True', 'blank': 'True'}),
66+
'units': ('django.db.models.fields.CharField', [], {'default': "'seconds'", 'max_length': '20'}),
67+
'units_title': ('django.db.models.fields.CharField', [], {'default': "'Time'", 'max_length': '30'})
68+
},
69+
u'codespeed.branch': {
70+
'Meta': {'unique_together': "(('name', 'project'),)", 'object_name': 'Branch'},
71+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
72+
'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
73+
'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'branches'", 'to': u"orm['codespeed.Project']"})
74+
},
75+
u'codespeed.environment': {
76+
'Meta': {'object_name': 'Environment'},
77+
'cpu': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
78+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79+
'kernel': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
80+
'memory': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
81+
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
82+
'os': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
83+
},
84+
u'codespeed.executable': {
85+
'Meta': {'unique_together': "(('name', 'project'),)", 'object_name': 'Executable'},
86+
'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
87+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
88+
'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
89+
'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'executables'", 'to': u"orm['codespeed.Project']"})
90+
},
91+
u'codespeed.project': {
92+
'Meta': {'object_name': 'Project'},
93+
'commit_browsing_url': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
94+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
95+
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
96+
'repo_pass': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
97+
'repo_path': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
98+
'repo_type': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
99+
'repo_user': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
100+
'track': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
101+
},
102+
u'codespeed.report': {
103+
'Meta': {'unique_together': "(('revision', 'executable', 'environment'),)", 'object_name': 'Report'},
104+
'_tablecache': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
105+
'colorcode': ('django.db.models.fields.CharField', [], {'default': "'none'", 'max_length': '10'}),
106+
'environment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reports'", 'to': u"orm['codespeed.Environment']"}),
107+
'executable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reports'", 'to': u"orm['codespeed.Executable']"}),
108+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
109+
'revision': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reports'", 'to': u"orm['codespeed.Revision']"}),
110+
'summary': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
111+
},
112+
u'codespeed.result': {
113+
'Meta': {'unique_together': "(('revision', 'executable', 'benchmark', 'environment'),)", 'object_name': 'Result'},
114+
'benchmark': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'results'", 'to': u"orm['codespeed.Benchmark']"}),
115+
'date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
116+
'environment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'results'", 'to': u"orm['codespeed.Environment']"}),
117+
'executable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'results'", 'to': u"orm['codespeed.Executable']"}),
118+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
119+
'revision': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'results'", 'to': u"orm['codespeed.Revision']"}),
120+
'std_dev': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
121+
'val_max': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
122+
'val_min': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
123+
'value': ('django.db.models.fields.FloatField', [], {})
124+
},
125+
u'codespeed.revision': {
126+
'Meta': {'unique_together': "(('commitid', 'branch'),)", 'object_name': 'Revision'},
127+
'author': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
128+
'branch': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': u"orm['codespeed.Branch']"}),
129+
'commitid': ('django.db.models.fields.CharField', [], {'max_length': '42'}),
130+
'date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
131+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
132+
'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
133+
'project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'revisions'", 'null': 'True', 'to': u"orm['codespeed.Project']"}),
134+
'tag': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'})
135+
}
136+
}
137+
138+
complete_apps = ['codespeed']

codespeed/models.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class Revision(models.Model):
8383
message = models.TextField(blank=True)
8484
project = models.ForeignKey(Project, related_name="revisions",
8585
null=True, blank=True)
86-
author = models.CharField(max_length=30, blank=True)
86+
author = models.CharField(max_length=100, blank=True)
8787
branch = models.ForeignKey(Branch, related_name="revisions")
8888

8989
def get_short_commitid(self):
@@ -133,7 +133,7 @@ class Benchmark(models.Model):
133133
('O', 'Own-project'),
134134
)
135135

136-
name = models.CharField(unique=True, max_length=30)
136+
name = models.CharField(unique=True, max_length=100)
137137
parent = models.ForeignKey(
138138
'self', verbose_name="parent",
139139
help_text="allows to group benchmarks in hierarchies",
@@ -157,11 +157,11 @@ def clean(self):
157157

158158

159159
class Environment(models.Model):
160-
name = models.CharField(unique=True, max_length=30)
161-
cpu = models.CharField(max_length=30, blank=True)
162-
memory = models.CharField(max_length=30, blank=True)
163-
os = models.CharField(max_length=30, blank=True)
164-
kernel = models.CharField(max_length=30, blank=True)
160+
name = models.CharField(unique=True, max_length=100)
161+
cpu = models.CharField(max_length=100, blank=True)
162+
memory = models.CharField(max_length=100, blank=True)
163+
os = models.CharField(max_length=100, blank=True)
164+
kernel = models.CharField(max_length=100, blank=True)
165165

166166
def __unicode__(self):
167167
return self.name
@@ -366,18 +366,18 @@ def get_changes_table(self, trend_depth=10, force_save=False):
366366
)
367367

368368
tablelist = []
369-
for units in Benchmark.objects.all().values('units').distinct():
369+
for units_title in Benchmark.objects.all().values_list('units_title', flat=True).distinct():
370370
currentlist = []
371-
units_title = ""
371+
units = ""
372372
hasmin = False
373373
hasmax = False
374374
has_stddev = False
375375
smallest = 1000
376376
totals = {'change': [], 'trend': []}
377-
for bench in Benchmark.objects.filter(units=units['units']):
378-
units_title = bench.units_title
377+
for bench in Benchmark.objects.filter(units_title=units_title):
378+
units = bench.units
379379
lessisbetter = bench.lessisbetter
380-
resultquery = result_list.filter(benchmark=bench, value__gt=0)
380+
resultquery = result_list.filter(benchmark=bench)
381381
if not len(resultquery):
382382
continue
383383

@@ -470,7 +470,7 @@ def get_changes_table(self, trend_depth=10, force_save=False):
470470
digits += 1
471471

472472
tablelist.append({
473-
'units': units['units'],
473+
'units': units,
474474
'units_title': units_title,
475475
'lessisbetter': lessisbetter,
476476
'has_stddev': has_stddev,

codespeed/views.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -677,9 +677,9 @@ def changes(request):
677677
executables[proj] = Executable.objects.filter(project=proj)
678678
projectlist.append(proj)
679679
branch = Branch.objects.filter(name=settings.DEF_BRANCH, project=proj)
680-
revisionlists[proj.name] = Revision.objects.filter(
680+
revisionlists[proj.name] = list(Revision.objects.filter(
681681
branch=branch
682-
).order_by('-date')[:revlimit]
682+
).order_by('-date')[:revlimit])
683683
# Get lastest revisions for this project and it's "default" branch
684684
lastrevisions = revisionlists.get(defaultexecutable.project.name)
685685
if not len(lastrevisions):
@@ -692,9 +692,8 @@ def changes(request):
692692
selectedrevision = Revision.objects.get(
693693
commitid__startswith=commitid, branch=branch
694694
)
695-
if not selectedrevision in lastrevisions:
696-
lastrevisions = list(chain(lastrevisions))
697-
lastrevisions.append(selectedrevision)
695+
if not selectedrevision in revisionlists[selectedrevision.project.name]:
696+
revisionlists[selectedrevision.project.name].append(selectedrevision)
698697
except Revision.DoesNotExist:
699698
selectedrevision = lastrevisions[0]
700699
# This variable is used to know when the newly selected executable

0 commit comments

Comments
 (0)