<!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>[285035] 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/285035">285035</a></dd>
<dt>Author</dt> <dd>jbedard@apple.com</dd>
<dt>Date</dt> <dd>2021-10-29 09:50:16 -0700 (Fri, 29 Oct 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>[webkitscmpy] Assign PR to author
https://bugs.webkit.org/show_bug.cgi?id=232348
<rdar://problem/84685313>

Reviewed by Dewei Zhu.

* Scripts/libraries/webkitscmpy/setup.py: Bump version.
* Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
* Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
(GitHub.request): Add assignees.
* Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
(GitHub.PRGenerator.create): Assign created PR to it's author.
(GitHub.PRGenerator.update): Assign modified PR to it's editor.
* Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py: Add assignees.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptslibrarieswebkitscmpysetuppy">trunk/Tools/Scripts/libraries/webkitscmpy/setup.py</a></li>
<li><a href="#trunkToolsScriptslibrarieswebkitscmpywebkitscmpy__init__py">trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py</a></li>
<li><a href="#trunkToolsScriptslibrarieswebkitscmpywebkitscmpymocksremotegit_hubpy">trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py</a></li>
<li><a href="#trunkToolsScriptslibrarieswebkitscmpywebkitscmpyremotegit_hubpy">trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py</a></li>
<li><a href="#trunkToolsScriptslibrarieswebkitscmpywebkitscmpytestpull_request_unittestpy">trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (285034 => 285035)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2021-10-29 16:48:20 UTC (rev 285034)
+++ trunk/Tools/ChangeLog       2021-10-29 16:50:16 UTC (rev 285035)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2021-10-29  Jonathan Bedard  <jbedard@apple.com>
+
+        [webkitscmpy] Assign PR to author
+        https://bugs.webkit.org/show_bug.cgi?id=232348
+        <rdar://problem/84685313>
+
+        Reviewed by Dewei Zhu.
+
+        * Scripts/libraries/webkitscmpy/setup.py: Bump version.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py: Ditto.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:
+        (GitHub.request): Add assignees.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:
+        (GitHub.PRGenerator.create): Assign created PR to it's author.
+        (GitHub.PRGenerator.update): Assign modified PR to it's editor.
+        * Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py: Add assignees.
+
</ins><span class="cx"> 2021-10-29  Alex Christensen  <achristensen@webkit.org>
</span><span class="cx"> 
</span><span class="cx">         Re-enable two AppPrivacyReport tests
</span></span></pre></div>
<a id="trunkToolsScriptslibrarieswebkitscmpysetuppy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/libraries/webkitscmpy/setup.py (285034 => 285035)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/libraries/webkitscmpy/setup.py       2021-10-29 16:48:20 UTC (rev 285034)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/setup.py  2021-10-29 16:50:16 UTC (rev 285035)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> 
</span><span class="cx"> setup(
</span><span class="cx">     name='webkitscmpy',
</span><del>-    version='2.2.20',
</del><ins>+    version='2.2.21',
</ins><span class="cx">     description='Library designed to interact with git and svn repositories.',
</span><span class="cx">     long_description=readme(),
</span><span class="cx">     classifiers=[
</span></span></pre></div>
<a id="trunkToolsScriptslibrarieswebkitscmpywebkitscmpy__init__py"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py (285034 => 285035)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py        2021-10-29 16:48:20 UTC (rev 285034)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/__init__.py   2021-10-29 16:50:16 UTC (rev 285035)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">         "Please install webkitcorepy with `pip install webkitcorepy --extra-index-url <package index URL>`"
</span><span class="cx">     )
</span><span class="cx"> 
</span><del>-version = Version(2, 2, 20)
</del><ins>+version = Version(2, 2, 21)
</ins><span class="cx"> 
</span><span class="cx"> AutoInstall.register(Package('fasteners', Version(0, 15, 0)))
</span><span class="cx"> AutoInstall.register(Package('jinja2', Version(2, 11, 3)))
</span></span></pre></div>
<a id="trunkToolsScriptslibrarieswebkitscmpywebkitscmpymocksremotegit_hubpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py (285034 => 285035)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py    2021-10-29 16:48:20 UTC (rev 285034)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py       2021-10-29 16:50:16 UTC (rev 285035)
</span><span class="lines">@@ -411,6 +411,11 @@
</span><span class="cx">             pr['user'] = dict(login=auth.username)
</span><span class="cx">             pr['_links'] = dict(issue=dict(href='https://{}/issues/{}'.format(self.api_remote, pr['number'])))
</span><span class="cx">             self.pull_requests.append(pr)
</span><ins>+            if int(pr['number']) not in self.issues:
+                self.issues[int(pr['number'])] = dict(
+                    comments=[],
+                    assignees=[],
+                )
</ins><span class="cx">             return mocks.Response.fromJson(pr, url=url)
</span><span class="cx"> 
</span><span class="cx">         # Update specifically
</span><span class="lines">@@ -444,6 +449,9 @@
</span><span class="cx">                     body=json.get('body', ''),
</span><span class="cx">                 ))
</span><span class="cx">                 return mocks.Response.fromJson(issue['comments'], url=url)
</span><ins>+            if method == 'POST' and stripped_url.split('/')[6] == 'assignees':
+                self.issues[number]['assignees'] = {'login': name for name in json.get('assignees', [])}
+                return mocks.Response.fromJson(issue['assignees'], url=url)
</ins><span class="cx">             return mocks.Response.create404(url)
</span><span class="cx"> 
</span><span class="cx">         return mocks.Response.create404(url)
</span></span></pre></div>
<a id="trunkToolsScriptslibrarieswebkitscmpywebkitscmpyremotegit_hubpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py (285034 => 285035)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py  2021-10-29 16:48:20 UTC (rev 285034)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py     2021-10-29 16:50:16 UTC (rev 285035)
</span><span class="lines">@@ -104,8 +104,19 @@
</span><span class="cx">             )
</span><span class="cx">             if response.status_code // 100 != 2:
</span><span class="cx">                 return None
</span><del>-            return self.PullRequest(response.json())
</del><ins>+            result = self.PullRequest(response.json())
</ins><span class="cx"> 
</span><ins>+            # FIXME: Move this to bug tracking library
+            issue = result._metadata.get('issue')
+            if not issue or requests.post(
+                '{}/assignees'.format(issue),
+                auth=HTTPBasicAuth(*self.repository.credentials()),
+                headers=dict(Accept='application/vnd.github.v3+json'),
+                json=dict(assignees=[user]),
+            ).status_code // 100 != 2:
+                sys.stderr.write("Failed to assign '{}' to '{}'\n".format(result, user))
+            return result
+
</ins><span class="cx">         def update(self, pull_request, head=None, title=None, body=None, commits=None, base=None, opened=None):
</span><span class="cx">             if not isinstance(pull_request, PullRequest):
</span><span class="cx">                 raise ValueError("Expected 'pull_request' to be of type '{}' not '{}'".format(PullRequest, type(pull_request)))
</span><span class="lines">@@ -155,6 +166,18 @@
</span><span class="cx">                 issue=data.get('_links', {}).get('issue', {}).get('href'),
</span><span class="cx">             )
</span><span class="cx"> 
</span><ins>+            # FIXME: Move this to bug tracking library
+            assignees = [node.get('login') for node in data.get('assignees', []) if node.get('login')]
+            if user not in assignees:
+                issue = pull_request._metadata.get('issue')
+                if not issue or requests.post(
+                        '{}/assignees'.format(issue),
+                        auth=HTTPBasicAuth(*self.repository.credentials()),
+                        headers=dict(Accept='application/vnd.github.v3+json'),
+                        json=dict(assignees=assignees + [user]),
+                ).status_code // 100 != 2:
+                    sys.stderr.write("Failed to assign '{}' to '{}'\n".format(pull_request, user))
+
</ins><span class="cx">             return pull_request
</span><span class="cx"> 
</span><span class="cx">         def _contributor(self, username):
</span></span></pre></div>
<a id="trunkToolsScriptslibrarieswebkitscmpywebkitscmpytestpull_request_unittestpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py (285034 => 285035)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py      2021-10-29 16:48:20 UTC (rev 285034)
+++ trunk/Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/pull_request_unittest.py 2021-10-29 16:50:16 UTC (rev 285035)
</span><span class="lines">@@ -445,6 +445,12 @@
</span><span class="cx">             sreviewer=Contributor('Suspicious Reviewer', ['sreviewer@webkit.org'], github='sreviewer'),
</span><span class="cx">             tcontributor=Contributor('Tim Contributor', ['tcontributor@webkit.org']),
</span><span class="cx">         )
</span><ins>+        result.issues = {
+            1: dict(
+                comments=[],
+                assignees=[],
+            )
+        }
</ins><span class="cx">         result.pull_requests = [dict(
</span><span class="cx">             number=1,
</span><span class="cx">             state='open',
</span></span></pre>
</div>
</div>

</body>
</html>