On Sat, Nov 12, 2011 at 3:26 AM, Nick Treleaven
<nick.trelea...@btinternet.com> wrote:
> On 08/11/2011 21:11, Lex Trotman wrote:
>>
>> [...]
>>
>>>> Unfortunately this is a requirement for any overriding scheme like
>>>> stubs, if all the settings are written to the users project file no
>>>> settings will be read from the stub file.
>>>
>>> No, what I would do is:
>>> * Read the user config file content
>>> * Append the content of the VCS file
>>> * Pass the data into a GKeyFile
>>>
>>> The key file will let the later entries naturally override the earlier
>>> user
>>> settings. This means we hardly have to change any code.
>>>
>>>> The no write unless changed rule only applies to settings that can go
>>>> in the stub file of course.  Build settings already adhere to this
>>>> rule.  Of course splitting the project file does not have this
>>>> problem, but as you point out has other problems.
>>>
>>> Build settings are unique ;-) IMO it's unjustified to change all project
>>> settings in core and plugins, plus require all future settings to follow
>>> the
>>> write-if-changed rule, which needs extra code per setting.
>>>
>>>> Just to note, going the other way and having the stub file override
>>>> the user settings is likely to make the code harder and the user
>>>> interface more confused.  Since we agree that the stub file isn't
>>>> written in normal operation, users (and plugins) will need to be
>>>> prevented from changing settings which are overridden by the stub,
>>>> otherwise the changes will be written to the user file and overridden
>>>> again by the stub when next opened.  Having changes silently disappear
>>>> is bad design.
>>>
>>> On saving I think you could detect a conflicting setting by comparing the
>>> keyfile values as strings, so warning the user they have made a change
>>> (and
>>> which one) that will be overriden. That is good enough IMO.
>>
>> [...]
>>
>> I think you might have missed that there is a contradiction between
>> the statement above, tell the user but don't do anything to fix it,
>> and the statement below (which I agree with) that they must be able to
>> save changes to settings.   That means user project settings must be
>> loaded after the base project settings, the opposite of what you said
>> above.  But if user settings override base settings and all settings
>> are written to the user file then no base settings will ever be used,
>> so only changed settings should be saved in the user file.  I think
>> you overstate the amount of work, the project file doesn't hold much
>> outside build (which does it), and session (which doesn't matter).
>>
>> The simple solution is to add "only save if changed" as a new feature
>> in stash so its easy to use for the settings that need it.
>
> There is no contradiction - the VCS file overrides the user settings (which
> are the same as now) as I have explained.
>
> You detect conflicts and warn the user with the keyfile keyname.
>
> Detection is done just before saving the user project file - the user
> settings are stored in a GKeyFile - then the VCS file is loaded as a keyfile
> struct also. For each key in the VCS keyfile you read the corresponding
> string value of the key and compare it with a lookup in the prepared user
> keyfile. If there is a conflict, tell the user, and you could even prevent
> the prepared keyfile being saved to disk (but I'm undecided about that).
>
> The code I've described stays the same irrespective of which settings are in
> either keyfile, and doesn't require modifying existing code, just adds
> stuff.
>
> I don't mind if you don't like this solution, but it is probably the
> simplest in terms of code changed & added.

I don't like it because as a user I can't save any of my settings,
thats unacceptable.

>
>>> Hold on, build commands should be overridable by the user. The VCS file
>>> can
>>> provide initial commands, but the user should definitely be able to
>>> override
>>> them IMO.
>
> BTW you may want to disallow overriding build commands for some projects,
> this is Ok. I just think that at least run commands often need to be
> overridable.

Placing arbitary limits on things like that is bad.

>
>>> Also, I don't understand why using a visual merge program like
>>> Meld/WinMerge
>>> couldn't be used to update the VCS project file from a user file. This
>>> would
>>> make updating the VCS file quite easy IMO.
>>>
>>> And remember that probably only a minority of Geany users would be using
>>> shared project files, so I think the code should be minimal. If people
>>> disagree, write a plugin.
>>>
>>
>> Plugins can't set build settings since you removed the build plugin
>> interface ;D
>
> If there was a general build API a plugin would not be able to use it in the
> way you imagine, it would need extra API elements to do so.
>
>> To summarise, no suitable solution has been proposed so far:
>>
>> 1. splitting the files has backward compatibility unresolved so far
>> 2. stub/base proposal has issues of overriding order vs save only
>> changed unresolved so far
>
> I don't think (2) is true, it may have other limitations which personally I
> think don't matter, but it would work and be simple.

Not saving user settings is an unacceptable limitation of your
resolution of 2.  Simplicity doesn't matter.

Cheers
Lex
_______________________________________________
Geany-devel mailing list
Geany-devel@uvena.de
https://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel

Reply via email to