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
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'ssh' -p <port> <host> 'gerrit ls-projects' [\--show-branch <BRANCH>]
|
'ssh' -p <port> <host> 'gerrit ls-projects' [\--show-branch <BRANCH1> ...]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@ -30,7 +30,13 @@ OPTIONS
|
|||||||
-------
|
-------
|
||||||
\--show-branch::
|
\--show-branch::
|
||||||
\-b::
|
\-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::
|
\--tree::
|
||||||
\-t::
|
\-t::
|
||||||
|
@ -49,8 +49,9 @@ final class ListProjects extends BaseCommand {
|
|||||||
@Inject
|
@Inject
|
||||||
private GitRepositoryManager repoManager;
|
private GitRepositoryManager repoManager;
|
||||||
|
|
||||||
@Option(name = "--show-branch", aliases = {"-b"}, usage = "displays the sha of each project in the specified branch")
|
@Option(name = "--show-branch", aliases = {"-b"}, multiValued = true,
|
||||||
private String showBranch;
|
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" +
|
@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")
|
"this option does not work together with the show-branch option")
|
||||||
@ -102,16 +103,37 @@ final class ListProjects extends BaseCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (showBranch != null) {
|
if (showBranch != null) {
|
||||||
final Ref ref = getBranchRef(projectName);
|
final List<Ref> refs = getBranchRefs(projectName);
|
||||||
if (ref == null || ref.getObjectId() == null
|
if (refs == null) {
|
||||||
|| !pctl.controlForRef(ref.getLeaf().getName()).isVisible()) {
|
|
||||||
// No branch, or the user can't see this branch, so skip it.
|
|
||||||
//
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
stdout.print(ref.getObjectId().name());
|
boolean hasVisibleRefs = false;
|
||||||
stdout.print(' ');
|
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");
|
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 {
|
try {
|
||||||
final Repository r = repoManager.openRepository(projectName);
|
final Repository r = repoManager.openRepository(projectName);
|
||||||
try {
|
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 {
|
} finally {
|
||||||
r.close();
|
r.close();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user