Class JGitAPIImpl

java.lang.Object
org.jenkinsci.plugins.gitclient.JGitAPIImpl
All Implemented Interfaces:
IGitAPI, Serializable, GitClient

public class JGitAPIImpl extends Object
GitClient pure Java implementation using JGit. Goal is to eventually get a full java implementation for GitClient For internal use only, don't use directly. See Git
See Also:
  • Field Details

    • SSH_CONFIG_PATH

      public static final String SSH_CONFIG_PATH
    • workspace

      protected final File workspace
    • proxy

      protected ProxyConfiguration proxy
  • Method Details

    • buildSshdSessionFactory

      public org.eclipse.jgit.transport.sshd.SshdSessionFactory buildSshdSessionFactory(@NonNull HostKeyVerifierFactory hostKeyVerifierFactory)
    • clearCredentials

      public void clearCredentials()
      clearCredentials.
    • addCredentials

      public void addCredentials(String url, com.cloudbees.plugins.credentials.common.StandardCredentials credentials)
      Adds credentials to be used against a specific url.
      Parameters:
      url - the url for the credentials to be used against.
      credentials - the credentials to use.
    • addDefaultCredentials

      public void addDefaultCredentials(com.cloudbees.plugins.credentials.common.StandardCredentials credentials)
      Adds credentials to be used when there are not url specific credentials defined.
      Parameters:
      credentials - the credentials to use.
      See Also:
    • setCredentialsProvider

      public void setCredentialsProvider(org.eclipse.jgit.transport.CredentialsProvider prov)
      setCredentialsProvider.
      Parameters:
      prov - a CredentialsProvider object.
    • getProvider

      public SmartCredentialsProvider getProvider()
    • subGit

      public GitClient subGit(String subdir)
      subGit.
      Parameters:
      subdir - a String object.
      Returns:
      a IGitAPI implementation to manage git submodule repository
    • setAuthor

      public void setAuthor(String name, String email) throws GitException
      Sets the identity of the author for future commits and merge operations.
      Parameters:
      name - a String object.
      email - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • setCommitter

      public void setCommitter(String name, String email) throws GitException
      Sets the identity of the committer for future commits and merge operations.
      Parameters:
      name - a String object.
      email - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • init

      public void init() throws GitException, InterruptedException
      init.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • checkout

      public CheckoutCommand checkout()
      checkout.
      Returns:
      a CheckoutCommand object.
    • add

      public void add(String filePattern) throws GitException
      add.
      Parameters:
      filePattern - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • commit

      public void commit(String message) throws GitException
      commit.
      Parameters:
      message - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • branch

      public void branch(String name) throws GitException
      branch.
      Parameters:
      name - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • deleteBranch

      public void deleteBranch(String name) throws GitException
      (force) delete a branch.
      Parameters:
      name - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • getBranches

      public Set<Branch> getBranches() throws GitException
      getBranches.
      Returns:
      a Set object.
      Throws:
      GitException - if underlying git operation fails.
    • getRemoteBranches

      public Set<Branch> getRemoteBranches() throws GitException
      getRemoteBranches.
      Returns:
      a Set object.
      Throws:
      GitException - if underlying git operation fails.
    • getBranchesInternal

      public Set<Branch> getBranchesInternal(org.eclipse.jgit.api.ListBranchCommand.ListMode mode) throws GitException
      Throws:
      GitException
    • tag

      public void tag(String name, String message) throws GitException
      Create (or update) a tag. If tag already exist it gets updated (equivalent to git tag --force)
      Parameters:
      name - a String object.
      message - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • tagExists

      public boolean tagExists(String tagName) throws GitException
      tagExists.
      Parameters:
      tagName - a String object.
      Returns:
      true if tag exists in repository
      Throws:
      GitException - if underlying git operation fails.
    • fetch_

      public FetchCommand fetch_()
      fetch_.
      Returns:
      a FetchCommand object.
    • fetch

      public void fetch(org.eclipse.jgit.transport.URIish url, List<org.eclipse.jgit.transport.RefSpec> refspecs) throws GitException, InterruptedException
      Fetch commits from url which match any of the passed in refspecs. Assumes remote.remoteName.url has been set.
      Parameters:
      url - a URIish object.
      refspecs - a List object.
      Throws:
      GitException - if any.
      InterruptedException - if any.
    • fetch

      public void fetch(String remoteName, org.eclipse.jgit.transport.RefSpec... refspec) throws GitException
      fetch.
      Parameters:
      remoteName - a String object.
      refspec - a RefSpec object.
      Throws:
      GitException - if underlying git operation fails.
    • fetch

      public void fetch(String remoteName, org.eclipse.jgit.transport.RefSpec refspec) throws GitException
      fetch.
      Parameters:
      remoteName - a String object.
      refspec - a RefSpec object.
      Throws:
      GitException - if underlying git operation fails.
    • ref

      public void ref(String refName) throws GitException, InterruptedException
      Create (or update) a ref. The ref will reference HEAD (equivalent to git update-ref ... HEAD).
      Parameters:
      refName - the full name of the ref (e.g. "refs/myref"). Spaces will be replaced with underscores.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • refExists

      public boolean refExists(String refName) throws GitException, InterruptedException
      Check if a ref exists. Equivalent to comparing the return code of git show-ref to zero.
      Parameters:
      refName - the full name of the ref (e.g. "refs/myref"). Spaces will be replaced with underscores.
      Returns:
      True if the ref exists, false otherwise.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • deleteRef

      public void deleteRef(String refName) throws GitException, InterruptedException
      Deletes a ref. Has no effect if the ref does not exist, equivalent to git update-ref -d.
      Parameters:
      refName - the full name of the ref (e.g. "refs/myref"). Spaces will be replaced with underscores.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getRefNames

      public Set<String> getRefNames(String refPrefix) throws GitException, InterruptedException
      List refs with the given prefix. Equivalent to git for-each-ref --format="%(refname)".
      Parameters:
      refPrefix - the literal prefix any ref returned will have. The empty string implies all.
      Returns:
      a set of refs, each beginning with the given prefix. Empty if none.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getHeadRev

      public Map<String,org.eclipse.jgit.lib.ObjectId> getHeadRev(String url) throws GitException, InterruptedException
      getHeadRev.
      Parameters:
      url - a String object.
      Returns:
      a Map object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getRemoteReferences

      public Map<String,org.eclipse.jgit.lib.ObjectId> getRemoteReferences(String url, String pattern, boolean headsOnly, boolean tagsOnly) throws GitException, InterruptedException
      List references in a remote repository. Equivalent to git ls-remote [--heads] [--tags] <repository> [<refs>].
      Parameters:
      url - Remote repository URL.
      pattern - Only references matching the given pattern are displayed.
      headsOnly - Limit to only refs/heads.
      tagsOnly - Limit to only refs/tags. headsOnly and tagsOnly are not mutually exclusive; when both are true, references stored in refs/heads and refs/tags are displayed.
      Returns:
      a map of reference names and their commit hashes. Empty if none.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getRemoteSymbolicReferences

      public Map<String,String> getRemoteSymbolicReferences(String url, String pattern) throws GitException, InterruptedException
      Description copied from interface: GitClient
      List symbolic references in a remote repository. Equivalent to git ls-remote --symref <repository> [<refs>]. Note: the response may be empty for multiple reasons
      Parameters:
      url - Remote repository URL.
      pattern - Only references matching the given pattern are displayed.
      Returns:
      a map of reference names and their underlying references. Empty if none or if the remote does not report symbolic references or if the command line git version does not support reporting symbolic references.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getHeadRev

      public org.eclipse.jgit.lib.ObjectId getHeadRev(String remoteRepoUrl, String branchSpec) throws GitException
      getHeadRev.
      Parameters:
      remoteRepoUrl - a String object.
      branchSpec - a String object.
      Returns:
      a ObjectId object.
      Throws:
      GitException - if underlying git operation fails.
    • getRemoteUrl

      public String getRemoteUrl(String name) throws GitException
      From a given repository, get a remote's URL
      Parameters:
      name - The name of the remote (e.g. origin)
      Returns:
      a String object.
      Throws:
      GitException - if executing the git command fails
    • getRepository

      @NonNull public org.eclipse.jgit.lib.Repository getRepository() throws GitException
      getRepository.
      Returns:
      a Repository object.
      Throws:
      GitException - if underlying git operation fails.
    • getWorkTree

      public FilePath getWorkTree()
      getWorkTree.
      Returns:
      a FilePath object.
    • setRemoteUrl

      public void setRemoteUrl(String name, String url) throws GitException
      For a given repository, set a remote's URL
      Parameters:
      name - The name of the remote (e.g. origin)
      url - The new value of the remote's URL
      Throws:
      GitException - if executing the git command fails
    • addRemoteUrl

      public void addRemoteUrl(String name, String url) throws GitException
      addRemoteUrl.
      Parameters:
      name - a String object.
      url - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • addNote

      public void addNote(String note, String namespace) throws GitException
      Adds a new git-note on the current HEAD commit.
      Parameters:
      note - Content of the note.
      namespace - If unqualified, interpreted as "refs/notes/NAMESPACE" just like cgit.
      Throws:
      GitException - if underlying git operation fails.
    • appendNote

      public void appendNote(String note, String namespace) throws GitException
      Appends to an existing git-note on the current HEAD commit. If a note doesn't exist, it works just like GitClient.addNote(String, String)
      Parameters:
      note - Content of the note.
      namespace - If unqualified, interpreted as "refs/notes/NAMESPACE" just like cgit.
      Throws:
      GitException - if underlying git operation fails.
    • changelog

      public ChangelogCommand changelog() throws GitException
      changelog.
      Returns:
      a ChangelogCommand object.
      Throws:
      GitException
    • clean

      public void clean(boolean cleanSubmodule) throws GitException
      clean.
      Parameters:
      cleanSubmodule - flag to add extra -f
      Throws:
      GitException - if underlying git operation fails.
    • clean

      public void clean() throws GitException
      clean.
      Throws:
      GitException - if underlying git operation fails.
    • clone_

      public CloneCommand clone_()
      clone_.
      Returns:
      a CloneCommand object.
    • merge

      public MergeCommand merge()
      merge.
      Returns:
      a MergeCommand object.
    • init_

      public InitCommand init_()
      init_.
      Returns:
      a InitCommand object.
    • rebase

      public RebaseCommand rebase()
      Description copied from interface: GitClient
      rebase.
      Returns:
      a RebaseCommand object.
    • deleteTag

      public void deleteTag(String tagName) throws GitException
      deleteTag.
      Parameters:
      tagName - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • getTagMessage

      public String getTagMessage(String tagName) throws GitException
      getTagMessage.
      Parameters:
      tagName - a String object.
      Returns:
      a String object.
      Throws:
      GitException - if underlying git operation fails.
    • getSubmodules

      public List<IndexEntry> getSubmodules(String treeIsh) throws GitException
      Finds all the submodule references in this repository at the specified tree.
      Parameters:
      treeIsh - a String object.
      Returns:
      never null.
      Throws:
      GitException - if underlying git operation fails.
    • addSubmodule

      public void addSubmodule(String remoteURL, String subdir) throws GitException
      Create a submodule in subdir child directory for remote repository
      Parameters:
      remoteURL - a String object.
      subdir - a String object.
      Throws:
      GitException - if underlying git operation fails.
    • getTagNames

      public Set<String> getTagNames(String tagPattern) throws GitException
      getTagNames.
      Parameters:
      tagPattern - a String object.
      Returns:
      a Set object.
      Throws:
      GitException - if underlying git operation fails.
    • getRemoteTagNames

      public Set<String> getRemoteTagNames(String tagPattern) throws GitException
      getRemoteTagNames.
      Parameters:
      tagPattern - a String object.
      Returns:
      a Set object.
      Throws:
      GitException - if underlying git operation fails.
    • hasGitRepo

      public boolean hasGitRepo() throws GitException
      Returns true if the current workspace has a git repository. Does not search parent directories for a repository.
      Returns:
      true if this workspace has a git repository
      Throws:
      GitException - if underlying git operation fails.
    • hasGitRepo

      public boolean hasGitRepo(boolean checkParentDirectories) throws GitException
      Returns true if the current workspace has a git repository. If checkParentDirectories is true, searches parent directories. If checkParentDirectories is false, checks workspace directory only.
      Parameters:
      checkParentDirectories - if true, search upwards for a git repository
      Returns:
      true if this workspace has a git repository
      Throws:
      GitException - if underlying git operation fails.
    • isCommitInRepo

      public boolean isCommitInRepo(org.eclipse.jgit.lib.ObjectId commit) throws GitException
      isCommitInRepo.
      Parameters:
      commit - a ObjectId object.
      Returns:
      true if commit is in repository
      Throws:
      GitException - if underlying git operation fails.
    • prune

      public void prune(org.eclipse.jgit.transport.RemoteConfig repository) throws GitException
      Prune stale remote tracking branches with "git remote prune" on the specified remote.
      Parameters:
      repository - a RemoteConfig object.
      Throws:
      GitException - if underlying git operation fails.
    • push

      public PushCommand push()
      push.
      Returns:
      a PushCommand object.
    • revList_

      public RevListCommand revList_()
      revList_.
      Returns:
      a RevListCommand object.
    • revListAll

      public List<org.eclipse.jgit.lib.ObjectId> revListAll() throws GitException
      revListAll.
      Returns:
      a List object.
      Throws:
      GitException - if underlying git operation fails.
    • revList

      public List<org.eclipse.jgit.lib.ObjectId> revList(String ref) throws GitException
      revList.
      Parameters:
      ref - a String object.
      Returns:
      a List object.
      Throws:
      GitException - if underlying git operation fails.
    • revParse

      public org.eclipse.jgit.lib.ObjectId revParse(String revName) throws GitException
      Retrieve commit object that is direct child for revName revision reference.
      Parameters:
      revName - a commit sha1 or tag/branch refname
      Returns:
      a ObjectId object.
      Throws:
      GitException - when no such commit / revName is found in repository.
    • showRevision

      public List<String> showRevision(org.eclipse.jgit.lib.ObjectId from, org.eclipse.jgit.lib.ObjectId to) throws GitException
      Given a Revision, show it as if it were an entry from git whatchanged, so that it can be parsed by GitChangeLogParser.

      Changes are computed on the [from..to] range. If from is null, this prints just one commit that to represents.

      For merge commit, this method reports one diff per each parent. This makes this method behave differently from GitClient.changelog().

      Parameters:
      from - a ObjectId object.
      to - a ObjectId object.
      Returns:
      The git whatchanged output, in raw format.
      Throws:
      GitException - if underlying git operation fails.
    • showRevision

      public List<String> showRevision(org.eclipse.jgit.lib.ObjectId from, org.eclipse.jgit.lib.ObjectId to, Boolean useRawOutput) throws GitException
      Given a Revision, show it as if it were an entry from git whatchanged, so that it can be parsed by GitChangeLogParser.

      If useRawOutput is true, the '--raw' option will include commit file information to be passed to the GitChangeLogParser.

      Changes are computed on the [from..to] range. If from is null, this prints just one commit that to represents.

      For merge commit, this method reports one diff per each parent. This makes this method behave differently from GitClient.changelog().

      Parameters:
      from - a ObjectId object.
      to - a ObjectId object.
      useRawOutput - a {java.lang.Boolean} object.
      Returns:
      The git whatchanged output, in raw format.
      Throws:
      GitException - if underlying git operation fails.
    • submoduleClean

      public void submoduleClean(boolean recursive) throws GitException
      submoduleClean.
      Parameters:
      recursive - a boolean.
      Throws:
      GitException - if underlying git operation fails.
    • submoduleUpdate

      public SubmoduleUpdateCommand submoduleUpdate()
      Update submodules.
      Returns:
      a SubmoduleUpdateCommand object.
    • merge

      @Deprecated public void merge(String refSpec) throws GitException, InterruptedException
      Deprecated.
      Merge commits from revspec into the current branch.
      Parameters:
      refSpec - the revision specification to be merged (for example, origin/main)
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • push

      @Deprecated public void push(org.eclipse.jgit.transport.RemoteConfig repository, String refspec) throws GitException, InterruptedException
      Deprecated.
      Push revspec to repository.
      Parameters:
      repository - git repository to receive commits
      refspec - commits to be pushed
      Throws:
      GitException - if underlying git operating fails
      InterruptedException - if interrupted
    • getBranchesContaining

      public List<Branch> getBranchesContaining(String revspec) throws GitException, InterruptedException
      Find all the branches that include the given commit.
      Parameters:
      revspec - substring to be searched for branch name
      Returns:
      list of branches containing revspec
      Throws:
      GitException - on failure
      InterruptedException - if interrupted
    • getBranchesContaining

      public List<Branch> getBranchesContaining(String revspec, boolean allBranches) throws GitException, InterruptedException
      Find all the branches that include the given commit. "git branch --contains=X" is a pretty plain traversal. We walk the commit graph until we find the target revision we want. Doing this individually for every branch is too expensive, so we use flags to track multiple branches at once. JGit gives us 24 bits of flags, so we divide up all the branches to batches of 24, then perform a graph walk. For flags to carry correctly over from children to parents, all the children must be visited before we see the parent. This requires a topological sorting order. In addition, we want kind of a "breadth first search" to avoid going down a part of the graph that's not terribly interesting and topo sort helps with that, too (imagine the following commit graph, and compute "git branch --contains=t"; we don't want to visit all the way to c1 before visiting c.) INIT -> c1 -> c2 -> ... long history of commits --+--> c1000 --+--> branch1 | | --> t ------

      Since we reuse RevWalk, it'd be nice to flag commits reachable from 't' as uninteresting and keep them across resets, but I'm not sure how to do it.

      Parameters:
      revspec - commit id to query for
      allBranches - whether remote branches should be also queried (true) or not (false)
      Returns:
      list of branches the specified commit belongs to
      Throws:
      GitException - on Git exceptions
      InterruptedException - on thread interruption
    • mergeBase

      @Deprecated public org.eclipse.jgit.lib.ObjectId mergeBase(org.eclipse.jgit.lib.ObjectId id1, org.eclipse.jgit.lib.ObjectId id2) throws GitException
      Deprecated.
      mergeBase.
      Parameters:
      id1 - a ObjectId object.
      id2 - a ObjectId object.
      Returns:
      a ObjectId object.
      Throws:
      GitException
    • getAllLogEntries

      @Deprecated public String getAllLogEntries(String branch) throws GitException
      Deprecated.
      This method makes no sense, in that it lists all log entries across all refs and yet it takes a meaningless 'branch' parameter. Please do not use this.
      Parameters:
      branch - a String object.
      Returns:
      a String object.
      Throws:
      GitException
    • submoduleInit

      @Deprecated public void submoduleInit() throws GitException, InterruptedException
      Deprecated.
      submoduleInit.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • submoduleSync

      @Deprecated public void submoduleSync() throws GitException
      Deprecated.
      submoduleSync.
      Throws:
      GitException - if underlying git operation fails.
    • getSubmoduleUrl

      @Deprecated public String getSubmoduleUrl(String name) throws GitException, InterruptedException
      Deprecated.
      Returns URL of the named submodule.
      Parameters:
      name - submodule name whose URL will be returned
      Returns:
      URL of the named submodule
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • setSubmoduleUrl

      @Deprecated public void setSubmoduleUrl(String name, String url) throws GitException
      Deprecated.
      Sets URL of the named submodule.
      Parameters:
      name - submodule name whose URL will be set
      url - URL for the named submodule
      Throws:
      GitException - if underlying git operation fails.
    • setupSubmoduleUrls

      @Deprecated public void setupSubmoduleUrls(Revision rev, TaskListener listener) throws GitException
      Deprecated.
      Set up submodule URLs so that they correspond to the remote pertaining to the revision that has been checked out. I don't think anyone is using this method, and I don't think we ever need to implement this. This kind of logic doesn't belong here, as it lacks generality. It should be whoever manipulating Git.
      Parameters:
      rev - a Revision object.
      listener - a TaskListener object.
      Throws:
      GitException - if underlying git operation fails.
    • fixSubmoduleUrls

      @Deprecated public void fixSubmoduleUrls(String remote, TaskListener listener) throws GitException, InterruptedException
      Deprecated.
      fixSubmoduleUrls. I don't think anyone is using this method, and I don't think we ever need to implement this. This kind of logic doesn't belong here, as it lacks generality. It should be whoever manipulating Git.
      Parameters:
      remote - a String object.
      listener - a TaskListener object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • describe

      public String describe(String tip) throws GitException, InterruptedException
      Equivalent of "git-describe --tags". Find a nearby tag (including unannotated ones) and come up with a short identifier to describe the tag. This implementation is based on my reading of the cgit source code at https://github.com/git/git/blob/master/builtin/describe.c

      The basic structure of the algorithm is as follows. We walk the commit graph, find tags, and mark commits that are reachable from those tags. The marking uses flags given by JGit, so there's a fairly small upper bound in the number of tags we can keep track of.

      As we walk commits, we count commits that each tag doesn't contain. We call it "depth", following the variable name in C Git. As we walk further and find enough tags, we go into wind-down mode and only walk to the point of accurately determining all the depths.

      Parameters:
      tip - a String object.
      Returns:
      a String object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • lsTree

      @Deprecated public List<IndexEntry> lsTree(String treeIsh, boolean recursive) throws GitException, InterruptedException
      Deprecated.
      lsTree.
      Parameters:
      treeIsh - a String object.
      recursive - a boolean.
      Returns:
      a List object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • reset

      @Deprecated public void reset(boolean hard) throws GitException, InterruptedException
      Deprecated.
      Reset the contents of the working directory of this repository. Refer to git reset documentation.
      Parameters:
      hard - reset as though "--hard" were passed to "git reset"
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • isBareRepository

      @Deprecated public boolean isBareRepository(String GIT_DIR) throws GitException, InterruptedException
      Deprecated.
      Detect whether a repository at the given path is bare or not.
      Parameters:
      GIT_DIR - The path to the repository (must be to .git dir).
      Returns:
      true if this repository is bare
      Throws:
      GitException - on failure
      InterruptedException - if interrupted
    • getDefaultRemote

      @Deprecated public String getDefaultRemote(String _default_) throws GitException, InterruptedException
      Deprecated.
      Returns name of default remote.
      Parameters:
      _default_ - value to return if no remote is defined in this repository
      Returns:
      name of default remote
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • setRemoteUrl

      @Deprecated public void setRemoteUrl(String name, String url, String GIT_DIR) throws GitException, InterruptedException
      Deprecated.
      Set remote repository name and URL.
      Parameters:
      name - name for the remote repository, for example, "origin"
      url - URL for the remote repository, for example https://github.com/jenkinsci/git-client-plugin.git
      GIT_DIR - directory containing git repository
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getRemoteUrl

      @Deprecated public String getRemoteUrl(String name, String GIT_DIR) throws GitException, InterruptedException
      Deprecated.
      Returns URL of remote name in repository GIT_DIR.
      Parameters:
      name - name for the remote repository, for example, "origin"
      GIT_DIR - directory containing git repository
      Returns:
      URL of remote "name" in repository GIT_DIR.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getTags

      public Set<GitObject> getTags() throws GitException
      Return name and object ID of all tags in current repository.
      Returns:
      set of tags in current repository
      Throws:
      GitException - on Git exceptions
    • maintenance

      public boolean maintenance(String task)
      Description copied from interface: GitClient
      Executes git maintenance commands based on the git version.
      Parameters:
      task - a String object. i.e (prefetch/gc/commit-graph/incremental-repack/loose-objects)
      Returns:
      Boolean if maintenance has been executed or not.
    • config

      public void config(GitClient.ConfigLevel configLevel, String key, String value) throws GitException, InterruptedException
      Execute git config at the specified configuration level. If value is null, the key will be removed from the configuration.
      Parameters:
      configLevel - configuration level that will be modified. If null, then GitClient.ConfigLevel.LOCAL will be used.
      key - configuration section expressed as section[.subsection].name
      value - configuration value. If null, the key will be removed from the configuration (unset)
      Throws:
      GitException - on Git exception
      InterruptedException - on thread interruption
    • isBareRepository

      public boolean isBareRepository() throws GitException, InterruptedException
      isBareRepository.
      Specified by:
      isBareRepository in interface IGitAPI
      Returns:
      true if this repository is a bare repository
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getHostKeyFactory

      public HostKeyVerifierFactory getHostKeyFactory()
    • setHostKeyFactory

      public void setHostKeyFactory(HostKeyVerifierFactory verifier)
    • hasGitModules

      @Deprecated public boolean hasGitModules(String treeIsh) throws GitException
      Deprecated.
      Returns true if this repository has submodules.
      Specified by:
      hasGitModules in interface IGitAPI
      Parameters:
      treeIsh - an ignored argument, kept for compatibility
      Returns:
      true if this repository has submodules (git modules file)
      Throws:
      GitException - if underlying git operation fails.
      See Also:
    • setupSubmoduleUrls

      @Deprecated public void setupSubmoduleUrls(String remote, TaskListener listener) throws GitException, InterruptedException
      Deprecated.
      Specified by:
      setupSubmoduleUrls in interface IGitAPI
      Throws:
      GitException
      InterruptedException
    • fetch

      @Deprecated public void fetch(String repository, String refspec) throws GitException, InterruptedException
      Deprecated.
      Retrieve commits based on refspec from repository.
      Specified by:
      fetch in interface IGitAPI
      Parameters:
      repository - URL of the repository to be retrieved
      refspec - definition of mapping from remote refs to local refs
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • fetch

      @Deprecated public void fetch(org.eclipse.jgit.transport.RemoteConfig remoteRepository) throws GitException, InterruptedException
      Deprecated.
      Retrieve commits from RemoteConfig.
      Specified by:
      fetch in interface IGitAPI
      Parameters:
      remoteRepository - remote configuration from which refs will be retrieved
      Throws:
      InterruptedException - if interrupted.
      GitException
    • fetch

      @Deprecated public void fetch() throws GitException, InterruptedException
      Deprecated.
      fetch.
      Specified by:
      fetch in interface IGitAPI
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • reset

      @Deprecated public void reset() throws GitException, InterruptedException
      Deprecated.
      reset.
      Specified by:
      reset in interface IGitAPI
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • push

      @Deprecated public void push(org.eclipse.jgit.transport.URIish url, String refspec) throws GitException, InterruptedException
      Deprecated.
      push.
      Specified by:
      push in interface GitClient
      Parameters:
      url - a URIish object.
      refspec - a String object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • push

      @Deprecated public void push(String remoteName, String refspec) throws GitException, InterruptedException
      Deprecated.
      push.
      Specified by:
      push in interface GitClient
      Parameters:
      remoteName - a String object.
      refspec - a String object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • clone

      @Deprecated public void clone(org.eclipse.jgit.transport.RemoteConfig source) throws GitException, InterruptedException
      Deprecated.
      Clone repository from source to this repository.
      Specified by:
      clone in interface IGitAPI
      Parameters:
      source - remote repository to be cloned
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • clone

      @Deprecated public void clone(org.eclipse.jgit.transport.RemoteConfig rc, boolean useShallowClone) throws GitException, InterruptedException
      Deprecated.
      Clone repository from RemoteConfig rc to this repository.
      Specified by:
      clone in interface IGitAPI
      Parameters:
      rc - the remote config for the remote repository
      useShallowClone - if true, use a shallow clone
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • revListBranch

      @Deprecated public List<org.eclipse.jgit.lib.ObjectId> revListBranch(String branchId) throws GitException, InterruptedException
      Deprecated.
      revListBranch.
      Specified by:
      revListBranch in interface IGitAPI
      Parameters:
      branchId - a String object.
      Returns:
      a List object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • showRevision

      Deprecated.
      showRevision.
      Specified by:
      showRevision in interface IGitAPI
      Parameters:
      r - a Revision object.
      Returns:
      a List object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • getTagsOnCommit

      @Deprecated public List<Tag> getTagsOnCommit(String revName) throws GitException, IOException
      Deprecated.
      getTagsOnCommit.
      Specified by:
      getTagsOnCommit in interface IGitAPI
      Parameters:
      revName - a String object.
      Returns:
      a List object.
      Throws:
      GitException - if underlying git operation fails.
      IOException - if any IO failure
    • lsTree

      public final List<IndexEntry> lsTree(String treeIsh) throws GitException, InterruptedException
      This method has been implemented as non-recursive historically, but often that is not what the caller wants.
      Specified by:
      lsTree in interface IGitAPI
      Parameters:
      treeIsh - string representation of a treeIsh item
      Returns:
      list of IndexEntry items starting at treeIsh
      Throws:
      GitException - on failure
      InterruptedException - if interrupted
    • writeReplace

      protected Object writeReplace() throws ObjectStreamException
      When sent to remote, switch to the proxy.
      Returns:
      a Object object.
      Throws:
      ObjectStreamException - if current channel is null
    • hasGitModules

      public boolean hasGitModules() throws GitException
      hasGitModules.
      Specified by:
      hasGitModules in interface GitClient
      Returns:
      true if this repositor has one or more submodules
      Throws:
      GitException - if underlying git operation fails.
    • showRevision

      public List<String> showRevision(org.eclipse.jgit.lib.ObjectId r) throws GitException, InterruptedException
      Given a Revision, show it as if it were an entry from git whatchanged, so that it can be parsed by GitChangeLogParser.

      Changes are computed on the [from..to] range. If from is null, this prints just one commit that to represents.

      For merge commit, this method reports one diff per each parent. This makes this method behave differently from GitClient.changelog().

      Specified by:
      showRevision in interface GitClient
      Parameters:
      r - a ObjectId object.
      Returns:
      The git whatchanged output, in raw format.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • extractBranchNameFromBranchSpec

      protected String extractBranchNameFromBranchSpec(String branchSpec)
      This method takes a branch specification and normalizes it get unambiguous results. This is the case when using "refs/heads/"

      TODO: Currently only for specs starting with "refs/heads/" the implementation is correct. All others branch specs should also be normalized to "refs/heads/" in order to get unambiguous results. To achieve this it is necessary to identify remote names in the branch spec and to discuss how to handle clashes (e.g. "remoteName/main" for branch "main" (refs/heads/main) in remote "remoteName" and branch "remoteName/main" (refs/heads/remoteName/main)).

      Existing behavior is intentionally being retained so that current use cases are not disrupted by a behavioral change.

      E.g.
      Branch Spec Normalization Examples
      branch specnormalized
      mainmain*
      feature1feature1*
      feature1/main
      main feature1/main*
      origin/mainmain*
      repo2/feature1feature1*
      refs/heads/feature1refs/heads/feature1
      origin/namespaceA/fix15
      fix15 namespaceA/fix15*
      refs/heads/namespaceA/fix15refs/heads/namespaceA/fix15
      remotes/origin/namespaceA/fix15refs/heads/namespaceA/fix15

      *) TODO: Normalize to "refs/heads/"
      Parameters:
      branchSpec - a String object.
      Returns:
      normalized branch name
    • withRepository

      public <T> T withRepository(RepositoryCallback<T> callable) throws GitException, IOException, InterruptedException
      Runs the computation that requires local access to Repository.
      Specified by:
      withRepository in interface GitClient
      Type Parameters:
      T - type for the repository callback
      Parameters:
      callable - the repository callback used as closure to instance
      Returns:
      a T object.
      Throws:
      IOException - in case of IO error
      InterruptedException - if interrupted
      GitException
    • commit

      public void commit(String message, org.eclipse.jgit.lib.PersonIdent author, org.eclipse.jgit.lib.PersonIdent committer) throws GitException, InterruptedException
      commit.
      Specified by:
      commit in interface GitClient
      Parameters:
      message - a String object.
      author - a PersonIdent object.
      committer - a PersonIdent object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • setAuthor

      public void setAuthor(org.eclipse.jgit.lib.PersonIdent p) throws GitException
      setAuthor.
      Specified by:
      setAuthor in interface GitClient
      Parameters:
      p - a PersonIdent object.
      Throws:
      GitException - if underlying git operation fails.
    • setCommitter

      public void setCommitter(org.eclipse.jgit.lib.PersonIdent p) throws GitException
      setCommitter.
      Specified by:
      setCommitter in interface GitClient
      Parameters:
      p - a PersonIdent object.
      Throws:
      GitException - if underlying git operation fails.
    • changelog

      public void changelog(String revFrom, String revTo, OutputStream outputStream) throws GitException, InterruptedException
      changelog.
      Specified by:
      changelog in interface GitClient
      Parameters:
      revFrom - a String object.
      revTo - a String object.
      outputStream - a OutputStream object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • changelog

      public void changelog(String revFrom, String revTo, Writer w) throws GitException, InterruptedException
      Adds the changelog entries for commits in the range revFrom..revTo. This is just a short cut for calling GitClient.changelog() with appropriate parameters.
      Specified by:
      changelog in interface GitClient
      Parameters:
      revFrom - a String object.
      revTo - a String object.
      w - a Writer object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • clone

      public void clone(String url, String origin, boolean useShallowClone, String reference) throws GitException, InterruptedException
      Clone a remote repository
      Specified by:
      clone in interface GitClient
      Parameters:
      url - URL for remote repository to clone
      origin - upstream track name, defaults to origin by convention
      useShallowClone - option to create a shallow clone, that has some restriction but will make clone operation
      reference - (optional) reference to a local clone for faster clone operations (reduce network and local storage costs)
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • checkout

      public void checkout(String commit) throws GitException, InterruptedException
      Checks out the specified commit/tag/branch into the workspace. (equivalent of git checkout branch.)
      Specified by:
      checkout in interface GitClient
      Parameters:
      commit - A git object references expression (either a sha1, tag or branch)
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • checkout

      public void checkout(String ref, String branch) throws GitException, InterruptedException
      Creates a new branch that points to the specified ref. (equivalent to git checkout -b branch commit) This will fail if the branch already exists.
      Specified by:
      checkout in interface GitClient
      Parameters:
      ref - A git object references expression. For backward compatibility, null will checkout current HEAD
      branch - name of the branch to create from reference
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • checkoutBranch

      public void checkoutBranch(String branch, String ref) throws GitException, InterruptedException
      Regardless of the current state of the workspace (whether there is some dirty files, etc) and the state of the repository (whether the branch of the specified name exists or not), when this method exits the following conditions hold:
      • The branch of the specified name branch exists and points to the specified ref
      • HEAD points to branch. In other words, the workspace is on the specified branch.
      • Both index and workspace are the same tree with ref. (no dirty files and no staged changes, although this method will not touch untracked files in the workspace.)

      This method is preferred over the GitClient.checkout(String, String) family of methods, as this method is affected far less by the current state of the repository. The checkout methods, in their attempt to emulate the "git checkout" command line behaviour, have too many side effects. In Jenkins, where you care a lot less about throwing away local changes and care a lot more about resetting the workspace into a known state, methods like this is more useful.

      For compatibility reasons, the order of the parameter is different from GitClient.checkout(String, String).

      Specified by:
      checkoutBranch in interface GitClient
      Parameters:
      branch - a String object.
      ref - a String object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • merge

      public void merge(org.eclipse.jgit.lib.ObjectId rev) throws GitException, InterruptedException
      merge.
      Specified by:
      merge in interface GitClient
      Parameters:
      rev - a ObjectId object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • remoteProxyFor

      protected org.jenkinsci.plugins.gitclient.RemoteGitImpl remoteProxyFor(GitClient proxy)
      remoteProxyFor.
      Parameters:
      proxy - a GitClient object.
      Returns:
      a RemoteGitImpl object.
    • setCredentials

      public void setCredentials(com.cloudbees.plugins.credentials.common.StandardUsernameCredentials cred)
      setCredentials.
      Specified by:
      setCredentials in interface GitClient
      Parameters:
      cred - a StandardUsernameCredentials object.
    • setProxy

      public void setProxy(ProxyConfiguration proxy)
      setProxy.
      Specified by:
      setProxy in interface GitClient
      Parameters:
      proxy - a ProxyConfiguration object.
    • submoduleUpdate

      public void submoduleUpdate(boolean recursive) throws GitException, InterruptedException
      Run submodule update optionally recursively on all submodules (equivalent of git submodule update --recursive.)
      Specified by:
      submoduleUpdate in interface GitClient
      Parameters:
      recursive - a boolean.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • submoduleUpdate

      public void submoduleUpdate(boolean recursive, String reference) throws GitException, InterruptedException
      Run submodule update optionally recursively on all submodules, with a specific reference passed to git clone if needing to --init. (equivalent of git submodule update --recursive --reference 'reference'.)
      Specified by:
      submoduleUpdate in interface GitClient
      Parameters:
      recursive - a boolean.
      reference - a String object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • submoduleUpdate

      public void submoduleUpdate(boolean recursive, boolean remoteTracking) throws GitException, InterruptedException
      Run submodule update optionally recursively on all submodules, optionally with remoteTracking submodules (equivalent of git submodule update --recursive --remote.)
      Specified by:
      submoduleUpdate in interface GitClient
      Parameters:
      recursive - a boolean.
      remoteTracking - a boolean.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.
    • submoduleUpdate

      public void submoduleUpdate(boolean recursive, boolean remoteTracking, String reference) throws GitException, InterruptedException
      Run submodule update optionally recursively on all submodules, optionally with remoteTracking, with a specific reference passed to git clone if needing to --init. (equivalent of git submodule update --recursive --remote --reference 'reference'.)
      Specified by:
      submoduleUpdate in interface GitClient
      Parameters:
      recursive - a boolean.
      remoteTracking - a boolean.
      reference - a String object.
      Throws:
      GitException - if underlying git operation fails.
      InterruptedException - if interrupted.