private EntityConfigSaveResult trySavingEntity(EntityConfigUpdateCommand updatingCommand, Username currentUser, CruiseConfig modifiedConfig, List<PartialConfig> partials) {
modifiedConfig.setPartials(partials);
CruiseConfig preprocessedConfig = cloner.deepClone(modifiedConfig);
MagicalGoConfigXmlLoader.preprocess(preprocessedConfig);
updatingCommand.encrypt(preprocessedConfig);
if (updatingCommand.isValid(preprocessedConfig)) {
try {
LOGGER.info("[Configuration Changed] Saving updated configuration.");
String configAsXml = configAsXml(modifiedConfig, true);
String md5 = CachedDigestUtils.md5Hex(configAsXml);
MagicalGoConfigXmlLoader.setMd5(modifiedConfig, md5);
MagicalGoConfigXmlLoader.setMd5(preprocessedConfig, md5);
writeToConfigXmlFile(configAsXml);
checkinConfigToGitRepo(partials, preprocessedConfig, configAsXml, md5, currentUser.getUsername().toString());
LOGGER.debug("[Config Save] Done writing with lock");
CruiseConfig mergedCruiseConfigForEdit = modifiedConfig;
if (!partials.isEmpty()) {
LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Starting.");
mergedCruiseConfigForEdit = cloner.deepClone(modifiedConfig);
mergedCruiseConfigForEdit.merge(partials, true);
LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Done.");
}
return new EntityConfigSaveResult(updatingCommand.getPreprocessedEntityConfig(), new GoConfigHolder(preprocessedConfig, modifiedConfig, mergedCruiseConfigForEdit));
} catch (Exception e) {
throw new RuntimeException("failed to save : " + e.getMessage());
}
} else {
throw new GoConfigInvalidException(preprocessedConfig, "Validation failed.");
}
}