[Mono-dev] [Fwd: [Mono-patches] r106626 - in trunk/mcs/class/System.Configuration: . System.Configuration Test/System.Configuration Test/standalone]
Gert Driesen
gert.driesen at telenet.be
Thu Jun 26 14:03:28 EDT 2008
Atsushi,
I'm not deliberately ignoring your or anyone else's advice. Perhaps my idea
of trivial changes is different than yours, definitely if a very large part
of those changes is covered by unit tests. Next time, I'll flood mono-dev
with small patches ;-)
I'm definitely not claiming my changes are more important than performance
improvements, but I'd be surprised if both can't be combined.
Gert
-----Original Message-----
From: Atsushi Eno [mailto:atsushi at ximian.com]
Sent: donderdag 26 juni 2008 19:58
To: Gert Driesen
Cc: 'mono-devel-list'
Subject: Re: [Mono-dev] [Fwd: [Mono-patches] r106626 - in
trunk/mcs/class/System.Configuration: . System.Configuration
Test/System.Configuration Test/standalone]
In short, you are not going to change your commit policy right?
When I go ahead and make significant refactoring, I'll clean your
changes up and mark insignificant compatibility tests as Ignore.
Insignificant compatibility mastur* should not block significant
performance improvements.
Atsushi Eno
Gert Driesen wrote:
> Hey Atsushi,
>
> Apart from the change in ClientConfigurationSystem my patch was about
using
> the IConfigErrorInfo interface for getting filename/linenumber info
instead
> of explicitly checking for XmlTextReader, or using internal IConfigXmlNode
> interface.
>
> Before the introduction of IConfigErrorInfo, we had to resort to this. My
> changes just allow us to use this new interface, which - at the same time
-
> allows us to write unit tests for this (as this now matches the MS
> implementation).
>
> I don't intend to write a book about these trivial changes, but I've
> responded to your comments inline.
>
> Gert
>
> -----Original Message-----
> From: mono-devel-list-bounces at lists.ximian.com
> [mailto:mono-devel-list-bounces at lists.ximian.com] On Behalf Of Atsushi Eno
> Sent: donderdag 26 juni 2008 17:41
> To: Gert Driesen
> Cc: 'mono-devel-list'
> Subject: Re: [Mono-dev] [Fwd: [Mono-patches] r106626 - in
> trunk/mcs/class/System.Configuration: . System.Configuration
> Test/System.Configuration Test/standalone]
>
> No. You claim as if your change were only about one issue, which it
> NOT true. Here is concrete description:
>
>> Modified:
>
trunk/mcs/class/System.Configuration/System.Configuration/AppSettingsSection
> .cs
>> ===================================================================
>> ---
>
trunk/mcs/class/System.Configuration/System.Configuration/AppSettingsSection
> .cs 2008-06-26 09:57:29 UTC (rev 106625)
>> +++
>
trunk/mcs/class/System.Configuration/System.Configuration/AppSettingsSection
> .cs 2008-06-26 10:31:07 UTC (rev 106626)
>> @@ -73,7 +73,7 @@
>> if (File != "") {
>> try {
>> Stream s = System.IO.File.OpenRead
> (File);
>> - XmlReader subreader = new
> XmlTextReader (s);
>> + XmlReader subreader = new
> ConfigXmlTextReader (s, File);
>> base.DeserializeElement (subreader,
> serializeCollectionKey);
>> s.Close ();
>> }
>
> For example it is about ConfigXmlTextReader change.
>
> => The use of ConfigXmlTextReader is necessary as it implements
> IConfigErrorInfo. I consider this part of the same change.
>
>> Modified:
>
trunk/mcs/class/System.Configuration/System.Configuration/ClientConfiguratio
> nSystem.cs
>> ===================================================================
>> ---
>
trunk/mcs/class/System.Configuration/System.Configuration/ClientConfiguratio
> nSystem.cs 2008-06-26 09:57:29 UTC (rev 106625)
>> +++
>
trunk/mcs/class/System.Configuration/System.Configuration/ClientConfiguratio
> nSystem.cs 2008-06-26 10:31:07 UTC (rev 106626)
>> @@ -32,28 +32,39 @@
>> using System.Reflection;
>> using System.Configuration.Internal;
>>
>> -namespace System.Configuration {
>> -
>> +namespace System.Configuration
>> +{
>> internal class ClientConfigurationSystem : IInternalConfigSystem
>> {
>> - readonly Configuration cfg;
>> + Configuration cfg;
>>
>> - public ClientConfigurationSystem () {
>> - Assembly a = Assembly.GetEntryAssembly();
>> - string exePath =
> AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
>> -
>> - if (a == null && exePath == null)
>> - exePath = "";
>> -
>> - cfg =
> ConfigurationManager.OpenExeConfigurationInternal
> (ConfigurationUserLevel.None, a, exePath);
>> + public ClientConfigurationSystem ()
>> + {
>> }
>>
>> + private Configuration Configuration {
>> + get {
>> + if (cfg == null) {
>> + Assembly a =
> Assembly.GetEntryAssembly();
>> + string exePath =
> AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
>> +
>> + if (a == null && exePath == null)
>> + exePath = string.Empty;
>> +
>> + try {
>> + cfg =
> ConfigurationManager.OpenExeConfigurationInternal (
>> +
> ConfigurationUserLevel.None, a, exePath);
>> + } catch (Exception ex) {
>> + throw new
> ConfigurationErrorsException ("Error Initializing the configuration
> system.", ex);
>> + }
>> + }
>> + return cfg;
>> + }
>> + }
>> +
>> object IInternalConfigSystem.GetSection (string configKey)
>> {
>> - if (cfg == null)
>> - return null;
>> -
>> - ConfigurationSection s = cfg.GetSection (configKey);
>> + ConfigurationSection s = Configuration.GetSection
> (configKey);
>> return s != null ? s.GetRuntimeObject () : null;
>> }
>>
>
> This is about lazy initialization. There is no bug fixes involved.
>
> => As I mentioned earlier, this is not related to the IConfigErrorInfo
> implementation. However, it does fix a bug. Standalone test t28 failed
with
> a TypeInitializationException before this fix.
>
>> @@ -460,17 +459,12 @@
>> return false;
>> }
>>
>> - try {
>> - reader = new XmlTextReader (stream);
>> + using (XmlTextReader reader = new
> ConfigXmlTextReader (stream, streamName)) {
>> ReadConfigFile (reader, streamName);
>> - } finally {
>> - if (reader != null)
>> - reader.Close();
>> }
>> return true;
>> }
>>
>> -
>> void ReadConfigFile (XmlTextReader reader, string fileName)
>> {
>> reader.MoveToContent ();
>
> Insignificant change.
>
> => Same as above. The use of ConfigXmlTextReader is necessary as it
> implements IConfigErrorInfo. Also used Disposable pattern (unrelated, big
> deal).
>
>> Modified:
>
trunk/mcs/class/System.Configuration/System.Configuration/ConfigurationEleme
> nt.cs
>> ===================================================================
>> ---
>
trunk/mcs/class/System.Configuration/System.Configuration/ConfigurationEleme
> nt.cs 2008-06-26 09:57:29 UTC (rev 106625)
>> +++
>
trunk/mcs/class/System.Configuration/System.Configuration/ConfigurationEleme
> nt.cs 2008-06-26 10:31:07 UTC (rev 106626)
>> @@ -322,13 +322,13 @@
>> } else if (this is
> ConfigurationSection && reader.LocalName == "configSource") {
>> /* ignore */
>> } else if
> (!OnDeserializeUnrecognizedAttribute (reader.LocalName, reader.Value))
>> - throw new
> ConfigurationException ("Unrecognized attribute '" + reader.LocalName +
> "'.");
>> + throw new
> ConfigurationErrorsException ("Unrecognized attribute '" +
reader.LocalName
> + "'.", reader);
>>
>> continue;
>> }
>>
>> if (readProps.ContainsKey (prop))
>> - throw new ConfigurationException
> ("The attribute '" + prop.Name + "' may only appear once in this
element.");
>> + throw new
> ConfigurationErrorsException ("The attribute '" + prop.Name + "' may only
> appear once in this element.", reader);
>>
>> string value = null;
>> try {
>
> Different bugfix.
>
> => I agree, but it's all about the same issue. The real bugfix is about
> implementing support for IConfigErrorInfo, and this specific change just
> allows us to use that implementation of the XmlTextReader for adding
> filename/linenumber info to exception messages.
>
>> @@ -141,34 +143,34 @@
>> //
>> public static string GetFilename (XmlReader reader)
>> {
>> - if (reader is XmlTextReader)
>> - return ((XmlTextReader)reader).BaseURI;
>> + if (reader is IConfigErrorInfo)
>> + return ((IConfigErrorInfo) reader).Filename;
>> else
>> - return String.Empty;
>> + return null;
>> }
>>
>> public static int GetLineNumber (XmlReader reader)
>> {
>> - if (reader is XmlTextReader)
>> - return ((XmlTextReader)reader).LineNumber;
>> + if (reader is IConfigErrorInfo)
>> + return ((IConfigErrorInfo)
> reader).LineNumber;
>> else
>> return 0;
>> }
>>
>> public static string GetFilename (XmlNode node)
>> {
>> - if (!(node is IConfigXmlNode))
>> - return String.Empty;
>> + if (!(node is IConfigErrorInfo))
>> + return null;
>>
>> - return ((IConfigXmlNode) node).Filename;
>> + return ((IConfigErrorInfo) node).Filename;
>> }
>>
>> public static int GetLineNumber (XmlNode node)
>> {
>> - if (!(node is IConfigXmlNode))
>> + if (!(node is IConfigErrorInfo))
>> return 0;
>>
>> - return ((IConfigXmlNode) node).LineNumber;
>> + return ((IConfigErrorInfo) node).LineNumber;
>> }
>>
>> public override void GetObjectData (SerializationInfo info,
> StreamingContext context)
>> @@ -178,9 +180,8 @@
>> info.AddValue ("ConfigurationErrors_Line", line);
>> }
>>
>> - string bareMessage = "";
>> - string filename = "";
>> - int line = 0;
>> + readonly string filename;
>> + readonly int line;
>> }
>> #pragma warning restore
>> }
>
> Insignificant or doubtful changes (I needed to read the actual patch
> again after quick check on ChangeLog).
>
> => There's nothing doubtful about these changes. These are fully covered
by
> unit tests (that now pass on MS and Mono).
>
> The changes are almost niche as it could have been done as
> using XmlTextReader.BaseURI (the only difference between BaseURI and
> this Filename thingy is whether it is an absolute URL or a file name,
> isn't it) ?
>
> => More or less, yes. But my changes are about using the IConfigErrorInfo
> interface were applicable, instead of relying on the internal
IConfigXmlNode
> interface, or explicitly checking for XmlTextReader.
>
> => My changes actually make it a little easier for your
XmlNodeReader-based
> implementation, as you don't have to check for explicit checks against
> XmlTextReader and just need to implement IConfigErrorInfo in your
> XmlNodeReader class for getting filename/linenumber info in exception
> messages.
>
> I keep somewhat special eyes on your changes because you usually
> seem to make larger changes than usual hackers do. And this time
> "unfortunately" we were actually discussing System.Configuration
> refactoring. That's why your change is specially mentioned.
>
> => I have no problem with people monitoring my changes. I tend to do that
> myself, and this is part of why I like open-source development.
>
> If you feel strong about reverting my changes, please go ahead. If you
want
> me to update your patch to support IConfigErrorInfo, just let me know.
>
> Gert
>
> Gert Driesen wrote:
>> Hey Jb,
>>
>> Sorry dude, but this wasn't a large changeset.
>>
>> If the definition of a large changeset is a patch which adds a large set
> of
>> unit tests, then I'm guilty as charged.
>>
>> Apart from removing a few extra tabs (my mistake), everything I changed
is
>> documented in the changelog and covered by unit tests or standalone
tests.
>>
>> There's only one part of the patch that could be committed separately,
and
>> this is the change to ClientConfigurationSystem. And again, this change
>> fixes a failing standalone test (t28).
>>
>> Please be reasonable. What more can you ask?
>>
>> Gert
>>
>> -----Original Message-----
>> From: mono-devel-list-bounces at lists.ximian.com
>> [mailto:mono-devel-list-bounces at lists.ximian.com] On Behalf Of Jb Evain
>> Sent: donderdag 26 juni 2008 15:11
>> To: Gert Driesen
>> Cc: Atsushi Eno; mono-devel-list
>> Subject: Re: [Mono-dev] [Fwd: [Mono-patches] r106626 - in
>> trunk/mcs/class/System.Configuration: . System.Configuration
>> Test/System.Configuration Test/standalone]
>>
>> Hey,
>>
>> On 6/26/08, Gert Driesen <gert.driesen at telenet.be> wrote:
>>> > Even only with that point, I'm pretty much tempted to revert your
>>> > changes.
>>>
>>>
>>> Yeah, I'm glad my (any?) contributions are that much appreciated.
>> Come on Gert, it's definitely not the first time that you're told that
>> your commits are:
>>
>> * totally not atomic,
>> * mixing totally different concerns,
>>
>> And for some of us that keep an eye on the code coming in, it makes
>> that task much harder.
>>
>> That doesn't mean that we don't appreciate contributions. But once
>> again, I already told you that I was not happy with the way you're
>> making commits, and am not the first one. And I can certainly
>> understand the maintainer frustration to see this huge changeset
>> coming in.
>>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
More information about the Mono-devel-list
mailing list