From 7a42b7fb95ecd2c132b2588e5ede0f1251772b30 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Thu, 18 Apr 2013 23:19:15 +0200 Subject: [PATCH] Untracked files should not be included in stash The previous code stashed untracked files and left them in the work tree. Bug: 403282 Change-Id: I71727addb2b55fb8e409cae2b6af8138b1ff7ef1 --- .../eclipse/jgit/api/StashCreateCommandTest.java | 1 + .../org/eclipse/jgit/api/StashCreateCommand.java | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashCreateCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashCreateCommandTest.java index 544d591fe..322d47a09 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashCreateCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/StashCreateCommandTest.java @@ -88,6 +88,7 @@ public class StashCreateCommandTest extends RepositoryTestCase { git.add().addFilepattern("file.txt").call(); head = git.commit().setMessage("add file").call(); assertNotNull(head); + writeTrashFile("untracked.txt", "content"); } /** diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/StashCreateCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/StashCreateCommand.java index ba56c1a71..fc21b919b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/StashCreateCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/StashCreateCommand.java @@ -241,6 +241,7 @@ public class StashCreateCommand extends GitCommand { MutableObjectId id = new MutableObjectId(); List wtEdits = new ArrayList(); List wtDeletes = new ArrayList(); + boolean hasChanges = false; do { AbstractTreeIterator headIter = treeWalk.getTree(0, AbstractTreeIterator.class); @@ -254,9 +255,12 @@ public class StashCreateCommand extends GitCommand { new UnmergedPathException( indexIter.getDirCacheEntry())); if (wtIter != null) { - if (indexIter != null && wtIter.idEqual(indexIter) - || headIter != null - && wtIter.idEqual(headIter)) + if (indexIter == null && headIter == null) + continue; + hasChanges = true; + if (indexIter != null && wtIter.idEqual(indexIter)) + continue; + if (headIter != null && wtIter.idEqual(headIter)) continue; treeWalk.getObjectId(id, 0); final DirCacheEntry entry = new DirCacheEntry( @@ -278,10 +282,14 @@ public class StashCreateCommand extends GitCommand { } }); } + hasChanges = true; if (wtIter == null && headIter != null) wtDeletes.add(treeWalk.getPathString()); } while (treeWalk.next()); + if (!hasChanges) + return null; + String branch = Repository.shortenRefName(head.getTarget() .getName());