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.

  • Field Details

    • expectedOldObjectId

      private ObjectId expectedOldObjectId
    • newObjectId

      private final ObjectId newObjectId
    • remoteName

      private final String remoteName
    • trackingRefUpdate

      private final TrackingRefUpdate trackingRefUpdate
    • srcRef

      private final String srcRef
    • forceUpdate

      private final boolean forceUpdate
    • status

      private RemoteRefUpdate.Status status
    • fastForward

      private boolean fastForward
    • message

      private String message
    • localDb

      private final Repository localDb
    • localUpdate

      private RefUpdate localUpdate
    • fetchSpecs

      private Collection<RefSpec> fetchSpecs
      If set, the RemoteRefUpdate is a placeholder for the "matching" RefSpec to be expanded after the advertisements have been received in a push.
  • Constructor Details

    • 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

      private RemoteRefUpdate(Repository localDb, String srcRef, ObjectId srcId, String remoteName, boolean forceUpdate, String localName, Collection<RefSpec> fetchSpecs, ObjectId expectedOldObjectId) throws IOException
      Throws:
      IOException
    • 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.
    • RemoteRefUpdate

      RemoteRefUpdate(Repository localDb, boolean forceUpdate, @NonNull Collection<RefSpec> fetchSpecs)
      Creates a "placeholder" update for the "matching" RefSpec ":".
      Parameters:
      localDb - local repository to push from
      forceUpdate - whether non-fast-forward updates shall be allowed
      fetchSpecs - The fetch RefSpecs to use when this placeholder is expanded to determine remote tracking branch updates
  • Method Details

    • isMatching

      public boolean isMatching()
      Tells whether this RemoteRefUpdate is a placeholder for a "matching" RefSpec.
      Returns:
      true if this is a placeholder, false otherwise
      Since:
      6.1
    • getFetchSpecs

      Collection<RefSpec> getFetchSpecs()
      Retrieves the fetch RefSpecs of this RemoteRefUpdate.
      Returns:
      the fetch RefSpecs, or null if this.isMatching() == false
    • getExpectedOldObjectId

      public ObjectId getExpectedOldObjectId()
      Get expected old object id
      Returns:
      expectedOldObjectId required to be advertised by remote side, as set in constructor; may be null.
    • isExpectingOldObjectId

      public boolean isExpectingOldObjectId()
      Whether some object is required to be advertised by remote side, as set in constructor
      Returns:
      true if some object is required to be advertised by remote side, as set in constructor; false otherwise.
    • getNewObjectId

      public ObjectId getNewObjectId()
      Get new object id
      Returns:
      newObjectId for remote ref, as set in constructor.
    • isDelete

      public boolean isDelete()
      Whether this update is a deleting update
      Returns:
      true if this update is deleting update; false otherwise.
    • getRemoteName

      public String getRemoteName()
      Get name of remote ref to update
      Returns:
      name of remote ref to update, as set in constructor.
    • getTrackingRefUpdate

      public TrackingRefUpdate getTrackingRefUpdate()
      Get tracking branch update if localName was set in constructor.
      Returns:
      local tracking branch update if localName was set in constructor.
    • getSrcRef

      public String getSrcRef()
      Get source revision as specified by user (in constructor)
      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()
      Whether user specified a local tracking branch for remote update
      Returns:
      true if user specified a local tracking branch for remote update; false otherwise.
    • isForceUpdate

      public boolean isForceUpdate()
      Whether this update is forced regardless of old remote ref object
      Returns:
      true if this update is forced regardless of old remote ref object; false otherwise.
    • getStatus

      public RemoteRefUpdate.Status getStatus()
      Get status of remote ref update operation.
      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()
      Get message describing reasons of status when needed/possible; may be null.
      Returns:
      message describing reasons of status when needed/possible; may be null.
    • setExpectedOldObjectId

      void setExpectedOldObjectId(ObjectId id)
    • setStatus

      void setStatus(RemoteRefUpdate.Status status)
    • setFastForward

      void setFastForward(boolean fastForward)
    • setMessage

      void setMessage(String message)
    • 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