in src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java [215:268]
void doRename(
List<Change.Id> changeIds, ProjectResource rsrc, Input input, Optional<ProgressMonitor> pm)
throws InterruptedException, ConfigInvalidException, IOException, RenameRevertException {
Project.NameKey oldProjectKey = rsrc.getNameKey();
Project.NameKey newProjectKey = Project.nameKey(input.name);
Exception ex = null;
stepsPerformed.clear();
try {
fsRenameStep(oldProjectKey, newProjectKey, pm);
cacheRenameStep(rsrc.getNameKey(), newProjectKey);
List<Change.Id> updatedChangeIds = dbRenameStep(changeIds, oldProjectKey, newProjectKey, pm);
// if the DB update is successful, update the secondary index
indexRenameStep(updatedChangeIds, oldProjectKey, newProjectKey, pm);
// no need to revert this since newProjectKey will be removed from project cache before
lockUnlockProject.unlock(newProjectKey);
log.debug("Unlocked the repo {} after rename operation.", newProjectKey.get());
// flush old changeId -> Project cache for given changeIds
changeIdProjectCache.invalidateAll(changeIds);
pluginEvent.fire(pluginName, pluginName, oldProjectKey.get() + ":" + newProjectKey.get());
// replicate rename-project operation to other replica instances
replicateRename(sshHelper, input, oldProjectKey);
} catch (Exception e) {
if (stepsPerformed.isEmpty()) {
log.error("Renaming procedure failed. Exception caught: {}", e.toString());
} else {
log.error(
"Renaming procedure failed, last successful step {}. Exception caught: {}",
stepsPerformed.get(stepsPerformed.size() - 1).toString(),
e.toString());
}
try {
revertRenameProject.performRevert(
stepsPerformed, changeIds, oldProjectKey, newProjectKey, pm);
} catch (Exception revertEx) {
log.error(
"Failed to revert renaming procedure for {}. Exception caught: {}",
oldProjectKey.get(),
revertEx.toString());
ex = revertEx;
throw new RenameRevertException(revertEx, e);
}
ex = e;
throw e;
} finally {
renameLog.onRename((IdentifiedUser) userProvider.get(), oldProjectKey, input, ex);
}
}