diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java index b5348f998..bb5f9efb8 100644 --- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java +++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java @@ -51,7 +51,6 @@ import java.io.File; import java.io.IOException; import java.util.*; -import java.util.concurrent.TimeUnit; import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.dircache.DirCacheEntry; @@ -92,11 +91,12 @@ public abstract class LocalDiskRepositoryTestCase { /** A fake (but stable) identity for committer fields in the test. */ protected PersonIdent committer; + /** A {@link SystemReader} used to coordinate time, envars, etc. */ + protected MockSystemReader mockSystemReader; + private final List toClose = new ArrayList(); private File tmp; - private MockSystemReader mockSystemReader; - @Before public void setUp() throws Exception { tmp = File.createTempFile("jgit_test_", "_tmp"); @@ -171,9 +171,8 @@ public void tearDown() throws Exception { /** Increment the {@link #author} and {@link #committer} times. */ protected void tick() { - final long delta = TimeUnit.MILLISECONDS.convert(5 * 60, - TimeUnit.SECONDS); - final long now = author.getWhen().getTime() + delta; + mockSystemReader.tick(5 * 60); + final long now = mockSystemReader.getCurrentTime(); final int tz = mockSystemReader.getTimezone(now); author = new PersonIdent(author, now, tz); @@ -278,11 +277,10 @@ public static String indexState(Repository repo, int includedOptions) throws IllegalStateException, IOException { DirCache dc = repo.readDirCache(); StringBuilder sb = new StringBuilder(); - TreeSet timeStamps = null; + TreeSet timeStamps = new TreeSet(); // iterate once over the dircache just to collect all time stamps if (0 != (includedOptions & MOD_TIME)) { - timeStamps = new TreeSet(); for (int i=0; i values = new HashMap(); FileBasedConfig userGitConfig; @@ -138,7 +143,17 @@ public String getHostname() { @Override public long getCurrentTime() { - return 1250379778668L; // Sat Aug 15 20:12:58 GMT-03:30 2009 + return now; + } + + /** + * Adjusts the current time in seconds. + * + * @param secDelta + * number of seconds to add to the current time. + */ + public void tick(final int secDelta) { + now += secDelta * 1000L; } @Override diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java index 925a6b021..98e29d708 100644 --- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java +++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java @@ -138,7 +138,7 @@ public class TestRepository { private final ObjectInserter inserter; - private long now; + private final MockSystemReader mockSystemReader; /** * Wrap a repository with test building tools. @@ -148,7 +148,7 @@ public class TestRepository { * @throws IOException */ public TestRepository(R db) throws IOException { - this(db, new RevWalk(db)); + this(db, new RevWalk(db), new MockSystemReader()); } /** @@ -161,11 +161,28 @@ public TestRepository(R db) throws IOException { * @throws IOException */ public TestRepository(R db, RevWalk rw) throws IOException { + this(db, rw, new MockSystemReader()); + } + + /** + * Wrap a repository with test building tools. + * + * @param db + * the test repository to write into. + * @param rw + * the RevObject pool to use for object lookup. + * @param reader + * the MockSystemReader to use for clock and other system + * operations. + * @throws IOException + */ + public TestRepository(R db, RevWalk rw, MockSystemReader reader) + throws IOException { this.db = db; this.git = Git.wrap(db); this.pool = rw; this.inserter = db.newObjectInserter(); - this.now = 1236977987000L; + this.mockSystemReader = reader; } /** @return the repository this helper class operates against. */ @@ -186,14 +203,14 @@ public Git git() { return git; } - /** @return current time adjusted by {@link #tick(int)}. */ - public Date getClock() { - return new Date(now); + /** @return current date. */ + public Date getDate() { + return new Date(mockSystemReader.getCurrentTime()); } /** @return timezone used for default identities. */ public TimeZone getTimeZone() { - return defaultCommitter.getTimeZone(); + return mockSystemReader.getTimeZone(); } /** @@ -203,18 +220,18 @@ public TimeZone getTimeZone() { * number of seconds to add to the current time. */ public void tick(final int secDelta) { - now += secDelta * 1000L; + mockSystemReader.tick(secDelta); } /** - * Set the author and committer using {@link #getClock()}. + * Set the author and committer using {@link #getDate()}. * * @param c * the commit builder to store. */ public void setAuthorAndCommitter(org.eclipse.jgit.lib.CommitBuilder c) { - c.setAuthor(new PersonIdent(defaultAuthor, new Date(now))); - c.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); + c.setAuthor(new PersonIdent(defaultAuthor, getDate())); + c.setCommitter(new PersonIdent(defaultCommitter, getDate())); } /** @@ -392,8 +409,8 @@ public RevCommit commit(final int secDelta, final RevTree tree, c = new org.eclipse.jgit.lib.CommitBuilder(); c.setTreeId(tree); c.setParentIds(parents); - c.setAuthor(new PersonIdent(defaultAuthor, new Date(now))); - c.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); + c.setAuthor(new PersonIdent(defaultAuthor, getDate())); + c.setCommitter(new PersonIdent(defaultCommitter, getDate())); c.setMessage(""); ObjectId id; try (ObjectInserter ins = inserter) { @@ -428,7 +445,7 @@ public RevTag tag(final String name, final RevObject dst) throws Exception { final TagBuilder t = new TagBuilder(); t.setObjectId(dst); t.setTag(name); - t.setTagger(new PersonIdent(defaultCommitter, new Date(now))); + t.setTagger(new PersonIdent(defaultCommitter, getDate())); t.setMessage(""); ObjectId id; try (ObjectInserter ins = inserter) { @@ -663,7 +680,7 @@ public RevCommit cherryPick(AnyObjectId id) throws Exception { b.setParentId(head); b.setTreeId(merger.getResultTreeId()); b.setAuthor(commit.getAuthorIdent()); - b.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); + b.setCommitter(new PersonIdent(defaultCommitter, getDate())); b.setMessage(commit.getFullMessage()); ObjectId result; try (ObjectInserter ins = inserter) { @@ -1100,7 +1117,7 @@ public RevCommit create() throws Exception { c.setAuthor(author); if (committer != null) { if (updateCommitterTime) - committer = new PersonIdent(committer, new Date(now)); + committer = new PersonIdent(committer, getDate()); c.setCommitter(committer); } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java index fbb9eecdf..b69b8e01e 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java @@ -307,9 +307,9 @@ public void cherryPick() throws Exception { RevCommit toPick = tr.commit() .parent(tr.commit().create()) // Can't cherry-pick root. .author(new PersonIdent("Cherrypick Author", "cpa@example.com", - tr.getClock(), tr.getTimeZone())) + tr.getDate(), tr.getTimeZone())) .author(new PersonIdent("Cherrypick Committer", "cpc@example.com", - tr.getClock(), tr.getTimeZone())) + tr.getDate(), tr.getTimeZone())) .message("message to cherry-pick") .add("bar", "bar contents\n") .create(); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java index 643ba26d9..8ab972837 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java @@ -250,14 +250,14 @@ public void testCommitTimeRevFilter() throws Exception { final RevCommit b = commit(a); tick(100); - Date since = getClock(); + Date since = getDate(); final RevCommit c1 = commit(b); tick(100); final RevCommit c2 = commit(b); tick(100); - Date until = getClock(); + Date until = getDate(); final RevCommit d = commit(c1, c2); tick(100); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java index 881deb1f5..30586ee1e 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java @@ -70,8 +70,8 @@ protected RevWalk createRevWalk() { return new RevWalk(db); } - protected Date getClock() { - return util.getClock(); + protected Date getDate() { + return util.getDate(); } protected void tick(final int secDelta) {