<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="12" style="border: 1px #c9c399 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://git.reviewboard.kde.org/r/121838/">https://git.reviewboard.kde.org/r/121838/</a>
     </td>
    </tr>
   </table>
   <br />





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On gener 4th, 2015, 5:02 p.m. UTC, <b>David Faure</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">This undoes 4846b50aea0bc2262238963a85ab3556c22412e4 (https://git.reviewboard.kde.org/r/117010/), basically.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">However looking back at the discussions with Alexander Richardson, this might be only a revert of the part that went further than what <em style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: normal;">I</em> was asking for ;) My problem was that save called reparseConfiguration (see 7af829a341c1ff04f9499336a28b6a4dd20bdbdc). But nowadays read which doesn't call reparseConfiguration (right?), so maybe it's fine to call it from save. I'll let Alexander remind us why he removed the read call.</p></pre>
 </blockquote>




 <p>On gener 5th, 2015, 7:13 p.m. UTC, <b>Matthew Dawson</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">The read call was removed to avoid changing the KCoreConfigSekleton during the save call, as it wasn't documented as doing that and may surprise some people that flushing their changes may load other unrelated changes.  I would prefer to keep that, for the same reason.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I do agree there is a bug that needs fixing, I'm just not sure how to fix it.  As the API stands now, the check with mLoadValue only works if the KConfig used with the KCoreConfigSkeletonItem doesn't change (never mind people manually calling those functions).  Otherwise, the value of mReference gets out of sync with KConfig, and breaks saving in general.  It appears removing the mLoadValue variable solves the bug, and avoids changing the underlying KConfig, assuming its loaded value hasn't changed.  The only benfit I see of keeping the check is avoiding the more complicated checks carried out by KConfig to verify the value is unchanged.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I think the best course of action is to remove the check for now, as it create subtle issues.  The way KCoreConfigSkeletonItem works may need to be changed, but that can be done later.  Thoughts?</p></pre>
 </blockquote>





 <p>On gener 5th, 2015, 7:20 p.m. UTC, <b>Albert Astals Cid</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I disagree, the easiest thing is adding back the read, it's been there in kdelibs for years, it works and has been tested by the time. Users can't be "suprised" by it, since it's been there forever. OTOH yes, it changes the KCoreConfigSekleton because someone added the possibility of modifying it, like the removeItem and stuff, before it was all static and fine. </p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Honestly before removing the mLoadedValue variable i think i'd prefer adding mLoadedValue = mReference; in all the ::writeConfig</p></pre>
 </blockquote>





 <p>On gener 6th, 2015, 3:40 a.m. UTC, <b>Matthew Dawson</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Regarding surprise, yes an existing user is unlikely to be surprised as they have probably been using the api and figured out its warts.  I was firstly thinking more of new users coming to KConfig, who read the documentation and don't learn of the fact the value can change when saving (easily fixed with a documentation string).  Secondly, I'd expect most people to expect the save call to not modify the values in any way, but that's my belief and can be changed.  Due to point two, I'd prefer not to put the read call back in the save path just to fix this bug, but I'm happy to reconsider as a general aspect of the code.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I'm not sold on removing either mLoadedValue, as that means KEntryMap can be modified when it isn't expected.  If you think adding that extra line in all the saves paths is better then removing mLoadedValue checks, I think that is probably the best route for now.  Ideally I think mLoadedValue should be tied to the KConfig used, but I don't see an easy way to do that while maintaining binary compatibility so I'm not worried about that to fix this bug.</p></pre>
 </blockquote>





 <p>On gener 6th, 2015, 8:24 a.m. UTC, <b>David Faure</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Since you're talking about expectations for users of the API, can you explain the issue in user terms for those who don't know all the implementation details?</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">This is about what happens when modifying the KConfig object (in memory) directly (by passing the KConfigXT layer) -- or is this about modifying the file on disk (from another process)?</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Let's find out what would be the most logical behavior, the reasoning "it has been in kdelibs for years" doesn't hold given that we renamed the functions on purpose, to reflect a behavior change.</p></pre>
 </blockquote>








</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Honestly i don't understand why issuing a "read" after a "save" would change my object, that's unexpected to me, on every other API I used that had save/read, doing a read after save got me the same, since i had just saved, so why would it be different? I this case seems Matthew says it's not the same? Why?</p></pre>
<br />










<p>- Albert</p>


<br />
<p>On gener 4th, 2015, 4:04 p.m. UTC, Albert Astals Cid wrote:</p>









<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="12" style="border: 1px #888a85 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
 <tr>
  <td>

<div>Review request for KDE Frameworks and Matthew Dawson.</div>
<div>By Albert Astals Cid.</div>


<p style="color: grey;"><i>Updated gen. 4, 2015, 4:04 p.m.</i></p>









<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
kconfig
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">We need to refresh mLoadedValue after a save, otherwise the value is stale.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I'm doing this by adding back the read() call in KCoreConfigSkeleton::save (which is what kdelibs did).</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Another option would be adding lots of mLoadedValue = mReference; in all the ::writeConfig, but that seems much more prone.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I've also refactored the tests so they can be run independently now just fine.</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">My tests now pass.</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>autotests/kconfigskeletontest.h <span style="color: grey">(c54c7b0)</span></li>

 <li>autotests/kconfigskeletontest.cpp <span style="color: grey">(f401b9f)</span></li>

 <li>src/core/kcoreconfigskeleton.cpp <span style="color: grey">(e4255a6)</span></li>

</ul>

<p><a href="https://git.reviewboard.kde.org/r/121838/diff/" style="margin-left: 3em;">View Diff</a></p>






  </td>
 </tr>
</table>








  </div>
 </body>
</html>