in java/com/googlesource/gerrit/plugins/supermanifest/ConfigEntry.java [48:132]
public ConfigEntry(Config cfg, String name) throws ConfigInvalidException {
String[] parts = name.split(":");
if (parts.length != 2) {
throw new ConfigInvalidException(
String.format("pluginName '%s' must have form REPO:BRANCH", name));
}
String destRepo = parts[0];
String destRef = parts[1];
if (!destRef.startsWith(REFS_HEADS)) {
throw new ConfigInvalidException(
String.format("invalid destination '%s'. Must specify refs/heads/", destRef));
}
if (destRef.contains("*") && !destRef.equals(REFS_HEADS + "*")) {
throw new ConfigInvalidException(
String.format("invalid destination '%s'. Use just '*' for all branches.", destRef));
}
String srcRepo = cfg.getString(SECTION_NAME, name, "srcRepo");
if (srcRepo == null) {
throw new ConfigInvalidException(String.format("entry %s did not specify srcRepo", name));
}
// TODO(hanwen): sanity check repo names.
srcRepoKey = Project.nameKey(srcRepo);
String toolType = nullToEmpty(cfg.getString(SECTION_NAME, name, "toolType"));
switch (toolType) {
case "":
case "repo":
this.toolType = ToolType.Repo;
break;
case "jiri":
this.toolType = ToolType.Jiri;
break;
default:
throw new ConfigInvalidException(
String.format("entry %s has invalid toolType: %s", name, toolType));
}
if (destRef.equals(REFS_HEADS + "*")) {
srcRef = "";
} else {
if (!Repository.isValidRefName(destRef)) {
throw new ConfigInvalidException(String.format("destination branch '%s' invalid", destRef));
}
srcRef = cfg.getString(SECTION_NAME, name, "srcRef");
if (!Repository.isValidRefName(srcRef)) {
throw new ConfigInvalidException(String.format("source ref '%s' invalid", srcRef));
}
if (srcRef == null) {
throw new ConfigInvalidException(String.format("entry %s did not specify srcRef", name));
}
}
srcRefsExcluded =
ImmutableSet.copyOf(
Arrays.asList(nullToEmpty(cfg.getString(SECTION_NAME, name, "exclude")).split(",")));
xmlPath = cfg.getString(SECTION_NAME, name, "srcPath");
if (xmlPath == null) {
throw new ConfigInvalidException(String.format("entry %s did not specify srcPath", name));
}
destRepoKey = Project.nameKey(destRepo);
// The external format is chosen so we can support copying over tags as well.
destBranch = destRef.substring(REFS_HEADS.length());
repoGroups = nullToEmpty(cfg.getString(SECTION_NAME, name, "groups"));
recordSubmoduleLabels = cfg.getBoolean(SECTION_NAME, name, "recordSubmoduleLabels", false);
ignoreRemoteFailures = cfg.getBoolean(SECTION_NAME, name, "ignoreRemoteFailures", false);
try {
// http://foo/platform/manifest => http://foo/platform/
baseUri = new URI(srcRepoKey.toString()).resolve("");
} catch (URISyntaxException exception) {
throw new ConfigInvalidException("could not build src URL", exception);
}
}