2525from .views_data import (get_default_environment , getbaselineexecutables ,
2626 getdefaultexecutable , getcomparisonexes ,
2727 get_benchmark_results , get_num_revs_and_benchmarks ,
28- get_stats_with_defaults )
28+ get_stats_with_defaults , parse_benchmark_ident )
2929from .results import save_result , create_report_if_enough_data
3030from . import commits
3131from .validators import validate_results_request
@@ -717,7 +717,9 @@ def timeline(request):
717717 baseline = getbaselineexecutables ()
718718 defaultbaseline = None
719719 if len (baseline ) > 1 :
720- defaultbaseline = str (baseline [1 ]['executable' ].id ) + "+"
720+ # must match the option keys built in getbaselineexecutables()
721+ # ("<exe.id>:<rev.id>"), which gettimelinedata splits on ":"
722+ defaultbaseline = str (baseline [1 ]['executable' ].id ) + ":"
721723 defaultbaseline += str (baseline [1 ]['revision' ].id )
722724 if "base" in data and data ['base' ] != "undefined" :
723725 try :
@@ -737,7 +739,9 @@ def timeline(request):
737739 lastrevisions .append (revs_int )
738740 defaultlast = revs_int
739741
740- benchmarks = Benchmark .objects .all ()
742+ # order by source so the timeline sidebar can {% regroup %} into
743+ # per-suite accordion sections
744+ benchmarks = Benchmark .objects .all ().order_by ('source' , 'name' )
741745
742746 defaultbenchmark = "grid"
743747 if not len (benchmarks ):
@@ -748,9 +752,10 @@ def timeline(request):
748752 if settings .DEF_BENCHMARK in ['grid' , 'show_none' ]:
749753 defaultbenchmark = settings .DEF_BENCHMARK
750754 else :
755+ def_name , def_source = parse_benchmark_ident (settings .DEF_BENCHMARK )
751756 try :
752757 defaultbenchmark = Benchmark .objects .get (
753- name = settings . DEF_BENCHMARK )
758+ name = def_name , source = def_source )
754759 except Benchmark .DoesNotExist :
755760 pass
756761 elif len (benchmarks ) >= get_setting ('TIMELINE_GRID_LIMIT' , 30 ):
@@ -760,7 +765,9 @@ def timeline(request):
760765 if data ['ben' ] == "show_none" :
761766 defaultbenchmark = data ['ben' ]
762767 else :
763- defaultbenchmark = get_object_or_404 (Benchmark , name = data ['ben' ])
768+ ben_name , ben_source = parse_benchmark_ident (data ['ben' ])
769+ defaultbenchmark = get_object_or_404 (
770+ Benchmark , name = ben_name , source = ben_source )
764771
765772 if 'equid' in data :
766773 defaultequid = data ['equid' ]
@@ -785,12 +792,19 @@ def timeline(request):
785792 for proj in Project .objects .filter (track = True ):
786793 executables [proj ] = Executable .objects .filter (project = proj )
787794 use_median_bands = hasattr (settings , 'USE_MEDIAN_BANDS' ) and settings .USE_MEDIAN_BANDS
795+ # The radio buttons carry 'name.source' idents, so the JS default must
796+ # match that form (the 'grid'/'show_none' sentinels are passed through).
797+ if isinstance (defaultbenchmark , Benchmark ):
798+ defaultbenchmark_value = defaultbenchmark .ident ()
799+ else :
800+ defaultbenchmark_value = defaultbenchmark
788801 return render (request , 'codespeed/timeline.html' , {
789802 'pagedesc' : pagedesc ,
790803 'checkedexecutables' : checkedexecutables ,
791804 'defaultbaseline' : defaultbaseline ,
792805 'baseline' : baseline ,
793806 'defaultbenchmark' : defaultbenchmark ,
807+ 'defaultbenchmark_value' : defaultbenchmark_value ,
794808 'defaultenvironment' : defaultenviro ,
795809 'defaultenvironments' : defaultenvironments ,
796810 'lastrevisions' : lastrevisions ,
@@ -921,9 +935,11 @@ def changes(request):
921935 pass
922936
923937 baseline = getbaselineexecutables ()
924- defaultbaseline = "+ "
938+ defaultbaseline = "none "
925939 if len (baseline ) > 1 :
926- defaultbaseline = str (baseline [1 ]['executable' ].id ) + "+"
940+ # must match the "<exe.id>:<rev.id>" option keys from
941+ # getbaselineexecutables()
942+ defaultbaseline = str (baseline [1 ]['executable' ].id ) + ":"
927943 defaultbaseline += str (baseline [1 ]['revision' ].id )
928944 if "base" in data and data ['base' ] != "undefined" :
929945 try :
0 commit comments