Refactor out ReflogEntry
It's useful to have ReflogEntry refactored out so it can be used by clients via the JGit API. Change-Id: I03044df9af9f9547777545b7c9b93bdf5f8b7cb5 Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
This commit is contained in:
parent
b19924f150
commit
65606dc086
|
@ -89,6 +89,7 @@
|
|||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.revwalk.RevBlob;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.storage.file.ReflogEntry;
|
||||
import org.eclipse.jgit.storage.file.FileBasedConfig;
|
||||
import org.eclipse.jgit.storage.file.FileRepository;
|
||||
import org.eclipse.jgit.storage.file.ReflogReader;
|
||||
|
@ -558,7 +559,7 @@ public void testPush_CreateBranch() throws Exception {
|
|||
final ReflogReader log = remoteRepository.getReflogReader(dstName);
|
||||
assertNotNull("has log for " + dstName);
|
||||
|
||||
final ReflogReader.Entry last = log.getLastEntry();
|
||||
final ReflogEntry last = log.getLastEntry();
|
||||
assertNotNull("has last entry", last);
|
||||
assertEquals(ObjectId.zeroId(), last.getOldId());
|
||||
assertEquals(Q, last.getNewId());
|
||||
|
|
|
@ -121,14 +121,14 @@ public void testNoCacheObjectIdSubclass() throws IOException {
|
|||
assertNotSame(newid, r.getObjectId());
|
||||
assertSame(ObjectId.class, r.getObjectId().getClass());
|
||||
assertEquals(newid, r.getObjectId());
|
||||
List<org.eclipse.jgit.storage.file.ReflogReader.Entry> reverseEntries1 = db.getReflogReader("refs/heads/abc").getReverseEntries();
|
||||
org.eclipse.jgit.storage.file.ReflogReader.Entry entry1 = reverseEntries1.get(0);
|
||||
List<org.eclipse.jgit.storage.file.ReflogEntry> reverseEntries1 = db.getReflogReader("refs/heads/abc").getReverseEntries();
|
||||
org.eclipse.jgit.storage.file.ReflogEntry entry1 = reverseEntries1.get(0);
|
||||
assertEquals(1, reverseEntries1.size());
|
||||
assertEquals(ObjectId.zeroId(), entry1.getOldId());
|
||||
assertEquals(r.getObjectId(), entry1.getNewId());
|
||||
assertEquals(new PersonIdent(db).toString(), entry1.getWho().toString());
|
||||
assertEquals("", entry1.getComment());
|
||||
List<org.eclipse.jgit.storage.file.ReflogReader.Entry> reverseEntries2 = db.getReflogReader("HEAD").getReverseEntries();
|
||||
List<org.eclipse.jgit.storage.file.ReflogEntry> reverseEntries2 = db.getReflogReader("HEAD").getReverseEntries();
|
||||
assertEquals(0, reverseEntries2.size());
|
||||
}
|
||||
|
||||
|
@ -334,7 +334,7 @@ public void testUpdateRefDetached() throws Exception {
|
|||
// the branch HEAD referred to is left untouched
|
||||
assertEquals(pid, db.resolve("refs/heads/master"));
|
||||
ReflogReader reflogReader = new ReflogReader(db, "HEAD");
|
||||
org.eclipse.jgit.storage.file.ReflogReader.Entry e = reflogReader.getReverseEntries().get(0);
|
||||
org.eclipse.jgit.storage.file.ReflogEntry e = reflogReader.getReverseEntries().get(0);
|
||||
assertEquals(pid, e.getOldId());
|
||||
assertEquals(ppid, e.getNewId());
|
||||
assertEquals("GIT_COMMITTER_EMAIL", e.getWho().getEmailAddress());
|
||||
|
@ -364,7 +364,7 @@ public void testUpdateRefDetachedUnbornHead() throws Exception {
|
|||
// the branch HEAD referred to is left untouched
|
||||
assertNull(db.resolve("refs/heads/unborn"));
|
||||
ReflogReader reflogReader = new ReflogReader(db, "HEAD");
|
||||
org.eclipse.jgit.storage.file.ReflogReader.Entry e = reflogReader.getReverseEntries().get(0);
|
||||
org.eclipse.jgit.storage.file.ReflogEntry e = reflogReader.getReverseEntries().get(0);
|
||||
assertEquals(ObjectId.zeroId(), e.getOldId());
|
||||
assertEquals(ppid, e.getNewId());
|
||||
assertEquals("GIT_COMMITTER_EMAIL", e.getWho().getEmailAddress());
|
||||
|
@ -701,9 +701,9 @@ public void tryRenameWhenLocked(String toLock, String fromName,
|
|||
ObjectId oldHeadId = db.resolve(Constants.HEAD);
|
||||
writeReflog(db, oldfromId, oldfromId, "Just a message",
|
||||
fromName);
|
||||
List<org.eclipse.jgit.storage.file.ReflogReader.Entry> oldFromLog = db
|
||||
List<org.eclipse.jgit.storage.file.ReflogEntry> oldFromLog = db
|
||||
.getReflogReader(fromName).getReverseEntries();
|
||||
List<org.eclipse.jgit.storage.file.ReflogReader.Entry> oldHeadLog = oldHeadId != null ? db
|
||||
List<org.eclipse.jgit.storage.file.ReflogEntry> oldHeadLog = oldHeadId != null ? db
|
||||
.getReflogReader(Constants.HEAD).getReverseEntries() : null;
|
||||
|
||||
assertTrue("internal check, we have a log", new File(db.getDirectory(),
|
||||
|
|
|
@ -57,7 +57,6 @@
|
|||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.PersonIdent;
|
||||
import org.eclipse.jgit.lib.SampleDataRepositoryTestCase;
|
||||
import org.eclipse.jgit.storage.file.ReflogReader.Entry;
|
||||
import org.junit.Test;
|
||||
|
||||
public class ReflogReaderTest extends SampleDataRepositoryTestCase {
|
||||
|
@ -91,7 +90,7 @@ public void testReadOneLine() throws Exception {
|
|||
setupReflog("logs/refs/heads/master", oneLine);
|
||||
|
||||
ReflogReader reader = new ReflogReader(db, "refs/heads/master");
|
||||
Entry e = reader.getLastEntry();
|
||||
ReflogEntry e = reader.getLastEntry();
|
||||
assertEquals(ObjectId
|
||||
.fromString("da85355dfc525c9f6f3927b876f379f46ccf826e"), e
|
||||
.getOldId());
|
||||
|
@ -118,9 +117,9 @@ public void testReadTwoLine() throws Exception {
|
|||
setupReflog("logs/refs/heads/master", twoLine);
|
||||
|
||||
ReflogReader reader = new ReflogReader(db, "refs/heads/master");
|
||||
List<Entry> reverseEntries = reader.getReverseEntries();
|
||||
List<ReflogEntry> reverseEntries = reader.getReverseEntries();
|
||||
assertEquals(2, reverseEntries.size());
|
||||
Entry e = reverseEntries.get(0);
|
||||
ReflogEntry e = reverseEntries.get(0);
|
||||
assertEquals(ObjectId
|
||||
.fromString("c6734895958052a9dbc396cff4459dc1a25029ab"), e
|
||||
.getOldId());
|
||||
|
@ -153,9 +152,9 @@ public void testReadTwoLine() throws Exception {
|
|||
public void testReadWhileAppendIsInProgress() throws Exception {
|
||||
setupReflog("logs/refs/heads/master", twoLineWithAppendInProgress);
|
||||
ReflogReader reader = new ReflogReader(db, "refs/heads/master");
|
||||
List<Entry> reverseEntries = reader.getReverseEntries();
|
||||
List<ReflogEntry> reverseEntries = reader.getReverseEntries();
|
||||
assertEquals(2, reverseEntries.size());
|
||||
Entry e = reverseEntries.get(0);
|
||||
ReflogEntry e = reverseEntries.get(0);
|
||||
assertEquals(ObjectId
|
||||
.fromString("c6734895958052a9dbc396cff4459dc1a25029ab"), e
|
||||
.getOldId());
|
||||
|
@ -191,7 +190,7 @@ public void testReadRightLog() throws Exception {
|
|||
public void testReadLineWithMissingComment() throws Exception {
|
||||
setupReflog("logs/refs/heads/master", oneLineWithoutComment);
|
||||
final ReflogReader reader = db.getReflogReader("master");
|
||||
Entry e = reader.getLastEntry();
|
||||
ReflogEntry e = reader.getLastEntry();
|
||||
assertEquals(ObjectId
|
||||
.fromString("da85355dfc525c9f6f3927b876f379f46ccf826e"), e
|
||||
.getOldId());
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* Copyright (C) 2011, Chris Aniszczyk <caniszczyk@gmail.com>
|
||||
* Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com>
|
||||
* and other copyright owners as documented in the project's IP log.
|
||||
*
|
||||
* This program and the accompanying materials are made available
|
||||
* under the terms of the Eclipse Distribution License v1.0 which
|
||||
* accompanies this distribution, is reproduced below, and is
|
||||
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||
*
|
||||
* 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 Eclipse Foundation, Inc. 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.eclipse.jgit.storage.file;
|
||||
|
||||
import org.eclipse.jgit.JGitText;
|
||||
import org.eclipse.jgit.lib.Constants;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.PersonIdent;
|
||||
import org.eclipse.jgit.util.RawParseUtils;
|
||||
|
||||
/**
|
||||
* Parsed reflog entry
|
||||
*/
|
||||
public class ReflogEntry {
|
||||
private ObjectId oldId;
|
||||
|
||||
private ObjectId newId;
|
||||
|
||||
private PersonIdent who;
|
||||
|
||||
private String comment;
|
||||
|
||||
ReflogEntry(byte[] raw, int pos) {
|
||||
oldId = ObjectId.fromString(raw, pos);
|
||||
pos += Constants.OBJECT_ID_STRING_LENGTH;
|
||||
if (raw[pos++] != ' ')
|
||||
throw new IllegalArgumentException(
|
||||
JGitText.get().rawLogMessageDoesNotParseAsLogEntry);
|
||||
newId = ObjectId.fromString(raw, pos);
|
||||
pos += Constants.OBJECT_ID_STRING_LENGTH;
|
||||
if (raw[pos++] != ' ') {
|
||||
throw new IllegalArgumentException(
|
||||
JGitText.get().rawLogMessageDoesNotParseAsLogEntry);
|
||||
}
|
||||
who = RawParseUtils.parsePersonIdentOnly(raw, pos);
|
||||
int p0 = RawParseUtils.next(raw, pos, '\t');
|
||||
if (p0 >= raw.length)
|
||||
comment = ""; // personident has no \t, no comment present
|
||||
else {
|
||||
int p1 = RawParseUtils.nextLF(raw, p0);
|
||||
comment = p1 > p0 ? RawParseUtils.decode(raw, p0, p1 - 1) : "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the commit id before the change
|
||||
*/
|
||||
public ObjectId getOldId() {
|
||||
return oldId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the commit id after the change
|
||||
*/
|
||||
public ObjectId getNewId() {
|
||||
return newId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return user performin the change
|
||||
*/
|
||||
public PersonIdent getWho() {
|
||||
return who;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return textual description of the change
|
||||
*/
|
||||
public String getComment() {
|
||||
return comment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Entry[" + oldId.name() + ", " + newId.name() + ", " + getWho() + ", "
|
||||
+ getComment() + "]";
|
||||
}
|
||||
}
|
|
@ -51,10 +51,6 @@
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jgit.JGitText;
|
||||
import org.eclipse.jgit.lib.Constants;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.PersonIdent;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.util.IO;
|
||||
import org.eclipse.jgit.util.RawParseUtils;
|
||||
|
@ -63,78 +59,13 @@
|
|||
* Utility for reading reflog entries
|
||||
*/
|
||||
public class ReflogReader {
|
||||
/**
|
||||
* Parsed reflog entry
|
||||
*/
|
||||
static public class Entry {
|
||||
private ObjectId oldId;
|
||||
|
||||
private ObjectId newId;
|
||||
|
||||
private PersonIdent who;
|
||||
|
||||
private String comment;
|
||||
|
||||
Entry(byte[] raw, int pos) {
|
||||
oldId = ObjectId.fromString(raw, pos);
|
||||
pos += Constants.OBJECT_ID_STRING_LENGTH;
|
||||
if (raw[pos++] != ' ')
|
||||
throw new IllegalArgumentException(
|
||||
JGitText.get().rawLogMessageDoesNotParseAsLogEntry);
|
||||
newId = ObjectId.fromString(raw, pos);
|
||||
pos += Constants.OBJECT_ID_STRING_LENGTH;
|
||||
if (raw[pos++] != ' ') {
|
||||
throw new IllegalArgumentException(
|
||||
JGitText.get().rawLogMessageDoesNotParseAsLogEntry);
|
||||
}
|
||||
who = RawParseUtils.parsePersonIdentOnly(raw, pos);
|
||||
int p0 = RawParseUtils.next(raw, pos, '\t');
|
||||
if (p0 >= raw.length)
|
||||
comment = ""; // personident has no \t, no comment present
|
||||
else {
|
||||
int p1 = RawParseUtils.nextLF(raw, p0);
|
||||
comment = p1 > p0 ? RawParseUtils.decode(raw, p0, p1 - 1) : "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the commit id before the change
|
||||
*/
|
||||
public ObjectId getOldId() {
|
||||
return oldId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the commit id after the change
|
||||
*/
|
||||
public ObjectId getNewId() {
|
||||
return newId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return user performin the change
|
||||
*/
|
||||
public PersonIdent getWho() {
|
||||
return who;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return textual description of the change
|
||||
*/
|
||||
public String getComment() {
|
||||
return comment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Entry[" + oldId.name() + ", " + newId.name() + ", " + getWho() + ", "
|
||||
+ getComment() + "]";
|
||||
}
|
||||
}
|
||||
|
||||
private File logName;
|
||||
|
||||
ReflogReader(Repository db, String refname) {
|
||||
/**
|
||||
* @param db
|
||||
* @param refname
|
||||
*/
|
||||
public ReflogReader(Repository db, String refname) {
|
||||
logName = new File(db.getDirectory(), "logs/" + refname);
|
||||
}
|
||||
|
||||
|
@ -144,8 +75,8 @@ public String toString() {
|
|||
* @return the latest reflog entry, or null if no log
|
||||
* @throws IOException
|
||||
*/
|
||||
public Entry getLastEntry() throws IOException {
|
||||
List<Entry> entries = getReverseEntries(1);
|
||||
public ReflogEntry getLastEntry() throws IOException {
|
||||
List<ReflogEntry> entries = getReverseEntries(1);
|
||||
return entries.size() > 0 ? entries.get(0) : null;
|
||||
}
|
||||
|
||||
|
@ -153,7 +84,7 @@ public Entry getLastEntry() throws IOException {
|
|||
* @return all reflog entries in reverse order
|
||||
* @throws IOException
|
||||
*/
|
||||
public List<Entry> getReverseEntries() throws IOException {
|
||||
public List<ReflogEntry> getReverseEntries() throws IOException {
|
||||
return getReverseEntries(Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
|
@ -163,7 +94,7 @@ public List<Entry> getReverseEntries() throws IOException {
|
|||
* @return all reflog entries in reverse order
|
||||
* @throws IOException
|
||||
*/
|
||||
public List<Entry> getReverseEntries(int max) throws IOException {
|
||||
public List<ReflogEntry> getReverseEntries(int max) throws IOException {
|
||||
final byte[] log;
|
||||
try {
|
||||
log = IO.readFully(logName);
|
||||
|
@ -172,10 +103,10 @@ public List<Entry> getReverseEntries(int max) throws IOException {
|
|||
}
|
||||
|
||||
int rs = RawParseUtils.prevLF(log, log.length);
|
||||
List<Entry> ret = new ArrayList<Entry>();
|
||||
List<ReflogEntry> ret = new ArrayList<ReflogEntry>();
|
||||
while (rs >= 0 && max-- > 0) {
|
||||
rs = RawParseUtils.prevLF(log, rs);
|
||||
Entry entry = new Entry(log, rs < 0 ? 0 : rs + 2);
|
||||
ReflogEntry entry = new ReflogEntry(log, rs < 0 ? 0 : rs + 2);
|
||||
ret.add(entry);
|
||||
}
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue