From 2e0d178855dd1485c3a9022243c50e8917a909ee Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sun, 1 Dec 2013 01:19:35 +0100 Subject: Add recursive variant of Config.getNames() methods These methods allow to find all configuration entry names for a given section or section/subsection searching recursively through all base configurations of the given configuration. These methods are needed to calculate the names for the effective configuration of a git repository which combines the configuration entry names found in the repository, global and system configuration files Bug: 396659 Change-Id: Ie3731b5e877f8686aadad3f1a46b2e583ad3b7c6 Signed-off-by: Matthias Sohn --- .../src/org/eclipse/jgit/lib/Config.java | 27 ++++++++++++++++++++++ .../src/org/eclipse/jgit/lib/ConfigSnapshot.java | 14 ++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) (limited to 'org.eclipse.jgit') diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java index 81977d74ac..452ecddf42 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java @@ -527,6 +527,33 @@ public class Config { return getState().getNames(section, subsection); } + /** + * @param section + * the section + * @param recursive + * if {@code true} recursively adds the names defined in all base + * configurations + * @return the list of names defined for this section + */ + public Set getNames(String section, boolean recursive) { + return getState().getNames(section, null, recursive); + } + + /** + * @param section + * the section + * @param subsection + * the subsection + * @param recursive + * if {@code true} recursively adds the names defined in all base + * configurations + * @return the list of names defined for this subsection + */ + public Set getNames(String section, String subsection, + boolean recursive) { + return getState().getNames(section, subsection, recursive); + } + /** * Obtain a handle to a parsed set of configuration values. * diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigSnapshot.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigSnapshot.java index b7c4c64321..5ed129ed02 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigSnapshot.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigSnapshot.java @@ -97,6 +97,16 @@ class ConfigSnapshot { } Set getNames(String section, String subsection) { + return getNames(section, subsection, false); + } + + Set getNames(String section, String subsection, boolean recursive) { + Map m = getNamesInternal(section, subsection, recursive); + return new CaseFoldingSet(m); + } + + private Map getNamesInternal(String section, + String subsection, boolean recursive) { List s = sorted(); int idx = find(s, section, subsection, ""); //$NON-NLS-1$ if (idx < 0) @@ -113,7 +123,9 @@ class ConfigSnapshot { if (!m.containsKey(l)) m.put(l, e.name); } - return new CaseFoldingSet(m); + if (recursive && baseState != null) + m.putAll(baseState.getNamesInternal(section, subsection, recursive)); + return m; } String[] get(String section, String subsection, String name) { -- cgit v1.2.3