assertTrue(commits.contains(log.next())); | assertTrue(commits.contains(log.next())); | ||||
assertFalse(log.hasNext()); | assertFalse(log.hasNext()); | ||||
} | } | ||||
@Test | |||||
public void logAllCommitsWithMaxCount() throws Exception { | |||||
List<RevCommit> commits = new ArrayList<RevCommit>(); | |||||
Git git = Git.wrap(db); | |||||
writeTrashFile("Test.txt", "Hello world"); | |||||
git.add().addFilepattern("Test.txt").call(); | |||||
commits.add(git.commit().setMessage("commit#1").call()); | |||||
writeTrashFile("Test1.txt", "Hello world!"); | |||||
git.add().addFilepattern("Test1.txt").call(); | |||||
commits.add(git.commit().setMessage("commit#2").call()); | |||||
writeTrashFile("Test2.txt", "Hello world!!"); | |||||
git.add().addFilepattern("Test2.txt").call(); | |||||
commits.add(git.commit().setMessage("commit#3").call()); | |||||
Iterator<RevCommit> log = git.log().all().setMaxCount(2).call() | |||||
.iterator(); | |||||
assertTrue(log.hasNext()); | |||||
assertTrue(commits.contains(log.next())); | |||||
assertTrue(log.hasNext()); | |||||
assertTrue(commits.contains(log.next())); | |||||
assertFalse(log.hasNext()); | |||||
} | |||||
} | } |
/* | |||||
* Copyright (C) 2011, Tomasz Zarna <Tomasz.Zarna@pl.ibm.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.revwalk; | |||||
import static org.junit.Assert.assertNull; | |||||
import org.eclipse.jgit.revwalk.filter.MaxCountRevFilter; | |||||
import org.junit.Test; | |||||
public class MaxCountRevFilterTest extends RevWalkTestCase { | |||||
@Test | |||||
public void testMaxCountRevFilter() throws Exception { | |||||
final RevCommit a = commit(); | |||||
final RevCommit b = commit(a); | |||||
final RevCommit c1 = commit(b); | |||||
final RevCommit c2 = commit(b); | |||||
final RevCommit d = commit(c1, c2); | |||||
final RevCommit e = commit(d); | |||||
rw.reset(); | |||||
rw.setRevFilter(MaxCountRevFilter.create(3)); | |||||
markStart(e); | |||||
assertCommit(e, rw.next()); | |||||
assertCommit(d, rw.next()); | |||||
assertCommit(c2, rw.next()); | |||||
assertNull(rw.next()); | |||||
rw.reset(); | |||||
rw.setRevFilter(MaxCountRevFilter.create(0)); | |||||
markStart(e); | |||||
assertNull(rw.next()); | |||||
} | |||||
@Test | |||||
public void testMaxCountRevFilter0() throws Exception { | |||||
final RevCommit a = commit(); | |||||
final RevCommit b = commit(a); | |||||
rw.reset(); | |||||
rw.setRevFilter(MaxCountRevFilter.create(0)); | |||||
markStart(b); | |||||
assertNull(rw.next()); | |||||
} | |||||
} |
cannotLock=Cannot lock {0} | cannotLock=Cannot lock {0} | ||||
cannotLockPackIn=Cannot lock pack in {0} | cannotLockPackIn=Cannot lock pack in {0} | ||||
cannotMatchOnEmptyString=Cannot match on empty string. | cannotMatchOnEmptyString=Cannot match on empty string. | ||||
maxCountMustBeNonNegative=max count must be >= 0 | |||||
cannotMoveIndexTo=Cannot move index to {0} | cannotMoveIndexTo=Cannot move index to {0} | ||||
cannotMovePackTo=Cannot move pack to {0} | cannotMovePackTo=Cannot move pack to {0} | ||||
cannotOpenService=cannot open {0} | cannotOpenService=cannot open {0} |
/***/ public String cannotLock; | /***/ public String cannotLock; | ||||
/***/ public String cannotLockPackIn; | /***/ public String cannotLockPackIn; | ||||
/***/ public String cannotMatchOnEmptyString; | /***/ public String cannotMatchOnEmptyString; | ||||
/***/ public String maxCountMustBeNonNegative; | |||||
/***/ public String cannotMoveIndexTo; | /***/ public String cannotMoveIndexTo; | ||||
/***/ public String cannotMovePackTo; | /***/ public String cannotMovePackTo; | ||||
/***/ public String cannotOpenService; | /***/ public String cannotOpenService; |
import org.eclipse.jgit.lib.Repository; | import org.eclipse.jgit.lib.Repository; | ||||
import org.eclipse.jgit.revwalk.RevCommit; | import org.eclipse.jgit.revwalk.RevCommit; | ||||
import org.eclipse.jgit.revwalk.RevWalk; | import org.eclipse.jgit.revwalk.RevWalk; | ||||
import org.eclipse.jgit.revwalk.filter.MaxCountRevFilter; | |||||
import org.eclipse.jgit.treewalk.filter.AndTreeFilter; | import org.eclipse.jgit.treewalk.filter.AndTreeFilter; | ||||
import org.eclipse.jgit.treewalk.filter.PathFilter; | import org.eclipse.jgit.treewalk.filter.PathFilter; | ||||
import org.eclipse.jgit.treewalk.filter.PathFilterGroup; | import org.eclipse.jgit.treewalk.filter.PathFilterGroup; | ||||
private final List<PathFilter> pathFilters = new ArrayList<PathFilter>(); | private final List<PathFilter> pathFilters = new ArrayList<PathFilter>(); | ||||
private int maxCount = -1; | |||||
/** | /** | ||||
* @param repo | * @param repo | ||||
*/ | */ | ||||
if (pathFilters.size() > 0) | if (pathFilters.size() > 0) | ||||
walk.setTreeFilter(AndTreeFilter.create( | walk.setTreeFilter(AndTreeFilter.create( | ||||
PathFilterGroup.create(pathFilters), TreeFilter.ANY_DIFF)); | PathFilterGroup.create(pathFilters), TreeFilter.ANY_DIFF)); | ||||
if (maxCount > -1) | |||||
walk.setRevFilter(MaxCountRevFilter.create(maxCount)); | |||||
if (!startSpecified) { | if (!startSpecified) { | ||||
try { | try { | ||||
ObjectId headId = repo.resolve(Constants.HEAD); | ObjectId headId = repo.resolve(Constants.HEAD); | ||||
return this; | return this; | ||||
} | } | ||||
/** | |||||
* Limit the number of commits to output | |||||
* | |||||
* @param maxCount | |||||
* the limit | |||||
* @return {@code this} | |||||
*/ | |||||
public LogCommand setMaxCount(int maxCount) { | |||||
checkCallable(); | |||||
this.maxCount = maxCount; | |||||
return this; | |||||
} | |||||
private LogCommand add(boolean include, AnyObjectId start) | private LogCommand add(boolean include, AnyObjectId start) | ||||
throws MissingObjectException, IncorrectObjectTypeException, | throws MissingObjectException, IncorrectObjectTypeException, | ||||
JGitInternalException { | JGitInternalException { |
/* | |||||
* Copyright (C) 2011, Tomasz Zarna <Tomasz.Zarna@pl.ibm.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.revwalk.filter; | |||||
import java.io.IOException; | |||||
import org.eclipse.jgit.JGitText; | |||||
import org.eclipse.jgit.errors.IncorrectObjectTypeException; | |||||
import org.eclipse.jgit.errors.MissingObjectException; | |||||
import org.eclipse.jgit.errors.StopWalkException; | |||||
import org.eclipse.jgit.revwalk.RevCommit; | |||||
import org.eclipse.jgit.revwalk.RevWalk; | |||||
/** | |||||
* Limits the number of commits output. | |||||
*/ | |||||
public class MaxCountRevFilter extends RevFilter { | |||||
private int maxCount; | |||||
private int count; | |||||
/** | |||||
* Create a new max count filter. | |||||
* | |||||
* @param maxCount | |||||
* the limit | |||||
* @return a new filter | |||||
*/ | |||||
public static RevFilter create(int maxCount) { | |||||
if (maxCount < 0) | |||||
throw new IllegalArgumentException( | |||||
JGitText.get().maxCountMustBeNonNegative); | |||||
return new MaxCountRevFilter(maxCount); | |||||
} | |||||
private MaxCountRevFilter(int maxCount) { | |||||
this.count = 0; | |||||
this.maxCount = maxCount; | |||||
} | |||||
@Override | |||||
public boolean include(RevWalk walker, RevCommit cmit) | |||||
throws StopWalkException, MissingObjectException, | |||||
IncorrectObjectTypeException, IOException { | |||||
count++; | |||||
if (count > maxCount) | |||||
throw StopWalkException.INSTANCE; | |||||
return true; | |||||
} | |||||
@Override | |||||
public RevFilter clone() { | |||||
return new MaxCountRevFilter(maxCount); | |||||
} | |||||
} |