aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar epoger <epoger@google.com>2014-07-02 13:51:47 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-07-02 13:51:47 -0700
commite5481eca7e66fd194c3b897fa3b8911cfe420958 (patch)
tree4d0f157c19fe96ff8c9f509254b064627b99b3ca
parente1bc1c6958de768521323075b659d6ec6ad442fc (diff)
rebaseline_server: add urlSchemaVersion parameter
In https://codereview.chromium.org/369473005 ('rebaseline_server: handle category filtering more generically'), I am changing the meaning of some URL parameters. If a user pastes an old URL into an updated rebaseline_server instance, they may get unexpected results. Adding a urlSchemaVersion parameter allows us to automatically convert the URL, or at least warn the user. BUG=skia:2230 NOTRY=True R=jcgregorio@google.com Author: epoger@google.com Review URL: https://codereview.chromium.org/368933002
-rwxr-xr-xgm/rebaseline_server/server.py30
-rw-r--r--gm/rebaseline_server/static/constants.js5
-rw-r--r--gm/rebaseline_server/static/loader.js11
-rw-r--r--gm/rebaseline_server/static/view.html8
4 files changed, 47 insertions, 7 deletions
diff --git a/gm/rebaseline_server/server.py b/gm/rebaseline_server/server.py
index 0079ec55ff..a10bc8c213 100755
--- a/gm/rebaseline_server/server.py
+++ b/gm/rebaseline_server/server.py
@@ -25,16 +25,22 @@ import threading
import time
import urlparse
+# Must fix up PYTHONPATH before importing from within Skia
+# pylint: disable=W0611
+import fix_pythonpath
+# pylint: enable=W0611
+
# Imports from within Skia
-import fix_pythonpath # must do this first
from pyutils import gs_utils
import gm_json
# Imports from local dir
#
+# pylint: disable=C0301
# Note: we import results under a different name, to avoid confusion with the
# Server.results() property. See discussion at
# https://codereview.chromium.org/195943004/diff/1/gm/rebaseline_server/server.py#newcode44
+# pylint: enable=C0301
import compare_configs
import compare_to_expectations
import download_actuals
@@ -59,6 +65,11 @@ MIME_TYPE_MAP = {'': 'application/octet-stream',
KEY__EDITS__MODIFICATIONS = 'modifications'
KEY__EDITS__OLD_RESULTS_HASH = 'oldResultsHash'
KEY__EDITS__OLD_RESULTS_TYPE = 'oldResultsType'
+URL_KEY__SCHEMA_VERSION = 'urlSchemaVersion'
+URL_VALUE__SCHEMA_VERSION__CURRENT = 0
+# always interpret as then-current schema version;
+# used for toplevel links on index page
+URL_VALUE__SCHEMA_VERSION__ALWAYS_CURRENT = 'current'
DEFAULT_ACTUALS_DIR = results_mod.DEFAULT_ACTUALS_DIR
DEFAULT_GM_SUMMARIES_BUCKET = download_actuals.GM_SUMMARIES_BUCKET
@@ -157,11 +168,15 @@ def _create_index(file_path, config_pairs):
file_handle.write('<li>Expectations vs Actuals</li><ul>')
for summary_type in SUMMARY_TYPES:
file_handle.write(
- '<li>'
- '<a href="/%s/view.html#/view.html?resultsToLoad=/%s/%s">'
- '%s</a></li>' % (
- STATIC_CONTENTS_SUBDIR, RESULTS_SUBDIR,
- summary_type, summary_type))
+ '<li><a href="/{static_subdir}/view.html#/view.html?'
+ '{version_key}={version_value}&'
+ 'resultsToLoad=/{results_subdir}/{summary_type}">'
+ '{summary_type}</a></li>'.format(
+ results_subdir=RESULTS_SUBDIR,
+ static_subdir=STATIC_CONTENTS_SUBDIR,
+ summary_type=summary_type,
+ version_key=URL_KEY__SCHEMA_VERSION,
+ version_value=URL_VALUE__SCHEMA_VERSION__ALWAYS_CURRENT))
file_handle.write('</ul>')
if config_pairs:
file_handle.write('<li>Comparing configs within actual results</li><ul>')
@@ -346,7 +361,7 @@ class Server(object):
json_dir = os.path.join(
PARENT_DIRECTORY, STATIC_CONTENTS_SUBDIR, GENERATED_JSON_SUBDIR)
if not os.path.isdir(json_dir):
- os.makedirs(json_dir)
+ os.makedirs(json_dir)
for config_pair in self._config_pairs:
config_comparisons = compare_configs.ConfigComparisons(
@@ -395,6 +410,7 @@ class Server(object):
else:
host = '127.0.0.1'
server_address = (host, self._port)
+ # pylint: disable=W0201
http_server = BaseHTTPServer.HTTPServer(server_address, HTTPRequestHandler)
self._url = 'http://%s:%d' % (host, http_server.server_port)
logging.info('Listening for requests on %s' % self._url)
diff --git a/gm/rebaseline_server/static/constants.js b/gm/rebaseline_server/static/constants.js
index 7db245daf0..55751d1e21 100644
--- a/gm/rebaseline_server/static/constants.js
+++ b/gm/rebaseline_server/static/constants.js
@@ -73,6 +73,11 @@ module.constant('constants', (function() {
KEY__EDITS__MODIFICATIONS: 'modifications',
KEY__EDITS__OLD_RESULTS_HASH: 'oldResultsHash',
KEY__EDITS__OLD_RESULTS_TYPE: 'oldResultsType',
+ URL_KEY__SCHEMA_VERSION: 'urlSchemaVersion',
+ URL_VALUE__SCHEMA_VERSION__CURRENT: 0,
+ // always interpret as then-current schema version;
+ // used for toplevel links on index page
+ URL_VALUE__SCHEMA_VERSION__ALWAYS_CURRENT: 'current',
// These are just used on the client side, no need to sync with server code.
KEY__IMAGEPAIRS__ROWSPAN: 'rowspan',
diff --git a/gm/rebaseline_server/static/loader.js b/gm/rebaseline_server/static/loader.js
index 296689bde2..dbded05f25 100644
--- a/gm/rebaseline_server/static/loader.js
+++ b/gm/rebaseline_server/static/loader.js
@@ -426,6 +426,16 @@ Loader.controller(
// any which are not found within the URL will keep their current value.
$scope.queryParameters.load = function() {
var nameValuePairs = $location.search();
+
+ var urlSchemaVersion = nameValuePairs[constants.URL_KEY__SCHEMA_VERSION];
+ if (!urlSchemaVersion) {
+ $scope.urlSchemaVersionLoaded = 0;
+ } else if (urlSchemaVersion == constants.URL_VALUE__SCHEMA_VERSION__ALWAYS_CURRENT) {
+ $scope.urlSchemaVersionLoaded = constants.URL_VALUE__SCHEMA_VERSION__CURRENT;
+ } else {
+ $scope.urlSchemaVersionLoaded = urlSchemaVersion;
+ }
+
angular.forEach($scope.queryParameters.map,
function(copier, paramName) {
copier.load(nameValuePairs, paramName);
@@ -436,6 +446,7 @@ Loader.controller(
// Saves all parameters from $scope into the URL query string.
$scope.queryParameters.save = function() {
var nameValuePairs = {};
+ nameValuePairs[constants.URL_KEY__SCHEMA_VERSION] = constants.URL_VALUE__SCHEMA_VERSION__CURRENT;
angular.forEach($scope.queryParameters.map,
function(copier, paramName) {
copier.save(nameValuePairs, paramName);
diff --git a/gm/rebaseline_server/static/view.html b/gm/rebaseline_server/static/view.html
index fda767c5b4..94dc9ba63e 100644
--- a/gm/rebaseline_server/static/view.html
+++ b/gm/rebaseline_server/static/view.html
@@ -26,6 +26,14 @@
<div ng-show="extraColumnHeaders"><!-- everything: hide until data is loaded -->
<div class="warning-div"
+ ng-show="urlSchemaVersionLoaded != constants.URL_VALUE__SCHEMA_VERSION__CURRENT">
+ WARNING! The URL you loaded used schema version {{urlSchemaVersionLoaded}}, rather than
+ the most recent version {{constants.URL_VALUE__SCHEMA_VERSION__CURRENT}}. It has been
+ converted to the most recent version on a best-effort basis; you may wish to double-check
+ which records are displayed.
+ </div>
+
+ <div class="warning-div"
ng-show="header[constants.KEY__HEADER__IS_EDITABLE] && header[constants.KEY__HEADER__IS_EXPORTED]">
WARNING! These results are editable and exported, so any user
who can connect to this server over the network can modify them.