diff options
author | Thomas Wolf <twolf@apache.org> | 2025-02-08 14:09:39 +0100 |
---|---|---|
committer | Thomas Wolf <twolf@apache.org> | 2025-02-09 13:44:01 +0100 |
commit | 4c4bef885c59662c22cbaa940ac7bec0dfee2d21 (patch) | |
tree | 868829bae35461df9e7fa3254b7c4354fbc37a8a /org.eclipse.jgit/src/org | |
parent | f41253804068768c1d44a01808805e15a7b63eb6 (diff) | |
download | jgit-4c4bef885c59662c22cbaa940ac7bec0dfee2d21.tar.gz jgit-4c4bef885c59662c22cbaa940ac7bec0dfee2d21.zip |
DirCacheCheckout.preScanOneTree: consider mode bits
If only the file mode is changed, it's still a change and we must check
out the entry from the commit.
Bug: jgit-138
Change-Id: I83adebe563fcdb4cbe330edb44884d55ed463c2c
Diffstat (limited to 'org.eclipse.jgit/src/org')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java index d61a453973..18d77482e0 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java @@ -410,9 +410,11 @@ public class DirCacheCheckout { // content to be checked out. update(m); } - } else + } else { update(m); - } else if (f == null || !m.idEqual(i)) { + } + } else if (f == null || !m.idEqual(i) + || m.getEntryRawMode() != i.getEntryRawMode()) { // The working tree file is missing or the merge content differs // from index content update(m); @@ -420,11 +422,11 @@ public class DirCacheCheckout { // The index contains a file (and not a folder) if (f.isModified(i.getDirCacheEntry(), true, this.walk.getObjectReader()) - || i.getDirCacheEntry().getStage() != 0) + || i.getDirCacheEntry().getStage() != 0) { // The working tree file is dirty or the index contains a // conflict update(m); - else { + } else { // update the timestamp of the index with the one from the // file if not set, as we are sure to be in sync here. DirCacheEntry entry = i.getDirCacheEntry(); @@ -434,9 +436,10 @@ public class DirCacheCheckout { } keep(i.getEntryPathString(), entry, f); } - } else + } else { // The index contains a folder keep(i.getEntryPathString(), i.getDirCacheEntry(), f); + } } else { // There is no entry in the merge commit. Means: we want to delete // what's currently in the index and working tree |