Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-29 Thread David Faure

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

(Updated March 29, 2014, 9:08 a.m.)


Status
--

This change has been discarded.


Review request for KDE Frameworks and Matthew Dawson.


Repository: kconfig


Description
---

KConfigSkeleton: avoid calling reparseConfiguration() immediately after 
creation.

KConfig already parses the config files from disk in the constructor,
which is necessary for non-KConfigXT users. However when using KConfigXT
the first thing one has to do after creation is to call readConfig(),
which should therefore not call reparseConfiguration the first time.

strace -e open kate | grep -v NOENT | grep oxygenrc | wc -l
  went from 4 to 1 -- bingo, goal reached!
  (and when looking for kdeglobals, from 10 to 7)


Diffs
-

  src/core/kcoreconfigskeleton.cpp 9c5fb4a80d500e81b483b749a137ad5f2c99a55f 
  src/core/kcoreconfigskeleton_p.h 0b020ed3493186e699d872ddc7a9f9294d797a95 

Diff: https://git.reviewboard.kde.org/r/116461/diff/


Testing
---

(see commit log) + unittests in kconfig still pass.


Thanks,

David Faure

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


Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-23 Thread Matthew Dawson


 On Feb. 28, 2014, 3:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-23 Thread David Faure


 On Feb. 28, 2014, 8:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-17 Thread David Faure


 On Feb. 28, 2014, 8:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-16 Thread David Faure


 On Feb. 28, 2014, 8:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-16 Thread Matthew Dawson


 On Feb. 28, 2014, 3:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-16 Thread David Faure


 On Feb. 28, 2014, 8:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-16 Thread Matthew Dawson


 On Feb. 28, 2014, 3:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-16 Thread David Faure


 On Feb. 28, 2014, 8:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-16 Thread Matthew Dawson


 On Feb. 28, 2014, 3:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-06 Thread Matthew Dawson


 On Feb. 28, 2014, 3:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.
 
 

Re: Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-03-04 Thread David Faure


 On Feb. 28, 2014, 8:41 p.m., Matthew Dawson wrote:
  While I'm fine with the idea behind this optimization, I worry that this 
  implementation could create situations were a configuration change is not 
  picked up by the system.  For instance, what happens if the user doesn't 
  immediately call readConfig?  This could create some subtle bugs in 
  downstream code.
  
  I had two ideas for how this optimization could be implemented:
  1) Lazy load the KConfig object the first time it is used.  Then, in 
  readConfig, the call to be reparseConfiguration could be avoided if the 
  KConfig is created due to its call.  This would retain the current 
  behaviour, while ensuring readConfig reads in the most configuration.  
  Other uses of the KConfig will have to ensure the KConfig object has 
  already been created, and if the user calls one of those functions before 
  readConfig, they will still double read the configuration.  But since this 
  is just status quo, I'm not too worried.
  2) Alternately, create a set of construction functions, like make_shared, 
  that imitate the creation of a KConfigSkeleton subclass, and then reading 
  the configuration through readConfig.  Internally, it can use a private 
  readConfig function to ensure the configuration is no re-read.  This would 
  require changes to applications to avoid the extra configuration call, 
  unfortunately.
  
  I saw RR #115964, and I assume that some of the reductions to the readings 
  of oxygenrc are caused by the sharing the KConfig between some 
  KConfigSkeleton's?  If so, I'd suggest implementing solution 1 for the 
  general case, and then making a special construction function to handle 
  shared KConfig's.  I don't want to avoid calling reparseConfiguration 
  without some warning around this, as it may again cause some surprises.  A 
  new appropriately named function shouldn't be too bad though, as opposed to 
  changing the behaviour of the constructor.
 
 David Faure wrote:
 I've been thinking about this too, but what good is a KConfigSkeleton if 
 you don't call readSettings() on it? You can't read any settings from it 
 then, so all you can do is a) keep it around for later or b) use it purely 
 for writing out a new config file. Use case b) is no problem, so I think 
 we're talking about use case a). Yes in theory an app could see a behavior 
 change in that the config file is loaded from disk at the time of creating 
 the skeleton rather than at the time of calling readConfig the first time. 
 But this is why I'm making this change in 5.0 and not in 4.13. I think it's 
 an acceptable behavior (matching KConfig's behavior more closely - it parses 
 in the ctor, not in readEntry) and I doubt it affects many apps, since all I 
 see everywhere is singletons - i.e. the KConfigSkeleton is created on demand 
 at the time where it's first needed, therefore the ctor is immediately 
 followed by readConfig.
 
 My alternative idea (let's call it 3 to complete your list) was to pass 
 a flag to the KConfig constructor to tell it don't parse now, and setting 
 that flag from the KConfigSkeleton constructor. Then readConfig can keep 
 always calling reparseConfiguration(). This would work, right?
 
 Your suggestion 1 is somewhat equivalent, but since one of the ctors for 
 KCoreConfigSkeleton takes a KSharedConfig::Ptr as input, it's not applicable, 
 we can't delay the creation of the kconfig within KCoreConfigSkeleton since 
 it's created beforehand by the application.
 Your suggestion 2 requires changing all the apps, which lowers the 
 benefits of the optimization.
 
 Matthew Dawson wrote:
 I agree, it is a weird use case, and the software should probably be 
 adjusted.  However, if an app does rely on that, it is very hard for the 
 author of the software to notice the change, even with the port to 5.  If I 
 just looked at the functions names, I'd expect readConfig to read the file 
 all the time.  Following the principle of least surprise, I'd like to avoid 
 readConfig ever not reading the file.
 
 I'm fine with your alternate idea.  I prefer that over my first idea, as 
 it effectively does the same thing while being less invasive.
 
 For my second suggestion, I realize its downsides.  I just like following 
 the principle of least surprise.  If your alternate idea is implemented, I 
 believe that would cover most cases.  Suggestion 2 can then be implemented, 
 and its related constructor could be marked deprecated.  This would allow for 
 existing programs to continue working, while allowing developers to change 
 their code to take advantage of the optimization.
 
 As I stated earlier, I'm not sure about who KDE wants to handle source 
 compatibility with kdelibs.  I also wouldn't mind just removing the second 
 constructor, forcing all users to upgrade their code.  Since the function is 
 a drop in replacement, it wouldn't be that hard for developers to upgrade.

I 

Review Request 116461: KConfigSkeleton: avoid calling reparseConfiguration() immediately after creation.

2014-02-27 Thread David Faure

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

Review request for KDE Frameworks and Matthew John Dawson.


Repository: kconfig


Description
---

KConfigSkeleton: avoid calling reparseConfiguration() immediately after 
creation.

KConfig already parses the config files from disk in the constructor,
which is necessary for non-KConfigXT users. However when using KConfigXT
the first thing one has to do after creation is to call readConfig(),
which should therefore not call reparseConfiguration the first time.

strace -e open kate | grep -v NOENT | grep oxygenrc | wc -l
  went from 4 to 1 -- bingo, goal reached!
  (and when looking for kdeglobals, from 10 to 7)


Diffs
-

  src/core/kcoreconfigskeleton.cpp 9c5fb4a80d500e81b483b749a137ad5f2c99a55f 
  src/core/kcoreconfigskeleton_p.h 0b020ed3493186e699d872ddc7a9f9294d797a95 

Diff: https://git.reviewboard.kde.org/r/116461/diff/


Testing
---

(see commit log) + unittests in kconfig still pass.


Thanks,

David Faure

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