mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-06 21:45:43 +01:00
fix get range from git log command
This commit is contained in:
@@ -41,10 +41,18 @@ import com.google.common.collect.Lists;
|
||||
import org.eclipse.jgit.api.Git;
|
||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||
import org.eclipse.jgit.api.errors.NoHeadException;
|
||||
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
|
||||
import org.eclipse.jgit.errors.MissingObjectException;
|
||||
import org.eclipse.jgit.errors.StopWalkException;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.revwalk.filter.RevFilter;
|
||||
import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
|
||||
import org.eclipse.jgit.treewalk.filter.PathFilter;
|
||||
import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
|
||||
import org.eclipse.jgit.treewalk.filter.TreeFilter;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -61,6 +69,7 @@ import sonia.scm.util.IOUtil;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -177,8 +186,6 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
|
||||
if (!gr.getAllRefs().isEmpty())
|
||||
{
|
||||
converter = new GitChangesetConverter(gr, GitUtil.ID_LENGTH);
|
||||
|
||||
int counter = 0;
|
||||
int start = request.getPagingStart();
|
||||
|
||||
@@ -194,7 +201,6 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
|
||||
List<Changeset> changesetList = Lists.newArrayList();
|
||||
int limit = request.getPagingLimit();
|
||||
boolean started = false;
|
||||
ObjectId startId = null;
|
||||
|
||||
if (!Strings.isNullOrEmpty(request.getStartChangeset()))
|
||||
@@ -209,22 +215,36 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
endId = gr.resolve(request.getEndChangeset());
|
||||
}
|
||||
|
||||
org.eclipse.jgit.api.LogCommand cmd = new Git(gr).log().all();
|
||||
RevWalk revWalk = new RevWalk(gr);
|
||||
|
||||
converter = new GitChangesetConverter(gr, revWalk, GitUtil.ID_LENGTH);
|
||||
|
||||
if (!Strings.isNullOrEmpty(request.getPath()))
|
||||
{
|
||||
cmd = cmd.addPath(request.getPath());
|
||||
revWalk.setTreeFilter(
|
||||
AndTreeFilter.create(
|
||||
PathFilter.create(request.getPath()), TreeFilter.ANY_DIFF));
|
||||
}
|
||||
|
||||
for (RevCommit commit : cmd.call())
|
||||
{
|
||||
if (!started && ((startId == null) || commit.getId().equals(startId)))
|
||||
ObjectId head = GitUtil.getRepositoryHead(gr);
|
||||
|
||||
if (head != null)
|
||||
{
|
||||
if (startId != null)
|
||||
{
|
||||
started = true;
|
||||
revWalk.markStart(revWalk.lookupCommit(startId));
|
||||
}
|
||||
else
|
||||
{
|
||||
revWalk.markStart(revWalk.lookupCommit(head));
|
||||
}
|
||||
|
||||
if (started)
|
||||
Iterator<RevCommit> iterator = revWalk.iterator();
|
||||
|
||||
while (iterator.hasNext())
|
||||
{
|
||||
RevCommit commit = iterator.next();
|
||||
|
||||
if ((counter >= start)
|
||||
&& ((limit < 0) || (counter < start + limit)))
|
||||
{
|
||||
@@ -248,20 +268,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
repository.getName());
|
||||
}
|
||||
}
|
||||
catch (NoHeadException ex)
|
||||
{
|
||||
if (logger.isTraceEnabled())
|
||||
{
|
||||
logger.trace("repository seems to be empty", ex);
|
||||
}
|
||||
else if (logger.isWarnEnabled())
|
||||
{
|
||||
logger.warn("repository seems to be empty");
|
||||
}
|
||||
|
||||
changesets = new ChangesetPagingResult(0, new ArrayList<Changeset>());
|
||||
}
|
||||
catch (GitAPIException ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new RepositoryException("could not create change log", ex);
|
||||
}
|
||||
|
||||
@@ -71,8 +71,8 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
|
||||
createCommand().getChangesets(new LogCommandRequest());
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(5, result.getTotal());
|
||||
assertEquals(5, result.getChangesets().size());
|
||||
assertEquals(4, result.getTotal());
|
||||
assertEquals(4, result.getChangesets().size());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,11 +92,10 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
|
||||
ChangesetPagingResult result = createCommand().getChangesets(request);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(3, result.getTotal());
|
||||
assertEquals(3, result.getChangesets().size());
|
||||
assertEquals(2, result.getTotal());
|
||||
assertEquals(2, result.getChangesets().size());
|
||||
assertEquals("fcd0ef1831e4002ac43e", result.getChangesets().get(0).getId());
|
||||
assertEquals("3f76a12f08a6ba0dc988", result.getChangesets().get(1).getId());
|
||||
assertEquals("435df2f061add3589cb3", result.getChangesets().get(2).getId());
|
||||
assertEquals("435df2f061add3589cb3", result.getChangesets().get(1).getId());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,7 +115,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
|
||||
ChangesetPagingResult result = createCommand().getChangesets(request);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(5, result.getTotal());
|
||||
assertEquals(4, result.getTotal());
|
||||
assertEquals(2, result.getChangesets().size());
|
||||
|
||||
Changeset c1 = result.getChangesets().get(0);
|
||||
@@ -148,7 +147,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
|
||||
ChangesetPagingResult result = createCommand().getChangesets(request);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(5, result.getTotal());
|
||||
assertEquals(4, result.getTotal());
|
||||
assertEquals(2, result.getChangesets().size());
|
||||
|
||||
Changeset c1 = result.getChangesets().get(0);
|
||||
@@ -159,7 +158,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
|
||||
Changeset c2 = result.getChangesets().get(1);
|
||||
|
||||
assertNotNull(c2);
|
||||
assertEquals("3f76a12f08a6ba0dc988", c2.getId());
|
||||
assertEquals("592d797cd36432e59141", c2.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user