> On gen. 4, 2015, 5:02 p.m., David Faure wrote:
> > This undoes 4846b50aea0bc2262238963a85ab3556c22412e4 
> > (https://git.reviewboard.kde.org/r/117010/), basically.
> > 
> > However looking back at the discussions with Alexander Richardson, this 
> > might be only a revert of the part that went further than what *I* 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.
> 
> Matthew Dawson wrote:
>     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.
>     
>     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.
>     
>     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?
> 
> Albert Astals Cid wrote:
>     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. 
>     
>     Honestly before removing the mLoadedValue variable i think i'd prefer 
> adding mLoadedValue = mReference; in all the ::writeConfig
> 
> Matthew Dawson wrote:
>     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.
>     
>     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.
> 
> David Faure wrote:
>     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?
>     
>     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)?
>     
>     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.

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?


- Albert


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/121838/#review73083
-----------------------------------------------------------


On gen. 4, 2015, 4:04 p.m., Albert Astals Cid wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/121838/
> -----------------------------------------------------------
> 
> (Updated gen. 4, 2015, 4:04 p.m.)
> 
> 
> Review request for KDE Frameworks and Matthew Dawson.
> 
> 
> Repository: kconfig
> 
> 
> Description
> -------
> 
> We need to refresh mLoadedValue after a save, otherwise the value is stale.
> 
> I'm doing this by adding back the read() call in KCoreConfigSkeleton::save 
> (which is what kdelibs did).
> 
> Another option would be adding lots of mLoadedValue = mReference; in all the 
> ::writeConfig, but that seems much more prone.
> 
> I've also refactored the tests so they can be run independently now just fine.
> 
> 
> Diffs
> -----
> 
>   autotests/kconfigskeletontest.h c54c7b0 
>   autotests/kconfigskeletontest.cpp f401b9f 
>   src/core/kcoreconfigskeleton.cpp e4255a6 
> 
> Diff: https://git.reviewboard.kde.org/r/121838/diff/
> 
> 
> Testing
> -------
> 
> My tests now pass.
> 
> 
> Thanks,
> 
> Albert Astals Cid
> 
>

_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel

Reply via email to