From: Christian Halstrick <christian.halstrick@xxxxxxx> Signed-off-by: Christian Halstrick <christian.halstrick@xxxxxxx> Signed-off-by: Matthias Sohn <matthias.sohn@xxxxxxx> --- .../tst/org/spearce/jgit/lib/ReflogConfigTest.java | 111 ++++++++++++++++++++ 1 files changed, 111 insertions(+), 0 deletions(-) create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReflogConfigTest.java diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReflogConfigTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReflogConfigTest.java new file mode 100644 index 0000000..0e696a0 --- /dev/null +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/ReflogConfigTest.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2009, Christian Halstrick, Matthias Sohn, SAP AG + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Git Development Community nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.spearce.jgit.lib; + +import java.io.IOException; + +public class ReflogConfigTest extends RepositoryTestCase { + public void testlogAllRefUpdates() throws Exception { + long commitTime = 1154236443000L; + int tz = -4 * 60; + assertFalse(db.getConfig().getCore().isLogAllRefUpdates()); + assertTrue("Reflog for HEAD should be empty", db.getReflogReader( + Constants.HEAD).getReverseEntries().size() == 0); + + // do one commit and check that reflog size is 0: no reflogs should be + // written + final Tree t = new Tree(db); + addFileToTree(t, "i-am-a-file", "and this is the data in me\n"); + commit(t, "A Commit\n", new PersonIdent(jauthor, commitTime, tz), + new PersonIdent(jcommitter, commitTime, tz)); + commitTime += 100; + assertTrue( + "Reflog for HEAD should contain one entry", + db.getReflogReader(Constants.HEAD).getReverseEntries().size() == 0); + + // set the logAllRefUpdates parameter to true and check it + db.getConfig().setBoolean("core", null, "logAllRefUpdates", true); + assertTrue(db.getConfig().getCore().isLogAllRefUpdates()); + + // do one commit and check that reflog size is 1 + addFileToTree(t, "i-am-another-file", "and this is other data in me\n"); + commit(t, "A Commit\n", new PersonIdent(jauthor, commitTime, tz), + new PersonIdent(jcommitter, commitTime, tz)); + commitTime += 100; + assertTrue( + "Reflog for HEAD should contain one entry", + db.getReflogReader(Constants.HEAD).getReverseEntries().size() == 1); + + // set the logAllRefUpdates parameter to false and check it + db.getConfig().setBoolean("core", null, "logAllRefUpdates", false); + assertFalse(db.getConfig().getCore().isLogAllRefUpdates()); + + // do one commit and check that reflog size is 2 + addFileToTree(t, "i-am-anotheranother-file", + "and this is other other data in me\n"); + commit(t, "A Commit\n", new PersonIdent(jauthor, commitTime, tz), + new PersonIdent(jcommitter, commitTime, tz)); + assertTrue( + "Reflog for HEAD should contain one entry", + db.getReflogReader(Constants.HEAD).getReverseEntries().size() == 2); + } + + private void addFileToTree(final Tree t, String filename, String content) + throws IOException { + FileTreeEntry f = t.addFile(filename); + writeTrashFile(f.getName(), content); + t.accept(new WriteTree(trash, db), TreeEntry.MODIFIED_ONLY); + } + + private void commit(final Tree t, String commitMsg, PersonIdent author, + PersonIdent committer) throws IOException { + final Commit commit = new Commit(db); + commit.setAuthor(author); + commit.setCommitter(committer); + commit.setMessage(commitMsg); + commit.setTree(t); + ObjectWriter writer = new ObjectWriter(db); + commit.setCommitId(writer.writeCommit(commit)); + + int nl = commitMsg.indexOf('\n'); + final RefUpdate ru = db.updateRef(Constants.HEAD); + ru.setNewObjectId(commit.getCommitId()); + ru.setRefLogMessage("commit : " + + ((nl == -1) ? commitMsg : commitMsg.substring(0, nl)), false); + ru.forceUpdate(); + } +} \ No newline at end of file -- 1.6.4.msysgit.0 ��.n��������+%������w��{.n��������n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�m