diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CleanCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CleanCommandTest.java index 760acbb57..a660a5292 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CleanCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CleanCommandTest.java @@ -113,4 +113,23 @@ public void testCleanWithPaths() throws NoWorkTreeException, IOException { assertTrue(!cleanedFiles.contains("File2.txt")); } + @Test + public void testCleanWithDryRun() throws NoWorkTreeException, IOException { + // create status + StatusCommand command = git.status(); + Status status = command.call(); + Set files = status.getUntracked(); + assertTrue(files.size() > 0); + + // run clean + Set cleanedFiles = git.clean().setDryRun(true).call(); + + status = git.status().call(); + files = status.getUntracked(); + + assertTrue(files.size() == 2); + assertTrue(cleanedFiles.contains("File2.txt")); + assertTrue(cleanedFiles.contains("File3.txt")); + } + } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CleanCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CleanCommand.java index d0d40c467..e31f119cb 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CleanCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CleanCommand.java @@ -64,6 +64,8 @@ public class CleanCommand extends GitCommand> { private Set paths = Collections.emptySet(); + private boolean dryRun; + /** * @param repo */ @@ -86,7 +88,8 @@ public Set call() { Status status = command.call(); for (String file : status.getUntracked()) { if (paths.isEmpty() || paths.contains(file)) { - FileUtils.delete(new File(repo.getWorkTree(), file)); + if (!dryRun) + FileUtils.delete(new File(repo.getWorkTree(), file)); files.add(file); } } @@ -108,4 +111,15 @@ public CleanCommand setPaths(Set paths) { return this; } + /** + * If dryRun is set, the paths in question will not actually be deleted. + * + * @param dryRun + * whether to do a dry run or not + * @return {@code this} + */ + public CleanCommand setDryRun(boolean dryRun) { + this.dryRun = dryRun; + return this; + } }