<?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>27847</bug_id>
          
          <creation_ts>2009-07-30 12:03:15 -0700</creation_ts>
          <short_desc>bugzilla-tool post-commits trunk..head errors out</short_desc>
          <delta_ts>2009-07-31 15:52:50 -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>PC</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>evan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135913</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-30 12:03:15 -0700</bug_when>
    <thetext>bugzilla-tool post-commits trunk..head errors out

bugzilla-tool post-commits trunk..head
Skipping fe5ba4cc272372cbd6c14261081e8d0b856cde87: No bug id found in commit log or specified with --bug-id.
fatal: Not a valid object name ^20daa58114c8c3829861a53d405c117352d9ca4f
Traceback (most recent call last):
  File &quot;/Users/eseidel/Projects/WebKit/WebKitTools/Scripts/bugzilla-tool&quot;, line 668, in &lt;module&gt;
    main()
  File &quot;/Users/eseidel/Projects/WebKit/WebKitTools/Scripts/bugzilla-tool&quot;, line 665, in main
    return tool.main()
  File &quot;/Users/eseidel/Projects/WebKit/WebKitTools/Scripts/bugzilla-tool&quot;, line 660, in main
    return command_object.execute(command_options, command_args, self)
  File &quot;/Users/eseidel/Projects/WebKit/WebKitTools/Scripts/bugzilla-tool&quot;, line 431, in execute
    commit_message = tool.scm().commit_message_for_local_commit(commit_id)
  File &quot;/Users/eseidel/Projects/WebKit/WebKitTools/Scripts/modules/scm.py&quot;, line 380, in commit_message_for_local_commit
    commit_lines = self.run_command([&apos;git&apos;, &apos;cat-file&apos;, &apos;commit&apos;, commit_id]).splitlines()
  File &quot;/Users/eseidel/Projects/WebKit/WebKitTools/Scripts/modules/scm.py&quot;, line 108, in run_command
    raise ScriptError(&apos;Failed to run &quot;%s&quot;  exit_code: %d  cwd: %s&apos; % (args, exit_code, cwd))
modules.scm.ScriptError: Failed to run &quot;[&apos;git&apos;, &apos;cat-file&apos;, &apos;commit&apos;, &apos;^20daa58114c8c3829861a53d405c117352d9ca4f&apos;]&quot;  exit_code: 128  cwd: None

Note this is because of our git rev-parse usage:

git rev-parse --revs-only trunk..HEAD
fe5ba4cc272372cbd6c14261081e8d0b856cde87
^20daa58114c8c3829861a53d405c117352d9ca4f

We really want rev-list (most of the time):

git rev-list trunk..HEAD
fe5ba4cc272372cbd6c14261081e8d0b856cde87
7a3f6b9a5aabf51fe0d54688805d0fd0e9dc657c
4c929dac07dd08bf2328b755a1054189e158478f



I propose that we define our bugzilla-tool post-commits behavior as follows:

1.  0 args means &quot;rev-list trunk..HEAD&quot;
2.  1 arg, &quot;COMMIT&quot; means cherry pick, aka &quot;rev-list COMMIT^..COMMIT&quot;
3.  2 args &quot;A B&quot; means cherry-pick those 2
4.  a &quot;..&quot; range arg &quot;A..B&quot; means &quot;rev-list A..B&quot; (theoretically we could support multiple ranges, but that seems gratuitous)
5.  a &quot;...&quot; range arg is an error (never really makes sense for post-commits&quot;


This mostly means replacing our current rev-parse usage with rev-list, and adding a default case for 0 args, and making ... and error.  Also, we have to detect the lack of .. and modify what we pass to rev-list a little.

Does this sound sane?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135915</commentid>
    <comment_count>1</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-07-30 12:06:17 -0700</bug_when>
    <thetext>More generally, something like

revs_to_upload = []
for arg in argv:
  if &apos;..&apos; in arg:
    args = `git rev-list arg`.splitlines()
  else:
    args = [arg]
  revs_to_upload += args

covers cases 2 through 4 without special-casing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135925</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-07-30 12:10:14 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; I propose that we define our bugzilla-tool post-commits behavior as follows:
&gt; 
&gt; 1.  0 args means &quot;rev-list trunk..HEAD&quot;
&gt; 2.  1 arg, &quot;COMMIT&quot; means cherry pick, aka &quot;rev-list COMMIT^..COMMIT&quot;
&gt; 3.  2 args &quot;A B&quot; means cherry-pick those 2
&gt; 4.  a &quot;..&quot; range arg &quot;A..B&quot; means &quot;rev-list A..B&quot; (theoretically we could
&gt; support multiple ranges, but that seems gratuitous)
&gt; 5.  a &quot;...&quot; range arg is an error (never really makes sense for post-commits&quot;

I agree with this functionality.  Are there any git commands that behave the same way?  Doesn&apos;t git-rev-parse support all common forms of specifying ranges in git, or do we have to &quot;help&quot; it for items 1 and 2 by pre-processing the args?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135926</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-07-30 12:10:50 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; More generally, something like
&gt; 
&gt; revs_to_upload = []
&gt; for arg in argv:
&gt;   if &apos;..&apos; in arg:
&gt;     args = `git rev-list arg`.splitlines()
&gt;   else:
&gt;     args = [arg]
&gt;   revs_to_upload += args
&gt; 
&gt; covers cases 2 through 4 without special-casing.

I like  this.  Then only case 1 and 5 need special handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135927</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-30 12:14:07 -0700</bug_when>
    <thetext>I think we&apos;re defining new behavior here.  &quot;git show&quot; expects to cherry pick what is passed it.  But it doesn&apos;t accept ranges.  &quot;git diff&quot; will take a single commit passed to it and turn it into &quot;COMMIT..HEAD&quot; (which is what git-send-bugzilla used to do).  So our behavior is different and will need some custom code (at least as far as I can tell).

Also, as Evan could tell you, &quot;...&quot; are treated differently for different commands.  I think &quot;...&quot; makes no sense for us, and anyone passing it to post-commits likely meant &quot;..&quot; and did so in error, so I think we should error out.

For sanity sake, we could print 1-line descriptions of what we&apos;re about to upload before we do so.  We could even ask for confirmation, although that&apos;s probably unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135992</commentid>
    <comment_count>5</comment_count>
      <attachid>33832</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-30 13:56:46 -0700</bug_when>
    <thetext>Created attachment 33832
First attempt


---
 3 files changed, 36 insertions(+), 23 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136039</commentid>
    <comment_count>6</comment_count>
      <attachid>33832</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-07-30 15:03:03 -0700</bug_when>
    <thetext>Comment on attachment 33832
First attempt


&gt; +    # This function supports the following argument formats:
&gt; +    # no args : rev-list trunk..HEAD
&gt; +    # A..B    : rev-list A..B
&gt; +    # A...B   : error!
&gt; +    # A B     : [A, B]  (different from git diff, which would use &quot;rev-list A..B&quot;)
&gt; +    def commit_ids_from_commitish_arguments(self, args):
&gt; +        if not len(args):
&gt; +            args.append(&apos;trunk..HEAD&apos;)
&gt; +
&gt; +        commit_ids = []
&gt; +        for commitish in args:
&gt; +            if &apos;...&apos; in commitish:
&gt; +                error(&quot;&apos;...&apos; is not supported (found in %s). Did you mean &apos;..&apos;?&quot; % commitish)
&gt; +            elif &apos;..&apos; in commitish:
&gt; +                commit_ids += self.run_command([&apos;git&apos;, &apos;rev-list&apos;, commitish]).splitlines()
&gt; +            else:
&gt; +                commit_ids.append(commitish)
&gt; +        return commit_ids

I think individual commits should still be passed through git rev-parse:

&gt; +            else:
&gt; +                commit_ids += self.run_command([&apos;git&apos;, &apos;rev-parse&apos;, &apos;--revs-only&apos;, commitish]).splitlines()

This allows you to specify a branch name or a tag name that turns into a single commit.

r=me with this change. Everything else looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136276</commentid>
    <comment_count>7</comment_count>
      <attachid>33904</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 15:42:22 -0700</bug_when>
    <thetext>Created attachment 33904
Revised per review comments


---
 3 files changed, 37 insertions(+), 23 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136278</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 15:46:31 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebKitTools/ChangeLog
	M	WebKitTools/Scripts/bugzilla-tool
	M	WebKitTools/Scripts/modules/scm.py
Committed r46644
	M	WebKitTools/ChangeLog
	M	WebKitTools/Scripts/modules/scm.py
	M	WebKitTools/Scripts/bugzilla-tool
r46644 = 759067c20868401e074f16c80c192f60c0d33e61 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136279</commentid>
    <comment_count>9</comment_count>
      <attachid>33904</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-07-31 15:48:31 -0700</bug_when>
    <thetext>Comment on attachment 33904
Revised per review comments

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136284</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 15:52:50 -0700</bug_when>
    <thetext>I was mostly just testing to make sure post-commits still worked after the suggested edits. ;)  Thanks for the second review!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33832</attachid>
            <date>2009-07-30 13:56:46 -0700</date>
            <delta_ts>2009-07-31 15:42:18 -0700</delta_ts>
            <desc>First attempt</desc>
            <filename>bug-27847-20090730135646.patch</filename>
            <type>text/plain</type>
            <size>4742</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAzOWYyNzAzLi40NDNkNDE2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDct
MzAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGJ1Z3ppbGxhLXRvb2wgcG9zdC1jb21taXRzIHRy
dW5rLi5oZWFkIGVycm9ycyBvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3ODQ3CisKKyAgICAgICAgUmVuYW1lIGNvbW1pdF9pZHNfZnJvbV9yYW5n
ZV9hcmd1bWVudHMgdG8gY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMKKyAgICAg
ICAgYW5kIG1ha2UgaXQgaGFuZGxlIHRoZSBuZXcgYXJndW1lbnRzIGZvcm1hdCBwcm9wb3NlZCBp
biB0aGUgYnVnLgorCisgICAgICAgICogU2NyaXB0cy9idWd6aWxsYS10b29sOgorICAgICAgICAq
IFNjcmlwdHMvbW9kdWxlcy9zY20ucHk6CisKIDIwMDktMDctMzAgIEpha3ViIFdpZWN6b3JlayAg
PGZhdzIxN0BnbWFpbC5jb20+CiAKICAgICAgICAgW1F0XSBGaXggYnVpbGQgd2l0aCBHQ0MgNC40
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCmluZGV4IGQ0YTM5MzQuLjQwMzg2MGMgMTAwNzU1
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKQEAgLTQxNSwxOSArNDE1LDE1IEBAIGNsYXNzIFBvc3RD
b21taXRzQXNQYXRjaGVzVG9CdWcoQ29tbWFuZCk6CiAgICAgICAgIGlmIG5vdCBhcmdzOgogICAg
ICAgICAgICAgZXJyb3IoIiVzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIiAlIHNlbGYuYXJndW1lbnRf
bmFtZXMpCiAKLSAgICAgICAgY29tbWl0X2lkcyA9IFtdCi0gICAgICAgIGZvciBjb21taXRpc2gg
aW4gYXJnczoKLSAgICAgICAgICAgIHJlc3VsdHMgPSB0b29sLnNjbSgpLmNvbW1pdF9pZHNfZnJv
bV9yYW5nZV9hcmd1bWVudHMoW2NvbW1pdGlzaF0sIGNoZXJyeV9waWNrPVRydWUpCi0gICAgICAg
ICAgICBpZiBub3QgcmVzdWx0cyBvciBsZW4ocmVzdWx0cykgPCAxOgotICAgICAgICAgICAgICAg
IGVycm9yKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGZyb20gJyVzJyIgJSBjb21taXRpc2gpCi0g
ICAgICAgICAgICBjb21taXRfaWRzICs9IHJlc3VsdHMKLQorICAgICAgICBjb21taXRfaWRzID0g
dG9vbC5zY20oKS5jb21taXRfaWRzX2Zyb21fY29tbWl0aXNoX2FyZ3VtZW50cyhhcmdzKQogICAg
ICAgICBpZiBsZW4oY29tbWl0X2lkcykgPiAxMDoKICAgICAgICAgICAgIGVycm9yKCJBcmUgeW91
IHN1cmUgeW91IHdhbnQgdG8gYXR0YWNoICVzIHBhdGNoZXM/IiAlIChwbHVyYWxpemUoJ3BhdGNo
JywgbGVuKGNvbW1pdF9pZHMpKSkpCiAgICAgICAgICAgICAjIENvdWxkIGFkZCBhIC0tcGF0Y2hl
cy1saW1pdCBvcHRpb24uCiAKICAgICAgICAgaGF2ZV9vYnNvbGV0ZWRfcGF0Y2hlcyA9IHNldCgp
CiAgICAgICAgIGZvciBjb21taXRfaWQgaW4gY29tbWl0X2lkczoKKyAgICAgICAgICAgICMgRklY
TUU6IGNvbW1pdF9tZXNzYWdlIGlzIHRoZSB3cm9uZyBwbGFjZSB0byBsb29rIGZvciB0aGUgYnVn
X2lkCisgICAgICAgICAgICAjIHRoZSBDaGFuZ2VMb2dzIHNob3VsZCBoYXZlIHRoZSBidWcgaWQs
IGJ1dCB0aGUgbG9jYWwgY29tbWl0IG1lc3NhZ2UgbWlnaHQgbm90LgogICAgICAgICAgICAgY29t
bWl0X21lc3NhZ2UgPSB0b29sLnNjbSgpLmNvbW1pdF9tZXNzYWdlX2Zvcl9sb2NhbF9jb21taXQo
Y29tbWl0X2lkKQogCiAgICAgICAgICAgICBidWdfaWQgPSBvcHRpb25zLmJ1Z19pZCBvciBjb21t
aXRfbWVzc2FnZS5wYXJzZV9idWdfaWQoKQpAQCAtNDYyLDggKzQ1OCw3IEBAIGNsYXNzIENyZWF0
ZUJ1ZyhDb21tYW5kKToKICAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAnQ3JlYXRlIGEg
YnVnIGZyb20gbG9jYWwgY2hhbmdlcyBvciBsb2NhbCBjb21taXRzLicsICdbQ09NTUlUSVNIXScs
IG9wdGlvbnM9b3B0aW9ucykKIAogICAgIGRlZiBjcmVhdGVfYnVnX2Zyb21fY29tbWl0KHNlbGYs
IG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBjb21taXRfaWRzID0gdG9vbC5zY20oKS5j
b21taXRfaWRzX2Zyb21fcmFuZ2VfYXJndW1lbnRzKGFyZ3MsIGNoZXJyeV9waWNrPVRydWUpCi0K
KyAgICAgICAgY29tbWl0X2lkcyA9IHRvb2wuc2NtKCkuY29tbWl0X2lkc19mcm9tX2NvbW1pdGlz
aF9hcmd1bWVudHMoYXJncykKICAgICAgICAgaWYgbGVuKGNvbW1pdF9pZHMpID4gMzoKICAgICAg
ICAgICAgIGVycm9yKCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY3JlYXRlIG9uZSBidWcgd2l0
aCAlcyBwYXRjaGVzPyIgJSBsZW4oY29tbWl0X2lkcykpCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvbW9kdWxlcy9zY20ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMv
c2NtLnB5CmluZGV4IGJiODBjODMuLjUzNmZhNjMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9zY20ucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3Nj
bS5weQpAQCAtMzUsNyArMzUsNyBAQCBpbXBvcnQgc3VicHJvY2VzcwogCiAjIEltcG9ydCBXZWJL
aXQtc3BlY2lmaWMgbW9kdWxlcy4KIGZyb20gbW9kdWxlcy5sb2dnaW5nIGltcG9ydCBlcnJvciwg
bG9nCi1mcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhCitmcm9tIG1vZHVsZXMu
YnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhICMgRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBpbXBv
cnRlZCBieSBzY20ucHkKIAogZGVmIGRldGVjdF9zY21fc3lzdGVtKHBhdGgpOgogICAgIGlmIFNW
Ti5pbl93b3JraW5nX2RpcmVjdG9yeShwYXRoKToKQEAgLTM2MiwxOSArMzYyLDI0IEBAIGNsYXNz
IEdpdChTQ00pOgogICAgICAgICAgICAgcmV0dXJuICJEcnkgcnVuLCBubyByZW1vdGUgY29tbWl0
LiIKICAgICAgICAgcmV0dXJuIHNlbGYucnVuX2NvbW1hbmQoWydnaXQnLCAnc3ZuJywgJ2Rjb21t
aXQnXSkKIAotICAgIGRlZiBjb21taXRfaWRzX2Zyb21fcmFuZ2VfYXJndW1lbnRzKHNlbGYsIGFy
Z3MsIGNoZXJyeV9waWNrPUZhbHNlKToKLSAgICAgICAgIyBGaXJzdCBnZXQgdGhlIGNvbW1pdC1p
ZHMgZm9yIHRoZSBwYXNzZWQgaW4gcmV2aXNpb25zLgotICAgICAgICByZXZpc2lvbnMgPSBzZWxm
LnJ1bl9jb21tYW5kKFsnZ2l0JywgJ3Jldi1wYXJzZScsICctLXJldnMtb25seSddICsgYXJncyku
c3BsaXRsaW5lcygpCi0KLSAgICAgICAgaWYgY2hlcnJ5X3BpY2s6Ci0gICAgICAgICAgICByZXR1
cm4gcmV2aXNpb25zCi0KLSAgICAgICAgIyBJZiB3ZSdyZSBub3QgY2hlcnJ5IHBpY2tpbmcgYW5k
IHdlcmUgb25seSBwYXNzZWQgb25lIHJldmlzaW9uLCBhc3N1bWUgIl5yZXZpc2lvbiBoZWFkIiBh
a2EgInJldmlzaW9uLi5oZWFkIi4KLSAgICAgICAgaWYgbGVuKHJldmlzaW9ucykgPCAyOgotICAg
ICAgICAgICAgcmV2aXNpb25zWzBdID0gIl4iICsgcmV2aXNpb25zWzBdCi0gICAgICAgICAgICBy
ZXZpc2lvbnMuYXBwZW5kKCJIRUFEIikKLQotICAgICAgICByZXR1cm4gc2VsZi5ydW5fY29tbWFu
ZChbJ2dpdCcsICdyZXYtbGlzdCddICsgcmV2aXNpb25zKS5zcGxpdGxpbmVzKCkKKyAgICAjIFRo
aXMgZnVuY3Rpb24gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBhcmd1bWVudCBmb3JtYXRzOgorICAg
ICMgbm8gYXJncyA6IHJldi1saXN0IHRydW5rLi5IRUFECisgICAgIyBBLi5CICAgIDogcmV2LWxp
c3QgQS4uQgorICAgICMgQS4uLkIgICA6IGVycm9yIQorICAgICMgQSBCICAgICA6IFtBLCBCXSAg
KGRpZmZlcmVudCBmcm9tIGdpdCBkaWZmLCB3aGljaCB3b3VsZCB1c2UgInJldi1saXN0IEEuLkIi
KQorICAgIGRlZiBjb21taXRfaWRzX2Zyb21fY29tbWl0aXNoX2FyZ3VtZW50cyhzZWxmLCBhcmdz
KToKKyAgICAgICAgaWYgbm90IGxlbihhcmdzKToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCd0
cnVuay4uSEVBRCcpCisKKyAgICAgICAgY29tbWl0X2lkcyA9IFtdCisgICAgICAgIGZvciBjb21t
aXRpc2ggaW4gYXJnczoKKyAgICAgICAgICAgIGlmICcuLi4nIGluIGNvbW1pdGlzaDoKKyAgICAg
ICAgICAgICAgICBlcnJvcigiJy4uLicgaXMgbm90IHN1cHBvcnRlZCAoZm91bmQgaW4gJXMpLiBE
aWQgeW91IG1lYW4gJy4uJz8iICUgY29tbWl0aXNoKQorICAgICAgICAgICAgZWxpZiAnLi4nIGlu
IGNvbW1pdGlzaDoKKyAgICAgICAgICAgICAgICBjb21taXRfaWRzICs9IHNlbGYucnVuX2NvbW1h
bmQoWydnaXQnLCAncmV2LWxpc3QnLCBjb21taXRpc2hdKS5zcGxpdGxpbmVzKCkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29tbWl0X2lkcy5hcHBlbmQoY29tbWl0aXNoKQor
ICAgICAgICByZXR1cm4gY29tbWl0X2lkcwogCiAgICAgZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl9s
b2NhbF9jb21taXQoc2VsZiwgY29tbWl0X2lkKToKICAgICAgICAgY29tbWl0X2xpbmVzID0gc2Vs
Zi5ydW5fY29tbWFuZChbJ2dpdCcsICdjYXQtZmlsZScsICdjb21taXQnLCBjb21taXRfaWRdKS5z
cGxpdGxpbmVzKCk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33904</attachid>
            <date>2009-07-31 15:42:22 -0700</date>
            <delta_ts>2009-07-31 15:48:31 -0700</delta_ts>
            <desc>Revised per review comments</desc>
            <filename>bug-27847-20090731154221.patch</filename>
            <type>text/plain</type>
            <size>4970</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3ZDA2ZmFhLi41MWVjMDM1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAKIDIwMDktMDct
MzAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGJ1Z3ppbGxhLXRvb2wgcG9zdC1jb21taXRzIHRy
dW5rLi5oZWFkIGVycm9ycyBvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3ODQ3CisKKyAgICAgICAgUmVuYW1lIGNvbW1pdF9pZHNfZnJvbV9yYW5n
ZV9hcmd1bWVudHMgdG8gY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMKKyAgICAg
ICAgYW5kIG1ha2UgaXQgaGFuZGxlIHRoZSBuZXcgYXJndW1lbnRzIGZvcm1hdCBwcm9wb3NlZCBp
biB0aGUgYnVnLgorCisgICAgICAgICogU2NyaXB0cy9idWd6aWxsYS10b29sOgorICAgICAgICAq
IFNjcmlwdHMvbW9kdWxlcy9zY20ucHk6CisKKzIwMDktMDctMzAgIEVyaWMgU2VpZGVsICA8ZXJp
Y0B3ZWJraXQub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgogCiAgICAg
ICAgIGNsZWFuIHVwIGJ1aWxkLXdlYmtpdCB0byB1c2UgbGVzcyBjb3B5L3Bhc3RlIGNvZGUgYW5k
IHJlbW92ZSB1bm5lZWRlZCBTVkcgd2FybmluZwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9idWd6aWxsYS10b29sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCmlu
ZGV4IDhmYzA3OTYuLjJlN2ViMGEgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVn
emlsbGEtdG9vbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKQEAgLTQx
NSwxOSArNDE1LDE1IEBAIGNsYXNzIFBvc3RDb21taXRzQXNQYXRjaGVzVG9CdWcoQ29tbWFuZCk6
CiAgICAgICAgIGlmIG5vdCBhcmdzOgogICAgICAgICAgICAgZXJyb3IoIiVzIGFyZ3VtZW50IGlz
IHJlcXVpcmVkIiAlIHNlbGYuYXJndW1lbnRfbmFtZXMpCiAKLSAgICAgICAgY29tbWl0X2lkcyA9
IFtdCi0gICAgICAgIGZvciBjb21taXRpc2ggaW4gYXJnczoKLSAgICAgICAgICAgIHJlc3VsdHMg
PSB0b29sLnNjbSgpLmNvbW1pdF9pZHNfZnJvbV9yYW5nZV9hcmd1bWVudHMoW2NvbW1pdGlzaF0s
IGNoZXJyeV9waWNrPVRydWUpCi0gICAgICAgICAgICBpZiBub3QgcmVzdWx0cyBvciBsZW4ocmVz
dWx0cykgPCAxOgotICAgICAgICAgICAgICAgIGVycm9yKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0
IGZyb20gJyVzJyIgJSBjb21taXRpc2gpCi0gICAgICAgICAgICBjb21taXRfaWRzICs9IHJlc3Vs
dHMKLQorICAgICAgICBjb21taXRfaWRzID0gdG9vbC5zY20oKS5jb21taXRfaWRzX2Zyb21fY29t
bWl0aXNoX2FyZ3VtZW50cyhhcmdzKQogICAgICAgICBpZiBsZW4oY29tbWl0X2lkcykgPiAxMDoK
ICAgICAgICAgICAgIGVycm9yKCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gYXR0YWNoICVzIHBh
dGNoZXM/IiAlIChwbHVyYWxpemUoJ3BhdGNoJywgbGVuKGNvbW1pdF9pZHMpKSkpCiAgICAgICAg
ICAgICAjIENvdWxkIGFkZCBhIC0tcGF0Y2hlcy1saW1pdCBvcHRpb24uCiAKICAgICAgICAgaGF2
ZV9vYnNvbGV0ZWRfcGF0Y2hlcyA9IHNldCgpCiAgICAgICAgIGZvciBjb21taXRfaWQgaW4gY29t
bWl0X2lkczoKKyAgICAgICAgICAgICMgRklYTUU6IGNvbW1pdF9tZXNzYWdlIGlzIHRoZSB3cm9u
ZyBwbGFjZSB0byBsb29rIGZvciB0aGUgYnVnX2lkCisgICAgICAgICAgICAjIHRoZSBDaGFuZ2VM
b2dzIHNob3VsZCBoYXZlIHRoZSBidWcgaWQsIGJ1dCB0aGUgbG9jYWwgY29tbWl0IG1lc3NhZ2Ug
bWlnaHQgbm90LgogICAgICAgICAgICAgY29tbWl0X21lc3NhZ2UgPSB0b29sLnNjbSgpLmNvbW1p
dF9tZXNzYWdlX2Zvcl9sb2NhbF9jb21taXQoY29tbWl0X2lkKQogCiAgICAgICAgICAgICBidWdf
aWQgPSBvcHRpb25zLmJ1Z19pZCBvciBjb21taXRfbWVzc2FnZS5wYXJzZV9idWdfaWQoKQpAQCAt
NDYyLDggKzQ1OCw3IEBAIGNsYXNzIENyZWF0ZUJ1ZyhDb21tYW5kKToKICAgICAgICAgQ29tbWFu
ZC5fX2luaXRfXyhzZWxmLCAnQ3JlYXRlIGEgYnVnIGZyb20gbG9jYWwgY2hhbmdlcyBvciBsb2Nh
bCBjb21taXRzLicsICdbQ09NTUlUSVNIXScsIG9wdGlvbnM9b3B0aW9ucykKIAogICAgIGRlZiBj
cmVhdGVfYnVnX2Zyb21fY29tbWl0KHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAg
ICBjb21taXRfaWRzID0gdG9vbC5zY20oKS5jb21taXRfaWRzX2Zyb21fcmFuZ2VfYXJndW1lbnRz
KGFyZ3MsIGNoZXJyeV9waWNrPVRydWUpCi0KKyAgICAgICAgY29tbWl0X2lkcyA9IHRvb2wuc2Nt
KCkuY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMoYXJncykKICAgICAgICAgaWYg
bGVuKGNvbW1pdF9pZHMpID4gMzoKICAgICAgICAgICAgIGVycm9yKCJBcmUgeW91IHN1cmUgeW91
IHdhbnQgdG8gY3JlYXRlIG9uZSBidWcgd2l0aCAlcyBwYXRjaGVzPyIgJSBsZW4oY29tbWl0X2lk
cykpCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY20ucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvc2NtLnB5CmluZGV4IGJiODBjODMuLmM4ODhiNmEg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zY20ucHkKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3NjbS5weQpAQCAtMzUsNyArMzUsNyBAQCBpbXBvcnQg
c3VicHJvY2VzcwogCiAjIEltcG9ydCBXZWJLaXQtc3BlY2lmaWMgbW9kdWxlcy4KIGZyb20gbW9k
dWxlcy5sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCi1mcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1w
b3J0IEJ1Z3ppbGxhCitmcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhICMgRklY
TUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBpbXBvcnRlZCBieSBzY20ucHkKIAogZGVmIGRldGVjdF9z
Y21fc3lzdGVtKHBhdGgpOgogICAgIGlmIFNWTi5pbl93b3JraW5nX2RpcmVjdG9yeShwYXRoKToK
QEAgLTM2MiwxOSArMzYyLDI1IEBAIGNsYXNzIEdpdChTQ00pOgogICAgICAgICAgICAgcmV0dXJu
ICJEcnkgcnVuLCBubyByZW1vdGUgY29tbWl0LiIKICAgICAgICAgcmV0dXJuIHNlbGYucnVuX2Nv
bW1hbmQoWydnaXQnLCAnc3ZuJywgJ2Rjb21taXQnXSkKIAotICAgIGRlZiBjb21taXRfaWRzX2Zy
b21fcmFuZ2VfYXJndW1lbnRzKHNlbGYsIGFyZ3MsIGNoZXJyeV9waWNrPUZhbHNlKToKLSAgICAg
ICAgIyBGaXJzdCBnZXQgdGhlIGNvbW1pdC1pZHMgZm9yIHRoZSBwYXNzZWQgaW4gcmV2aXNpb25z
LgotICAgICAgICByZXZpc2lvbnMgPSBzZWxmLnJ1bl9jb21tYW5kKFsnZ2l0JywgJ3Jldi1wYXJz
ZScsICctLXJldnMtb25seSddICsgYXJncykuc3BsaXRsaW5lcygpCi0KLSAgICAgICAgaWYgY2hl
cnJ5X3BpY2s6Ci0gICAgICAgICAgICByZXR1cm4gcmV2aXNpb25zCi0KLSAgICAgICAgIyBJZiB3
ZSdyZSBub3QgY2hlcnJ5IHBpY2tpbmcgYW5kIHdlcmUgb25seSBwYXNzZWQgb25lIHJldmlzaW9u
LCBhc3N1bWUgIl5yZXZpc2lvbiBoZWFkIiBha2EgInJldmlzaW9uLi5oZWFkIi4KLSAgICAgICAg
aWYgbGVuKHJldmlzaW9ucykgPCAyOgotICAgICAgICAgICAgcmV2aXNpb25zWzBdID0gIl4iICsg
cmV2aXNpb25zWzBdCi0gICAgICAgICAgICByZXZpc2lvbnMuYXBwZW5kKCJIRUFEIikKLQotICAg
ICAgICByZXR1cm4gc2VsZi5ydW5fY29tbWFuZChbJ2dpdCcsICdyZXYtbGlzdCddICsgcmV2aXNp
b25zKS5zcGxpdGxpbmVzKCkKKyAgICAjIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgdGhlIGZvbGxv
d2luZyBhcmd1bWVudCBmb3JtYXRzOgorICAgICMgbm8gYXJncyA6IHJldi1saXN0IHRydW5rLi5I
RUFECisgICAgIyBBLi5CICAgIDogcmV2LWxpc3QgQS4uQgorICAgICMgQS4uLkIgICA6IGVycm9y
IQorICAgICMgQSBCICAgICA6IFtBLCBCXSAgKGRpZmZlcmVudCBmcm9tIGdpdCBkaWZmLCB3aGlj
aCB3b3VsZCB1c2UgInJldi1saXN0IEEuLkIiKQorICAgIGRlZiBjb21taXRfaWRzX2Zyb21fY29t
bWl0aXNoX2FyZ3VtZW50cyhzZWxmLCBhcmdzKToKKyAgICAgICAgaWYgbm90IGxlbihhcmdzKToK
KyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCd0cnVuay4uSEVBRCcpCisKKyAgICAgICAgY29tbWl0
X2lkcyA9IFtdCisgICAgICAgIGZvciBjb21taXRpc2ggaW4gYXJnczoKKyAgICAgICAgICAgIGlm
ICcuLi4nIGluIGNvbW1pdGlzaDoKKyAgICAgICAgICAgICAgICBlcnJvcigiJy4uLicgaXMgbm90
IHN1cHBvcnRlZCAoZm91bmQgaW4gJyVzJykuIERpZCB5b3UgbWVhbiAnLi4nPyIgJSBjb21taXRp
c2gpCisgICAgICAgICAgICBlbGlmICcuLicgaW4gY29tbWl0aXNoOgorICAgICAgICAgICAgICAg
IGNvbW1pdF9pZHMgKz0gc2VsZi5ydW5fY29tbWFuZChbJ2dpdCcsICdyZXYtbGlzdCcsIGNvbW1p
dGlzaF0pLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAj
IFR1cm4gc2luZ2xlIGNvbW1pdHMgb3IgYnJhbmNoIG9yIHRhZyBuYW1lcyBpbnRvIGNvbW1pdCBp
ZHMuCisgICAgICAgICAgICAgICAgY29tbWl0X2lkcyArPSBzZWxmLnJ1bl9jb21tYW5kKFsnZ2l0
JywgJ3Jldi1wYXJzZScsICctLXJldnMtb25seScsIGNvbW1pdGlzaF0pLnNwbGl0bGluZXMoKQor
ICAgICAgICByZXR1cm4gY29tbWl0X2lkcwogCiAgICAgZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl9s
b2NhbF9jb21taXQoc2VsZiwgY29tbWl0X2lkKToKICAgICAgICAgY29tbWl0X2xpbmVzID0gc2Vs
Zi5ydW5fY29tbWFuZChbJ2dpdCcsICdjYXQtZmlsZScsICdjb21taXQnLCBjb21taXRfaWRdKS5z
cGxpdGxpbmVzKCk=
</data>
<flag name="review"
          id="18087"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>