<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>27172</bug_id>
          
          <creation_ts>2009-07-10 20:02:57 -0700</creation_ts>
          <short_desc>bugzilla-tool: create CommitMessage class</short_desc>
          <delta_ts>2009-07-15 17:15:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131053</commentid>
    <comment_count>0</comment_count>
      <attachid>32604</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-07-10 20:02:57 -0700</bug_when>
    <thetext>Created attachment 32604
Patch v1

Reviewed by NOBODY (OOPS!).

Create a CommitMessage class to encapsulate related code.

* Scripts/bugzilla-tool:
(bug_id_from_commit_message): Moved to
CommitMessage.parse_bug_id().
(commit_message_for_this_commit): Return a CommitMessage.
(ApplyPatchesFromBug.apply_patches): Use CommitMessage.message().
(LandPatchesFromBugs.build_and_commit): Ditto.
(CommitMessageForCurrentDiff.execute): Ditto.
(PostCommitsAsPatchesToBug.execute): Switched from
Git.commit_message_for_commit() to
Git.commit_message_for_local_commit().  Switched from
bug_id_from_commit_message() to CommitMessage.parse_bug_id().

* Scripts/modules/scm.py:
(first_non_empty_line_after_index): Added.
(CommitMessage.__init__): Added.
(CommitMessage.body): Added.
(CommitMessage.description): Added.
(CommitMessage.message): Added.
(CommitMessage.parse_bug_id): Added.  Moved from
bug_id_from_commit_message() in bugzilla-tool.
(Git.commit_message_for_local_commit): Renamed from
commit_message_for_commit().  Return a CommitMessage.
---
 3 files changed, 87 insertions(+), 21 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131080</commentid>
    <comment_count>1</comment_count>
      <attachid>32604</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-10 23:04:13 -0700</bug_when>
    <thetext>Comment on attachment 32604
Patch v1

It&apos;s difficult for me to tell where the divide between a CommitMessage class and ChangeLog* classes should be.

 114     return CommitMessage(&apos;&apos;.join(changelog_messages).splitlines())
Seems a little odd to take an array of lines, but OK.

Maybe CommitMessage should take an array of ChangeLog paths instead? (eventually probably an array of ChangeLog entries?)

Should we name this bug_id and have it lazily call parse_bug_id?
 426             bug_id = options.bug_id or commit_message.parse_bug_id()

I don&apos;t understand this code:
 72         if strip_url:
 73             line = re.sub(&quot;^(\s*)&lt;.+&gt; &quot;, &quot;\1&quot;, line)

Seems it at least needs a comment.  I assume this is some new prepare-ChangeLog thing which I&apos;m not used to yet?

Some of this code really seems to belong in a ChangeLogEntry class.

Seems odd that these lines don&apos;t match:
 81             match = re.search(&quot;http\://webkit\.org/b/(?P&lt;bug_id&gt;\d+)&quot;, line)
 84             match = re.search(Bugzilla.bug_server_regex + &quot;show_bug\.cgi\?id=(?P&lt;bug_id&gt;\d+)&quot;, line)

I don&apos;t think this is needed:
 87         return None

I think this is OK.  But you might want to try some of the comments above.  I think much of this will end up in a ChangeLogEntry class instead of in CommitMessage.  CommitMessage seems useful for doing all the commit-log-editor stuff dealing with ChangeLogEntry (or similar) classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131081</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-10 23:04:57 -0700</bug_when>
    <thetext>Thanks again for all your hard work on bugzilla-tool.  I&apos;m very glad to see someone else using it.  I&apos;m trying to take a step back for a moment, so I&apos;m glad to see you running with things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132007</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-07-15 13:16:00 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/45940.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132098</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-07-15 17:15:13 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (From update of attachment 32604 [details])
&gt; It&apos;s difficult for me to tell where the divide between a CommitMessage class
&gt; and ChangeLog* classes should be.
&gt; 
&gt;  114     return CommitMessage(&apos;&apos;.join(changelog_messages).splitlines())
&gt; Seems a little odd to take an array of lines, but OK.
&gt; 
&gt; Maybe CommitMessage should take an array of ChangeLog paths instead?
&gt; (eventually probably an array of ChangeLog entries?)

After thinking about this over the weekend, I do think a CommitMessage object should contain a list of ChangeLogEntry objects.  It could then use these objects to create a commit message string.

&gt; Should we name this bug_id and have it lazily call parse_bug_id?
&gt;  426             bug_id = options.bug_id or commit_message.parse_bug_id()

Yes.

&gt; I don&apos;t understand this code:
&gt;  72         if strip_url:
&gt;  73             line = re.sub(&quot;^(\s*)&lt;.+&gt; &quot;, &quot;\1&quot;, line)
&gt; 
&gt; Seems it at least needs a comment.  I assume this is some new prepare-ChangeLog
&gt; thing which I&apos;m not used to yet?

This would strip the URL&quot; off the beginning of a bug description, e.g.:

&lt;rdar://problem/1234567&gt; This is a serious bug
&lt;http://webkit.org/b/12345&gt; This is an even more serious bug

The new &quot;webkit.org/b/NNNNN&quot; URL was discussed on webkit-dev recently.

&gt; Some of this code really seems to belong in a ChangeLogEntry class.

Yes, per above discussion.

&gt; Seems odd that these lines don&apos;t match:
&gt;  81             match = re.search(&quot;http\://webkit\.org/b/(?P&lt;bug_id&gt;\d+)&quot;,
&gt; line)
&gt;  84             match = re.search(Bugzilla.bug_server_regex +
&gt; &quot;show_bug\.cgi\?id=(?P&lt;bug_id&gt;\d+)&quot;, line)

The first one parses out the shortened WebKit bug URL format (&quot;webkit.org/b/NNNNN&quot;).  The second parses out the bugs.webkit.org URL format.

&gt; I don&apos;t think this is needed:
&gt;  87         return None

None is returned implicitly if there is no return statement?

&gt; I think this is OK.  But you might want to try some of the comments above.  I
&gt; think much of this will end up in a ChangeLogEntry class instead of in
&gt; CommitMessage.  CommitMessage seems useful for doing all the commit-log-editor
&gt; stuff dealing with ChangeLogEntry (or similar) classes.

Brent committed this before I had a chance to clear the review flag.  (It doesn&apos;t hurt that it landed, though.  I can continue refactoring CommitMessage to use ChangeLogEntry objects.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32604</attachid>
            <date>2009-07-10 20:02:57 -0700</date>
            <delta_ts>2009-07-10 23:04:13 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>20090710200256.patch</filename>
            <type>text/plain</type>
            <size>8443</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyNjRhOWI4Li43Nzg4OGI4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYgQEAKIDIwMDktMDct
MTAgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAorICAgICAgICBidWd6aWxs
YS10b29sOiBjcmVhdGUgQ29tbWl0TWVzc2FnZSBjbGFzcworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyZWF0ZSBhIENvbW1pdE1lc3NhZ2UgY2xhc3Mg
dG8gZW5jYXBzdWxhdGUgcmVsYXRlZCBjb2RlLgorCisgICAgICAgICogU2NyaXB0cy9idWd6aWxs
YS10b29sOgorICAgICAgICAoYnVnX2lkX2Zyb21fY29tbWl0X21lc3NhZ2UpOiBNb3ZlZCB0bwor
ICAgICAgICBDb21taXRNZXNzYWdlLnBhcnNlX2J1Z19pZCgpLgorICAgICAgICAoY29tbWl0X21l
c3NhZ2VfZm9yX3RoaXNfY29tbWl0KTogUmV0dXJuIGEgQ29tbWl0TWVzc2FnZS4KKyAgICAgICAg
KEFwcGx5UGF0Y2hlc0Zyb21CdWcuYXBwbHlfcGF0Y2hlcyk6IFVzZSBDb21taXRNZXNzYWdlLm1l
c3NhZ2UoKS4KKyAgICAgICAgKExhbmRQYXRjaGVzRnJvbUJ1Z3MuYnVpbGRfYW5kX2NvbW1pdCk6
IERpdHRvLgorICAgICAgICAoQ29tbWl0TWVzc2FnZUZvckN1cnJlbnREaWZmLmV4ZWN1dGUpOiBE
aXR0by4KKyAgICAgICAgKFBvc3RDb21taXRzQXNQYXRjaGVzVG9CdWcuZXhlY3V0ZSk6IFN3aXRj
aGVkIGZyb20KKyAgICAgICAgR2l0LmNvbW1pdF9tZXNzYWdlX2Zvcl9jb21taXQoKSB0bworICAg
ICAgICBHaXQuY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdCgpLiAgU3dpdGNoZWQgZnJv
bQorICAgICAgICBidWdfaWRfZnJvbV9jb21taXRfbWVzc2FnZSgpIHRvIENvbW1pdE1lc3NhZ2Uu
cGFyc2VfYnVnX2lkKCkuCisKKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvc2NtLnB5OgorICAg
ICAgICAoZmlyc3Rfbm9uX2VtcHR5X2xpbmVfYWZ0ZXJfaW5kZXgpOiBBZGRlZC4KKyAgICAgICAg
KENvbW1pdE1lc3NhZ2UuX19pbml0X18pOiBBZGRlZC4KKyAgICAgICAgKENvbW1pdE1lc3NhZ2Uu
Ym9keSk6IEFkZGVkLgorICAgICAgICAoQ29tbWl0TWVzc2FnZS5kZXNjcmlwdGlvbik6IEFkZGVk
LgorICAgICAgICAoQ29tbWl0TWVzc2FnZS5tZXNzYWdlKTogQWRkZWQuCisgICAgICAgIChDb21t
aXRNZXNzYWdlLnBhcnNlX2J1Z19pZCk6IEFkZGVkLiAgTW92ZWQgZnJvbQorICAgICAgICBidWdf
aWRfZnJvbV9jb21taXRfbWVzc2FnZSgpIGluIGJ1Z3ppbGxhLXRvb2wuCisgICAgICAgIChHaXQu
Y29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdCk6IFJlbmFtZWQgZnJvbQorICAgICAgICBj
b21taXRfbWVzc2FnZV9mb3JfY29tbWl0KCkuICBSZXR1cm4gYSBDb21taXRNZXNzYWdlLgorCisy
MDA5LTA3LTEwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKICAgICAgICAg
PGh0dHA6Ly93ZWJraXQub3JnL2IvMjcxMTc+IGJ1Z3ppbGxhLXRvb2w6IHVzZSBNYWMgT1MgWCBr
ZXljaGFpbiBmb3IgYXV0aGVudGljYXRpb24KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbCBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbAppbmRleCA3YjYyNGI5Li5hOGE2NThkIDEw
MDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCkBAIC05NiwxNSArOTYsNiBAQCBkZWYgbW9kaWZp
ZWRfY2hhbmdlbG9ncyhzY20pOgogICAgICAgICAgICAgY2hhbmdlbG9nX3BhdGhzLmFwcGVuZChw
YXRoKQogICAgIHJldHVybiBjaGFuZ2Vsb2dfcGF0aHMKIAotZGVmIGJ1Z19pZF9mcm9tX2NvbW1p
dF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlKToKLSAgICBtYXRjaCA9IHJlLnNlYXJjaCgiaHR0cFw6
Ly93ZWJraXRcLm9yZy9iLyg/UDxidWdfaWQ+XGQrKSIsIGNvbW1pdF9tZXNzYWdlLCByZS5NVUxU
SUxJTkUpCi0gICAgaWYgbWF0Y2g6Ci0gICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgnYnVnX2lk
JykKLSAgICBtYXRjaCA9IHJlLnNlYXJjaChCdWd6aWxsYS5idWdfc2VydmVyX3JlZ2V4ICsgInNo
b3dfYnVnXC5jZ2lcP2lkPSg/UDxidWdfaWQ+XGQrKSIsIGNvbW1pdF9tZXNzYWdlLCByZS5NVUxU
SUxJTkUpCi0gICAgaWYgbWF0Y2g6Ci0gICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgnYnVnX2lk
JykKLSAgICByZXR1cm4gTm9uZQotCiBkZWYgY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0
KHNjbSk6CiAgICAgY2hhbmdlbG9nX3BhdGhzID0gbW9kaWZpZWRfY2hhbmdlbG9ncyhzY20pCiAg
ICAgaWYgbm90IGxlbihjaGFuZ2Vsb2dfcGF0aHMpOgpAQCAtMTIwLDcgKzExMSw3IEBAIGRlZiBj
b21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQoc2NtKToKICAgICAgICAgY2hhbmdlbG9nX21l
c3NhZ2VzLmFwcGVuZChjaGFuZ2Vsb2dfZW50cnkpCiAgICAgCiAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIHNvcnQgYW5kIGxhYmVsIHRoZSBDaGFuZ2VMb2cgbWVzc2FnZXMgbGlrZSBjb21taXQtbG9n
LWVkaXRvciBkb2VzLgotICAgIHJldHVybiAnJy5qb2luKGNoYW5nZWxvZ19tZXNzYWdlcykKKyAg
ICByZXR1cm4gQ29tbWl0TWVzc2FnZSgnJy5qb2luKGNoYW5nZWxvZ19tZXNzYWdlcykuc3BsaXRs
aW5lcygpKQogCiAKIGNsYXNzIENvbW1hbmQ6CkBAIC0xOTMsNyArMTg0LDcgQEAgY2xhc3MgQXBw
bHlQYXRjaGVzRnJvbUJ1ZyhDb21tYW5kKToKICAgICAgICAgICAgIHNjbS5hcHBseV9wYXRjaChw
YXRjaCkKICAgICAgICAgICAgIGlmIGNvbW1pdF9lYWNoOgogICAgICAgICAgICAgICAgIGNvbW1p
dF9tZXNzYWdlID0gY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0KHNjbSkKLSAgICAgICAg
ICAgICAgICBzY20uY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlIG9y
IHBhdGNoWyduYW1lJ10pCisgICAgICAgICAgICAgICAgc2NtLmNvbW1pdF9sb2NhbGx5X3dpdGhf
bWVzc2FnZShjb21taXRfbWVzc2FnZS5tZXNzYWdlKCkgb3IgcGF0Y2hbJ25hbWUnXSkKIAogICAg
IGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICBidWdfaWQg
PSBhcmdzWzBdCkBAIC0zMTMsNyArMzA0LDcgQEAgY2xhc3MgTGFuZFBhdGNoZXNGcm9tQnVncyhD
b21tYW5kKToKICAgICAgICAgICAgIGlmIG9wdGlvbnMudGVzdDoKICAgICAgICAgICAgICAgICBj
bHMucnVuX3dlYmtpdF90ZXN0cygpCiAgICAgICAgIGNvbW1pdF9tZXNzYWdlID0gY29tbWl0X21l
c3NhZ2VfZm9yX3RoaXNfY29tbWl0KHNjbSkKLSAgICAgICAgY29tbWl0X2xvZyA9IHNjbS5jb21t
aXRfd2l0aF9tZXNzYWdlKGNvbW1pdF9tZXNzYWdlKQorICAgICAgICBjb21taXRfbG9nID0gc2Nt
LmNvbW1pdF93aXRoX21lc3NhZ2UoY29tbWl0X21lc3NhZ2UubWVzc2FnZSgpKQogICAgICAgICBy
ZXR1cm4gYnVnX2NvbW1lbnRfZnJvbV9jb21taXRfdGV4dChzY20sIGNvbW1pdF9sb2cpCiAKICAg
ICBAY2xhc3NtZXRob2QKQEAgLTM2Myw3ICszNTQsNyBAQCBjbGFzcyBDb21taXRNZXNzYWdlRm9y
Q3VycmVudERpZmYoQ29tbWFuZCk6CiAKICAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBh
cmdzLCB0b29sKToKICAgICAgICAgb3MuY2hkaXIodG9vbC5zY20oKS5jaGVja291dF9yb290KQot
ICAgICAgICBwcmludCAiJXMiICUgY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0KHRvb2wu
c2NtKCkpCisgICAgICAgIHByaW50ICIlcyIgJSBjb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21t
aXQodG9vbC5zY20oKSkubWVzc2FnZSgpCiAKIAogY2xhc3MgT2Jzb2xldGVBdHRhY2htZW50c09u
QnVnKENvbW1hbmQpOgpAQCAtNDMwLDEwICs0MjEsOSBAQCBjbGFzcyBQb3N0Q29tbWl0c0FzUGF0
Y2hlc1RvQnVnKENvbW1hbmQpOgogCiAgICAgICAgIGhhdmVfb2Jzb2xldGVkX3BhdGNoZXMgPSBz
ZXQoKQogICAgICAgICBmb3IgY29tbWl0X2lkIGluIGNvbW1pdF9pZHM6Ci0gICAgICAgICAgICBj
b21taXRfbWVzc2FnZSA9IHRvb2wuc2NtKCkuY29tbWl0X21lc3NhZ2VfZm9yX2NvbW1pdChjb21t
aXRfaWQpCi0gICAgICAgICAgICBjb21taXRfbGluZXMgPSBjb21taXRfbWVzc2FnZS5zcGxpdGxp
bmVzKCkKKyAgICAgICAgICAgIGNvbW1pdF9tZXNzYWdlID0gdG9vbC5zY20oKS5jb21taXRfbWVz
c2FnZV9mb3JfbG9jYWxfY29tbWl0KGNvbW1pdF9pZCkKIAotICAgICAgICAgICAgYnVnX2lkID0g
b3B0aW9ucy5idWdfaWQgb3IgYnVnX2lkX2Zyb21fY29tbWl0X21lc3NhZ2UoY29tbWl0X21lc3Nh
Z2UpCisgICAgICAgICAgICBidWdfaWQgPSBvcHRpb25zLmJ1Z19pZCBvciBjb21taXRfbWVzc2Fn
ZS5wYXJzZV9idWdfaWQoKQogICAgICAgICAgICAgaWYgbm90IGJ1Z19pZDoKICAgICAgICAgICAg
ICAgICBsb2coIlNraXBwaW5nICVzOiBObyBidWcgaWQgZm91bmQgaW4gY29tbWl0IGxvZyBvciBz
cGVjaWZpZWQgd2l0aCAtLWJ1Zy1pZC4iICUgY29tbWl0X2lkKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlCkBAIC00NDIsMTEgKzQzMiwxMSBAQCBjbGFzcyBQb3N0Q29tbWl0c0FzUGF0Y2hlc1Rv
QnVnKENvbW1hbmQpOgogICAgICAgICAgICAgICAgIFBvc3REaWZmQXNQYXRjaFRvQnVnLm9ic29s
ZXRlX3BhdGNoZXNfb25fYnVnKGJ1Z19pZCwgdG9vbC5idWdzKQogICAgICAgICAgICAgICAgIGhh
dmVfb2Jzb2xldGVkX3BhdGNoZXMudXBkYXRlKGJ1Z19pZCkKIAotICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSBjb21taXRfbGluZXNbMF0KKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gY29tbWl0
X21lc3NhZ2UuZGVzY3JpcHRpb24obHN0cmlwPVRydWUsIHN0cmlwX3VybD1UcnVlKQogICAgICAg
ICAgICAgY29tbWVudF90ZXh0ID0gTm9uZQogICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29tbWVu
dCk6Ci0gICAgICAgICAgICAgICAgY29tbWVudF90ZXh0ID0gIlxuIi5qb2luKGNvbW1pdF9saW5l
c1sxOl0pCi0gICAgICAgICAgICAgICAgY29tbWVudF90ZXh0ICs9ICJcbi0tLVxuIgorICAgICAg
ICAgICAgICAgIGNvbW1lbnRfdGV4dCA9IGNvbW1pdF9tZXNzYWdlLmJvZHkobHN0cmlwPVRydWUp
CisgICAgICAgICAgICAgICAgY29tbWVudF90ZXh0ICs9ICItLS1cbiIKICAgICAgICAgICAgICAg
ICBjb21tZW50X3RleHQgKz0gdG9vbC5zY20oKS5maWxlc19jaGFuZ2VkX3N1bW1hcnlfZm9yX2Nv
bW1pdChjb21taXRfaWQpCiAKICAgICAgICAgICAgIGRpZmYgPSB0b29sLnNjbSgpLmNyZWF0ZV9w
YXRjaF9mcm9tX2xvY2FsX2NvbW1pdChjb21taXRfaWQpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvc2NtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3Nj
bS5weQppbmRleCA1YTcwNmIxLi5iZmU3OTJlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL21vZHVsZXMvc2NtLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY20u
cHkKQEAgLTQ1LDkgKzQ1LDUyIEBAIGRlZiBkZXRlY3Rfc2NtX3N5c3RlbShwYXRoKToKICAgICAK
ICAgICByZXR1cm4gTm9uZQogCitkZWYgZmlyc3Rfbm9uX2VtcHR5X2xpbmVfYWZ0ZXJfaW5kZXgo
bGluZXMsIGluZGV4PTApOgorICAgIGZpcnN0X25vbl9lbXB0eV9saW5lID0gaW5kZXgKKyAgICBm
b3IgbGluZSBpbiBsaW5lc1tpbmRleDpdOgorICAgICAgICBpZiByZS5tYXRjaCgiXlxzKiQiLCBs
aW5lKToKKyAgICAgICAgICAgIGZpcnN0X25vbl9lbXB0eV9saW5lICs9IDEKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIGZpcnN0X25vbl9lbXB0eV9saW5lCisK
KworY2xhc3MgQ29tbWl0TWVzc2FnZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6
CisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2VbZmlyc3Rfbm9uX2VtcHR5X2xpbmVfYWZ0
ZXJfaW5kZXgobWVzc2FnZSwgMCk6XQorCisgICAgZGVmIGJvZHkoc2VsZiwgbHN0cmlwPUZhbHNl
KToKKyAgICAgICAgbGluZXMgPSBzZWxmLm1lc3NhZ2VbZmlyc3Rfbm9uX2VtcHR5X2xpbmVfYWZ0
ZXJfaW5kZXgoc2VsZi5tZXNzYWdlLCAxKTpdCisgICAgICAgIGlmIGxzdHJpcDoKKyAgICAgICAg
ICAgIGxpbmVzID0gW2xpbmUubHN0cmlwKCkgZm9yIGxpbmUgaW4gbGluZXNdCisgICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpICsgIlxuIgorCisgICAgZGVmIGRlc2NyaXB0aW9uKHNlbGYs
IGxzdHJpcD1GYWxzZSwgc3RyaXBfdXJsPUZhbHNlKToKKyAgICAgICAgbGluZSA9IHNlbGYubWVz
c2FnZVswXQorICAgICAgICBpZiBsc3RyaXA6CisgICAgICAgICAgICBsaW5lID0gbGluZS5sc3Ry
aXAoKQorICAgICAgICBpZiBzdHJpcF91cmw6CisgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCJe
KFxzKik8Lis+ICIsICJcMSIsIGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYg
bWVzc2FnZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLm1lc3NhZ2UpICsg
IlxuIgorCisgICAgZGVmIHBhcnNlX2J1Z19pZChzZWxmKToKKyAgICAgICAgZm9yIGxpbmUgaW4g
c2VsZi5tZXNzYWdlOgorICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goImh0dHBcOi8vd2Vi
a2l0XC5vcmcvYi8oP1A8YnVnX2lkPlxkKykiLCBsaW5lKQorICAgICAgICAgICAgaWYgbWF0Y2g6
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKCdidWdfaWQnKQorICAgICAgICAg
ICAgbWF0Y2ggPSByZS5zZWFyY2goQnVnemlsbGEuYnVnX3NlcnZlcl9yZWdleCArICJzaG93X2J1
Z1wuY2dpXD9pZD0oP1A8YnVnX2lkPlxkKykiLCBsaW5lKQorICAgICAgICAgICAgaWYgbWF0Y2g6
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKCdidWdfaWQnKQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisKIGNsYXNzIFNjcmlwdEVycm9yKEV4Y2VwdGlvbik6CiAgICAgcGFzcwog
CisKIGNsYXNzIFNDTToKICAgICBkZWYgX19pbml0X18oc2VsZiwgY3dkLCBkcnlydW49RmFsc2Up
OgogICAgICAgICBzZWxmLmN3ZCA9IGN3ZApAQCAtMTYyLDYgKzIwNSw3IEBAIGNsYXNzIFNDTToK
ICAgICBkZWYgbG9jYWxfY29tbWl0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIFtdCiAKKwogY2xh
c3MgU1ZOKFNDTSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN3ZCwgZHJ5cnVuPUZhbHNlKToK
ICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwgZHJ5cnVuKQpAQCAtMjI2LDYgKzI3MCw3
IEBAIGNsYXNzIFNWTihTQ00pOgogICAgICAgICAgICAgcmV0dXJuICJEcnkgcnVuLCBubyByZW1v
dGUgY29tbWl0LiIKICAgICAgICAgcmV0dXJuIHNlbGYucnVuX2NvbW1hbmQoWydzdm4nLCAnY29t
bWl0JywgJy1tJywgbWVzc2FnZV0pCiAKKwogIyBBbGwgZ2l0LXNwZWNpZmljIGxvZ2ljIHNob3Vs
ZCBnbyBoZXJlLgogY2xhc3MgR2l0KFNDTSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN3ZCwg
ZHJ5cnVuPUZhbHNlKToKQEAgLTMxNSw3ICszNjAsNyBAQCBjbGFzcyBHaXQoU0NNKToKIAogICAg
ICAgICByZXR1cm4gc2VsZi5ydW5fY29tbWFuZChbJ2dpdCcsICdyZXYtbGlzdCddICsgcmV2aXNp
b25zKS5zcGxpdGxpbmVzKCkKIAotICAgIGRlZiBjb21taXRfbWVzc2FnZV9mb3JfY29tbWl0KHNl
bGYsIGNvbW1pdF9pZCk6CisgICAgZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl9sb2NhbF9jb21taXQo
c2VsZiwgY29tbWl0X2lkKToKICAgICAgICAgY29tbWl0X2xpbmVzID0gc2VsZi5ydW5fY29tbWFu
ZChbJ2dpdCcsICdjYXQtZmlsZScsICdjb21taXQnLCBjb21taXRfaWRdKS5zcGxpdGxpbmVzKCkK
IAogICAgICAgICAjIFNraXAgdGhlIGdpdCBoZWFkZXJzLgpAQCAtMzI0LDcgKzM2OSw3IEBAIGNs
YXNzIEdpdChTQ00pOgogICAgICAgICAgICAgZmlyc3RfbGluZV9hZnRlcl9oZWFkZXJzICs9IDEK
ICAgICAgICAgICAgIGlmIGxpbmUgPT0gIiI6CiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAg
ICAgcmV0dXJuICJcbiIuam9pbihjb21taXRfbGluZXNbZmlyc3RfbGluZV9hZnRlcl9oZWFkZXJz
Ol0pCisgICAgICAgIHJldHVybiBDb21taXRNZXNzYWdlKGNvbW1pdF9saW5lc1tmaXJzdF9saW5l
X2FmdGVyX2hlYWRlcnM6XSkKIAogICAgIGRlZiBmaWxlc19jaGFuZ2VkX3N1bW1hcnlfZm9yX2Nv
bW1pdChzZWxmLCBjb21taXRfaWQpOgogICAgICAgICByZXR1cm4gc2VsZi5ydW5fY29tbWFuZChb
J2dpdCcsICdkaWZmLXRyZWUnLCAnLS1zaG9ydHN0YXQnLCAnLS1uby1jb21taXQtaWQnLCBjb21t
aXRfaWRdKQ==
</data>
<flag name="review"
          id="17018"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>