org.eclipse.jgit.transport

## Class RemoteRefUpdate

- java.lang.Object
- - org.eclipse.jgit.transport.RemoteRefUpdate

    public class RemoteRefUpdate
    extends Object

Represent request and status of a remote ref update. Specification is provided by client, while status is handled by `PushProcess` class, being read-only for client.

Client can create instances of this class directly, basing on user specification and advertised refs (`Connection` or through `Transport` helper methods. Apply this specification on remote repository using `Transport.push(org.eclipse.jgit.lib.ProgressMonitor, java.util.Collection)` method.

### Nested Class Summary

Nested Classes
`static class` `RemoteRefUpdate.Status` Represent current status of a remote ref update.

### Constructor Summary

Constructors
Constructor and Description
`RemoteRefUpdate(RemoteRefUpdate base, ObjectId newExpectedOldObjectId)` Create a new instance of this object basing on existing instance for configuration.
`RemoteRefUpdate(Repository localDb, Ref srcRef, String remoteName, boolean forceUpdate, String localName, ObjectId expectedOldObjectId)` Construct remote ref update request by providing an update specification.
`RemoteRefUpdate(Repository localDb, String srcRef, ObjectId srcId, String remoteName, boolean forceUpdate, String localName, ObjectId expectedOldObjectId)` Construct remote ref update request by providing an update specification.
`RemoteRefUpdate(Repository localDb, String srcRef, String remoteName, boolean forceUpdate, String localName, ObjectId expectedOldObjectId)` Construct remote ref update request by providing an update specification.

### Method Summary

All Methods Instance Methods Concrete Methods
`ObjectId` `getExpectedOldObjectId()`
`String` `getMessage()`
`ObjectId` `getNewObjectId()`
`String` `getRemoteName()`
`String` `getSrcRef()`
`RemoteRefUpdate.Status` `getStatus()`
`TrackingRefUpdate` `getTrackingRefUpdate()`
`boolean` `hasTrackingRefUpdate()`
`boolean` `isDelete()`
`boolean` `isExpectingOldObjectId()`
`boolean` `isFastForward()` Check whether update was fast-forward.
`boolean` `isForceUpdate()`
`String` `toString()`
`protected void` `updateTrackingRef(RevWalk walk)` Update locally stored tracking branch with the new object.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### RemoteRefUpdate

    public RemoteRefUpdate(Repository localDb,
                           String srcRef,
                           String remoteName,
                           boolean forceUpdate,
                           String localName,
                           ObjectId expectedOldObjectId)
                    throws IOException

Construct remote ref update request by providing an update specification. Object is created with default `RemoteRefUpdate.Status.NOT_ATTEMPTED` status and no message.

Parameters:
  `localDb` - local repository to push from.
  `srcRef` - source revision - any string resolvable by `Repository.resolve(String)`. This resolves to the new object that the caller want remote ref to be after update. Use null or `ObjectId.zeroId()` string for delete request.
  `remoteName` - full name of a remote ref to update, e.g. "refs/heads/master" (no wildcard, no short name).
  `forceUpdate` - true when caller want remote ref to be updated regardless whether it is fast-forward update (old object is ancestor of new object).
  `localName` - optional full name of a local stored tracking branch, to update after push, e.g. "refs/remotes/zawir/dirty" (no wildcard, no short name); null if no local tracking branch should be updated.
  `expectedOldObjectId` - optional object id that caller is expecting, requiring to be advertised by remote side before update; update will take place ONLY if remote side advertise exactly this expected id; null if caller doesn't care what object id remote side advertise. Use `ObjectId.zeroId()` when expecting no remote ref with this name.
Throws:
  `IOException` - when I/O error occurred during creating `TrackingRefUpdate` for local tracking branch or srcRef can't be resolved to any object.
  `IllegalArgumentException` - if some required parameter was null

#### RemoteRefUpdate

    public RemoteRefUpdate(Repository localDb,
                           Ref srcRef,
                           String remoteName,
                           boolean forceUpdate,
                           String localName,
                           ObjectId expectedOldObjectId)
                    throws IOException

Construct remote ref update request by providing an update specification. Object is created with default `RemoteRefUpdate.Status.NOT_ATTEMPTED` status and no message.

Parameters:
  `localDb` - local repository to push from.
  `srcRef` - source revision. Use null to delete.
  `remoteName` - full name of a remote ref to update, e.g. "refs/heads/master" (no wildcard, no short name).
  `forceUpdate` - true when caller want remote ref to be updated regardless whether it is fast-forward update (old object is ancestor of new object).
  `localName` - optional full name of a local stored tracking branch, to update after push, e.g. "refs/remotes/zawir/dirty" (no wildcard, no short name); null if no local tracking branch should be updated.
  `expectedOldObjectId` - optional object id that caller is expecting, requiring to be advertised by remote side before update; update will take place ONLY if remote side advertise exactly this expected id; null if caller doesn't care what object id remote side advertise. Use `ObjectId.zeroId()` when expecting no remote ref with this name.
Throws:
  `IOException` - when I/O error occurred during creating `TrackingRefUpdate` for local tracking branch or srcRef can't be resolved to any object.
  `IllegalArgumentException` - if some required parameter was null

#### RemoteRefUpdate

    public RemoteRefUpdate(Repository localDb,
                           String srcRef,
                           ObjectId srcId,
                           String remoteName,
                           boolean forceUpdate,
                           String localName,
                           ObjectId expectedOldObjectId)
                    throws IOException

Construct remote ref update request by providing an update specification. Object is created with default `RemoteRefUpdate.Status.NOT_ATTEMPTED` status and no message.

Parameters:
  `localDb` - local repository to push from.
  `srcRef` - source revision to label srcId with. If null srcId.name() will be used instead.
  `srcId` - The new object that the caller wants remote ref to be after update. Use null or `ObjectId.zeroId()` for delete request.
  `remoteName` - full name of a remote ref to update, e.g. "refs/heads/master" (no wildcard, no short name).
  `forceUpdate` - true when caller want remote ref to be updated regardless whether it is fast-forward update (old object is ancestor of new object).
  `localName` - optional full name of a local stored tracking branch, to update after push, e.g. "refs/remotes/zawir/dirty" (no wildcard, no short name); null if no local tracking branch should be updated.
  `expectedOldObjectId` - optional object id that caller is expecting, requiring to be advertised by remote side before update; update will take place ONLY if remote side advertise exactly this expected id; null if caller doesn't care what object id remote side advertise. Use `ObjectId.zeroId()` when expecting no remote ref with this name.
Throws:
  `IOException` - when I/O error occurred during creating `TrackingRefUpdate` for local tracking branch or srcRef can't be resolved to any object.
  `IllegalArgumentException` - if some required parameter was null

#### RemoteRefUpdate

    public RemoteRefUpdate(RemoteRefUpdate base,
                           ObjectId newExpectedOldObjectId)
                    throws IOException

Create a new instance of this object basing on existing instance for configuration. State (like `getMessage()`, `getStatus()`) of base object is not shared. Expected old object id is set up from scratch, as this constructor may be used for 2-stage push: first one being dry run, second one being actual push.

Parameters:
  `base` - configuration base.
  `newExpectedOldObjectId` - new expected object id value.
Throws:
  `IOException` - when I/O error occurred during creating `TrackingRefUpdate` for local tracking branch or srcRef of base object no longer can be resolved to any object.

### Method Detail

#### getExpectedOldObjectId

    public ObjectId getExpectedOldObjectId()

Returns:
  expectedOldObjectId required to be advertised by remote side, as set in constructor; may be null.

#### isExpectingOldObjectId

    public boolean isExpectingOldObjectId()

Returns:
  true if some object is required to be advertised by remote side, as set in constructor; false otherwise.

#### getNewObjectId

    public ObjectId getNewObjectId()

Returns:
  newObjectId for remote ref, as set in constructor.

#### isDelete

    public boolean isDelete()

Returns:
  true if this update is deleting update; false otherwise.

#### getRemoteName

    public String getRemoteName()

Returns:
  name of remote ref to update, as set in constructor.

#### getTrackingRefUpdate

    public TrackingRefUpdate getTrackingRefUpdate()

Returns:
  local tracking branch update if localName was set in constructor.

#### getSrcRef

    public String getSrcRef()

Returns:
  source revision as specified by user (in constructor), could be any string parseable by `Repository.resolve(String)`; can be null if specified that way in constructor - this stands for delete request.

#### hasTrackingRefUpdate

    public boolean hasTrackingRefUpdate()

Returns:
  true if user specified a local tracking branch for remote update; false otherwise.

#### isForceUpdate

    public boolean isForceUpdate()

Returns:
  true if this update is forced regardless of old remote ref object; false otherwise.

#### getStatus

    public RemoteRefUpdate.Status getStatus()

Returns:
  status of remote ref update operation.

#### isFastForward

    public boolean isFastForward()

Check whether update was fast-forward. Note that this result is meaningful only after successful update (when status is `RemoteRefUpdate.Status.OK`).

Returns:
  true if update was fast-forward; false otherwise.

#### getMessage

    public String getMessage()

Returns:
  message describing reasons of status when needed/possible; may be null.

#### updateTrackingRef

    protected void updateTrackingRef(RevWalk walk)
                              throws IOException

Update locally stored tracking branch with the new object.

Parameters:
  `walk` - walker used for checking update properties.
Throws:
  `IOException` - when I/O error occurred during update

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`