diff options
author | Christian Halstrick <christian.halstrick@sap.com> | 2016-07-15 04:43:50 -0400 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org <gerrit@eclipse.org> | 2016-07-15 04:43:53 -0400 |
commit | eaedbc3980af92b0d139b4f6d5511109763596ed (patch) | |
tree | db37fd312ff25eb8a3fadba8bb908702d1f5ab7b /org.eclipse.jgit | |
parent | ceaadf8f9835e01ca8b361885ea357d7b00536b6 (diff) | |
parent | 734d5bb3c9566e7349a638b7a2ccc342d0842c61 (diff) | |
download | jgit-eaedbc3980af92b0d139b4f6d5511109763596ed.tar.gz jgit-eaedbc3980af92b0d139b4f6d5511109763596ed.zip |
Merge "RefDirectory: remove ref lock file for following ref dir removal" into stable-4.4
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java index 4bb2982b48..e5ca736824 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java @@ -688,7 +688,7 @@ public class RefDirectory extends RefDatabase { newLoose = curLoose.remove(idx); } while (!looseRefs.compareAndSet(curLoose, newLoose)); int levels = levelsIn(refName) - 2; - delete(fileFor(refName), levels); + delete(refFile, levels, rLck); } } finally { rLck.unlock(); @@ -1062,13 +1062,24 @@ public class RefDirectory extends RefDatabase { } static void delete(final File file, final int depth) throws IOException { - if (!file.delete() && file.isFile()) - throw new IOException(MessageFormat.format(JGitText.get().fileCannotBeDeleted, file)); + delete(file, depth, null); + } + private static void delete(final File file, final int depth, LockFile rLck) + throws IOException { + if (!file.delete() && file.isFile()) { + throw new IOException(MessageFormat.format( + JGitText.get().fileCannotBeDeleted, file)); + } + + if (rLck != null) { + rLck.unlock(); // otherwise cannot delete dir below + } File dir = file.getParentFile(); for (int i = 0; i < depth; ++i) { - if (!dir.delete()) + if (!dir.delete()) { break; // ignore problem here + } dir = dir.getParentFile(); } } |