Allow VersionedMetaData.onSave to skip committing

Change-Id: I65349b2fde9fd22381fa5e4a35f6265924c626f0
This commit is contained in:
Dave Borowitz
2014-01-16 10:10:17 -08:00
parent 906efd9d07
commit da93b83721
6 changed files with 23 additions and 10 deletions

View File

@@ -88,7 +88,7 @@ public class AllProjectsConfig extends VersionedMetaData {
} }
@Override @Override
protected void onSave(CommitBuilder commit) throws IOException, protected boolean onSave(CommitBuilder commit) throws IOException,
ConfigInvalidException { ConfigInvalidException {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }

View File

@@ -746,7 +746,7 @@ public class ProjectConfig extends VersionedMetaData {
} }
@Override @Override
protected void onSave(CommitBuilder commit) throws IOException, protected boolean onSave(CommitBuilder commit) throws IOException,
ConfigInvalidException { ConfigInvalidException {
if (commit.getMessage() == null || "".equals(commit.getMessage())) { if (commit.getMessage() == null || "".equals(commit.getMessage())) {
commit.setMessage("Updated project configuration\n"); commit.setMessage("Updated project configuration\n");
@@ -786,6 +786,7 @@ public class ProjectConfig extends VersionedMetaData {
saveConfig(PROJECT_CONFIG, rc); saveConfig(PROJECT_CONFIG, rc);
saveGroupList(); saveGroupList();
return true;
} }
public static final String validMaxObjectSizeLimit(String value) public static final String validMaxObjectSizeLimit(String value)

View File

@@ -88,11 +88,12 @@ public class ProjectLevelConfig extends VersionedMetaData {
} }
@Override @Override
protected void onSave(CommitBuilder commit) throws IOException, protected boolean onSave(CommitBuilder commit) throws IOException,
ConfigInvalidException { ConfigInvalidException {
if (commit.getMessage() == null || "".equals(commit.getMessage())) { if (commit.getMessage() == null || "".equals(commit.getMessage())) {
commit.setMessage("Updated configuration\n"); commit.setMessage("Updated configuration\n");
} }
saveConfig(fileName, cfg); saveConfig(fileName, cfg);
return true;
} }
} }

View File

@@ -61,9 +61,17 @@ public abstract class VersionedMetaData {
/** @return name of the reference storing this configuration. */ /** @return name of the reference storing this configuration. */
protected abstract String getRefName(); protected abstract String getRefName();
/** Set up the metadata, parsing any state from the loaded revision. */
protected abstract void onLoad() throws IOException, ConfigInvalidException; protected abstract void onLoad() throws IOException, ConfigInvalidException;
protected abstract void onSave(CommitBuilder commit) throws IOException, /**
* Save any changes to the metadata in a commit.
*
* @return true if the commit should proceed, false to abort.
* @throws IOException
* @throws ConfigInvalidException
*/
protected abstract boolean onSave(CommitBuilder commit) throws IOException,
ConfigInvalidException; ConfigInvalidException;
/** @return revision of the metadata that was loaded. */ /** @return revision of the metadata that was loaded. */
@@ -189,7 +197,7 @@ public abstract class VersionedMetaData {
write(VersionedMetaData.this, commit); write(VersionedMetaData.this, commit);
} }
private void doSave(VersionedMetaData config, CommitBuilder commit) throws IOException { private boolean doSave(VersionedMetaData config, CommitBuilder commit) throws IOException {
DirCache nt = config.newTree; DirCache nt = config.newTree;
ObjectReader r = config.reader; ObjectReader r = config.reader;
ObjectInserter i = config.inserter; ObjectInserter i = config.inserter;
@@ -197,7 +205,7 @@ public abstract class VersionedMetaData {
config.newTree = newTree; config.newTree = newTree;
config.reader = reader; config.reader = reader;
config.inserter = inserter; config.inserter = inserter;
config.onSave(commit); return config.onSave(commit);
} catch (ConfigInvalidException e) { } catch (ConfigInvalidException e) {
throw new IOException("Cannot update " + getRefName() + " in " throw new IOException("Cannot update " + getRefName() + " in "
+ db.getDirectory() + ": " + e.getMessage(), e); + db.getDirectory() + ": " + e.getMessage(), e);
@@ -210,7 +218,9 @@ public abstract class VersionedMetaData {
@Override @Override
public void write(VersionedMetaData config, CommitBuilder commit) throws IOException { public void write(VersionedMetaData config, CommitBuilder commit) throws IOException {
doSave(config, commit); if (!doSave(config, commit)) {
return;
}
final ObjectId res = newTree.writeTree(inserter); final ObjectId res = newTree.writeTree(inserter);
if (res.equals(srcTree) && !update.allowEmpty()) { if (res.equals(srcTree) && !update.allowEmpty()) {

View File

@@ -307,7 +307,7 @@ public class ChangeNotes extends VersionedMetaData {
} }
@Override @Override
protected void onSave(CommitBuilder commit) { protected boolean onSave(CommitBuilder commit) {
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
getClass().getSimpleName() + " is read-only"); getClass().getSimpleName() + " is read-only");
} }

View File

@@ -265,9 +265,9 @@ public class ChangeUpdate extends VersionedMetaData {
} }
@Override @Override
protected void onSave(CommitBuilder commit) { protected boolean onSave(CommitBuilder commit) {
if (approvals.isEmpty() && reviewers.isEmpty()) { if (approvals.isEmpty() && reviewers.isEmpty()) {
return; return false;
} }
int ps = psId != null ? psId.get() : change.currentPatchSetId().get(); int ps = psId != null ? psId.get() : change.currentPatchSetId().get();
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
@@ -293,6 +293,7 @@ public class ChangeUpdate extends VersionedMetaData {
} }
} }
commit.setMessage(msg.toString()); commit.setMessage(msg.toString());
return true;
} }
private static StringBuilder addFooter(StringBuilder sb, FooterKey footer) { private static StringBuilder addFooter(StringBuilder sb, FooterKey footer) {