diff options
author | Mathias Kinzler <mathias.kinzler@sap.com> | 2010-06-14 18:03:30 +0200 |
---|---|---|
committer | Mathias Kinzler <mathias.kinzler@sap.com> | 2010-06-15 10:12:26 +0200 |
commit | c1c1300a74e57d9a8bc6d2e1f079f048934ce9df (patch) | |
tree | e3c730c67a3b384db4ffda0c47a1337d9edebde5 /org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java | |
parent | 86fcdc53ad29d850f0831636038ef56a981c98e5 (diff) | |
download | jgit-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.java | 101 |
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; |