Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[egit-dev] merge exception for a modified & deleted file

I have a fairly simple merge test (see below, add it to
MergeCommandTest) which deletes file 'a' on the side branch
and modifies the same file on master and then merges side to
master.

With cgit I get a merge result of conflicting with the
content of 'a' unmodified.  With jgit I get 'a' staged for
deletion but 'a' also in the working tree as an untracked
file and the exception below.

Is this expected, unimplemented, or am I missing something?

cheers,
bern

	@Test
	public void testDeletionConflict() throws Exception {
		Git git = new Git(db);

		writeTrashFile("a", "1\na\n3\n");
		writeTrashFile("b", "1\nb\n3\n");
		git.add().addFilepattern("a").addFilepattern("b").call();
		RevCommit initialCommit =
git.commit().setMessage("initial").call();

		// create side branch and delete "a"
		createBranch(initialCommit, "refs/heads/side");
		checkoutBranch("refs/heads/side");
		git.rm().addFilepattern("a").call();
		RevCommit secondCommit =
git.commit().setMessage("side").call();

		// update a on master to generate conflict
		checkoutBranch("refs/heads/master");
		writeTrashFile("a", "1\na(main)\n3\n");
		git.add().addFilepattern("a").call();
		git.commit().setMessage("main").call();

		// merge side with master
		MergeResult result =
git.merge().include(secondCommit.getId())
				.setStrategy(MergeStrategy.RESOLVE).call();
		assertEquals(MergeStatus.CONFLICTING,
result.getMergeStatus());

		assertTrue(new File(db.getWorkTree(), "a").exists());
		assertEquals("1\na(main)\n3\n", read(new
File(db.getWorkTree(), "a")));
		assertEquals("1\nb\n3\n", read(new File(db.getWorkTree(),
"b")));
	}

org.eclipse.jgit.api.errors.JGitInternalException: Exception
caught during execution of merge command.
org.eclipse.jgit.errors.CheckoutConflictException: Checkout
conflict with files: 
a
	at
org.eclipse.jgit.api.MergeCommand.call(MergeCommand.java:251)
	at
org.eclipse.jgit.api.MergeCommandTest.testDeletionConflict(MergeCommandTest.java:613)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	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.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
	at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	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:49)
	at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by:
org.eclipse.jgit.errors.CheckoutConflictException: Checkout
conflict with files: 
a
	at
org.eclipse.jgit.dircache.DirCacheCheckout.checkout(DirCacheCheckout.java:387)
	at
org.eclipse.jgit.api.MergeCommand.call(MergeCommand.java:220)
	... 25 more




Back to the top