[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jgit-dev] JGit checkout of multiple tags fails with "Could not rename file"

Hi all,

since a few days I'm banging my head against a (JGit) wall ;) Maybe
somebody here understands my issue.

I'm trying to checkout a few tags one after another (to archive some
source code), but switching from one tag to another gives a strange
"Could not rename file" JGitInternalException.

Basically what I want to do (in cmd line commands):
1. git clone <url>
2. git checkout -b <tag-1> <tag-1>
3. git checkout -b <tag-2> <tag-2>

On cmd line this works, in JGit I'm using the following commands:

Git.cloneRepository()
           .setURI(url)
           .setCredentialsProvider(getCredentialsProvider())
           .setDirectory(tmpDir)
           .call();

git.checkout()
    .setName("tag-1")
    .setCreateBranch(true)
    .setForce(true)
    .call();

git.checkout()
    .setName("tag-2")
    .setCreateBranch(true)
    .setForce(true)
    .call();

The error I'm getting (full stack at the end of the mail):
org.eclipse.jgit.api.errors.JGitInternalException: Could not rename file
D:\dev\tmp\unit-test\git\base\common\locator\._pom.xml6206658336832583616.tmp
to D:\dev\tmp\unit-test\git\base\common\locator\pom.xml

Strange thing: It doesn't fail always, but around 90-95% of the time.
Also I'm on Windows as the path above suggests ;) TortoiseGit is
installed but I have disabled the TGitCache process. Also no explorer
was open on the used directory.

I also did git status commands in between checkouts -> no changed files.

I did also insert a git.clean().setCleanDirectories(true).call() and
git.reset().setRef("HEAD").setMode(ResetType.HARD).call() between
checkouts, no differences.

I tried JGit 2.3.1, 3.2, 3.4.1 and 3.5.0-rc1, also no differences.

When I check the state after such a failed checkout of tag-2 I'm seeing:

"git status":
HEAD detached at ef1edf8
nothing to commit, working directory clean

"git branch" gives:
* (detached from ef1edf8)
  tag-1
  tag-2
  master

Has anybody any idea? I've no idea where to search next.

Greetings
-Sascha-

Full stacktrace:

org.eclipse.jgit.api.errors.JGitInternalException: Could not rename file
D:\dev\tmp\unit-test\git\base\common\locator\._pom.xml6206658336832583616.tmp
to D:\dev\tmp\unit-test\git\base\common\locator\pom.xml
	at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:315)
	at
com.seeburger.buildtools.sourcedeposit.scm.GitHandler.checkout(GitHandler.java:130)
	at
com.seeburger.buildtools.sourcedeposit.scm.GitHandler.checkout(GitHandler.java:107)
	at
com.seeburger.buildtools.sourcedeposit.scm.GitHandlerTest.testCheckoutWithSwitch(GitHandlerTest.java:54)
	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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
	at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
	at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.io.IOException: Could not rename file
D:\dev\tmp\unit-test\git\base\common\locator\._pom.xml6206658336832583616.tmp
to D:\dev\tmp\unit-test\git\base\common\locator\pom.xml
	at
org.eclipse.jgit.dircache.DirCacheCheckout.checkoutEntry(DirCacheCheckout.java:1232)
	at
org.eclipse.jgit.dircache.DirCacheCheckout.doCheckout(DirCacheCheckout.java:459)
	at
org.eclipse.jgit.dircache.DirCacheCheckout.checkout(DirCacheCheckout.java:394)
	at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:258)
	... 27 more