Subject: [JGIT PATCH] Removed conversion of subsection to the lowecase when accessing subsection names in config files

From: Constantine Plotnikov <[email-masked]>
Date: Wed, 22 Jul 2009 16:53:41 +0400

The entries are stored in Config.byName without coversion of
the subsection name to the lowercase. But the methods
setStringList(...) and getRawEntry(...) were converting subsection
names to the lowercase, thus making it impossible to access
values in subsection with names that contained upppercase characters.
This patch removes conversion to the lowercase and introduce
the methods that appropriately concatentates the key. This key
is now used for all map accesses.

Signed-off-by: Constantine Plotnikov <[email-masked]>
---
The patch assumes the current head "FindBugs: don't use new String(String) in RefDatabase".

To apply above the series "[JGIT PATCH 00/12] Cleanup Config class" the
field names in the method add(final Entry e) should be changed. Possibly 
the patch should be merged into the patch 

 "[JGIT PATCH 10/12] Match config subsection names using case sensitive search".
                                   
 .../src/org/spearce/jgit/lib/Config.java           |   61 ++++++++++----------
 1 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Config.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Config.java
index c2d5c6e..a8639ff 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Config.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Config.java
@@ -419,15 +419,29 @@ private void ensureLoaded() {
 	private Object getRawEntry(final String section, final String subsection,
 			final String name) {
 		ensureLoaded();
+		return byName.get(concatenateKey(section, subsection, name));
+	}
 
+	/**
+	 * Create simple a key name from the key components
+	 *
+	 * @param section
+	 *            the section name
+	 * @param subsection
+	 *            the subsection name
+	 * @param name
+	 *            the key name
+	 * @return a simple key name that have all components concatenated and the
+	 *         case converted
+	 */
+	private static String concatenateKey(final String section,
+			final String subsection, final String name) {
 		String ss;
 		if (subsection != null)
-			ss = "." + subsection.toLowerCase();
+			ss = "." + subsection;
 		else
 			ss = "";
-		final Object o;
-		o = byName.get(section.toLowerCase() + ss + "." + name.toLowerCase());
-		return o;
+		return section.toLowerCase() + ss + "." + name.toLowerCase();
 	}
 
 	/**
@@ -548,10 +562,7 @@ public void setStringList(final String section, final String subsection,
 			final String name, final List<String> values) {
 		// Update our parsed cache of values for future reference.
 		//
-		String key = section.toLowerCase();
-		if (subsection != null)
-			key += "." + subsection.toLowerCase();
-		key += "." + name.toLowerCase();
+		String key = concatenateKey(section, subsection, name);
 		if (values.size() == 0)
 			byName.remove(key);
 		else if (values.size() == 1) {
@@ -787,28 +798,18 @@ protected void clear() {
 	@SuppressWarnings("unchecked")
 	private void add(final Entry e) {
 		entries.add(e);
-		if (e.base != null) {
-			final String b = e.base.toLowerCase();
-			final String group;
-			if (e.extendedBase != null) {
-				group = b + "." + e.extendedBase;
-			} else {
-				group = b;
-			}
-			if (e.name != null) {
-				final String n = e.name.toLowerCase();
-				final String key = group + "." + n;
-				final Object o = byName.get(key);
-				if (o == null) {
-					byName.put(key, e);
-				} else if (o instanceof Entry) {
-					final ArrayList<Object> l = new ArrayList<Object>();
-					l.add(o);
-					l.add(e);
-					byName.put(key, l);
-				} else if (o instanceof List) {
-					((List<Entry>) o).add(e);
-				}
+		if (e.base != null && e.name != null) {
+			final String key = concatenateKey(e.base, e.extendedBase, e.name);
+			final Object o = byName.get(key);
+			if (o == null) {
+				byName.put(key, e);
+			} else if (o instanceof Entry) {
+				final ArrayList<Object> l = new ArrayList<Object>();
+				l.add(o);
+				l.add(e);
+				byName.put(key, l);
+			} else if (o instanceof List) {
+				((List<Entry>) o).add(e);
 			}
 		}
 	}
-- 
1.6.1.2