On 24/07/14 20:54, Junio C Hamano wrote: > Tanay Abhra <tanayabh@xxxxxxxxx> writes: > >> If we take the easy way out, fixing UI mistakes would be easier, >> just replace git_config_cache() with git_config_raw() for such cases. > > I do not think that would fly well. > > The kind of "let's migrate funcname users to xfuncname while still > supporting the old uses" change will be done in the callback > functions like userdiff_config(). But it is very typical that > multiple config callback functions are cascaded (e.g. many > eventually end up calling git_default_core_config()); in order to a > workaround you suggest to help a callback in deep in a cascade chain > would require you to see which ones among all the callback functions > will eventually call the callback you are updating for migration and > update all git_config() calls to git_config_raw(). > > If you fix it properly (assuming it is feasible; I haven't heard if > you even tried to see how much work it would involve), you do not > need to introduce "git_config_cached()" (or "_raw()" for that > matter), which is a huge plus. git_config() would instead do the > right thing automatically, giving the same semantics except that it > does not read the same file twice when it is known that the file has > not changed. > I haven't been following this conversation too closely, so if I have grasped the wrong end of this stick, please accept my apologies! ;-) Usually if you need to iterate the values in a hash-table in the order of key insertion, you would simply link the hash-table entries into a linked list. This assumes that the keys are distinct, or if not, that you are using a 'multi-map' type of hash-table. Here, if memory serves me, you are doing the 'multi' bit yourself within the single hash-table entry for a given key; so its not quite so easy. However, I think it you could create a list of <pointer to hash-table entry, string-list index> pairs in the config_set and use that to do the iteration. A bit ugly, but it should work. HTH ATB, Ramsay Jones -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html