public class NoteDbUpdateManager
extends java.lang.Object
implements java.lang.AutoCloseable
Instances are one-time-use. Handles updating both the change repo and the All-Users repo for any affected changes, with proper ordering.
To see the state that would be applied prior to executing the full sequence of updates, use
stage()
.
Modifier and Type | Class and Description |
---|---|
static interface |
NoteDbUpdateManager.Factory |
static class |
NoteDbUpdateManager.MismatchedStateException |
static class |
NoteDbUpdateManager.OpenRepo |
static class |
NoteDbUpdateManager.Result |
static class |
NoteDbUpdateManager.StagedResult |
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
CHANGES_READ_ONLY |
Modifier and Type | Method and Description |
---|---|
void |
add(ChangeDraftUpdate draftUpdate) |
void |
add(ChangeUpdate update)
Add an update to the list of updates to execute.
|
void |
close() |
void |
deleteChange(Change.Id id) |
org.eclipse.jgit.lib.BatchRefUpdate |
execute() |
org.eclipse.jgit.lib.BatchRefUpdate |
execute(boolean dryrun) |
void |
flush() |
NoteDbUpdateManager.OpenRepo |
getAllUsersRepo() |
NoteDbUpdateManager.OpenRepo |
getChangeRepo() |
NoteDbUpdateManager |
setAllUsersRepo(org.eclipse.jgit.lib.Repository repo,
org.eclipse.jgit.revwalk.RevWalk rw,
org.eclipse.jgit.lib.ObjectInserter ins,
ChainedReceiveCommands cmds) |
NoteDbUpdateManager |
setAtomicRefUpdates(boolean atomicRefUpdates)
Set whether to use atomic ref updates.
|
NoteDbUpdateManager |
setChangeRepo(org.eclipse.jgit.lib.Repository repo,
org.eclipse.jgit.revwalk.RevWalk rw,
org.eclipse.jgit.lib.ObjectInserter ins,
ChainedReceiveCommands cmds) |
NoteDbUpdateManager |
setCheckExpectedState(boolean checkExpectedState) |
NoteDbUpdateManager |
setPushCertificate(org.eclipse.jgit.transport.PushCertificate pushCert)
Set a push certificate for the push that originally triggered this NoteDb update.
|
NoteDbUpdateManager |
setRefLogIdent(org.eclipse.jgit.lib.PersonIdent ident) |
NoteDbUpdateManager |
setRefLogMessage(java.lang.String message) |
NoteDbUpdateManager |
setSaveObjects(boolean saveObjects)
Set whether to save objects and make them available in
NoteDbUpdateManager.StagedResult s. |
java.util.Map<Change.Id,NoteDbUpdateManager.StagedResult> |
stage()
Stage updates in the manager's internal list of commands.
|
NoteDbUpdateManager.Result |
stageAndApplyDelta(Change change) |
public static final java.lang.String CHANGES_READ_ONLY
public void close()
close
in interface java.lang.AutoCloseable
public NoteDbUpdateManager setChangeRepo(org.eclipse.jgit.lib.Repository repo, org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectInserter ins, ChainedReceiveCommands cmds)
public NoteDbUpdateManager setAllUsersRepo(org.eclipse.jgit.lib.Repository repo, org.eclipse.jgit.revwalk.RevWalk rw, org.eclipse.jgit.lib.ObjectInserter ins, ChainedReceiveCommands cmds)
public NoteDbUpdateManager setCheckExpectedState(boolean checkExpectedState)
public NoteDbUpdateManager setSaveObjects(boolean saveObjects)
NoteDbUpdateManager.StagedResult
s.
If set, all objects inserted into all repos managed by this instance will be buffered in
memory, and the NoteDbUpdateManager.StagedResult
s will return non-null lists from NoteDbUpdateManager.StagedResult.changeObjects()
and NoteDbUpdateManager.StagedResult.allUsersObjects()
.
Not recommended if modifying a large number of changes with a single manager.
saveObjects
- whether to save objects; defaults to true.public NoteDbUpdateManager setAtomicRefUpdates(boolean atomicRefUpdates)
Can be set to false when the change updates represented by this manager aren't logically related, e.g. when the updater is only used to group objects together with a single inserter.
atomicRefUpdates
- whether to use atomic ref updates; defaults to true.public NoteDbUpdateManager setRefLogMessage(java.lang.String message)
public NoteDbUpdateManager setRefLogIdent(org.eclipse.jgit.lib.PersonIdent ident)
public NoteDbUpdateManager setPushCertificate(org.eclipse.jgit.transport.PushCertificate pushCert)
The pusher will not necessarily have specified any of the NoteDb refs explicitly, such as
when processing a push to refs/for/master
. That's fine; this is just passed to the
underlying BatchRefUpdate
, and the implementation decides what to do with it.
The cert should be associated with the main repo. There is currently no way of associating a
push cert with the All-Users
repo, since it is not currently possible to update draft
changes via push.
pushCert
- push certificate; may be null.public NoteDbUpdateManager.OpenRepo getChangeRepo() throws java.io.IOException
java.io.IOException
public NoteDbUpdateManager.OpenRepo getAllUsersRepo() throws java.io.IOException
java.io.IOException
public void add(ChangeUpdate update)
Updates should only be added to the manager after all mutations have been made, as this method may eagerly access the update.
update
- the update to add.public void add(ChangeDraftUpdate draftUpdate)
public void deleteChange(Change.Id id)
public java.util.Map<Change.Id,NoteDbUpdateManager.StagedResult> stage() throws com.google.gwtorm.server.OrmException, java.io.IOException
com.google.gwtorm.server.OrmException
- if a database layer error occurs.java.io.IOException
- if a storage layer error occurs.public NoteDbUpdateManager.Result stageAndApplyDelta(Change change) throws com.google.gwtorm.server.OrmException, java.io.IOException
com.google.gwtorm.server.OrmException
java.io.IOException
public void flush() throws java.io.IOException
java.io.IOException
public org.eclipse.jgit.lib.BatchRefUpdate execute() throws com.google.gwtorm.server.OrmException, java.io.IOException
com.google.gwtorm.server.OrmException
java.io.IOException
public org.eclipse.jgit.lib.BatchRefUpdate execute(boolean dryrun) throws com.google.gwtorm.server.OrmException, java.io.IOException
com.google.gwtorm.server.OrmException
java.io.IOException