Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-20258

Git plugin with checkout to subdir and prune stale branches fails all builds

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Minor
    • Resolution: Fixed
    • Component/s: git-plugin
    • Labels:
    • Environment:
      Jenkins 1.509.4, Git 2.0, Git client 1.4.5, Windows and Linux, AMD64 and x86
    • Similar Issues:

      Description

      I configured a job with the git 2.0 plugin to checkout to a specific subdirectory and to prune stale branches. That pair of configuration settings cause the initial git operations to fail with both git command line and jgit implementations.

      The stack trace for the command line implementation is:

      Started by user anonymous
      Building remotely on alan-pc in workspace C:\J\workspace\git-multi-subdir-prune
      Pruning obsolete local branches
      FATAL: Command "config --get remote.origin.url" returned status code 1:
      stdout: 
      stderr: 
      hudson.plugins.git.GitException: Command "config --get remote.origin.url" returned status code 1:
      stdout: 
      stderr: 
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:940)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:921)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:865)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:875)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getRemoteUrl(CliGitAPIImpl.java:603)
      	at hudson.plugins.git.GitAPI.getRemoteUrl(GitAPI.java:61)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.prune(CliGitAPIImpl.java:393)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:299)
      	at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:280)
      	at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:239)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:118)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:48)
      	at hudson.remoting.Request$2.run(Request.java:326)
      	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
      	at java.util.concurrent.FutureTask.run(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at hudson.remoting.Engine$1$1.run(Engine.java:63)
      	at java.lang.Thread.run(Unknown Source)
      

      The stack trace for the jgit implementation is:

      Started by an SCM change
      Started by user anonymous
      Building remotely on waite2011 in workspace D:\J\workspace\git-multi-jgit-subdir-prune
      Pruning obsolete local branches
      FATAL: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null
      hudson.plugins.git.GitException: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null
      	at org.jenkinsci.plugins.gitclient.JGitAPIImpl.prune(JGitAPIImpl.java:869)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:299)
      	at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:280)
      	at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:239)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:118)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:48)
      	at hudson.remoting.Request$2.run(Request.java:326)
      	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
      	at java.util.concurrent.FutureTask.run(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at hudson.remoting.Engine$1$1.run(Engine.java:63)
      	at java.lang.Thread.run(Unknown Source)
      Caused by: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null
      	at org.eclipse.jgit.transport.URIish.<init>(URIish.java:205)
      	at org.jenkinsci.plugins.gitclient.JGitAPIImpl.listRemoteBranches(JGitAPIImpl.java:879)
      	at org.jenkinsci.plugins.gitclient.JGitAPIImpl.prune(JGitAPIImpl.java:857)
      	... 16 more
      

        Attachments

          Issue Links

            Activity

            Hide
            sschuberth Sebastian Schuberth added a comment -

            Same here, with the same Jenkins / plugin versions:

            Pruning obsolete local branches
            FATAL: Command "config --get remote.origin.url" returned status code 1:
            stdout:
            stderr:
            hudson.plugins.git.GitException: Command "config --get remote.origin.url" returned status code 1:
            stdout:
            stderr:
            at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:940)
            at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:921)
            at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:865)
            at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:875)
            at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getRemoteUrl(CliGitAPIImpl.java:603)
            at hudson.plugins.git.GitAPI.getRemoteUrl(GitAPI.java:61)
            at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.prune(CliGitAPIImpl.java:393)
            at hudson.plugins.git.extensions.impl.PruneStaleBranch.beforeCheckout(PruneStaleBranch.java:31)
            at hudson.plugins.git.GitSCM.checkout(GitSCM.java:858)
            at org.jenkinsci.plugins.multiplescms.MultiSCM.checkout(MultiSCM.java:117)
            at hudson.model.AbstractProject.checkout(AbstractProject.java:1376)
            at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:655)
            at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
            at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:560)
            at hudson.model.Run.execute(Run.java:1592)
            at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
            at hudson.model.ResourceController.execute(ResourceController.java:88)
            at hudson.model.Executor.run(Executor.java:237)

            Show
            sschuberth Sebastian Schuberth added a comment - Same here, with the same Jenkins / plugin versions: Pruning obsolete local branches FATAL: Command "config --get remote.origin.url" returned status code 1: stdout: stderr: hudson.plugins.git.GitException: Command "config --get remote.origin.url" returned status code 1: stdout: stderr: at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:940) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:921) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:865) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:875) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getRemoteUrl(CliGitAPIImpl.java:603) at hudson.plugins.git.GitAPI.getRemoteUrl(GitAPI.java:61) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.prune(CliGitAPIImpl.java:393) at hudson.plugins.git.extensions.impl.PruneStaleBranch.beforeCheckout(PruneStaleBranch.java:31) at hudson.plugins.git.GitSCM.checkout(GitSCM.java:858) at org.jenkinsci.plugins.multiplescms.MultiSCM.checkout(MultiSCM.java:117) at hudson.model.AbstractProject.checkout(AbstractProject.java:1376) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:655) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:560) at hudson.model.Run.execute(Run.java:1592) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) at hudson.model.ResourceController.execute(ResourceController.java:88) at hudson.model.Executor.run(Executor.java:237)
            Hide
            ndeloof Nicolas De Loof added a comment -

            Confirm prune option is broken in 2.0

            Show
            ndeloof Nicolas De Loof added a comment - Confirm prune option is broken in 2.0
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Nicolas De Loof
            Path:
            src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java
            src/main/java/org/jenkinsci/plugins/gitclient/FetchCommand.java
            src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java
            src/main/java/org/jenkinsci/plugins/gitclient/JGitAPIImpl.java
            src/main/java/org/jenkinsci/plugins/gitclient/RemoteGitImpl.java
            http://jenkins-ci.org/commit/git-client-plugin/ba2ab8934e62d2cea77ec663a2a07dbfad145e2a
            Log:
            JENKINS-20258 introduce FetchCommand

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Nicolas De Loof Path: src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java src/main/java/org/jenkinsci/plugins/gitclient/FetchCommand.java src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java src/main/java/org/jenkinsci/plugins/gitclient/JGitAPIImpl.java src/main/java/org/jenkinsci/plugins/gitclient/RemoteGitImpl.java http://jenkins-ci.org/commit/git-client-plugin/ba2ab8934e62d2cea77ec663a2a07dbfad145e2a Log: JENKINS-20258 introduce FetchCommand
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Nicolas De Loof
            Path:
            pom.xml
            src/main/java/hudson/plugins/git/GitSCM.java
            src/main/java/hudson/plugins/git/extensions/GitSCMExtension.java
            src/main/java/hudson/plugins/git/extensions/impl/PruneStaleBranch.java
            http://jenkins-ci.org/commit/git-plugin/f6d42c4e7edb102d3330af5ca66a7f5809d1a48e
            Log:
            JENKINS-20258 prune branches during fetch

            Compare: https://github.com/jenkinsci/git-plugin/compare/dc73e2539209...f6d42c4e7edb

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Nicolas De Loof Path: pom.xml src/main/java/hudson/plugins/git/GitSCM.java src/main/java/hudson/plugins/git/extensions/GitSCMExtension.java src/main/java/hudson/plugins/git/extensions/impl/PruneStaleBranch.java http://jenkins-ci.org/commit/git-plugin/f6d42c4e7edb102d3330af5ca66a7f5809d1a48e Log: JENKINS-20258 prune branches during fetch Compare: https://github.com/jenkinsci/git-plugin/compare/dc73e2539209...f6d42c4e7edb
            Hide
            iancw Ian Will added a comment -

            We found that we could work around this problem by manually copying the .git folder into the workspace. It's good to know the problem is with prune, because disabling that will be a bit more efficient for us.

            Show
            iancw Ian Will added a comment - We found that we could work around this problem by manually copying the .git folder into the workspace. It's good to know the problem is with prune, because disabling that will be a bit more efficient for us.
            Hide
            henriquer Henrique Rodrigues added a comment -

            This is still an open issue with Git plugin 2.0.

            From what I've seen, the problem occurs when the workspace is clean *and* the prune option is enabled. This causes Git plugin to run prune on an empty folder, thus causing the error:

            FATAL: Command "config --get remote.origin.url" returned status code 1:

            The Git plugin should check if it is on a git repo before attempting to prune it. If it's not on a git repo, ignore it and proceed to the cloning of the repo. Subsequent builds will call prune successfully.

            Show
            henriquer Henrique Rodrigues added a comment - This is still an open issue with Git plugin 2.0. From what I've seen, the problem occurs when the workspace is clean * and * the prune option is enabled. This causes Git plugin to run prune on an empty folder, thus causing the error: FATAL: Command "config --get remote.origin.url" returned status code 1: The Git plugin should check if it is on a git repo before attempting to prune it. If it's not on a git repo, ignore it and proceed to the cloning of the repo. Subsequent builds will call prune successfully.
            Hide
            markewaite Mark Waite added a comment -

            +Henrique I believe it is expected to still be an open issue in Git plugin 2.0 because the change has not been included in a new version of the plugin. Nicolas' change was applied 8 days ago and there has not been a release of the Git plugin since then.

            When the latest commit is included in a Git plugin, then that version of the Git plugin (2.0.1 or 2.1 or ...) will have the fix in a user visible version.

            I assumed that Nicolas marked this as "Fixed" because the code change is in, and it will be finally resolved when I (or someone else) verifies the fix in a version which has been delivered through the Jenkins Update Center.

            Show
            markewaite Mark Waite added a comment - +Henrique I believe it is expected to still be an open issue in Git plugin 2.0 because the change has not been included in a new version of the plugin. Nicolas' change was applied 8 days ago and there has not been a release of the Git plugin since then. When the latest commit is included in a Git plugin, then that version of the Git plugin (2.0.1 or 2.1 or ...) will have the fix in a user visible version. I assumed that Nicolas marked this as "Fixed" because the code change is in, and it will be finally resolved when I (or someone else) verifies the fix in a version which has been delivered through the Jenkins Update Center.
            Hide
            markewaite Mark Waite added a comment -

            Incorrectly reopened, since the fix is on the source code. Can't be fully closed yet, since the fix has not yet been delivered in a release of the Git plugin.

            Show
            markewaite Mark Waite added a comment - Incorrectly reopened, since the fix is on the source code. Can't be fully closed yet, since the fix has not yet been delivered in a release of the Git plugin.
            Hide
            henriquer Henrique Rodrigues added a comment -

            Oh, you are so right, I completely missed those changes. Sorry about the mess.

            Show
            henriquer Henrique Rodrigues added a comment - Oh, you are so right, I completely missed those changes. Sorry about the mess.
            Hide
            markewaite Mark Waite added a comment - - edited

            Git client plugin 1.5.0 was intended to fix this (based on the submission ba2ab8934), but it still fails.

            Steps I used to duplicate the problem with Git client plugin 1.5.0:

            1. Create a new job (I named mine git-jgit-specific-subdir-prune)
            2. Configure git repo URL https://github.com/MarkEWaite/check_git.git
            3. Use jgit as the implementation rather than the default
            4. Add behavior to checkout to a local subdirectory
            5. Add behavior to prune stale remote tracking branches
            6. Save the job and run it

            Stack trace looks like:

            Building on master in workspace /var/lib/jenkins/jobs/git-jgit-specific-subdir-prune-simple/workspace
            Pruning obsolete local branches
            FATAL: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null
            hudson.plugins.git.GitException: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null
            	at org.jenkinsci.plugins.gitclient.JGitAPIImpl.prune(JGitAPIImpl.java:913)
            	at hudson.plugins.git.extensions.impl.PruneStaleBranch.beforeCheckout(PruneStaleBranch.java:31)
            	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:858)
            	at hudson.model.AbstractProject.checkout(AbstractProject.java:1411)
            	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
            	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
            	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557)
            	at hudson.model.Run.execute(Run.java:1665)
            	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
            	at hudson.model.ResourceController.execute(ResourceController.java:88)
            	at hudson.model.Executor.run(Executor.java:246)
            Caused by: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null
            	at org.eclipse.jgit.transport.URIish.<init>(URIish.java:205)
            	at org.jenkinsci.plugins.gitclient.JGitAPIImpl.listRemoteBranches(JGitAPIImpl.java:923)
            	at org.jenkinsci.plugins.gitclient.JGitAPIImpl.prune(JGitAPIImpl.java:901)
            	... 10 more
            
            Show
            markewaite Mark Waite added a comment - - edited Git client plugin 1.5.0 was intended to fix this (based on the submission ba2ab8934), but it still fails. Steps I used to duplicate the problem with Git client plugin 1.5.0: Create a new job (I named mine git-jgit-specific-subdir-prune) Configure git repo URL https://github.com/MarkEWaite/check_git.git Use jgit as the implementation rather than the default Add behavior to checkout to a local subdirectory Add behavior to prune stale remote tracking branches Save the job and run it Stack trace looks like: Building on master in workspace /var/lib/jenkins/jobs/git-jgit-specific-subdir-prune-simple/workspace Pruning obsolete local branches FATAL: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null hudson.plugins.git.GitException: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null at org.jenkinsci.plugins.gitclient.JGitAPIImpl.prune(JGitAPIImpl.java:913) at hudson.plugins.git.extensions.impl.PruneStaleBranch.beforeCheckout(PruneStaleBranch.java:31) at hudson.plugins.git.GitSCM.checkout(GitSCM.java:858) at hudson.model.AbstractProject.checkout(AbstractProject.java:1411) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557) at hudson.model.Run.execute(Run.java:1665) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) at hudson.model.ResourceController.execute(ResourceController.java:88) at hudson.model.Executor.run(Executor.java:246) Caused by: java.net.URISyntaxException: Cannot parse Git URI-ish: The uri was empty or null at org.eclipse.jgit.transport.URIish.<init>(URIish.java:205) at org.jenkinsci.plugins.gitclient.JGitAPIImpl.listRemoteBranches(JGitAPIImpl.java:923) at org.jenkinsci.plugins.gitclient.JGitAPIImpl.prune(JGitAPIImpl.java:901) ... 10 more
            Hide
            markewaite Mark Waite added a comment - - edited

            This is fixed for the command line implementation in git-client-plugin 1.6.2 and git-plugin 2.0.1.

            It is not fixed in the JGit implementation but it now reports a much clearer error message:

            JGit don't (yet) support pruning during fetch
            
            Started by user anonymous
            Building remotely on jessie64a in workspace /var/lib/jenkins/wheezy64b-slave/workspace/JENKINS-20258-checkout-to-subdir-and-prune-jgit
            Cloning the remote Git repository
            remote: Counting objects
            remote: Compressing objects
            Receiving objects
            Resolving deltas
            Updating references
            Pruning obsolete local branches
            FATAL: Failed to fetch from git://wheezy64b/git/mwaite/bin.git
            hudson.plugins.git.GitException: Failed to fetch from git://wheezy64b/git/mwaite/bin.git
            	at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:625)
            	at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:847)
            	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:872)
            	at hudson.model.AbstractProject.checkout(AbstractProject.java:1411)
            	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
            	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
            	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557)
            	at hudson.model.Run.execute(Run.java:1665)
            	at hudson.matrix.MatrixBuild.run(MatrixBuild.java:304)
            	at hudson.model.ResourceController.execute(ResourceController.java:88)
            	at hudson.model.Executor.run(Executor.java:246)
            	at hudson.model.OneOffExecutor.run(OneOffExecutor.java:66)
            Caused by: hudson.plugins.git.GitException: java.lang.reflect.InvocationTargetException
            	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:156)
            	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:146)
            	at hudson.remoting.UserRequest.perform(UserRequest.java:118)
            	at hudson.remoting.UserRequest.perform(UserRequest.java:48)
            	at hudson.remoting.Request$2.run(Request.java:326)
            	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
            	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
            	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
            	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
            	at java.lang.Thread.run(Thread.java:744)
            Caused by: java.lang.reflect.InvocationTargetException
            	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            	at java.lang.reflect.Method.invoke(Method.java:606)
            	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$Invocation.replay(RemoteGitImpl.java:101)
            	at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:151)
            	... 9 more
            Caused by: java.lang.UnsupportedOperationException: JGit don't (yet) support pruning during fetch
            	at org.jenkinsci.plugins.gitclient.JGitAPIImpl$1.prune(JGitAPIImpl.java:375)
            	... 15 more
            
            Show
            markewaite Mark Waite added a comment - - edited This is fixed for the command line implementation in git-client-plugin 1.6.2 and git-plugin 2.0.1. It is not fixed in the JGit implementation but it now reports a much clearer error message: JGit don't (yet) support pruning during fetch Started by user anonymous Building remotely on jessie64a in workspace /var/lib/jenkins/wheezy64b-slave/workspace/JENKINS-20258-checkout-to-subdir-and-prune-jgit Cloning the remote Git repository remote: Counting objects remote: Compressing objects Receiving objects Resolving deltas Updating references Pruning obsolete local branches FATAL: Failed to fetch from git://wheezy64b/git/mwaite/bin.git hudson.plugins.git.GitException: Failed to fetch from git://wheezy64b/git/mwaite/bin.git at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:625) at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:847) at hudson.plugins.git.GitSCM.checkout(GitSCM.java:872) at hudson.model.AbstractProject.checkout(AbstractProject.java:1411) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557) at hudson.model.Run.execute(Run.java:1665) at hudson.matrix.MatrixBuild.run(MatrixBuild.java:304) at hudson.model.ResourceController.execute(ResourceController.java:88) at hudson.model.Executor.run(Executor.java:246) at hudson.model.OneOffExecutor.run(OneOffExecutor.java:66) Caused by: hudson.plugins.git.GitException: java.lang.reflect.InvocationTargetException at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:156) at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:146) at hudson.remoting.UserRequest.perform(UserRequest.java:118) at hudson.remoting.UserRequest.perform(UserRequest.java:48) at hudson.remoting.Request$2.run(Request.java:326) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.jenkinsci.plugins.gitclient.RemoteGitImpl$Invocation.replay(RemoteGitImpl.java:101) at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:151) ... 9 more Caused by: java.lang.UnsupportedOperationException: JGit don't (yet) support pruning during fetch at org.jenkinsci.plugins.gitclient.JGitAPIImpl$1.prune(JGitAPIImpl.java:375) ... 15 more
            Hide
            markewaite Mark Waite added a comment -

            No fix intended for JGit implementation. Works in command line and clearly states that it is not implemented in JGit.

            Show
            markewaite Mark Waite added a comment - No fix intended for JGit implementation. Works in command line and clearly states that it is not implemented in JGit.
            Hide
            pmv pmv added a comment -

            It looks like JGit 3.3 can now do pruning? "Support fetch.prune and remote.<name>.prune to set prune mode when fetching" - https://wiki.eclipse.org/JGit/New_and_Noteworthy/3.3

            Should a new ticket be opened to get this fix applied to the JGit implementation?

            Show
            pmv pmv added a comment - It looks like JGit 3.3 can now do pruning? "Support fetch.prune and remote.<name>.prune to set prune mode when fetching" - https://wiki.eclipse.org/JGit/New_and_Noteworthy/3.3 Should a new ticket be opened to get this fix applied to the JGit implementation?
            Hide
            markewaite Mark Waite added a comment -

            Code already exists in the JGit implementation to evaluate the prune implementation that was included in JGit 3.3. Unfortunately, the JGit 3.3 prune removes more branches than command line git. Since that would give incompatible behavior between CliGit and JGit, and CliGit is the reference implementation, the JGit prune at fetch can't be enabled.

            Refer to this submission which attempted to use JGit prune with JGit 3.5.2 and confirmed that it is still pruning too many branches.

            Show
            markewaite Mark Waite added a comment - Code already exists in the JGit implementation to evaluate the prune implementation that was included in JGit 3.3. Unfortunately, the JGit 3.3 prune removes more branches than command line git. Since that would give incompatible behavior between CliGit and JGit, and CliGit is the reference implementation, the JGit prune at fetch can't be enabled. Refer to this submission which attempted to use JGit prune with JGit 3.5.2 and confirmed that it is still pruning too many branches.
            Hide
            pmv pmv added a comment -

            Thanks for the update. Is there an open ticket I can watch for this feature (rather than commenting on this old one)?

            Personally I'd be in favor of a "use this feature with JGit at your own risk" message rather than not supporting prune at all, but I understand your logic.

            Show
            pmv pmv added a comment - Thanks for the update. Is there an open ticket I can watch for this feature (rather than commenting on this old one)? Personally I'd be in favor of a "use this feature with JGit at your own risk" message rather than not supporting prune at all, but I understand your logic.
            Hide
            markewaite Mark Waite added a comment -

            I've been unwilling to accept incompatible behavior between CliGit and JGit. Use at your own risk seems too risky for a plugin used in over 50 000 installations.

            You're welcome to open a separate bug report / enhancement request to track it. That seems like it will make it easier to track, and easier to report the problem to the upstream JGit process.

            Show
            markewaite Mark Waite added a comment - I've been unwilling to accept incompatible behavior between CliGit and JGit. Use at your own risk seems too risky for a plugin used in over 50 000 installations. You're welcome to open a separate bug report / enhancement request to track it. That seems like it will make it easier to track, and easier to report the problem to the upstream JGit process.
            Hide
            pmv pmv added a comment -

            Created and linked JENKINS-26197.

            Show
            pmv pmv added a comment - Created and linked JENKINS-26197 .

              People

              • Assignee:
                Unassigned
                Reporter:
                markewaite Mark Waite
              • Votes:
                3 Vote for this issue
                Watchers:
                11 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: