Class Mark

java.lang.Object
com.mooltiverse.oss.nyx.command.Mark
All Implemented Interfaces:
Command

public class Mark extends Object
The Mark command takes care of tagging and committing into the Git repository. This class is not meant to be used in multi-threaded environments.
  • Constructor Details

    • Mark

      public Mark(State state, Repository repository)
      Standard constructor.
      Parameters:
      state - the state reference
      repository - the repository reference
      Throws:
      NullPointerException - if a given argument is null
  • Method Details

    • isUpToDate

      public boolean isUpToDate() throws DataAccessException, IllegalPropertyException, GitException
      Returns true if this command is up to date, which means that the internal state (Command.state()) would not change by running (Command.run()) the command again. It other words, when this method returns true any invocation of the (Command.run()) method is needless and idempotent about the state. This method uses the quickest method to verify whether the state is up to date or not. This method must not rely on dependencies and it must always evaluate its own status independently. As a general rule this method checks if its inputs (i.e. from the configuration) have changed since the last run.
      Returns:
      true if this command is up to date
      Throws:
      DataAccessException - in case the configuration can't be loaded for some reason.
      IllegalPropertyException - in case the configuration has some illegal options.
      GitException - in case of unexpected issues when accessing the Git repository.
      See Also:
    • run

      Commits pending changes to the Git repository, applies release tags and pushes changes to remotes.
      Inputs to this task are:
      - the Git repository and the commit history;
      - the releaseType Command.state() attribute group, bringing flags for operations (commit, tag, push) to be performed or not. More specifically these attributes are releaseType/gitCommit, releaseType/gitTag, and releaseType/gitPush, plus releaseType/gitCommitMessage and releaseType/gitTagMessage telling the format of messages - the releaseScope/initialCommit with the SHA-1 of the initial commit in the release scope; if null this task just exits taking no act - the newVersion Command.state() flag, that must be true for this task to run, otherwise it just skips
      Outputs from this task are operations executed on the Git repository plus some attributes stored in the State object with more detail:
      - the releaseScope/finalCommit is defined with the SHA-1 of the last commit, which may be a new commit created by this task (if pending changes are found and if configured to do so) or the most recent commit that in the current branch; if the user overrides the version by configuration this value remains null
      Returns:
      the updated reference to the state object. The returned object is the same instance passed in the constructor.
      Throws:
      DataAccessException - in case the configuration can't be loaded for some reason.
      IllegalPropertyException - in case the configuration has some illegal options.
      GitException - in case of unexpected issues when accessing the Git repository.
      ReleaseException - if the task is unable to complete for reasons due to the release process.
      See Also:
    • state

      public final State state()
      Returns the state object.
      Specified by:
      state in interface Command
      Returns:
      the state object that was passed in the constructor (never null, even when or after Command.run() returns null).
    • repository

      public final Repository repository()
      Returns the repository object.
      Returns:
      the repository object.
    • getCurrentBranch

      protected String getCurrentBranch() throws GitException
      Returns the name of the current branch or a commit SHA-1 if the repository is in the detached head state.
      Returns:
      the name of the current branch or a commit SHA-1 if the repository is in the detached head state.
      Throws:
      GitException - in case of unexpected issues when accessing the Git repository.
      See Also:
    • getLatestCommit

      protected String getLatestCommit() throws GitException
      Returns the SHA-1 identifier of the last commit in the current branch.
      Returns:
      the SHA-1 identifier of the last commit in the current branch or code if the repository has no commits yet.
      Throws:
      GitException - in case of unexpected issues when accessing the Git repository.
      See Also:
    • isRepositoryClean

      protected boolean isRepositoryClean() throws GitException
      Returns true if the repository is in a clean state (no uncommitted changes).
      Returns:
      true if the repository is in a clean state (no uncommitted changes).
      Throws:
      GitException - in case of unexpected issues when accessing the Git repository.
      See Also:
    • isInternalAttributeUpToDate

      protected boolean isInternalAttributeUpToDate(String attributeName, Object expectedValue)
      Returns true if the internal attributes map contains an attribute with the given name and its value equals the given expected value. The comparison is always performed using the Object.toString() method of the expected value.
      Parameters:
      attributeName - the name of the attribute to check. It can't be null
      expectedValue - the expected value of the attribute. It may be null
      Returns:
      true if the internal attributes map contains an attribute with the given name and its value equals the given expected value.
    • getInternalAttribute

      protected String getInternalAttribute(String attributeName)
      Retrieves the attribute with the given name from the internal attributes map. The returned value is always the Object.toString() representation of the stored value.
      Parameters:
      attributeName - the name of the attribute to get. It can't be null
      Returns:
      the value of the attribute, if available, otherwise null
    • putInternalAttribute

      protected void putInternalAttribute(String attributeName, Object attributeValue)
      Stores the attribute with the given name to the internal attributes map. The stored value is always performed the Object.toString() of the given value.
      Parameters:
      attributeName - the name of the attribute to store. It can't be null
      attributeValue - the value of the attribute. It may be null
    • renderTemplate

      protected String renderTemplate(String template) throws IllegalPropertyException
      Renders the given template using the internal State object as the context.
      Parameters:
      template - the string template to render.
      Returns:
      the rendered template. It is null if the given template is null.
      Throws:
      IllegalPropertyException - in case the given template can't be rendered.
    • renderTemplateAsBoolean

      protected Boolean renderTemplateAsBoolean(String template) throws IllegalPropertyException
      Renders the given template using the internal State object as the context, returning the boolean value, according to Templates.toBoolean(String).
      Parameters:
      template - the string template to render.
      Returns:
      the rendered template as boolean. It is false if the given template is null.
      Throws:
      IllegalPropertyException - in case the given template can't be rendered.
    • renderTemplateAsInteger

      protected Integer renderTemplateAsInteger(String template) throws IllegalPropertyException
      Renders the given template using the internal State object as the context, returning the integer value, according to Templates.toInteger(String).
      Parameters:
      template - the string template to render.
      Returns:
      the rendered template as integer. It is 0 if the given template is null.
      Throws:
      IllegalPropertyException - in case the given template can't be rendered.
    • resolveServiceOptions

      protected Map<String,String> resolveServiceOptions(Map<String,String> options) throws IllegalPropertyException
      Resolves the given options by rendering each value of the given map as a template. Keys are left unchanged.
      Parameters:
      options - the options to resolve.
      Returns:
      a new map with the same keys as the input map but values resolved as templates.
      Throws:
      IllegalPropertyException - in case the given values can't be rendered as templates.
    • resolveReleaseService

      Returns the ReleaseService with the given configuration name and also resolves its configuration option templates.
      Parameters:
      name - the name of the service configuration.
      Returns:
      the resolved service. Returns null if no service with such configuration name exists.
      Throws:
      DataAccessException - in case the configuration can't be loaded for some reason.
      IllegalPropertyException - in case the configuration has some illegal options.
      ReleaseException - if the task is unable to complete for reasons due to the release process.
      UnsupportedOperationException - if the service configuration exists but the service class does not support the Service.Feature.RELEASES feature.
    • resolveReleaseType

      Selects the right release type among those configured based on their matching attributes.
      Returns:
      the resolved release type. Never null.
      Throws:
      DataAccessException - in case the configuration can't be loaded for some reason.
      IllegalPropertyException - in case the configuration has some illegal options.
      GitException - in case of unexpected issues when accessing the Git repository.
      ReleaseException - if the task is unable to complete for reasons due to the release process.