From 215bbba3f8f5bb620a7c54ec22e5ef541c135702 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca Date: Fri, 11 Sep 2009 19:17:44 -0400 Subject: [PATCH] Issue 20: Make IndexBuilder update the index incrementally This way checking for non-existing files is done automatically. Signed-off-by: Jonas Fonseca --- src/org/nbgit/client/IndexBuilder.java | 40 +++++++++------------- .../src/org/nbgit/client/IndexBuilderTest.java | 17 +++++---- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/org/nbgit/client/IndexBuilder.java b/src/org/nbgit/client/IndexBuilder.java index b07db7f..9bc864c 100644 --- a/src/org/nbgit/client/IndexBuilder.java +++ b/src/org/nbgit/client/IndexBuilder.java @@ -36,12 +36,11 @@ package org.nbgit.client; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.Collection; -import java.util.HashSet; import org.nbgit.OutputLogger; import org.spearce.jgit.lib.GitIndex; +import org.spearce.jgit.lib.ObjectId; import org.spearce.jgit.lib.Repository; /** @@ -52,47 +51,47 @@ public class IndexBuilder extends ClientBuilder { private static String ADDING = "A %s"; // NOI18N private static String DELETING = "D %s"; // NOI18N private static String MOVING = "R %s -> %s"; // NOI18N - private final HashSet delete = new HashSet(); - private final HashSet add = new HashSet(); + private final GitIndex index; - private IndexBuilder(Repository repository) { + private IndexBuilder(Repository repository, GitIndex index) { super(repository); + this.index = index; } public static IndexBuilder create(Repository repository) throws IOException { - return new IndexBuilder(repository); + return new IndexBuilder(repository, repository.getIndex()); } public static IndexBuilder create(File workDir) throws IOException { return create(toRepository(workDir)); } - public IndexBuilder add(File file) throws FileNotFoundException { - if (!file.exists()) - throw new FileNotFoundException(file.getPath()); + public IndexBuilder add(File file) throws IOException { log(ADDING, file); - add.add(file); + GitIndex.Entry entry = index.add(repository.getWorkDir(), file); + entry.setAssumeValid(false); return this; } - public IndexBuilder addAll(Collection files) throws FileNotFoundException { + public IndexBuilder addAll(Collection files) throws IOException { for (File file : files) add(file); return this; } - public IndexBuilder move(File src, File dst) throws FileNotFoundException { - if (!dst.exists()) - throw new FileNotFoundException(dst.getPath()); + public IndexBuilder move(File src, File dst) throws IOException { log(MOVING, src, dst); - add.add(dst); - delete.add(src); + index.remove(repository.getWorkDir(), src); + index.add(repository.getWorkDir(), dst); return this; } public IndexBuilder delete(File file) { log(DELETING, file); - delete.add(file); + try { + index.remove(repository.getWorkDir(), file); + } catch (IOException willNeverHappen) { + } return this; } @@ -103,13 +102,6 @@ public class IndexBuilder extends ClientBuilder { } public void write() throws IOException { - GitIndex index = repository.getIndex(); - for (File file : add) { - GitIndex.Entry entry = index.add(repository.getWorkDir(), file); - entry.setAssumeValid(false); - } - for (File file : delete) - index.remove(repository.getWorkDir(), file); index.write(); } diff --git a/test/unit/src/org/nbgit/client/IndexBuilderTest.java b/test/unit/src/org/nbgit/client/IndexBuilderTest.java index ab6b7e7..f1a3b24 100644 --- a/test/unit/src/org/nbgit/client/IndexBuilderTest.java +++ b/test/unit/src/org/nbgit/client/IndexBuilderTest.java @@ -36,6 +36,7 @@ package org.nbgit.client; import java.io.FileNotFoundException; +import java.io.IOException; import org.nbgit.junit.RepositoryTestCase; public class IndexBuilderTest extends RepositoryTestCase { @@ -158,8 +159,8 @@ public class IndexBuilderTest extends RepositoryTestCase { IndexBuilder.create(repository). add(toWorkDirFile("fail")); fail("No exception thrown"); - } catch (FileNotFoundException error) { - assertEquals(toWorkDirFile("fail").getPath(), error.getMessage()); + } catch (IOException error) { + assertErrorPath(error, "fail"); } } @@ -168,8 +169,8 @@ public class IndexBuilderTest extends RepositoryTestCase { IndexBuilder.create(repository). addAll(toFiles(workDir, "fail/1", "fail/2")); fail("No exception thrown"); - } catch (FileNotFoundException error) { - assertEquals(toWorkDirFile("fail/1").getPath(), error.getMessage()); + } catch (IOException error) { + assertErrorPath(error, "fail/1"); } } @@ -178,9 +179,13 @@ public class IndexBuilderTest extends RepositoryTestCase { IndexBuilder.create(repository). move(toWorkDirFile("a"), toWorkDirFile("fail")); fail("No exception thrown"); - } catch (FileNotFoundException error) { - assertEquals(toWorkDirFile("fail").getPath(), error.getMessage()); + } catch (IOException error) { + assertErrorPath(error, "fail"); } } + private void assertErrorPath(IOException error, String path) { + assertTrue(error.getMessage().startsWith(toWorkDirFile(path).getPath())); + } + } -- 2.11.4.GIT