package zielu.gittoolbox.repo; import com.google.common.collect.ImmutableSet; import com.intellij.dvcs.repo.RepoStateException; import com.intellij.openapi.diagnostic.Logger; import java.io.File; import java.io.IOException; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.ini4j.Ini; import org.ini4j.Profile.Section; import org.jetbrains.annotations.NotNull; public class GtConfig { private static final Logger LOG = Logger.getInstance(GtConfig.class); private static final Pattern SVN_REMOTE_SECTION = Pattern.compile("svn-remote \"(.*)\""); private static final GtConfig EMPTY = new GtConfig(); private final ImmutableSet<String> svnRemotes; private GtConfig(ImmutableSet.Builder<String> svnRemotes) { this.svnRemotes = svnRemotes.build(); } private GtConfig() { svnRemotes = ImmutableSet.of(); } public boolean isSvnRemote(String name) { return svnRemotes.contains(name); } @NotNull public static GtConfig load(@NotNull File configFile) { if (!configFile.exists()) { LOG.info("No .git/config file at " + configFile.getPath()); return EMPTY; } else { Ini ini = new Ini(); ini.getConfig().setMultiOption(true); ini.getConfig().setTree(false); try { ini.load(configFile); } catch (IOException var8) { LOG.warn(new RepoStateException("Couldn\'t load .git/config file at " + configFile.getPath(), var8)); return EMPTY; } ImmutableSet.Builder<String> svnRemotes = ImmutableSet.builder(); for (Entry<String, Section> section : ini.entrySet()) { Matcher matcher = SVN_REMOTE_SECTION.matcher(section.getKey()); if (matcher.matches()) { String name = matcher.group(1); svnRemotes.add(name); } } return new GtConfig(svnRemotes); } } }