|
|
@@ -0,0 +1,57 @@ |
|
|
|
/* |
|
|
|
* Copyright (C) 2021 SAP SE and others |
|
|
|
* |
|
|
|
* This program and the accompanying materials are made available under the |
|
|
|
* terms of the Eclipse Distribution License v. 1.0 which is available at |
|
|
|
* https://www.eclipse.org/org/documents/edl-v10.php. |
|
|
|
* |
|
|
|
* SPDX-License-Identifier: BSD-3-Clause |
|
|
|
*/ |
|
|
|
package org.eclipse.jgit.internal.storage.file; |
|
|
|
|
|
|
|
import static org.junit.Assert.assertNotEquals; |
|
|
|
import static org.junit.Assert.assertNotNull; |
|
|
|
import static org.junit.Assert.assertTrue; |
|
|
|
|
|
|
|
import org.eclipse.jgit.api.Git; |
|
|
|
import org.eclipse.jgit.junit.RepositoryTestCase; |
|
|
|
import org.eclipse.jgit.revwalk.RevCommit; |
|
|
|
import org.eclipse.jgit.util.FS; |
|
|
|
import org.eclipse.jgit.util.FS.ExecutionResult; |
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
/** |
|
|
|
* Unit tests of {@link LockFile} testing interoperability with C git |
|
|
|
*/ |
|
|
|
public class CGitLockFileTest extends RepositoryTestCase { |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testLockedTwiceFails() throws Exception { |
|
|
|
try (Git git = new Git(db)) { |
|
|
|
writeTrashFile("file.txt", "content"); |
|
|
|
git.add().addFilepattern("file.txt").call(); |
|
|
|
RevCommit commit1 = git.commit().setMessage("create file").call(); |
|
|
|
|
|
|
|
assertNotNull(commit1); |
|
|
|
writeTrashFile("file.txt", "content2"); |
|
|
|
git.add().addFilepattern("file.txt").call(); |
|
|
|
assertNotNull(git.commit().setMessage("edit file").call()); |
|
|
|
|
|
|
|
LockFile lf = new LockFile(db.getIndexFile()); |
|
|
|
assertTrue(lf.lock()); |
|
|
|
try { |
|
|
|
String[] command = new String[] { "git", "checkout", |
|
|
|
commit1.name() }; |
|
|
|
ProcessBuilder pb = new ProcessBuilder(command); |
|
|
|
pb.directory(db.getWorkTree()); |
|
|
|
ExecutionResult result = FS.DETECTED.execute(pb, null); |
|
|
|
assertNotEquals(0, result.getRc()); |
|
|
|
String err = result.getStderr().toString().split("\\R")[0]; |
|
|
|
assertTrue(err.matches( |
|
|
|
"fatal: Unable to create .*/\\.git/index\\.lock': File exists\\.")); |
|
|
|
} finally { |
|
|
|
lf.unlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |