From 82d55286fadb23243150dd457134628b5268b57f Mon Sep 17 00:00:00 2001 From: Marek Zawirski Date: Sun, 17 Aug 2008 22:43:54 +0200 Subject: [PATCH] Add getAllRemoteConfigs() to RemoteConfig Introduce the method allowing us to parse all configured remotes. Signed-off-by: Marek Zawirski Signed-off-by: Robin Rosenberg --- .../src/org/spearce/jgit/lib/RepositoryConfig.java | 21 +++++++++++++++++ .../org/spearce/jgit/transport/RemoteConfig.java | 26 ++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java index 048940d8..d3c29ac9 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java @@ -53,9 +53,11 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import org.spearce.jgit.util.FS; @@ -278,6 +280,25 @@ public class RepositoryConfig { return new String[0]; } + /** + * @param section + * section to search for. + * @return set of all subsections of specified section within this + * configuration and its base configuration; may be empty if no + * subsection exists. + */ + public Set getSubsections(final String section) { + final Set result = new HashSet(); + + for (final Entry e : entries) { + if (section.equals(e.base) && e.extendedBase != null) + result.add(e.extendedBase); + } + if (baseConfig != null) + result.addAll(baseConfig.getSubsections(section)); + return result; + } + private String getRawString(final String section, final String subsection, final String name) { final Object o = getRawEntry(section, subsection, name); diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java index bb215115..27410743 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java +++ b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java @@ -74,6 +74,32 @@ public class RemoteConfig { /** Default value for {@link #getReceivePack()} if not specified. */ public static final String DEFAULT_RECEIVE_PACK = "git-receive-pack"; + /** + * Parse all remote blocks in an existing configuration file, looking for + * remotes configuration. + * + * @param rc + * the existing configuration to get the remote settings from. + * The configuration must already be loaded into memory. + * @return all remotes configurations existing in provided repository + * configuration. Returned configurations are ordered + * lexicographically by names. + * @throws URISyntaxException + * one of the URIs within the remote's configuration is invalid. + */ + public static List getAllRemoteConfigs( + final RepositoryConfig rc) throws URISyntaxException { + final List names = new ArrayList(rc + .getSubsections(SECTION)); + Collections.sort(names); + + final List result = new ArrayList(names + .size()); + for (final String name : names) + result.add(new RemoteConfig(rc, name)); + return result; + } + private String name; private List uris; -- 2.11.4.GIT