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

AbstractGitSCMSource.retrieve fails due to nonexistent cache directory

    XMLWordPrintable

    Details

    • Similar Issues:

      Description

      Not sure if this affects production systems, or indeed why it is not reported by everyone, but anyway I was unable to make AbstractGitSCMSource.retrieve(SCMHeadObserver, TaskListener) work in a test without this fix. (And there was no test for it.) Doing so failed with:

      hudson.plugins.git.GitException: Could not init $JENKINS_HOME/caches/git-4ab...
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$5.execute(CliGitAPIImpl.java:656)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.init(CliGitAPIImpl.java:181)
      	at hudson.plugins.git.GitAPI.init(GitAPI.java:217)
      	at jenkins.plugins.git.AbstractGitSCMSource.retrieve(AbstractGitSCMSource.java:275)
      	at jenkins.scm.api.SCMSource.fetch(SCMSource.java:147)
      	at jenkins.scm.api.SCMSource.retrieve(SCMSource.java:231)
      	at jenkins.scm.api.SCMSource.fetch(SCMSource.java:176)
      	at jenkins.plugins.git.AbstractGitSCMSourceTest.retrieveHeads(AbstractGitSCMSourceTest.java:74)
      	at ...
      Caused by: hudson.plugins.git.GitException: Error performing command: git init $JENKINS_HOME/caches/git-4ab...
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1726)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1695)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1691)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:1321)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$5.execute(CliGitAPIImpl.java:654)
      	... 34 more
      Caused by: java.io.IOException: Cannot run program "git" (in directory "$JENKINS_HOME/caches/git-4ab..."): error=2, No such file or directory
      	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
      	at hudson.Proc$LocalProc.<init>(Proc.java:244)
      	at hudson.Proc$LocalProc.<init>(Proc.java:216)
      	at hudson.Launcher$LocalLauncher.launch(Launcher.java:803)
      	at hudson.Launcher$ProcStarter.start(Launcher.java:381)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1715)
      	... 38 more
      Caused by: java.io.IOException: error=2, No such file or directory
      	at java.lang.UNIXProcess.forkAndExec(Native Method)
      	at java.lang.UNIXProcess.<init>(UNIXProcess.java:248)
      	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
      	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
      	... 43 more
      

      Perhaps some, but not all, versions of git-client barf if you try to run git init in a nonexistent directory?

        Attachments

          Issue Links

            Activity

            Hide
            markewaite Mark Waite added a comment - - edited

            Thanks for the pull request to resolve this.

            The JGit implementation in git-client will create the directory if it does not already exist. That's why this condition was not detected previously by those using the multi-branch pipeline plugins. They previously only used the JGit implementation. The command line implementation in git client does not create the directory if it does not already exist.

            PR424 detected that same condition and has a change in the git client command line implementation to create the directory if it does not already exist.

            Show
            markewaite Mark Waite added a comment - - edited Thanks for the pull request to resolve this. The JGit implementation in git-client will create the directory if it does not already exist. That's why this condition was not detected previously by those using the multi-branch pipeline plugins. They previously only used the JGit implementation. The command line implementation in git client does not create the directory if it does not already exist. PR424 detected that same condition and has a change in the git client command line implementation to create the directory if it does not already exist.
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Jesse Glick
            Path:
            src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java
            src/test/java/jenkins/plugins/git/AbstractGitSCMSourceTest.java
            http://jenkins-ci.org/commit/git-plugin/af7d9bba81c97f3f405a848069884522188fe118
            Log:
            [FIXED JENKINS-37482] Make the cache directory, not just its parent.

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java src/test/java/jenkins/plugins/git/AbstractGitSCMSourceTest.java http://jenkins-ci.org/commit/git-plugin/af7d9bba81c97f3f405a848069884522188fe118 Log: [FIXED JENKINS-37482] Make the cache directory, not just its parent.
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Mark Waite
            Path:
            src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java
            src/test/java/jenkins/plugins/git/AbstractGitSCMSourceTest.java
            http://jenkins-ci.org/commit/git-plugin/fc65311b728d1c514beae8bc97e539eb214d3776
            Log:
            Merge pull request #432 from jglick/mkdirs-JENKINS-37482

            JENKINS-37482 Make the cache directory, not just its parent

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Mark Waite Path: src/main/java/jenkins/plugins/git/AbstractGitSCMSource.java src/test/java/jenkins/plugins/git/AbstractGitSCMSourceTest.java http://jenkins-ci.org/commit/git-plugin/fc65311b728d1c514beae8bc97e539eb214d3776 Log: Merge pull request #432 from jglick/mkdirs- JENKINS-37482 JENKINS-37482 Make the cache directory, not just its parent
            Hide
            markewaite Mark Waite added a comment -

            Included in git plugin 2.6.0, released 2 Sep 2016.

            Show
            markewaite Mark Waite added a comment - Included in git plugin 2.6.0 , released 2 Sep 2016.

              People

              • Assignee:
                jglick Jesse Glick
                Reporter:
                jglick Jesse Glick
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: