View Javadoc
1   /*
2    * Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk>
3    * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others
4    *
5    * This program and the accompanying materials are made available under the
6    * terms of the Eclipse Distribution License v. 1.0 which is available at
7    * https://www.eclipse.org/org/documents/edl-v10.php.
8    *
9    * SPDX-License-Identifier: BSD-3-Clause
10   */
11  
12  package org.eclipse.jgit.pgm;
13  
14  import java.io.IOException;
15  import java.util.ArrayList;
16  import java.util.List;
17  
18  import org.eclipse.jgit.revwalk.RevCommit;
19  import org.eclipse.jgit.revwalk.filter.RevFilter;
20  import org.kohsuke.args4j.Argument;
21  import org.kohsuke.args4j.Option;
22  
23  @Command(usage = "usage_MergeBase")
24  class MergeBase extends TextBuiltin {
25  	@Option(name = "--all", usage = "usage_displayAllPossibleMergeBases")
26  	private boolean all;
27  
28  	@Argument(index = 0, metaVar = "metaVar_commitish", required = true)
29  	void commit_0(final RevCommit c) {
30  		commits.add(c);
31  	}
32  
33  	@Argument(index = 1, metaVar = "metaVar_commitish", required = true)
34  	private List<RevCommit> commits = new ArrayList<>();
35  
36  	/** {@inheritDoc} */
37  	@Override
38  	protected void run() {
39  		try {
40  			for (RevCommit c : commits) {
41  				argWalk.markStart(c);
42  			}
43  			argWalk.setRevFilter(RevFilter.MERGE_BASE);
44  			int max = all ? Integer.MAX_VALUE : 1;
45  			while (max-- > 0) {
46  				final RevCommit b = argWalk.next();
47  				if (b == null) {
48  					break;
49  				}
50  				outw.println(b.getId().name());
51  			}
52  		} catch (IOException e) {
53  			throw die(e.getMessage(), e);
54  		}
55  	}
56  }