aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java
diff options
context:
space:
mode:
authorMathias Kinzler <mathias.kinzler@sap.com>2010-06-14 18:03:30 +0200
committerMathias Kinzler <mathias.kinzler@sap.com>2010-06-15 10:12:26 +0200
commitc1c1300a74e57d9a8bc6d2e1f079f048934ce9df (patch)
treee3c730c67a3b384db4ffda0c47a1337d9edebde5 /org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java
parent86fcdc53ad29d850f0831636038ef56a981c98e5 (diff)
downloadjgit-c1c1300a74e57d9a8bc6d2e1f079f048934ce9df.tar.gz
jgit-c1c1300a74e57d9a8bc6d2e1f079f048934ce9df.zip
Allow to read configured keys
Currently, there is no way to read the content of the Git Configuration in a way that would allow to list all configured values generically. This change extends the Config class in such a way as to being able to get a list of sections and to get a list of names for any given section or subsection. This is required in able to implement proper configuration handling in EGit (show all the content of a given configuration similar to "git config -l"). Change-Id: Idd4bc47be18ed0e36b11be8c23c9c707159dc830 Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java')
-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;