Skip to content

Commit 560ed26

Browse files
authored
[fix][test] Fixed Nondeterministic Ordering in Generated Docs Topics (#24973)
1 parent 8f357b0 commit 560ed26

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

pulsar-docs-tools/src/main/java/org/apache/pulsar/docs/tools/CmdGenerateDocs.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ private String generateDocument(String module, CommandLine commander) {
108108
sb.append("```shell\n$ ");
109109
sb.append(this.commander.getCommandName()).append(" ");
110110
sb.append(module).append(" ").append(subK).append(" options").append("\n```\n\n");
111-
List<ArgSpec> argSpecs = subV.getCommandSpec().args();
111+
List<ArgSpec> argSpecs = getSortedArgs(subV.getCommandSpec().args());
112112
if (argSpecs.size() > 0) {
113113
sb.append("|Flag|Description|Default|\n");
114114
sb.append("|---|---|---|\n");
@@ -128,7 +128,7 @@ private String generateDocument(String module, CommandLine commander) {
128128
sb.append(" options").append("\n```").append("\n\n");
129129
sb.append("|Flag|Description|Default|\n");
130130
sb.append("|---|---|---|\n");
131-
List<ArgSpec> argSpecs = commander.getCommandSpec().args();
131+
List<ArgSpec> argSpecs = getSortedArgs(commander.getCommandSpec().args());
132132
argSpecs.forEach(option -> {
133133
if (option.hidden() || !(option instanceof OptionSpec)) {
134134
return;
@@ -144,6 +144,27 @@ private String generateDocument(String module, CommandLine commander) {
144144
return sb.toString();
145145
}
146146

147+
/**
148+
* Returns a sorted copy of the argument specifications list, ordered by the
149+
* OptionSpec order attribute for option specs. Non-option arguments
150+
* retain their relative ordering.
151+
*
152+
* @param args the list of argument specifications to sort
153+
* @return a new sorted list
154+
*/
155+
private List<ArgSpec> getSortedArgs(List<ArgSpec> args) {
156+
List<ArgSpec> sorted = new ArrayList<>(args);
157+
sorted.sort((a, b) -> {
158+
if (a instanceof OptionSpec && b instanceof OptionSpec) {
159+
OptionSpec optA = (OptionSpec) a;
160+
OptionSpec optB = (OptionSpec) b;
161+
return Integer.compare(optA.order(), optB.order());
162+
}
163+
return 0;
164+
});
165+
return sorted;
166+
}
167+
147168
@Override
148169
public Integer call() throws Exception {
149170
if (commandNames.size() == 0) {

pulsar-docs-tools/src/test/java/org/apache/pulsar/docs/tools/CmdGenerateDocsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ public class CmdGenerateDocsTest {
2929

3030
@Command
3131
public class Arguments {
32-
@Option(names = {"-h", "--help"}, description = "Show this help message")
32+
@Option(names = {"-h", "--help"}, description = "Show this help message", order = 0)
3333
private boolean help = false;
3434

35-
@Option(names = {"-n", "--name"}, description = "Name")
35+
@Option(names = {"-n", "--name"}, description = "Name", order = 1)
3636
private String name;
3737
}
3838

0 commit comments

Comments
 (0)