Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1002)

Unified Diff: gm/rebaseline_server/compare_rendered_pictures.py

Issue 474813002: rebaseline_server: include setA/setB descriptions in output JSON (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: use posixpath.join() Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gm/rebaseline_server/compare_configs.py ('k') | gm/rebaseline_server/compare_rendered_pictures_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/rebaseline_server/compare_rendered_pictures.py
diff --git a/gm/rebaseline_server/compare_rendered_pictures.py b/gm/rebaseline_server/compare_rendered_pictures.py
index 85dff2711e751ac385870d5bb68a326a49b6a0b8..265f997de97b25a1df92f0279767b87c3e49fe12 100755
--- a/gm/rebaseline_server/compare_rendered_pictures.py
+++ b/gm/rebaseline_server/compare_rendered_pictures.py
@@ -16,6 +16,7 @@ were generated from GMs or SKPs), and rename it accordingly.
import logging
import os
import shutil
+import subprocess
import tempfile
import time
@@ -23,6 +24,7 @@ import time
import fix_pythonpath # pylint: disable=W0611
# Imports from within Skia
+from py.utils import git_utils
from py.utils import gs_utils
from py.utils import url_utils
import buildbot_globals
@@ -148,15 +150,37 @@ class RenderedPicturesComparisons(results.BaseComparisons):
try:
setA_root = os.path.join(tempdir, 'setA')
setB_root = os.path.join(tempdir, 'setB')
+ setA_repo_revision = None
+ setB_repo_revision = None
for source_dir in setA_dirs:
self._copy_dir_contents(source_dir=source_dir, dest_dir=setA_root)
+ # TODO(stephana): There is a potential race condition here... we copy
+ # the contents out of the source_dir, and THEN we get the commithash
+ # of source_dir. If source_dir points at a git checkout, and that
+ # checkout is updated (by a different thread/process) during this
+ # operation, then the contents and commithash will be out of sync.
+ setA_repo_revision = self._get_repo_revision(
+ source_dir=source_dir, assert_if_not=setA_repo_revision)
for source_dir in setB_dirs:
self._copy_dir_contents(source_dir=source_dir, dest_dir=setB_root)
+ setB_repo_revision = self._get_repo_revision(
+ source_dir=source_dir, assert_if_not=setB_repo_revision)
+
+ self._setA_descriptions = {
+ results.KEY__SET_DESCRIPTIONS__DIR: setA_dirs,
+ results.KEY__SET_DESCRIPTIONS__REPO_REVISION: setA_repo_revision,
+ results.KEY__SET_DESCRIPTIONS__SECTION: setA_section,
+ }
+ self._setB_descriptions = {
+ results.KEY__SET_DESCRIPTIONS__DIR: setB_dirs,
+ results.KEY__SET_DESCRIPTIONS__REPO_REVISION: setB_repo_revision,
+ results.KEY__SET_DESCRIPTIONS__SECTION: setB_section,
+ }
time_start = int(time.time())
self._results = self._load_result_pairs(
- setA_root=setA_root, setA_section=setA_section,
- setB_root=setB_root, setB_section=setB_section)
+ setA_root=setA_root, setB_root=setB_root,
+ setA_section=setA_section, setB_section=setB_section)
if self._results:
self._timestamp = int(time.time())
logging.info('Number of download file collisions: %s' %
@@ -166,15 +190,18 @@ class RenderedPicturesComparisons(results.BaseComparisons):
finally:
shutil.rmtree(tempdir)
- def _load_result_pairs(self, setA_root, setA_section, setB_root,
- setB_section):
+ def _load_result_pairs(self, setA_root, setB_root,
+ setA_section, setB_section):
"""Loads all JSON image summaries from 2 directory trees and compares them.
+ TODO(stephana): This method is only called from within __init__(); it might
+ make more sense to just roll the content of this method into __init__().
+
Args:
setA_root: root directory containing JSON summaries of rendering results
+ setB_root: root directory containing JSON summaries of rendering results
setA_section: which section (gm_json.JSONKEY_ACTUALRESULTS or
gm_json.JSONKEY_EXPECTEDRESULTS) to load from the summaries in setA
- setB_root: root directory containing JSON summaries of rendering results
setB_section: which section (gm_json.JSONKEY_ACTUALRESULTS or
gm_json.JSONKEY_EXPECTEDRESULTS) to load from the summaries in setB
@@ -400,3 +427,24 @@ class RenderedPicturesComparisons(results.BaseComparisons):
shutil.copytree(repo_dir, dest_dir)
else:
shutil.copytree(source_dir, dest_dir)
+
+ def _get_repo_revision(self, source_dir, assert_if_not=None):
+ """Get the commit hash of source_dir, IF it refers to a git checkout.
+
+ Args:
+ source_dir: path to source dir (GS URL, local filepath, or a special
+ "repo:" URL type that points at a file within our Skia checkout;
+ only the "repo:" URL type will have a commit hash.
+ assert_if_not: if not None, raise an Exception if source_dir has a
+ commit hash and that hash is not equal to this
+ """
+ if source_dir.lower().startswith(REPO_URL_PREFIX):
+ repo_dir = os.path.join(REPO_BASEPATH, source_dir[len(REPO_URL_PREFIX):])
+ revision = subprocess.check_output(
+ args=[git_utils.GIT, 'rev-parse', 'HEAD'], cwd=repo_dir).strip()
+ if assert_if_not and revision != assert_if_not:
+ raise Exception('found revision %s that did not match %s' % (
+ revision, assert_if_not))
+ return revision
+ else:
+ return None
« no previous file with comments | « gm/rebaseline_server/compare_configs.py ('k') | gm/rebaseline_server/compare_rendered_pictures_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698