<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[213562] trunk/Tools</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/213562">213562</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2017-03-07 19:46:19 -0800 (Tue, 07 Mar 2017)</dd>
</dl>
<h3>Log Message</h3>
<pre>Perf and layout test results should report using correct scm revision.
https://bugs.webkit.org/show_bug.cgi?id=169171
Patch by Kocsen Chung <kocsen_chung@apple.com> on 2017-03-07
Reviewed by Ryosuke Niwa.
For accurate record keeping, perf test and layout test results should
report using the native scm revision as an identifier.
To do so we introduce a new scm functions:
`native_revision()` and `timestamp_of_native_revision()`.
The former is responsible for returning a git hash if scm.git or an
svn revision if scm.svn. The latter is responsible for retrieving the correct timestamp.
We also add the corresponding tests and a helper function `_most_recent_log_for_revision`.
* Scripts/webkitpy/common/checkout/scm/scm.py:
(SCM.run):
Drive-by indentation fix to adhere to WebKit style conventions.
(SCM.svn_revision):
Remove superfluous comment.
(SCM.native_revision):
Add new abstract function `native_revision` and make it a `_subclass_must_implement()`
as we want to closely mimic `svn_revision()` function due to their similar behavior.
(SCM.timestamp_of_native_revision):
Add new abstract function `timestamp_of_native_revision` to closely mimic `timestamp_of_revision`.
* Scripts/webkitpy/common/checkout/scm/git.py:
(Git._most_recent_log_for_revision):
New helper function similar to `_most_recent_log_matching` that is git hash friendly.
(Git.native_revision):
Implement new function `native_revision()`. Get the native_revision by running:
`git log -1 --pretty=format:%H`
and thus returning the latest git hash (in long format).
(Git.timestamp_of_native_revision):
Since perftestrunner and layout_test.controllers.manager use the new native_revision
function, we create a new native_revision timestamp retriever.
You will notice this uses a far more simplified way to retrieve UTC strict-ISO timestamp
than its non-native counterpart: `timestamp_of_revision()`.
* Scripts/webkitpy/common/checkout/scm/svn.py:
(SVN.native_revision):
Implement native_revision for SVN: simply return self.svn_revision()
(SVN.timestamp_of_native_revision):
Implement timestamp_of_native_revision for SVN: simply return self.timestamp_of_revision()
* Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
(test_native_revision):
[SVN] Confirm that svn_revision == native_revision. And that native_revision returns 5.
Use '.' as the path parameter instead of svn_checkout_path to avoid violating pylint/E1101
and since we are guaranteed by test setUp to be in the correct SVN dir.
(GitTest.test_native_revision):
[Git] Confirm that `git rev-parse HEAD` is equal to newly implemented native_revision().
(GitSVNTest.test_native_revision):
[Git] Confirm that `git rev-parse HEAD` is equal to newly implemented native_revision().
(test_timestamp_of_native_revision):
Test new function `timestamp_of_native_revision`. Very similar fashion to
`test_timestamp_of_revision`.
* Scripts/webkitpy/common/checkout/scm/scm_mock.py:
(MockSCM.native_revision):
Add MockSCM.native_revision to behave like svn.py (default).
(MockSCM.test_native_revision):
Add MockSCM.test_native_revision to behave like its non-native counterpart.
* Scripts/webkitpy/layout_tests/controllers/manager.py:
(Manager.upload_results):
When iterating through a list of projects, make sure we use the project's new native revision.
* Scripts/webkitpy/performance_tests/perftestsrunner.py:
(_generate_results_dict):
As per the FIXME in manager.py, we have duplicate code in perftestsrunner.py.
So make the same exact change here.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptswebkitpycommoncheckoutscmgitpy">trunk/Tools/Scripts/webkitpy/common/checkout/scm/git.py</a></li>
<li><a href="#trunkToolsScriptswebkitpycommoncheckoutscmscmpy">trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm.py</a></li>
<li><a href="#trunkToolsScriptswebkitpycommoncheckoutscmscm_mockpy">trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_mock.py</a></li>
<li><a href="#trunkToolsScriptswebkitpycommoncheckoutscmscm_unittestpy">trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py</a></li>
<li><a href="#trunkToolsScriptswebkitpycommoncheckoutscmsvnpy">trunk/Tools/Scripts/webkitpy/common/checkout/scm/svn.py</a></li>
<li><a href="#trunkToolsScriptswebkitpylayout_testscontrollersmanagerpy">trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py</a></li>
<li><a href="#trunkToolsScriptswebkitpyperformance_testsperftestsrunnerpy">trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/ChangeLog        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -1,3 +1,76 @@
</span><ins>+2017-03-07 Kocsen Chung <kocsen_chung@apple.com>
+
+ Perf and layout test results should report using correct scm revision.
+ https://bugs.webkit.org/show_bug.cgi?id=169171
+
+ Reviewed by Ryosuke Niwa.
+
+ For accurate record keeping, perf test and layout test results should
+ report using the native scm revision as an identifier.
+ To do so we introduce a new scm functions:
+ `native_revision()` and `timestamp_of_native_revision()`.
+ The former is responsible for returning a git hash if scm.git or an
+ svn revision if scm.svn. The latter is responsible for retrieving the correct timestamp.
+ We also add the corresponding tests and a helper function `_most_recent_log_for_revision`.
+
+ * Scripts/webkitpy/common/checkout/scm/scm.py:
+ (SCM.run):
+ Drive-by indentation fix to adhere to WebKit style conventions.
+ (SCM.svn_revision):
+ Remove superfluous comment.
+ (SCM.native_revision):
+ Add new abstract function `native_revision` and make it a `_subclass_must_implement()`
+ as we want to closely mimic `svn_revision()` function due to their similar behavior.
+ (SCM.timestamp_of_native_revision):
+ Add new abstract function `timestamp_of_native_revision` to closely mimic `timestamp_of_revision`.
+
+ * Scripts/webkitpy/common/checkout/scm/git.py:
+ (Git._most_recent_log_for_revision):
+ New helper function similar to `_most_recent_log_matching` that is git hash friendly.
+ (Git.native_revision):
+ Implement new function `native_revision()`. Get the native_revision by running:
+
+ `git log -1 --pretty=format:%H`
+
+ and thus returning the latest git hash (in long format).
+ (Git.timestamp_of_native_revision):
+ Since perftestrunner and layout_test.controllers.manager use the new native_revision
+ function, we create a new native_revision timestamp retriever.
+ You will notice this uses a far more simplified way to retrieve UTC strict-ISO timestamp
+ than its non-native counterpart: `timestamp_of_revision()`.
+ * Scripts/webkitpy/common/checkout/scm/svn.py:
+ (SVN.native_revision):
+ Implement native_revision for SVN: simply return self.svn_revision()
+ (SVN.timestamp_of_native_revision):
+ Implement timestamp_of_native_revision for SVN: simply return self.timestamp_of_revision()
+
+ * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
+ (test_native_revision):
+ [SVN] Confirm that svn_revision == native_revision. And that native_revision returns 5.
+ Use '.' as the path parameter instead of svn_checkout_path to avoid violating pylint/E1101
+ and since we are guaranteed by test setUp to be in the correct SVN dir.
+ (GitTest.test_native_revision):
+ [Git] Confirm that `git rev-parse HEAD` is equal to newly implemented native_revision().
+ (GitSVNTest.test_native_revision):
+ [Git] Confirm that `git rev-parse HEAD` is equal to newly implemented native_revision().
+ (test_timestamp_of_native_revision):
+ Test new function `timestamp_of_native_revision`. Very similar fashion to
+ `test_timestamp_of_revision`.
+
+ * Scripts/webkitpy/common/checkout/scm/scm_mock.py:
+ (MockSCM.native_revision):
+ Add MockSCM.native_revision to behave like svn.py (default).
+ (MockSCM.test_native_revision):
+ Add MockSCM.test_native_revision to behave like its non-native counterpart.
+
+ * Scripts/webkitpy/layout_tests/controllers/manager.py:
+ (Manager.upload_results):
+ When iterating through a list of projects, make sure we use the project's new native revision.
+ * Scripts/webkitpy/performance_tests/perftestsrunner.py:
+ (_generate_results_dict):
+ As per the FIXME in manager.py, we have duplicate code in perftestsrunner.py.
+ So make the same exact change here.
+
</ins><span class="cx"> 2017-03-07 Tim Horton <timothy_horton@apple.com>
</span><span class="cx">
</span><span class="cx"> Fix the TestWebKitAPI build
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpycommoncheckoutscmgitpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/common/checkout/scm/git.py (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/common/checkout/scm/git.py        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/Scripts/webkitpy/common/checkout/scm/git.py        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -270,6 +270,9 @@
</span><span class="cx"> # git 1.7.0.4 (and earlier) didn't support the separate arg.
</span><span class="cx"> return self._run_git(['log', '-1', '--grep=' + grep_str, '--date=iso', self.find_checkout_root(path)])
</span><span class="cx">
</span><ins>+ def _most_recent_log_for_revision(self, revision, path):
+ return self._run_git(['log', '-1', revision, '--date=iso', self.find_checkout_root(path)])
+
</ins><span class="cx"> def svn_revision(self, path):
</span><span class="cx"> git_log = self._most_recent_log_matching('git-svn-id:', path)
</span><span class="cx"> match = re.search("^\s*git-svn-id:.*@(?P<svn_revision>\d+)\ ", git_log, re.MULTILINE)
</span><span class="lines">@@ -277,6 +280,9 @@
</span><span class="cx"> return ""
</span><span class="cx"> return str(match.group('svn_revision'))
</span><span class="cx">
</span><ins>+ def native_revision(self, path):
+ return self._run_git(['log', '-1', '--pretty=format:%H', self.find_checkout_root(path)])
+
</ins><span class="cx"> def svn_url(self):
</span><span class="cx"> git_command = ['svn', 'info']
</span><span class="cx"> status = self._run_git(git_command)
</span><span class="lines">@@ -300,6 +306,11 @@
</span><span class="cx"> time_without_timezone = time_with_timezone - datetime.timedelta(hours=sign * int(match.group(8)), minutes=int(match.group(9)))
</span><span class="cx"> return time_without_timezone.strftime('%Y-%m-%dT%H:%M:%SZ')
</span><span class="cx">
</span><ins>+ def timestamp_of_native_revision(self, path, sha):
+ unix_timestamp = self._run_git(['log', '-1', sha, '--pretty="format:%ct"', self.find_checkout_root(path)]).rstrip()
+ commit_timestamp = datetime.datetime.utcfromtimestamp(float(unix_timestamp))
+ return commit_timestamp.strftime('%Y-%m-%dT%H:%M:%SZ')
+
</ins><span class="cx"> def prepend_svn_revision(self, diff):
</span><span class="cx"> revision = self.head_svn_revision()
</span><span class="cx"> if not revision:
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpycommoncheckoutscmscmpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm.py (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm.py        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm.py        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -69,12 +69,12 @@
</span><span class="cx"> def run(self, args, cwd=None, input=None, error_handler=None, return_exit_code=False, return_stderr=True, decode_output=True):
</span><span class="cx"> # FIXME: We should set cwd appropriately.
</span><span class="cx"> return self._executive.run_command(args,
</span><del>- cwd=cwd,
- input=input,
- error_handler=error_handler,
- return_exit_code=return_exit_code,
- return_stderr=return_stderr,
- decode_output=decode_output)
</del><ins>+ cwd=cwd,
+ input=input,
+ error_handler=error_handler,
+ return_exit_code=return_exit_code,
+ return_stderr=return_stderr,
+ decode_output=decode_output)
</ins><span class="cx">
</span><span class="cx"> # SCM always returns repository relative path, but sometimes we need
</span><span class="cx"> # absolute paths to pass to rm, etc.
</span><span class="lines">@@ -158,12 +158,17 @@
</span><span class="cx"> return self.svn_revision(self.checkout_root)
</span><span class="cx">
</span><span class="cx"> def svn_revision(self, path):
</span><del>- """Returns the latest svn revision found in the checkout."""
</del><span class="cx"> self._subclass_must_implement()
</span><span class="cx">
</span><ins>+ def native_revision(self, path):
+ self._subclass_must_implement()
+
</ins><span class="cx"> def timestamp_of_revision(self, path, revision):
</span><span class="cx"> self._subclass_must_implement()
</span><span class="cx">
</span><ins>+ def timestamp_of_native_revision(self, path, revision):
+ self._subclass_must_implement()
+
</ins><span class="cx"> def create_patch(self, git_commit=None, changed_files=None):
</span><span class="cx"> self._subclass_must_implement()
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpycommoncheckoutscmscm_mockpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_mock.py (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_mock.py        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_mock.py        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -84,9 +84,15 @@
</span><span class="cx"> def svn_revision(self, path):
</span><span class="cx"> return '5678'
</span><span class="cx">
</span><ins>+ def native_revision(self, path):
+ return self.svn_revision(path)
+
</ins><span class="cx"> def timestamp_of_revision(self, path, revision):
</span><span class="cx"> return '2013-02-01 08:48:05 +0000'
</span><span class="cx">
</span><ins>+ def timestamp_of_native_revision(self, path, revision):
+ return '2013-02-01 08:48:05 +0000'
+
</ins><span class="cx"> def create_patch(self, git_commit, changed_files=None):
</span><span class="cx"> return "Patch1"
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpycommoncheckoutscmscm_unittestpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/Scripts/webkitpy/common/checkout/scm/scm_unittest.py        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -902,6 +902,10 @@
</span><span class="cx"> def test_head_svn_revision(self):
</span><span class="cx"> self._shared_test_head_svn_revision()
</span><span class="cx">
</span><ins>+ def test_native_revision(self):
+ self.assertEqual(self.scm.head_svn_revision(), self.scm.native_revision('.'))
+ self.assertEqual(self.scm.native_revision('.'), '5')
+
</ins><span class="cx"> def test_propset_propget(self):
</span><span class="cx"> filepath = os.path.join(self.svn_checkout_path, "test_file")
</span><span class="cx"> expected_mime_type = "x-application/foo-bar"
</span><span class="lines">@@ -1080,6 +1084,11 @@
</span><span class="cx"> # self._shared_test_head_svn_revision().
</span><span class="cx"> self.assertEqual(scm.head_svn_revision(), '')
</span><span class="cx">
</span><ins>+ def test_native_revision(self):
+ scm = self.tracking_scm
+ command = ['git', '-C', scm.checkout_root, 'rev-parse', 'HEAD']
+ self.assertEqual(scm.native_revision(scm.checkout_root), run_command(command).strip())
+
</ins><span class="cx"> def test_rename_files(self):
</span><span class="cx"> scm = self.tracking_scm
</span><span class="cx">
</span><span class="lines">@@ -1591,6 +1600,10 @@
</span><span class="cx"> def test_head_svn_revision(self):
</span><span class="cx"> self._shared_test_head_svn_revision()
</span><span class="cx">
</span><ins>+ def test_native_revision(self):
+ command = ['git', '-C', self.git_checkout_path, 'rev-parse', 'HEAD']
+ self.assertEqual(self.scm.native_revision(self.git_checkout_path), run_command(command).strip())
+
</ins><span class="cx"> def test_to_object_name(self):
</span><span class="cx"> relpath = 'test_file_commit1'
</span><span class="cx"> fullpath = os.path.realpath(os.path.join(self.git_checkout_path, relpath))
</span><span class="lines">@@ -1672,3 +1685,15 @@
</span><span class="cx">
</span><span class="cx"> scm._run_git = lambda args: 'Date: 2013-02-08 01:55:21 -0800'
</span><span class="cx"> self.assertEqual(scm.timestamp_of_revision('some-path', '12345'), '2013-02-08T09:55:21Z')
</span><ins>+
+ def test_timestamp_of_native_revision(self):
+ scm = self.make_scm()
+ scm.find_checkout_root = lambda path: ''
+ scm._run_git = lambda args: '1360310749'
+ self.assertEqual(scm.timestamp_of_native_revision('some-path', '1a1c3b08814bc2a8c15b0f6db63cdce68f2aaa7a'), '2013-02-08T08:05:49Z')
+
+ scm._run_git = lambda args: '1360279923'
+ self.assertEqual(scm.timestamp_of_native_revision('some-path', '1a1c3b08814bc2a8c15b0f6db63cdce68f2aaa7a'), '2013-02-07T23:32:03Z')
+
+ scm._run_git = lambda args: '1360317321'
+ self.assertEqual(scm.timestamp_of_native_revision('some-path', '1a1c3b08814bc2a8c15b0f6db63cdce68f2aaa7a'), '2013-02-08T09:55:21Z')
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpycommoncheckoutscmsvnpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/common/checkout/scm/svn.py (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/common/checkout/scm/svn.py        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/Scripts/webkitpy/common/checkout/scm/svn.py        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -268,6 +268,9 @@
</span><span class="cx"> def svn_revision(self, path):
</span><span class="cx"> return self.value_from_svn_info(path, 'Revision')
</span><span class="cx">
</span><ins>+ def native_revision(self, path):
+ return self.svn_revision(path)
+
</ins><span class="cx"> def timestamp_of_revision(self, path, revision):
</span><span class="cx"> # We use --xml to get timestamps like 2013-02-08T08:18:04.964409Z
</span><span class="cx"> repository_root = self.value_from_svn_info(self.checkout_root, 'Repository Root')
</span><span class="lines">@@ -275,6 +278,9 @@
</span><span class="cx"> match = re.search(r"^<date>(?P<value>.+)</date>\r?$", info_output, re.MULTILINE)
</span><span class="cx"> return match.group('value')
</span><span class="cx">
</span><ins>+ def timestamp_of_native_revision(self, path, revision):
+ return self.timestamp_of_revision(path, revision)
+
</ins><span class="cx"> # FIXME: This method should be on Checkout.
</span><span class="cx"> def create_patch(self, git_commit=None, changed_files=None, git_index=None):
</span><span class="cx"> """Returns a byte array (str()) representing the patch file.
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpylayout_testscontrollersmanagerpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -471,8 +471,8 @@
</span><span class="cx"> # FIXME: This code is duplicated in PerfTestRunner._generate_results_dict
</span><span class="cx"> for (name, path) in self._port.repository_paths():
</span><span class="cx"> scm = SCMDetector(self._port.host.filesystem, self._port.host.executive).detect_scm_system(path) or self._port.host.scm()
</span><del>- revision = scm.svn_revision(path)
- revisions[name] = {'revision': revision, 'timestamp': scm.timestamp_of_revision(path, revision)}
</del><ins>+ revision = scm.native_revision(path)
+ revisions[name] = {'revision': revision, 'timestamp': scm.timestamp_of_native_revision(path, revision)}
</ins><span class="cx">
</span><span class="cx"> _log.info("Uploading JSON files for master: %s builder: %s build: %s slave: %s to %s", master_name, builder_name, build_number, build_slave, hostname)
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpyperformance_testsperftestsrunnerpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py (213561 => 213562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py        2017-03-08 03:15:02 UTC (rev 213561)
+++ trunk/Tools/Scripts/webkitpy/performance_tests/perftestsrunner.py        2017-03-08 03:46:19 UTC (rev 213562)
</span><span class="lines">@@ -270,8 +270,8 @@
</span><span class="cx"> revisions = {}
</span><span class="cx"> for (name, path) in self._port.repository_paths():
</span><span class="cx"> scm = SCMDetector(self._host.filesystem, self._host.executive).detect_scm_system(path) or self._host.scm()
</span><del>- revision = scm.svn_revision(path)
- revisions[name] = {'revision': revision, 'timestamp': scm.timestamp_of_revision(path, revision)}
</del><ins>+ revision = scm.native_revision(path)
+ revisions[name] = {'revision': revision, 'timestamp': scm.timestamp_of_native_revision(path, revision)}
</ins><span class="cx">
</span><span class="cx"> meta_info = {
</span><span class="cx"> 'description': description,
</span></span></pre>
</div>
</div>
</body>
</html>