]> source.dussan.org Git - jgit.git/commitdiff
Add a cgit interoperability test for LockFile 52/180352/5
authorMatthias Sohn <matthias.sohn@sap.com>
Fri, 7 May 2021 08:51:59 +0000 (10:51 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Sun, 9 May 2021 20:49:19 +0000 (22:49 +0200)
Change-Id: I30cacd1f50f8f4ff4dd91ad291bf279980e3c4b5
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit.test/exttst/org/eclipse/jgit/internal/storage/file/CGitLockFileTest.java [new file with mode: 0644]

diff --git a/org.eclipse.jgit.test/exttst/org/eclipse/jgit/internal/storage/file/CGitLockFileTest.java b/org.eclipse.jgit.test/exttst/org/eclipse/jgit/internal/storage/file/CGitLockFileTest.java
new file mode 100644 (file)
index 0000000..4c19475
--- /dev/null
@@ -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();
+                       }
+               }
+       }
+}