diff options
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalkUtils.java')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalkUtils.java | 142 |
1 files changed, 80 insertions, 62 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalkUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalkUtils.java index 11fec31e91..4bfe2fda02 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalkUtils.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalkUtils.java @@ -1,44 +1,11 @@ /* - * Copyright (C) 2011-2012, Robin Stocker <robin@nibor.org> - * and other copyright owners as documented in the project's IP log. + * Copyright (C) 2011-2012, Robin Stocker <robin@nibor.org> and others * - * 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 + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://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. + * SPDX-License-Identifier: BSD-3-Clause */ package org.eclipse.jgit.revwalk; @@ -50,10 +17,13 @@ import java.util.List; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; +import org.eclipse.jgit.internal.JGitText; +import org.eclipse.jgit.lib.NullProgressMonitor; +import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.Ref; /** - * Utility methods for {@link RevWalk}. + * Utility methods for {@link org.eclipse.jgit.revwalk.RevWalk}. */ public final class RevWalkUtils { @@ -67,9 +37,10 @@ public final class RevWalkUtils { * other words, count the number of commits that are in <code>start</code>, * but not in <code>end</code>. * <p> - * Note that this method calls {@link RevWalk#reset()} at the beginning. - * Also note that the existing rev filter on the walk is left as-is, so be - * sure to set the right rev filter before calling this method. + * Note that this method calls + * {@link org.eclipse.jgit.revwalk.RevWalk#reset()} at the beginning. Also + * note that the existing rev filter on the walk is left as-is, so be sure + * to set the right rev filter before calling this method. * * @param walk * the rev walk to use @@ -78,11 +49,13 @@ public final class RevWalkUtils { * @param end * the commit where counting should end, or null if counting * should be done until there are no more commits - * * @return the number of commits - * @throws MissingObjectException - * @throws IncorrectObjectTypeException - * @throws IOException + * @throws org.eclipse.jgit.errors.MissingObjectException + * if object is missing + * @throws org.eclipse.jgit.errors.IncorrectObjectTypeException + * if object has unexpected type + * @throws java.io.IOException + * if an IO error occurred */ public static int count(final RevWalk walk, final RevCommit start, final RevCommit end) throws MissingObjectException, @@ -96,9 +69,10 @@ public final class RevWalkUtils { * Find of commits that are in <code>start</code>, but not in * <code>end</code>. * <p> - * Note that this method calls {@link RevWalk#reset()} at the beginning. - * Also note that the existing rev filter on the walk is left as-is, so be - * sure to set the right rev filter before calling this method. + * Note that this method calls + * {@link org.eclipse.jgit.revwalk.RevWalk#reset()} at the beginning. Also + * note that the existing rev filter on the walk is left as-is, so be sure + * to set the right rev filter before calling this method. * * @param walk * the rev walk to use @@ -108,9 +82,12 @@ public final class RevWalkUtils { * the commit where counting should end, or null if counting * should be done until there are no more commits * @return the commits found - * @throws MissingObjectException - * @throws IncorrectObjectTypeException - * @throws IOException + * @throws org.eclipse.jgit.errors.MissingObjectException + * if object is missing + * @throws org.eclipse.jgit.errors.IncorrectObjectTypeException + * if object has unexpected type + * @throws java.io.IOException + * if an IO error occurred */ public static List<RevCommit> find(final RevWalk walk, final RevCommit start, final RevCommit end) @@ -121,7 +98,7 @@ public final class RevWalkUtils { if (end != null) walk.markUninteresting(end); - List<RevCommit> commits = new ArrayList<RevCommit>(); + List<RevCommit> commits = new ArrayList<>(); for (RevCommit c : walk) commits.add(c); return commits; @@ -129,9 +106,10 @@ public final class RevWalkUtils { /** * Find the list of branches a given commit is reachable from when following - * parent.s + * parents. * <p> - * Note that this method calls {@link RevWalk#reset()} at the beginning. + * Note that this method calls + * {@link org.eclipse.jgit.revwalk.RevWalk#reset()} at the beginning. * <p> * In order to improve performance this method assumes clock skew among * committers is never larger than 24 hours. @@ -143,20 +121,59 @@ public final class RevWalkUtils { * @param refs * the set of branches we want to see reachability from * @return the list of branches a given commit is reachable from - * @throws MissingObjectException - * @throws IncorrectObjectTypeException - * @throws IOException + * @throws org.eclipse.jgit.errors.MissingObjectException + * if object is missing + * @throws org.eclipse.jgit.errors.IncorrectObjectTypeException + * if object has unexpected type + * @throws java.io.IOException + * if an IO error occurred */ public static List<Ref> findBranchesReachableFrom(RevCommit commit, RevWalk revWalk, Collection<Ref> refs) throws MissingObjectException, IncorrectObjectTypeException, IOException { + return findBranchesReachableFrom(commit, revWalk, refs, + NullProgressMonitor.INSTANCE); + } + + /** + * Find the list of branches a given commit is reachable from when following + * parents. + * <p> + * Note that this method calls + * {@link org.eclipse.jgit.revwalk.RevWalk#reset()} at the beginning. + * <p> + * In order to improve performance this method assumes clock skew among + * committers is never larger than 24 hours. + * + * @param commit + * the commit we are looking at + * @param revWalk + * The RevWalk to be used. + * @param refs + * the set of branches we want to see reachability from + * @param monitor + * the callback for progress and cancellation + * @return the list of branches a given commit is reachable from + * @throws org.eclipse.jgit.errors.MissingObjectException + * if object is missing + * @throws org.eclipse.jgit.errors.IncorrectObjectTypeException + * if object has unexpected type + * @throws java.io.IOException + * if an IO error occurred + * @since 5.4 + */ + public static List<Ref> findBranchesReachableFrom(RevCommit commit, + RevWalk revWalk, Collection<Ref> refs, ProgressMonitor monitor) + throws MissingObjectException, IncorrectObjectTypeException, + IOException { // Make sure commit is from the same RevWalk commit = revWalk.parseCommit(commit.getId()); revWalk.reset(); - List<Ref> result = new ArrayList<Ref>(); - + List<Ref> filteredRefs = new ArrayList<>(); + monitor.beginTask(JGitText.get().searchForReachableBranches, + refs.size()); final int SKEW = 24*3600; // one day clock skew for (Ref ref : refs) { @@ -171,9 +188,10 @@ public final class RevWalkUtils { if (headCommit.getCommitTime() + SKEW < commit.getCommitTime()) continue; - if (revWalk.isMergedInto(commit, headCommit)) - result.add(ref); + filteredRefs.add(ref); } + List<Ref> result = revWalk.getMergedInto(commit, filteredRefs, monitor); + monitor.endTask(); return result; } |