<?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>38852</bug_id>
          
          <creation_ts>2010-05-10 09:37:29 -0700</creation_ts>
          <short_desc>webkit-patch land --squash commits too much if branch is not up to date</short_desc>
          <delta_ts>2010-05-21 17:32:02 -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="Ojan Vafai">ojan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>223357</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-10 09:37:29 -0700</bug_when>
    <thetext>Specifically, if trunk has been updated (e.g. git svn fetch), but the branch hasn&apos;t been rebases/merged to trunk, then squash will commit the whole diff from trunk. We should do our best to detect this case and bail. I think a simple check that the top commit on trunk is present in the branch is sufficient.

This is almost definitely the cause of https://bugs.webkit.org/show_bug.cgi?id=38798.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223446</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-10 12:26:19 -0700</bug_when>
    <thetext>Nah, we should easily be able to detect what common point the current branch has with trunk.  I dont&apos; remember the git-fu, but I know it&apos;s possible.

Then squash diffs between that point and head.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223453</commentid>
    <comment_count>2</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2010-05-10 12:41:42 -0700</bug_when>
    <thetext># first shared commit between two branches
git merge-base trunk mybranch

# list any revs that are on trunk that aren&apos;t on mybranch 
git rev-list trunk ^mybranch


I think Ojan&apos;s suggestion is less likely to break: if you attempt to automatically merge with trunk before squashing you&apos;ll have to deal with the potential for merge conflicts.  I think your best bet is something like:

if `git rev-list --limit 1 trunk ^mybranch`; then
  echo &quot;trunk has commits not in this branch; please merge or rebase it and try again&quot;
  exit 1
fi</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226087</commentid>
    <comment_count>3</comment_count>
      <attachid>56128</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-14 18:16:55 -0700</bug_when>
    <thetext>Created attachment 56128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226923</commentid>
    <comment_count>4</comment_count>
      <attachid>56128</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-17 15:08:53 -0700</bug_when>
    <thetext>Comment on attachment 56128
Patch

WebKitTools/Scripts/webkitpy/common/checkout/scm.py:578
 +          if squash is None:
Why not &quot;if not squash&quot;?

WebKitTools/Scripts/webkitpy/common/checkout/scm.py:579
 +              config_squash = Git.read_git_config(&apos;webkit-patch.squash&apos;)
Seems like we should have a helper method for this...  One which might even cache the result.

WebKitTools/Scripts/webkitpy/common/checkout/scm.py:580
 +              if (config_squash and config_squash is not &quot;&quot;):
Yes, the helper method would return True/False.

Oh, I guess this sorta is the helper method.  But maybe it would be useful to have a helper which just handled reading from the config.

WebKitTools/Scripts/webkitpy/common/checkout/scm.py:585
 +                  if num_local_commits &gt; 1 or num_local_commits &gt; 0 and not self.working_directory_is_clean():
parens here would help me a lot. :)

WebKitTools/Scripts/webkitpy/common/checkout/scm.py:586
 +                      working_directory_message = &quot;&quot; if self.working_directory_is_clean() else &quot; and working copy changes&quot;
I would have made generating the message its own helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226968</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-17 16:11:56 -0700</bug_when>
    <thetext>*** Bug 38274 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227014</commentid>
    <comment_count>6</comment_count>
      <attachid>56294</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-17 17:30:08 -0700</bug_when>
    <thetext>Created attachment 56294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227015</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-17 17:30:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 56128 [details])
&gt; WebKitTools/Scripts/webkitpy/common/checkout/scm.py:578
&gt;  +          if squash is None:
&gt; Why not &quot;if not squash&quot;?

None, True and False are different valid values. This will go away when we get rid of --squash and replace it with --git-commit=*

&gt; WebKitTools/Scripts/webkitpy/common/checkout/scm.py:579
&gt;  +              config_squash = Git.read_git_config(&apos;webkit-patch.squash&apos;)
&gt; Seems like we should have a helper method for this...  One which might even cache the result.
&gt; 
&gt; WebKitTools/Scripts/webkitpy/common/checkout/scm.py:580
&gt;  +              if (config_squash and config_squash is not &quot;&quot;):
&gt; Yes, the helper method would return True/False.

I&apos;m not changing this logic, just indenting the code. Again, this will change when we get rid of --squash.

&gt; WebKitTools/Scripts/webkitpy/common/checkout/scm.py:585
&gt;  +                  if num_local_commits &gt; 1 or num_local_commits &gt; 0 and not self.working_directory_is_clean():
&gt; parens here would help me a lot. :)

Done.

&gt; WebKitTools/Scripts/webkitpy/common/checkout/scm.py:586
&gt;  +                      working_directory_message = &quot;&quot; if self.working_directory_is_clean() else &quot; and working copy changes&quot;
&gt; I would have made generating the message its own helper function.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229124</commentid>
    <comment_count>8</comment_count>
      <attachid>56294</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-21 15:15:51 -0700</bug_when>
    <thetext>Comment on attachment 56294
Patch

I would have put these 3 lines in their own function:
 596             config_squash = Git.read_git_config(&apos;webkit-patch.squash&apos;)
 597             if (config_squash and config_squash is not &quot;&quot;):
 598                 squash = config_squash.lower() == &quot;true&quot;

Then the other code doesn&apos;t have to know about the empty value meaning false or true or whatever.


 603                     raise ScriptError(message=self._get_squash_error_message(num_local_commits))

ScriptErorr has historically meant &quot;there was an error running the script&quot;.  Used by run_command.  I think you want some other type of exception here.  Maybe not?  I know our infrstrcture is set up to handle ScriptERrors well, maybe tthat&apos;s what your&apos;e going for here?

I still think distingushing false from None doesn&apos;t help us here:
 595         if squash is None:

Unless &quot;NOne&quot; is supposed to mean true?

Is this really the way you want to do this?
     def _svn_branch_has_extra_commits(self):
 612         # When head contains all the commits on the svn branch, show-branch --topics will have exactly 4 lines.
 613         # One line for head, one for trunk, one for the &quot;--&quot; seprator and one for the branch point on trunk.
 614         trunk_commits = run_command([&apos;git&apos;, &apos;show-branch&apos;, &apos;--topics&apos;, &apos;head&apos;, self.svn_branch_name()])
 615         return len(re.findall(&apos;\n&apos;, trunk_commits)) != 4

Seems like a strange hack.  Maybe I&apos;m mis-remembering evan&apos;s recomendation... if he had one?

This is better than what we have, but It feels like a hack.  Please consider the above comments, especially the one about the &quot;4 line&quot; hack.  Are we testing the 4-line hack?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229157</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-21 16:07:02 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt;  603                     raise ScriptError(message=self._get_squash_error_message(num_local_commits))
&gt; 
&gt; ScriptErorr has historically meant &quot;there was an error running the script&quot;.  Used by run_command.  I think you want some other type of exception here.  Maybe not?  I know our infrstrcture is set up to handle ScriptERrors well, maybe tthat&apos;s what your&apos;e going for here?

Yeah, using another error type gives an ugly stacktrace. Using ScriptError gives a nice, readable error message.

&gt; I still think distingushing false from None doesn&apos;t help us here:

The point is that if you explicitly pass --squash or --no-squash  on the commandline it should override any other settings. So it shouldn&apos;t check the git config or anything. If you don&apos;t explicitly set it, then we need to do the other checks. 

It&apos;s gross, I know. But it will go away shortly when we replace --squash with --git-commit=* as per the webkit-patch discussion.

&gt; Is this really the way you want to do this?
&gt;      def _svn_branch_has_extra_commits(self):
&gt;  612         # When head contains all the commits on the svn branch, show-branch --topics will have exactly 4 lines.
&gt;  613         # One line for head, one for trunk, one for the &quot;--&quot; seprator and one for the branch point on trunk.
&gt;  614         trunk_commits = run_command([&apos;git&apos;, &apos;show-branch&apos;, &apos;--topics&apos;, &apos;head&apos;, self.svn_branch_name()])
&gt;  615         return len(re.findall(&apos;\n&apos;, trunk_commits)) != 4
&gt; 
&gt; Seems like a strange hack.  Maybe I&apos;m mis-remembering evan&apos;s recomendation... if he had one?
&gt; 
&gt; This is better than what we have, but It feels like a hack.  Please consider the above comments, especially the one about the &quot;4 line&quot; hack.  Are we testing the 4-line hack?

Yeah, I was just being dumb here. Changing it to use rev-list as evan suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229190</commentid>
    <comment_count>10</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-05-21 17:32:02 -0700</bug_when>
    <thetext>Committed r59979: &lt;http://trac.webkit.org/changeset/59979&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56128</attachid>
            <date>2010-05-14 18:16:55 -0700</date>
            <delta_ts>2010-05-17 17:30:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38852-20100514181654.patch</filename>
            <type>text/plain</type>
            <size>5866</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3YWQ1ZTU1MjNmODM0OGQ3OTMxZGRhODNkYjVhODkzNWFhZDU2ODM2Li4yYmYwYWU2
ZTA2MWFjZmI2OTI2ODhhZTAzOTUzY2ZhYjE5ODNiZDQ3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDUtMTQgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXQtcGF0Y2ggbGFuZCAt
LXNxdWFzaCBjb21taXRzIHRvbyBtdWNoIGlmIGJyYW5jaCBpcyBub3QgdXAgdG8gZGF0ZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4NTIKKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3QucHk6CisKIDIw
MTAtMDUtMTQgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CmluZGV4IDAyZTExNGFiYjZlZmIyMGMxZGYyYzIy
MzUzN2U1MTcxYTE1NTQwNWUuLmQ1ODAyNDg4ODc3MDNlM2M1Yjk2NzExNzczNjE4MDcxMDY0YzEx
ODMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20ucHkKQEAgLTU3NSwyNCArNTc1LDMxIEBAIGNsYXNzIEdpdChTQ00pOgogICAgICAg
ICBydW5fY29tbWFuZChbJ2dpdCcsICdjaGVja291dCcsICdIRUFEJ10gKyBmaWxlX3BhdGhzKQog
CiAgICAgZGVmIHNob3VsZF9zcXVhc2goc2VsZiwgc3F1YXNoKToKLSAgICAgICAgaWYgc3F1YXNo
IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBTcXVhc2ggaXMgc3BlY2lmaWVkIG9uIHRoZSBj
b21tYW5kLWxpbmUuCi0gICAgICAgICAgICByZXR1cm4gc3F1YXNoCi0KLSAgICAgICAgY29uZmln
X3NxdWFzaCA9IEdpdC5yZWFkX2dpdF9jb25maWcoJ3dlYmtpdC1wYXRjaC5zcXVhc2gnKQotICAg
ICAgICBpZiAoY29uZmlnX3NxdWFzaCBhbmQgY29uZmlnX3NxdWFzaCBpcyBub3QgIiIpOgotICAg
ICAgICAgICAgcmV0dXJuIGNvbmZpZ19zcXVhc2gubG93ZXIoKSA9PSAidHJ1ZSIKLQotICAgICAg
ICAjIE9ubHkgcmFpc2UgYW4gZXJyb3IgaWYgdGhlcmUgYXJlIGFjdHVhbGx5IG11bHRpcGxlIGNv
bW1pdHMgdG8gc3F1YXNoLgotICAgICAgICBudW1fbG9jYWxfY29tbWl0cyA9IGxlbihzZWxmLmxv
Y2FsX2NvbW1pdHMoKSkKLSAgICAgICAgaWYgbnVtX2xvY2FsX2NvbW1pdHMgPiAxIG9yIG51bV9s
b2NhbF9jb21taXRzID4gMCBhbmQgbm90IHNlbGYud29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4o
KToKLSAgICAgICAgICAgIHdvcmtpbmdfZGlyZWN0b3J5X21lc3NhZ2UgPSAiIiBpZiBzZWxmLndv
cmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKCkgZWxzZSAiIGFuZCB3b3JraW5nIGNvcHkgY2hhbmdl
cyIKLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IiIiVGhlcmUgYXJlICVz
IGxvY2FsIGNvbW1pdHMlcy4gRG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0xKSBVc2UgLS1zcXVh
c2ggb3IgLS1uby1zcXVhc2gKLTIpIGdpdCBjb25maWcgd2Via2l0LXBhdGNoLnNxdWFzaCB0cnVl
L2ZhbHNlCi0iIiIgJSAobnVtX2xvY2FsX2NvbW1pdHMsIHdvcmtpbmdfZGlyZWN0b3J5X21lc3Nh
Z2UpKQotCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHNxdWFzaCBpcyBOb25lOgor
ICAgICAgICAgICAgY29uZmlnX3NxdWFzaCA9IEdpdC5yZWFkX2dpdF9jb25maWcoJ3dlYmtpdC1w
YXRjaC5zcXVhc2gnKQorICAgICAgICAgICAgaWYgKGNvbmZpZ19zcXVhc2ggYW5kIGNvbmZpZ19z
cXVhc2ggaXMgbm90ICIiKToKKyAgICAgICAgICAgICAgICBzcXVhc2ggPSBjb25maWdfc3F1YXNo
Lmxvd2VyKCkgPT0gInRydWUiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMg
T25seSByYWlzZSBhbiBlcnJvciBpZiB0aGVyZSBhcmUgYWN0dWFsbHkgbXVsdGlwbGUgY29tbWl0
cyB0byBzcXVhc2guCisgICAgICAgICAgICAgICAgbnVtX2xvY2FsX2NvbW1pdHMgPSBsZW4oc2Vs
Zi5sb2NhbF9jb21taXRzKCkpCisgICAgICAgICAgICAgICAgaWYgbnVtX2xvY2FsX2NvbW1pdHMg
PiAxIG9yIG51bV9sb2NhbF9jb21taXRzID4gMCBhbmQgbm90IHNlbGYud29ya2luZ19kaXJlY3Rv
cnlfaXNfY2xlYW4oKToKKyAgICAgICAgICAgICAgICAgICAgd29ya2luZ19kaXJlY3RvcnlfbWVz
c2FnZSA9ICIiIGlmIHNlbGYud29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4oKSBlbHNlICIgYW5k
IHdvcmtpbmcgY29weSBjaGFuZ2VzIgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTY3JpcHRF
cnJvcihtZXNzYWdlPSIiIlRoZXJlIGFyZSAlcyBsb2NhbCBjb21taXRzJXMuIERvIG9uZSBvZiB0
aGUgZm9sbG93aW5nOgorICAgICAgICAxKSBVc2UgLS1zcXVhc2ggb3IgLS1uby1zcXVhc2gKKyAg
ICAgICAgMikgZ2l0IGNvbmZpZyB3ZWJraXQtcGF0Y2guc3F1YXNoIHRydWUvZmFsc2UKKyAgICAg
ICAgIiIiICUgKG51bV9sb2NhbF9jb21taXRzLCB3b3JraW5nX2RpcmVjdG9yeV9tZXNzYWdlKSkK
KworICAgICAgICBpZiBzcXVhc2ggYW5kIHNlbGYuX3N2bl9icmFuY2hfaGFzX2V4dHJhX2NvbW1p
dHMoKToKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IkNhbm5vdCB1c2Ug
LS1zcXVhc2ggd2hlbiBIRUFEIGlzIG5vdCBmdWxseSBtZXJnZWQvcmViYXNlZCB0byAlcy4gIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBicmFuY2ggbmVlZHMg
dG8gYmUgc3luY2VkIGZpcnN0LiIpCisKKyAgICAgICAgcmV0dXJuIHNxdWFzaAorCisgICAgZGVm
IF9zdm5fYnJhbmNoX2hhc19leHRyYV9jb21taXRzKHNlbGYpOgorICAgICAgICAjIFdoZW4gaGVh
ZCBjb250YWlucyBhbGwgdGhlIGNvbW1pdHMgb24gdGhlIHN2biBicmFuY2gsIHNob3ctYnJhbmNo
IC0tdG9waWNzIHdpbGwgaGF2ZSBleGFjdGx5IDQgbGluZXMuCisgICAgICAgICMgT25lIGxpbmUg
Zm9yIGhlYWQsIG9uZSBmb3IgdHJ1bmssIG9uZSBmb3IgdGhlICItLSIgc2VwcmF0b3IgYW5kIG9u
ZSBmb3IgdGhlIGJyYW5jaCBwb2ludCBvbiB0cnVuay4KKyAgICAgICAgdHJ1bmtfY29tbWl0cyA9
IHJ1bl9jb21tYW5kKFsnZ2l0JywgJ3Nob3ctYnJhbmNoJywgJy0tdG9waWNzJywgJ2hlYWQnLCBz
ZWxmLnN2bl9icmFuY2hfbmFtZSgpXSkKKyAgICAgICAgcmV0dXJuIGxlbihyZS5maW5kYWxsKCdc
bicsIHRydW5rX2NvbW1pdHMpKSAhPSA0CiAKICAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShz
ZWxmLCBtZXNzYWdlLCB1c2VybmFtZT1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIHNxdWFzaD1Ob25l
KToKICAgICAgICAgIyBVc2VybmFtZSBpcyBpZ25vcmVkIGR1cmluZyBHaXQgY29tbWl0cy4KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbV91bml0dGVzdC5weQppbmRleCA1YTJjMDk0NWJmNzk1MDZhYjczYmNkNjQzOTgyMzUz
ZjIwMjNiMmJiLi5iNmFlMzg4MDRiNTg3YjFmMGIxOTNiZGRkYzhlZTVmMDEzYjJjZmZkIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21f
dW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtX3VuaXR0ZXN0LnB5CkBAIC04NzUsNiArODc1LDEyIEBAIGNsYXNzIEdpdFRlc3Qo
U0NNVGVzdCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gocid0ZXN0X2ZpbGVf
Y29tbWl0MicsIHN2bl9sb2cpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIn
dGVzdF9maWxlX2NvbW1pdDEnLCBzdm5fbG9nKSkKIAorICAgIGRlZiB0ZXN0X2NvbW1pdF93aXRo
X21lc3NhZ2Vfbm90X3N5bmNlZF9zcXVhc2goc2VsZik6CisgICAgICAgIHJ1bl9jb21tYW5kKFsn
Z2l0JywgJ2NoZWNrb3V0JywgJy1iJywgJ215LWJyYW5jaCcsICd0cnVua34zJ10pCisgICAgICAg
IHNlbGYuX3R3b19sb2NhbF9jb21taXRzKCkKKyAgICAgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0
ZW0oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2Ny
aXB0RXJyb3IsIHNjbS5jb21taXRfd2l0aF9tZXNzYWdlLCAiYW5vdGhlciB0ZXN0IGNvbW1pdCIs
IHNxdWFzaD1UcnVlKQorCiAgICAgZGVmIHRlc3RfcmV2ZXJzZV9kaWZmKHNlbGYpOgogICAgICAg
ICBzZWxmLl9zaGFyZWRfdGVzdF9yZXZlcnNlX2RpZmYoKQogCkBAIC05MzcsNiArOTQzLDEyIEBA
IGNsYXNzIEdpdFRlc3QoU0NNVGVzdCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFy
Y2gocid0ZXN0X2ZpbGVfY29tbWl0MicsIHBhdGNoKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHJlLnNlYXJjaChyJ3Rlc3RfZmlsZV9jb21taXQxJywgcGF0Y2gpKQogCisgICAgZGVmIHRlc3Rf
Y3JlYXRlX3BhdGNoX25vdF9zeW5jZWRfc3F1YXNoKHNlbGYpOgorICAgICAgICBydW5fY29tbWFu
ZChbJ2dpdCcsICdjaGVja291dCcsICctYicsICdteS1icmFuY2gnLCAndHJ1bmt+MyddKQorICAg
ICAgICBzZWxmLl90d29fbG9jYWxfY29tbWl0cygpCisgICAgICAgIHNjbSA9IGRldGVjdF9zY21f
c3lzdGVtKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KFNjcmlwdEVycm9yLCBzY20uY3JlYXRlX3BhdGNoLCBzcXVhc2g9VHJ1ZSkKKwogICAgIGRlZiB0
ZXN0X2NyZWF0ZV9iaW5hcnlfcGF0Y2goc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIGEgZ2l0IGJp
bmFyeSBwYXRjaCBhbmQgY2hlY2sgdGhlIGNvbnRlbnRzLgogICAgICAgICBzY20gPSBkZXRlY3Rf
c2NtX3N5c3RlbShzZWxmLmdpdF9jaGVja291dF9wYXRoKQpAQCAtMTAxNiw2ICsxMDI4LDEyIEBA
IGNsYXNzIEdpdFRlc3QoU0NNVGVzdCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndGVzdF9m
aWxlX2NvbW1pdDInIGluIGZpbGVzKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3Rlc3RfZmls
ZV9jb21taXQxJyBpbiBmaWxlcykKIAorICAgIGRlZiB0ZXN0X2NoYW5nZWRfZmlsZXNfbm90X3N5
bmNlZF9zcXVhc2goc2VsZik6CisgICAgICAgIHJ1bl9jb21tYW5kKFsnZ2l0JywgJ2NoZWNrb3V0
JywgJy1iJywgJ215LWJyYW5jaCcsICd0cnVua34zJ10pCisgICAgICAgIHNlbGYuX3R3b19sb2Nh
bF9jb21taXRzKCkKKyAgICAgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oc2VsZi5naXRfY2hl
Y2tvdXRfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2NyaXB0RXJyb3IsIHNjbS5j
aGFuZ2VkX2ZpbGVzLCBzcXVhc2g9VHJ1ZSkKKwogICAgIGRlZiB0ZXN0X2NoYW5nZWRfZmlsZXMo
c2VsZik6CiAgICAgICAgIHNlbGYuX3NoYXJlZF90ZXN0X2NoYW5nZWRfZmlsZXMoKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56294</attachid>
            <date>2010-05-17 17:30:08 -0700</date>
            <delta_ts>2010-05-21 15:15:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38852-20100517173007.patch</filename>
            <type>text/plain</type>
            <size>6077</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA4OTlkM2NlZjE0NzI2MjdhM2U3MTdlODQyMjY4NDljZDM3MjU2MGQ4Li44MDhiYWM2
MzE5NTAyZDQzNjFjMTQ3MjNhYTBiZTAyZGQwZmE1MjE5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDUtMTQgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3ZWJraXQtcGF0Y2ggbGFuZCAt
LXNxdWFzaCBjb21taXRzIHRvbyBtdWNoIGlmIGJyYW5jaCBpcyBub3QgdXAgdG8gZGF0ZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg4NTIKKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3QucHk6CisKIDIw
MTAtMDUtMTcgIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CmluZGV4IGFjOWM0MmU5
N2ExYzIyNDM0YTIwNzkwNzkyMDQwMzVhMDY0ZTdiZWMuLjRjMzc2ZjdmZDIwZTc0Y2UwN2RhNjg5
YmMyNjAxZjg2NjVjNjg5ZTAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkKQEAgLTU4NCwyNSArNTg0LDM1IEBAIGNsYXNzIEdp
dChTQ00pOgogICAgIGRlZiByZXZlcnRfZmlsZXMoc2VsZiwgZmlsZV9wYXRocyk6CiAgICAgICAg
IHNlbGYucnVuKFsnZ2l0JywgJ2NoZWNrb3V0JywgJ0hFQUQnXSArIGZpbGVfcGF0aHMpCiAKKyAg
ICBkZWYgX2dldF9zcXVhc2hfZXJyb3JfbWVzc2FnZShzZWxmLCBudW1fbG9jYWxfY29tbWl0cyk6
CisgICAgICAgIHdvcmtpbmdfZGlyZWN0b3J5X21lc3NhZ2UgPSAiIiBpZiBzZWxmLndvcmtpbmdf
ZGlyZWN0b3J5X2lzX2NsZWFuKCkgZWxzZSAiIGFuZCB3b3JraW5nIGNvcHkgY2hhbmdlcyIKKyAg
ICAgICAgcmV0dXJuICgiIiJUaGVyZSBhcmUgJXMgbG9jYWwgY29tbWl0cyVzLiBEbyBvbmUgb2Yg
dGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDEpIFVzZSAtLXNxdWFzaCBvciAtLW5vLXNxdWFz
aAorICAgICAgICAgICAgMikgZ2l0IGNvbmZpZyB3ZWJraXQtcGF0Y2guc3F1YXNoIHRydWUvZmFs
c2UKKyAgICAgICAgICAgICIiIiAlIChudW1fbG9jYWxfY29tbWl0cywgd29ya2luZ19kaXJlY3Rv
cnlfbWVzc2FnZSkpCisKICAgICBkZWYgc2hvdWxkX3NxdWFzaChzZWxmLCBzcXVhc2gpOgotICAg
ICAgICBpZiBzcXVhc2ggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAjIFNxdWFzaCBpcyBzcGVj
aWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZS4KLSAgICAgICAgICAgIHJldHVybiBzcXVhc2gKLQot
ICAgICAgICBjb25maWdfc3F1YXNoID0gR2l0LnJlYWRfZ2l0X2NvbmZpZygnd2Via2l0LXBhdGNo
LnNxdWFzaCcpCi0gICAgICAgIGlmIChjb25maWdfc3F1YXNoIGFuZCBjb25maWdfc3F1YXNoIGlz
IG5vdCAiIik6Ci0gICAgICAgICAgICByZXR1cm4gY29uZmlnX3NxdWFzaC5sb3dlcigpID09ICJ0
cnVlIgotCi0gICAgICAgICMgT25seSByYWlzZSBhbiBlcnJvciBpZiB0aGVyZSBhcmUgYWN0dWFs
bHkgbXVsdGlwbGUgY29tbWl0cyB0byBzcXVhc2guCi0gICAgICAgIG51bV9sb2NhbF9jb21taXRz
ID0gbGVuKHNlbGYubG9jYWxfY29tbWl0cygpKQotICAgICAgICBpZiBudW1fbG9jYWxfY29tbWl0
cyA+IDEgb3IgbnVtX2xvY2FsX2NvbW1pdHMgPiAwIGFuZCBub3Qgc2VsZi53b3JraW5nX2RpcmVj
dG9yeV9pc19jbGVhbigpOgotICAgICAgICAgICAgd29ya2luZ19kaXJlY3RvcnlfbWVzc2FnZSA9
ICIiIGlmIHNlbGYud29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4oKSBlbHNlICIgYW5kIHdvcmtp
bmcgY29weSBjaGFuZ2VzIgotICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0i
IiJUaGVyZSBhcmUgJXMgbG9jYWwgY29tbWl0cyVzLiBEbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoK
LTEpIFVzZSAtLXNxdWFzaCBvciAtLW5vLXNxdWFzaAotMikgZ2l0IGNvbmZpZyB3ZWJraXQtcGF0
Y2guc3F1YXNoIHRydWUvZmFsc2UKLSIiIiAlIChudW1fbG9jYWxfY29tbWl0cywgd29ya2luZ19k
aXJlY3RvcnlfbWVzc2FnZSkpCi0KLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgc3F1
YXNoIGlzIE5vbmU6CisgICAgICAgICAgICBjb25maWdfc3F1YXNoID0gR2l0LnJlYWRfZ2l0X2Nv
bmZpZygnd2Via2l0LXBhdGNoLnNxdWFzaCcpCisgICAgICAgICAgICBpZiAoY29uZmlnX3NxdWFz
aCBhbmQgY29uZmlnX3NxdWFzaCBpcyBub3QgIiIpOgorICAgICAgICAgICAgICAgIHNxdWFzaCA9
IGNvbmZpZ19zcXVhc2gubG93ZXIoKSA9PSAidHJ1ZSIKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgIyBPbmx5IHJhaXNlIGFuIGVycm9yIGlmIHRoZXJlIGFyZSBhY3R1YWxseSBt
dWx0aXBsZSBjb21taXRzIHRvIHNxdWFzaC4KKyAgICAgICAgICAgICAgICBudW1fbG9jYWxfY29t
bWl0cyA9IGxlbihzZWxmLmxvY2FsX2NvbW1pdHMoKSkKKyAgICAgICAgICAgICAgICBpZiBudW1f
bG9jYWxfY29tbWl0cyA+IDEgb3IgKG51bV9sb2NhbF9jb21taXRzID4gMCBhbmQgbm90IHNlbGYu
d29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4oKSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNl
IFNjcmlwdEVycm9yKG1lc3NhZ2U9c2VsZi5fZ2V0X3NxdWFzaF9lcnJvcl9tZXNzYWdlKG51bV9s
b2NhbF9jb21taXRzKSkKKworICAgICAgICBpZiBzcXVhc2ggYW5kIHNlbGYuX3N2bl9icmFuY2hf
aGFzX2V4dHJhX2NvbW1pdHMoKToKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3Nh
Z2U9IkNhbm5vdCB1c2UgLS1zcXVhc2ggd2hlbiBIRUFEIGlzIG5vdCBmdWxseSBtZXJnZWQvcmVi
YXNlZCB0byAlcy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhp
cyBicmFuY2ggbmVlZHMgdG8gYmUgc3luY2VkIGZpcnN0LiIgJSBzZWxmLnN2bl9icmFuY2hfbmFt
ZSgpKQorCisgICAgICAgIHJldHVybiBzcXVhc2gKKworICAgIGRlZiBfc3ZuX2JyYW5jaF9oYXNf
ZXh0cmFfY29tbWl0cyhzZWxmKToKKyAgICAgICAgIyBXaGVuIGhlYWQgY29udGFpbnMgYWxsIHRo
ZSBjb21taXRzIG9uIHRoZSBzdm4gYnJhbmNoLCBzaG93LWJyYW5jaCAtLXRvcGljcyB3aWxsIGhh
dmUgZXhhY3RseSA0IGxpbmVzLgorICAgICAgICAjIE9uZSBsaW5lIGZvciBoZWFkLCBvbmUgZm9y
IHRydW5rLCBvbmUgZm9yIHRoZSAiLS0iIHNlcHJhdG9yIGFuZCBvbmUgZm9yIHRoZSBicmFuY2gg
cG9pbnQgb24gdHJ1bmsuCisgICAgICAgIHRydW5rX2NvbW1pdHMgPSBydW5fY29tbWFuZChbJ2dp
dCcsICdzaG93LWJyYW5jaCcsICctLXRvcGljcycsICdoZWFkJywgc2VsZi5zdm5fYnJhbmNoX25h
bWUoKV0pCisgICAgICAgIHJldHVybiBsZW4ocmUuZmluZGFsbCgnXG4nLCB0cnVua19jb21taXRz
KSkgIT0gNAogCiAgICAgZGVmIGNvbW1pdF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNl
cm5hbWU9Tm9uZSwgZ2l0X2NvbW1pdD1Ob25lLCBzcXVhc2g9Tm9uZSk6CiAgICAgICAgICMgVXNl
cm5hbWUgaXMgaWdub3JlZCBkdXJpbmcgR2l0IGNvbW1pdHMuCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3QucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3Qu
cHkKaW5kZXggNWEyYzA5NDViZjc5NTA2YWI3M2JjZDY0Mzk4MjM1M2YyMDIzYjJiYi4uYjZhZTM4
ODA0YjU4N2IxZjBiMTkzYmRkZGM4ZWU1ZjAxM2IyY2ZmZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtX3VuaXR0ZXN0LnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVz
dC5weQpAQCAtODc1LDYgKzg3NSwxMiBAQCBjbGFzcyBHaXRUZXN0KFNDTVRlc3QpOgogICAgICAg
ICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIndGVzdF9maWxlX2NvbW1pdDInLCBzdm5fbG9n
KSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyJ3Rlc3RfZmlsZV9jb21taXQx
Jywgc3ZuX2xvZykpCiAKKyAgICBkZWYgdGVzdF9jb21taXRfd2l0aF9tZXNzYWdlX25vdF9zeW5j
ZWRfc3F1YXNoKHNlbGYpOgorICAgICAgICBydW5fY29tbWFuZChbJ2dpdCcsICdjaGVja291dCcs
ICctYicsICdteS1icmFuY2gnLCAndHJ1bmt+MyddKQorICAgICAgICBzZWxmLl90d29fbG9jYWxf
Y29tbWl0cygpCisgICAgICAgIHNjbSA9IGRldGVjdF9zY21fc3lzdGVtKHNlbGYuZ2l0X2NoZWNr
b3V0X3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNjcmlwdEVycm9yLCBzY20uY29t
bWl0X3dpdGhfbWVzc2FnZSwgImFub3RoZXIgdGVzdCBjb21taXQiLCBzcXVhc2g9VHJ1ZSkKKwog
ICAgIGRlZiB0ZXN0X3JldmVyc2VfZGlmZihzZWxmKToKICAgICAgICAgc2VsZi5fc2hhcmVkX3Rl
c3RfcmV2ZXJzZV9kaWZmKCkKIApAQCAtOTM3LDYgKzk0MywxMiBAQCBjbGFzcyBHaXRUZXN0KFND
TVRlc3QpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIndGVzdF9maWxlX2Nv
bW1pdDInLCBwYXRjaCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gocid0ZXN0
X2ZpbGVfY29tbWl0MScsIHBhdGNoKSkKIAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9wYXRjaF9ub3Rf
c3luY2VkX3NxdWFzaChzZWxmKToKKyAgICAgICAgcnVuX2NvbW1hbmQoWydnaXQnLCAnY2hlY2tv
dXQnLCAnLWInLCAnbXktYnJhbmNoJywgJ3RydW5rfjMnXSkKKyAgICAgICAgc2VsZi5fdHdvX2xv
Y2FsX2NvbW1pdHMoKQorICAgICAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShzZWxmLmdpdF9j
aGVja291dF9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTY3JpcHRFcnJvciwgc2Nt
LmNyZWF0ZV9wYXRjaCwgc3F1YXNoPVRydWUpCisKICAgICBkZWYgdGVzdF9jcmVhdGVfYmluYXJ5
X3BhdGNoKHNlbGYpOgogICAgICAgICAjIENyZWF0ZSBhIGdpdCBiaW5hcnkgcGF0Y2ggYW5kIGNo
ZWNrIHRoZSBjb250ZW50cy4KICAgICAgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oc2VsZi5n
aXRfY2hlY2tvdXRfcGF0aCkKQEAgLTEwMTYsNiArMTAyOCwxMiBAQCBjbGFzcyBHaXRUZXN0KFND
TVRlc3QpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3Rlc3RfZmlsZV9jb21taXQyJyBpbiBm
aWxlcykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0ZXN0X2ZpbGVfY29tbWl0MScgaW4gZmls
ZXMpCiAKKyAgICBkZWYgdGVzdF9jaGFuZ2VkX2ZpbGVzX25vdF9zeW5jZWRfc3F1YXNoKHNlbGYp
OgorICAgICAgICBydW5fY29tbWFuZChbJ2dpdCcsICdjaGVja291dCcsICctYicsICdteS1icmFu
Y2gnLCAndHJ1bmt+MyddKQorICAgICAgICBzZWxmLl90d29fbG9jYWxfY29tbWl0cygpCisgICAg
ICAgIHNjbSA9IGRldGVjdF9zY21fc3lzdGVtKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNjcmlwdEVycm9yLCBzY20uY2hhbmdlZF9maWxlcywgc3F1
YXNoPVRydWUpCisKICAgICBkZWYgdGVzdF9jaGFuZ2VkX2ZpbGVzKHNlbGYpOgogICAgICAgICBz
ZWxmLl9zaGFyZWRfdGVzdF9jaGFuZ2VkX2ZpbGVzKCkKIAo=
</data>
<flag name="review"
          id="40699"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>