summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java101
1 files changed, 101 insertions, 0 deletions
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 7c5af1e648..ccb2516917 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java
@@ -372,6 +372,33 @@ public class Config {
}
/**
+ * @return the sections defined in this {@link Config}
+ */
+ public Set<String> getSections() {
+ return get(new SectionNames());
+ }
+
+ /**
+ * @param section
+ * the section
+ * @return the list of names defined for this section
+ */
+ public Set<String> getNames(String section) {
+ return getNames(section, null);
+ }
+
+ /**
+ * @param section
+ * the section
+ * @param subsection
+ * the subsection
+ * @return the list of names defined for this subsection
+ */
+ public Set<String> getNames(String section, String subsection) {
+ return get(new NamesInSection(section, subsection));
+ }
+
+ /**
* Obtain a handle to a parsed set of configuration values.
*
* @param <T>
@@ -1077,6 +1104,80 @@ public class Config {
}
}
+ private static class NamesInSection implements SectionParser<Set<String>> {
+ private final String section;
+
+ private final String subsection;
+
+ NamesInSection(final String sectionName, final String subSectionName) {
+ section = sectionName;
+ subsection = subSectionName;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + section.hashCode();
+ result = prime * result
+ + ((subsection == null) ? 0 : subsection.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ NamesInSection other = (NamesInSection) obj;
+ if (!section.equals(other.section))
+ return false;
+ if (subsection == null) {
+ if (other.subsection != null)
+ return false;
+ } else if (!subsection.equals(other.subsection))
+ return false;
+ return true;
+ }
+
+ public Set<String> parse(Config cfg) {
+ final Set<String> result = new HashSet<String>();
+ while (cfg != null) {
+ for (final Entry e : cfg.state.get().entryList) {
+ if (e.name != null
+ && StringUtils.equalsIgnoreCase(e.section, section)) {
+ if (subsection == null && e.subsection == null)
+ result.add(StringUtils.toLowerCase(e.name));
+ else if (e.subsection != null
+ && e.subsection.equals(subsection))
+ result.add(StringUtils.toLowerCase(e.name));
+
+ }
+ }
+ cfg = cfg.baseConfig;
+ }
+ return Collections.unmodifiableSet(result);
+ }
+ }
+
+ private static class SectionNames implements SectionParser<Set<String>> {
+ public Set<String> parse(Config cfg) {
+ final Set<String> result = new HashSet<String>();
+ while (cfg != null) {
+ for (final Entry e : cfg.state.get().entryList) {
+ if (e.section != null)
+ result.add(StringUtils.toLowerCase(e.section));
+ }
+ cfg = cfg.baseConfig;
+ }
+ return Collections.unmodifiableSet(result);
+ }
+ }
+
+
private static class State {
final List<Entry> entryList;