Skip to content

Commit 23f7469

Browse files
authored
Added subcommand to render usage for all subcommands (#510)
Also - upgraded to Gradle 8.12
1 parent 123d4d1 commit 23f7469

File tree

8 files changed

+893
-222
lines changed

8 files changed

+893
-222
lines changed

README.md

Lines changed: 814 additions & 188 deletions
Large diffs are not rendered by default.

build.gradle

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
/*
2-
* This file was generated by the Gradle 'init' task.
3-
*/
4-
51
plugins {
62
id 'java'
73
id 'application'
@@ -10,7 +6,9 @@ plugins {
106
// https://github.com/qoomon/gradle-git-versioning-plugin
117
id 'me.qoomon.git-versioning' version '6.4.4'
128
// https://github.com/itzg/github-releaser-gradle-plugin
13-
id 'io.github.itzg.github-releaser' version '0.2.0'
9+
id 'io.github.itzg.github-releaser' version '0.2.1'
10+
// https://github.com/ben-manes/gradle-versions-plugin
11+
id 'com.github.ben-manes.versions' version '0.51.0'
1412
}
1513

1614
group = 'io.github.itzg'

gradle/wrapper/gradle-wrapper.jar

-18.1 KB
Binary file not shown.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
44
networkTimeout=10000
5+
validateDistributionUrl=true
56
zipStoreBase=GRADLE_USER_HOME
67
zipStorePath=wrapper/dists

gradlew

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
# See the License for the specific language governing permissions and
1616
# limitations under the License.
1717
#
18+
# SPDX-License-Identifier: Apache-2.0
19+
#
1820

1921
##############################################################################
2022
#
@@ -55,7 +57,7 @@
5557
# Darwin, MinGW, and NonStop.
5658
#
5759
# (3) This script is generated from the Groovy template
58-
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
60+
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
5961
# within the Gradle project.
6062
#
6163
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -83,7 +85,9 @@ done
8385
# This is normally unused
8486
# shellcheck disable=SC2034
8587
APP_BASE_NAME=${0##*/}
86-
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
88+
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
89+
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
90+
' "$PWD" ) || exit
8791

8892
# Use the maximum available, or set MAX_FD != -1 to use that value.
8993
MAX_FD=maximum
@@ -130,26 +134,29 @@ location of your Java installation."
130134
fi
131135
else
132136
JAVACMD=java
133-
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137+
if ! command -v java >/dev/null 2>&1
138+
then
139+
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
134140
135141
Please set the JAVA_HOME variable in your environment to match the
136142
location of your Java installation."
143+
fi
137144
fi
138145

139146
# Increase the maximum file descriptors if we can.
140147
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
141148
case $MAX_FD in #(
142149
max*)
143150
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
144-
# shellcheck disable=SC3045
151+
# shellcheck disable=SC2039,SC3045
145152
MAX_FD=$( ulimit -H -n ) ||
146153
warn "Could not query maximum file descriptor limit"
147154
esac
148155
case $MAX_FD in #(
149156
'' | soft) :;; #(
150157
*)
151158
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
152-
# shellcheck disable=SC3045
159+
# shellcheck disable=SC2039,SC3045
153160
ulimit -n "$MAX_FD" ||
154161
warn "Could not set maximum file descriptor limit to $MAX_FD"
155162
esac
@@ -198,11 +205,11 @@ fi
198205
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
199206
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
200207

201-
# Collect all arguments for the java command;
202-
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
203-
# shell script including quotes and variable substitutions, so put them in
204-
# double quotes to make sure that they get re-expanded; and
205-
# * put everything else in single quotes, so that it's not re-expanded.
208+
# Collect all arguments for the java command:
209+
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
210+
# and any embedded shellness will be escaped.
211+
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
212+
# treated as '${Hostname}' itself on the command line.
206213

207214
set -- \
208215
"-Dorg.gradle.appname=$APP_BASE_NAME" \

gradlew.bat

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
@rem See the License for the specific language governing permissions and
1414
@rem limitations under the License.
1515
@rem
16+
@rem SPDX-License-Identifier: Apache-2.0
17+
@rem
1618

1719
@if "%DEBUG%"=="" @echo off
1820
@rem ##########################################################################
@@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
4345
%JAVA_EXE% -version >NUL 2>&1
4446
if %ERRORLEVEL% equ 0 goto execute
4547

46-
echo.
47-
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
48-
echo.
49-
echo Please set the JAVA_HOME variable in your environment to match the
50-
echo location of your Java installation.
48+
echo. 1>&2
49+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50+
echo. 1>&2
51+
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52+
echo location of your Java installation. 1>&2
5153

5254
goto fail
5355

@@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
5759

5860
if exist "%JAVA_EXE%" goto execute
5961

60-
echo.
61-
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
62-
echo.
63-
echo Please set the JAVA_HOME variable in your environment to match the
64-
echo location of your Java installation.
62+
echo. 1>&2
63+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64+
echo. 1>&2
65+
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66+
echo location of your Java installation. 1>&2
6567

6668
goto fail
6769

src/main/java/me/itzg/helpers/McImageHelper.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
import java.io.InputStream;
77
import java.net.URL;
88
import java.util.Enumeration;
9+
import java.util.Map;
10+
import java.util.concurrent.Callable;
911
import java.util.jar.Attributes;
1012
import java.util.jar.Attributes.Name;
1113
import java.util.jar.Manifest;
1214
import lombok.Getter;
1315
import lombok.extern.slf4j.Slf4j;
16+
import me.itzg.helpers.McImageHelper.ShowAllSubcommandUsage;
1417
import me.itzg.helpers.assertcmd.AssertCommand;
1518
import me.itzg.helpers.curseforge.CurseForgeFilesCommand;
1619
import me.itzg.helpers.curseforge.InstallCurseForgeCommand;
@@ -48,9 +51,12 @@
4851
import picocli.CommandLine;
4952
import picocli.CommandLine.ArgGroup;
5053
import picocli.CommandLine.Command;
54+
import picocli.CommandLine.ExitCode;
5155
import picocli.CommandLine.ITypeConverter;
5256
import picocli.CommandLine.IVersionProvider;
57+
import picocli.CommandLine.Model.CommandSpec;
5358
import picocli.CommandLine.Option;
59+
import picocli.CommandLine.Spec;
5460

5561
@Command(name = "mc-image-helper",
5662
versionProvider = McImageHelper.AppVersionProvider.class,
@@ -81,6 +87,7 @@
8187
PatchCommand.class,
8288
ResolveMinecraftVersionCommand.class,
8389
SetPropertiesCommand.class,
90+
ShowAllSubcommandUsage.class,
8491
Sync.class,
8592
SyncAndInterpolate.class,
8693
TestLoggingCommand.class,
@@ -204,4 +211,30 @@ public Level convert(String value) {
204211
return Level.toLevel(value);
205212
}
206213
}
214+
215+
@Command(name = "show-all-subcommand-usage", description = "Renders all of the subcommand usage as markdown sections for README")
216+
public static class ShowAllSubcommandUsage implements Callable<Integer> {
217+
218+
@Spec
219+
CommandSpec spec;
220+
221+
@Override
222+
public Integer call() throws Exception {
223+
224+
System.out.printf("%n_The following is generated using `%s`_%n%n", spec.qualifiedName());
225+
226+
spec.parent().subcommands().entrySet().stream()
227+
.sorted(Map.Entry.comparingByKey())
228+
.forEach(entry -> {
229+
System.out.printf("### %s%n", entry.getKey());
230+
System.out.println();
231+
System.out.println("```");
232+
entry.getValue().usage(System.out);
233+
System.out.println("```");
234+
System.out.println();
235+
});
236+
237+
return ExitCode.OK;
238+
}
239+
}
207240
}

src/main/java/me/itzg/helpers/patch/PatchCommand.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
11
package me.itzg.helpers.patch;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import lombok.extern.slf4j.Slf4j;
5-
import me.itzg.helpers.env.Interpolator;
6-
import me.itzg.helpers.env.StandardEnvironmentVariablesProvider;
7-
import me.itzg.helpers.patch.model.PatchDefinition;
8-
import me.itzg.helpers.patch.model.PatchSet;
9-
import picocli.CommandLine;
10-
114
import java.io.IOException;
125
import java.nio.file.DirectoryStream;
136
import java.nio.file.Files;
147
import java.nio.file.Path;
158
import java.util.ArrayList;
169
import java.util.concurrent.Callable;
10+
import lombok.extern.slf4j.Slf4j;
11+
import me.itzg.helpers.env.Interpolator;
12+
import me.itzg.helpers.env.StandardEnvironmentVariablesProvider;
13+
import me.itzg.helpers.patch.model.PatchDefinition;
14+
import me.itzg.helpers.patch.model.PatchSet;
15+
import picocli.CommandLine;
1716

1817
@CommandLine.Command(name = "patch",
19-
description = "Patches one or more existing files using JSON path based operations"
18+
description = "Patches one or more existing files using JSON path based operations%n"
19+
+ "Supports the file formats:%n"
20+
+ "- JSON%n"
21+
+ "- JSON5%n"
22+
+ "- Yaml%n"
23+
+ "- TOML, but processed output is not pretty"
2024
)
2125
@Slf4j
2226
public class PatchCommand implements Callable<Integer> {

0 commit comments

Comments
 (0)