Implement multiple branches in ls-project
Allow users request SHA1 of multiple branches per command: $ ssh -p 29418 review.example.com gerrit ls-projects -b eclair -b gingerbread In case if a branch is not visible or does not exists then stub is shown. Here is a sample of the command output: ---------------------------------------- d8a9e45c7ec6ff97b44fdbd0b21cabdb69f5f15b foo ---------------------------------------- 87e4297f8f508e9b73863b27c25a551a4d4b5ed5 bar a7e9587229246f6eb876795bc45a09c17b3bed51 862b2ce84f38e93a50d29510e713475f11228b28 baz 405cd3f5d7df7bae701b313dad9ce2ef797eb754 6a7eb2f0c885d03320b58afb662ee4fc14659063 hello ---------------------------------------- 782effdaeba782a656f799c9584dcc82fbfb7fa7 world b8240b951de6c03f72278dd3d7790c2355878197 e8099cc12a3b64aa4e58b319e61f0190e27bd3ac kext Change-Id: Ib05a6fc770ed0b70a3c180b2a41bec5e95a7117b
This commit is contained in:
parent
7f84ef2379
commit
3739569aad
@ -8,7 +8,7 @@ gerrit ls-projects - List projects visible to caller
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'ssh' -p <port> <host> 'gerrit ls-projects' [\--show-branch <BRANCH>]
|
||||
'ssh' -p <port> <host> 'gerrit ls-projects' [\--show-branch <BRANCH1> ...]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@ -30,7 +30,13 @@ OPTIONS
|
||||
-------
|
||||
\--show-branch::
|
||||
\-b::
|
||||
Name of the branch for which the command will display the sha of each project.
|
||||
Branch for which the command will display the sha of each project.
|
||||
The command may have multiple \--show-branch parameters, in this case
|
||||
sha will be shown for each of the branches.
|
||||
If the user does not have READ access to some branch or the branch does not
|
||||
exist then stub (forty '\-' symbols) is shown.
|
||||
If the user does not have access to any branch in the project then the
|
||||
whole project is not shown.
|
||||
|
||||
\--tree::
|
||||
\-t::
|
||||
|
@ -49,8 +49,9 @@ final class ListProjects extends BaseCommand {
|
||||
@Inject
|
||||
private GitRepositoryManager repoManager;
|
||||
|
||||
@Option(name = "--show-branch", aliases = {"-b"}, usage = "displays the sha of each project in the specified branch")
|
||||
private String showBranch;
|
||||
@Option(name = "--show-branch", aliases = {"-b"}, multiValued = true,
|
||||
usage = "displays the sha of each project in the specified branch")
|
||||
private List<String> showBranch;
|
||||
|
||||
@Option(name = "--tree", aliases = {"-t"}, usage = "displays project inheritance in a tree-like format\n" +
|
||||
"this option does not work together with the show-branch option")
|
||||
@ -102,16 +103,37 @@ final class ListProjects extends BaseCommand {
|
||||
}
|
||||
|
||||
if (showBranch != null) {
|
||||
final Ref ref = getBranchRef(projectName);
|
||||
if (ref == null || ref.getObjectId() == null
|
||||
|| !pctl.controlForRef(ref.getLeaf().getName()).isVisible()) {
|
||||
// No branch, or the user can't see this branch, so skip it.
|
||||
//
|
||||
final List<Ref> refs = getBranchRefs(projectName);
|
||||
if (refs == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
stdout.print(ref.getObjectId().name());
|
||||
stdout.print(' ');
|
||||
boolean hasVisibleRefs = false;
|
||||
for (int i = 0; i < refs.size(); i++) {
|
||||
Ref ref = refs.get(i);
|
||||
if (ref == null
|
||||
|| ref.getObjectId() == null
|
||||
|| !pctl.controlForRef(ref.getLeaf().getName()).isVisible()) {
|
||||
// No branch, or the user can't see this branch, so remove it.
|
||||
refs.set(i, null);
|
||||
} else {
|
||||
hasVisibleRefs = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasVisibleRefs) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Ref ref : refs) {
|
||||
if (ref == null) {
|
||||
// Print stub (forty '-' symbols)
|
||||
stdout.print("----------------------------------------");
|
||||
} else {
|
||||
stdout.print(ref.getObjectId().name());
|
||||
}
|
||||
stdout.print(' ');
|
||||
}
|
||||
}
|
||||
|
||||
stdout.print(projectName.get() + "\n");
|
||||
@ -151,11 +173,15 @@ final class ListProjects extends BaseCommand {
|
||||
}
|
||||
}
|
||||
|
||||
private Ref getBranchRef(Project.NameKey projectName) {
|
||||
private List<Ref> getBranchRefs(Project.NameKey projectName) {
|
||||
try {
|
||||
final Repository r = repoManager.openRepository(projectName);
|
||||
try {
|
||||
return r.getRef(showBranch);
|
||||
final List<Ref> result = new ArrayList<Ref>(showBranch.size());
|
||||
for (String branch : showBranch) {
|
||||
result.add(r.getRef(branch));
|
||||
}
|
||||
return result;
|
||||
} finally {
|
||||
r.close();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user