in java/com/googlesource/gerrit/plugins/supermanifest/SuperManifestRefUpdatedListener.java [470:504]
public ObjectId sha1(String uriStr, String refName) throws GitAPIException {
// This is a (mis)feature of JGit, which ignores SHA1s but only if ignoreRemoteFailures
// is set.
if (ObjectId.isId(refName)) {
return ObjectId.fromString(refName);
}
try {
// When the remote is fetch="<relative path>" the manifest parser uses a repoName as URI.
// Do a poor man's guessing if we have a repoName or URI
Repository repo =
uriStr.contains("://")
? repoManager.openByUri(uriStr)
: repoManager.openByName(Project.nameKey(uriStr));
Ref ref = repo.findRef(refName);
if (ref == null || ref.getObjectId() == null) {
logger.atWarning().log(
"%s: in repo %s: cannot resolve ref %s", canonicalWebUrl, uriStr, refName);
return null;
}
ref = repo.getRefDatabase().peel(ref);
ObjectId id = ref.getPeeledObjectId();
return id != null ? id : ref.getObjectId();
} catch (RepositoryNotFoundException e) {
logger.atWarning().withCause(e).log(
"%s: failed to open repository %s", canonicalWebUrl, uriStr);
return null;
} catch (IOException io) {
RefNotFoundException e =
new RefNotFoundException(String.format("cannot open %s to read %s", uriStr, refName));
e.initCause(io);
throw e;
}
}