srkukarni closed pull request #2432: Make all cli arguments follow consistent -
notation instead of camelcase
URL: https://github.com/apache/incubator-pulsar/pull/2432
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java
index 1019853c9a..f31fd82468 100644
---
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java
+++
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java
@@ -277,7 +277,9 @@ void processArguments() throws Exception {
protected String DEPRECATED_userConfigString;
@Parameter(names = "--user-config", description = "User-defined config
key/values")
protected String userConfigString;
- @Parameter(names = "--retainOrdering", description = "Function
consumes and processes messages in order")
+ @Parameter(names = "--retainOrdering", description = "Function
consumes and processes messages in order", hidden = true)
+ protected Boolean DEPRECATED_retainOrdering;
+ @Parameter(names = "--retain-ordering", description = "Function
consumes and processes messages in order")
protected boolean retainOrdering;
@Parameter(names = "--parallelism", description = "The function's
parallelism factor (i.e. the number of function instances to run)")
protected Integer parallelism;
@@ -329,8 +331,9 @@ private void mergeArgs() {
if (!StringUtils.isBlank(DEPRECATED_customSerdeInputString))
customSerdeInputString = DEPRECATED_customSerdeInputString;
if (!StringUtils.isBlank(DEPRECATED_fnConfigFile)) fnConfigFile =
DEPRECATED_fnConfigFile;
- if (DEPRECATED_processingGuarantees !=
FunctionConfig.ProcessingGuarantees.ATLEAST_ONCE) processingGuarantees =
DEPRECATED_processingGuarantees;
+ if (DEPRECATED_processingGuarantees != null) processingGuarantees
= DEPRECATED_processingGuarantees;
if (!StringUtils.isBlank(DEPRECATED_userConfigString))
userConfigString = DEPRECATED_userConfigString;
+ if (DEPRECATED_retainOrdering != null) retainOrdering =
DEPRECATED_retainOrdering;
if (DEPRECATED_windowLengthCount != null) windowLengthCount =
DEPRECATED_windowLengthCount;
if (DEPRECATED_windowLengthDurationMs != null)
windowLengthDurationMs = DEPRECATED_windowLengthDurationMs;
if (DEPRECATED_slidingIntervalCount != null) slidingIntervalCount
= DEPRECATED_slidingIntervalCount;
@@ -825,6 +828,7 @@ private void mergeArgs() {
@Override
void runCmd() throws Exception {
+ // merge deprecated args with new args
mergeArgs();
CmdFunctions.startLocalRun(convertProto2(functionConfig),
functionConfig.getParallelism(),
instanceIdOffset, brokerServiceUrl, stateStorageServiceUrl,
@@ -1023,6 +1027,7 @@ public void mergeArgs() {
@Override
void runCmd() throws Exception {
+ // merge deprecated args with new args
mergeArgs();
if (triggerFile == null && triggerValue == null) {
throw new ParameterException("Either a trigger value or a
trigger filepath needs to be specified");
@@ -1057,6 +1062,7 @@ private void mergeArgs() {
@Override
void runCmd() throws Exception {
+ // merge deprecated args with new args
mergeArgs();
if (StringUtils.isBlank(sourceFile)) {
throw new ParameterException("--source-file needs to be
specified");
@@ -1091,6 +1097,7 @@ private void mergeArgs() {
@Override
void runCmd() throws Exception {
+ // merge deprecated args with new args
mergeArgs();
if (StringUtils.isBlank(destinationFile)) {
throw new ParameterException("--destination-file needs to be
specified");
diff --git
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSinks.java
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSinks.java
index 52f30e64d5..5259996ca7 100644
---
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSinks.java
+++
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSinks.java
@@ -118,29 +118,56 @@ void processArguments() throws Exception {
@Parameters(commandDescription = "Run a Pulsar IO sink connector locally
(rather than deploying it to the Pulsar cluster)")
protected class LocalSinkRunner extends CreateSink {
- @Parameter(names = "--brokerServiceUrl", description = "The URL for
the Pulsar broker")
+ @Parameter(names = "--brokerServiceUrl", description = "The URL for
the Pulsar broker", hidden = true)
+ protected String DEPRECATED_brokerServiceUrl;
+ @Parameter(names = "--broker-service-url", description = "The URL for
the Pulsar broker")
protected String brokerServiceUrl;
- @Parameter(names = "--clientAuthPlugin", description = "Client
authentication plugin using which function-process can connect to broker")
+ @Parameter(names = "--clientAuthPlugin", description = "Client
authentication plugin using which function-process can connect to broker",
hidden = true)
+ protected String DEPRECATED_clientAuthPlugin;
+ @Parameter(names = "--client-auth-plugin", description = "Client
authentication plugin using which function-process can connect to broker")
protected String clientAuthPlugin;
- @Parameter(names = "--clientAuthParams", description = "Client
authentication param")
+ @Parameter(names = "--clientAuthParams", description = "Client
authentication param", hidden = true)
+ protected String DEPRECATED_clientAuthParams;
+ @Parameter(names = "--client-auth-params", description = "Client
authentication param")
protected String clientAuthParams;
- @Parameter(names = "--use_tls", description = "Use tls connection\n")
+ @Parameter(names = "--use_tls", description = "Use tls connection",
hidden = true)
+ protected Boolean DEPRECATED_useTls;
+ @Parameter(names = "--use-tls", description = "Use tls connection")
protected boolean useTls;
- @Parameter(names = "--tls_allow_insecure", description = "Allow
insecure tls connection\n")
+ @Parameter(names = "--tls_allow_insecure", description = "Allow
insecure tls connection", hidden = true)
+ protected Boolean DEPRECATED_tlsAllowInsecureConnection;
+ @Parameter(names = "--tls-allow-insecure", description = "Allow
insecure tls connection")
protected boolean tlsAllowInsecureConnection;
- @Parameter(names = "--hostname_verification_enabled", description =
"Enable hostname verification")
+ @Parameter(names = "--hostname_verification_enabled", description =
"Enable hostname verification", hidden = true)
+ protected Boolean DEPRECATED_tlsHostNameVerificationEnabled;
+ @Parameter(names = "--hostname-verification-enabled", description =
"Enable hostname verification")
protected boolean tlsHostNameVerificationEnabled;
- @Parameter(names = "--tls_trust_cert_path", description = "tls trust
cert file path")
+ @Parameter(names = "--tls_trust_cert_path", description = "tls trust
cert file path", hidden = true)
+ protected String DEPRECATED_tlsTrustCertFilePath;
+ @Parameter(names = "--tls-trust-cert-path", description = "tls trust
cert file path")
protected String tlsTrustCertFilePath;
+ private void mergeArgs() {
+ if (!StringUtils.isBlank(DEPRECATED_brokerServiceUrl))
brokerServiceUrl = DEPRECATED_brokerServiceUrl;
+ if (!StringUtils.isBlank(DEPRECATED_clientAuthPlugin))
clientAuthPlugin = DEPRECATED_clientAuthPlugin;
+ if (!StringUtils.isBlank(DEPRECATED_clientAuthParams))
clientAuthParams = DEPRECATED_clientAuthParams;
+ if (DEPRECATED_useTls != null) useTls = DEPRECATED_useTls;
+ if (DEPRECATED_tlsAllowInsecureConnection != null)
tlsAllowInsecureConnection = DEPRECATED_tlsAllowInsecureConnection;
+ if (DEPRECATED_tlsHostNameVerificationEnabled != null)
tlsHostNameVerificationEnabled = DEPRECATED_tlsHostNameVerificationEnabled;
+ if (!StringUtils.isBlank(DEPRECATED_tlsTrustCertFilePath))
tlsTrustCertFilePath = DEPRECATED_tlsTrustCertFilePath;
+ }
+
@Override
void runCmd() throws Exception {
+ // merge deprecated args with new args
+ mergeArgs();
+
CmdFunctions.startLocalRun(createSinkConfigProto2(sinkConfig),
sinkConfig.getParallelism(),
0, brokerServiceUrl, null,
AuthenticationConfig.builder().clientAuthenticationPlugin(clientAuthPlugin)
@@ -212,35 +239,50 @@ void runCmd() throws Exception {
"--inputs" }, description = "The sink's input topic or topics
(multiple topics can be specified as a comma-separated list)")
protected String inputs;
- @Parameter(names = "--topicsPattern", description = "TopicsPattern to
consume from list of topics under a namespace that match the pattern. [--input]
and [--topicsPattern] are mutually exclusive. Add SerDe class name for a
pattern in --customSerdeInputs (supported for java fun only)")
+ @Parameter(names = "--topicsPattern", description = "TopicsPattern to
consume from list of topics under a namespace that match the pattern. [--input]
and [--topicsPattern] are mutually exclusive. Add SerDe class name for a
pattern in --customSerdeInputs (supported for java fun only)", hidden = true)
+ protected String DEPRECATED_topicsPattern;
+ @Parameter(names = "--topics-pattern", description = "TopicsPattern to
consume from list of topics under a namespace that match the pattern. [--input]
and [--topicsPattern] are mutually exclusive. Add SerDe class name for a
pattern in --customSerdeInputs (supported for java fun only)")
protected String topicsPattern;
@Parameter(names = { "-st",
"--schema-type" }, description = "The builtin schema type (eg:
'avro', 'json', etc..) or the class name for a Schema implementation")
protected String schemaType = "";
- @Parameter(names = "--subsName", description = "Pulsar source
subscription name if user wants a specific subscription-name for input-topic
consumer")
+ @Parameter(names = "--subsName", description = "Pulsar source
subscription name if user wants a specific subscription-name for input-topic
consumer", hidden = true)
+ protected String DEPRECATED_subsName;
+ @Parameter(names = "--subs-name", description = "Pulsar source
subscription name if user wants a specific subscription-name for input-topic
consumer")
protected String subsName;
- @Parameter(names = "--customSerdeInputs", description = "The map of
input topics to SerDe class names (as a JSON string)")
+ @Parameter(names = "--customSerdeInputs", description = "The map of
input topics to SerDe class names (as a JSON string)", hidden = true)
+ protected String DEPRECATED_customSerdeInputString;
+ @Parameter(names = "--custom-serde-inputs", description = "The map of
input topics to SerDe class names (as a JSON string)")
protected String customSerdeInputString;
- @Parameter(names = "--customSchemaInputs", description = "The map of
input topics to Schema types or class names (as a JSON string)")
+ @Parameter(names = "--custom-schema-inputs", description = "The map of
input topics to Schema types or class names (as a JSON string)")
protected String customSchemaInputString;
- @Parameter(names = "--processingGuarantees", description = "The
processing guarantees (aka delivery semantics) applied to the sink")
+ @Parameter(names = "--processingGuarantees", description = "The
processing guarantees (aka delivery semantics) applied to the sink", hidden =
true)
+ protected FunctionConfig.ProcessingGuarantees
DEPRECATED_processingGuarantees;
+ @Parameter(names = "--processing-guarantees", description = "The
processing guarantees (aka delivery semantics) applied to the sink")
protected FunctionConfig.ProcessingGuarantees processingGuarantees;
- @Parameter(names = "--retainOrdering", description = "Sink consumes
and sinks messages in order")
+ @Parameter(names = "--retainOrdering", description = "Sink consumes
and sinks messages in order", hidden = true)
+ protected Boolean DEPRECATED_retainOrdering;
+ @Parameter(names = "--retain-ordering", description = "Sink consumes
and sinks messages in order")
protected boolean retainOrdering;
@Parameter(names = "--parallelism", description = "The sink's
parallelism factor (i.e. the number of sink instances to run)")
protected Integer parallelism;
@Parameter(names = {"-a", "--archive"}, description = "Path to the
archive file for the sink. It also supports url-path [http/https/file (file
protocol assumes that file already exists on worker host)] from which worker
can download the package.", listConverter = StringConverter.class)
protected String archive;
- @Parameter(names = "--className", description = "The sink's class name
if archive is file-url-path (file://)")
+ @Parameter(names = "--className", description = "The sink's class name
if archive is file-url-path (file://)", hidden = true)
+ protected String DEPRECATED_className;
+ @Parameter(names = "--classname", description = "The sink's class name
if archive is file-url-path (file://)")
protected String className;
@Parameter(names = "--sinkConfigFile", description = "The path to a
YAML config file specifying the "
+ + "sink's configuration", hidden = true)
+ protected String DEPRECATED_sinkConfigFile;
+ @Parameter(names = "--sink-config-file", description = "The path to a
YAML config file specifying the "
+ "sink's configuration")
protected String sinkConfigFile;
@Parameter(names = "--cpu", description = "The CPU (in cores) that
needs to be allocated per sink instance (applicable only to Docker runtime)")
@@ -249,14 +291,29 @@ void runCmd() throws Exception {
protected Long ram;
@Parameter(names = "--disk", description = "The disk (in bytes) that
need to be allocated per sink instance (applicable only to Docker runtime)")
protected Long disk;
- @Parameter(names = "--sinkConfig", description = "User defined configs
key/values")
+ @Parameter(names = "--sinkConfig", description = "User defined configs
key/values", hidden = true)
+ protected String DEPRECATED_sinkConfigString;
+ @Parameter(names = "--sink-config", description = "User defined
configs key/values")
protected String sinkConfigString;
protected SinkConfig sinkConfig;
+ private void mergeArgs() {
+ if (!StringUtils.isBlank(DEPRECATED_subsName)) subsName =
DEPRECATED_subsName;
+ if (!StringUtils.isBlank(DEPRECATED_topicsPattern)) topicsPattern
= DEPRECATED_topicsPattern;
+ if (!StringUtils.isBlank(DEPRECATED_customSerdeInputString))
customSerdeInputString = DEPRECATED_customSerdeInputString;
+ if (DEPRECATED_processingGuarantees != null) processingGuarantees
= DEPRECATED_processingGuarantees;
+ if (DEPRECATED_retainOrdering != null) retainOrdering =
DEPRECATED_retainOrdering;
+ if (!StringUtils.isBlank(DEPRECATED_className)) className =
DEPRECATED_className;
+ if (!StringUtils.isBlank(DEPRECATED_sinkConfigFile))
sinkConfigFile = DEPRECATED_sinkConfigFile;
+ if (!StringUtils.isBlank(DEPRECATED_sinkConfigString))
sinkConfigString = DEPRECATED_sinkConfigString;
+ }
+
@Override
void processArguments() throws Exception {
super.processArguments();
+ // merge deprecated args with new args
+ mergeArgs();
if (null != sinkConfigFile) {
this.sinkConfig = CmdUtils.loadConfig(sinkConfigFile,
SinkConfig.class);
diff --git
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSources.java
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSources.java
index 8f2aa5110a..db00b9fd97 100644
---
a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSources.java
+++
b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdSources.java
@@ -109,30 +109,57 @@ void processArguments() throws Exception {
@Parameters(commandDescription = "Run a Pulsar IO source connector locally
(rather than deploying it to the Pulsar cluster)")
protected class LocalSourceRunner extends CreateSource {
- @Parameter(names = "--brokerServiceUrl", description = "The URL for
the Pulsar broker")
+ @Parameter(names = "--brokerServiceUrl", description = "The URL for
the Pulsar broker", hidden = true)
+ protected String DEPRECATED_brokerServiceUrl;
+ @Parameter(names = "--broker-service-url", description = "The URL for
the Pulsar broker")
protected String brokerServiceUrl;
- @Parameter(names = "--clientAuthPlugin", description = "Client
authentication plugin using which function-process can connect to broker")
+ @Parameter(names = "--clientAuthPlugin", description = "Client
authentication plugin using which function-process can connect to broker",
hidden = true)
+ protected String DEPRECATED_clientAuthPlugin;
+ @Parameter(names = "--client-auth-plugin", description = "Client
authentication plugin using which function-process can connect to broker")
protected String clientAuthPlugin;
- @Parameter(names = "--clientAuthParams", description = "Client
authentication param")
+ @Parameter(names = "--clientAuthParams", description = "Client
authentication param", hidden = true)
+ protected String DEPRECATED_clientAuthParams;
+ @Parameter(names = "--client-auth-params", description = "Client
authentication param")
protected String clientAuthParams;
- @Parameter(names = "--use_tls", description = "Use tls connection\n")
+ @Parameter(names = "--use_tls", description = "Use tls connection",
hidden = true)
+ protected Boolean DEPRECATED_useTls;
+ @Parameter(names = "--use-tls", description = "Use tls connection")
protected boolean useTls;
- @Parameter(names = "--tls_allow_insecure", description = "Allow
insecure tls connection\n")
+ @Parameter(names = "--tls_allow_insecure", description = "Allow
insecure tls connection", hidden = true)
+ protected Boolean DEPRECATED_tlsAllowInsecureConnection;
+ @Parameter(names = "--tls-allow-insecure", description = "Allow
insecure tls connection")
protected boolean tlsAllowInsecureConnection;
- @Parameter(names = "--hostname_verification_enabled", description =
"Enable hostname verification")
+ @Parameter(names = "--hostname_verification_enabled", description =
"Enable hostname verification", hidden = true)
+ protected Boolean DEPRECATED_tlsHostNameVerificationEnabled;
+ @Parameter(names = "--hostname-verification-enabled", description =
"Enable hostname verification")
protected boolean tlsHostNameVerificationEnabled;
- @Parameter(names = "--tls_trust_cert_path", description = "tls trust
cert file path")
+ @Parameter(names = "--tls_trust_cert_path", description = "tls trust
cert file path", hidden = true)
+ protected String DEPRECATED_tlsTrustCertFilePath;
+ @Parameter(names = "--tls-trust-cert-path", description = "tls trust
cert file path")
protected String tlsTrustCertFilePath;
+ private void mergeArgs() {
+ if (!StringUtils.isBlank(DEPRECATED_brokerServiceUrl))
brokerServiceUrl = DEPRECATED_brokerServiceUrl;
+ if (!StringUtils.isBlank(DEPRECATED_clientAuthPlugin))
clientAuthPlugin = DEPRECATED_clientAuthPlugin;
+ if (!StringUtils.isBlank(DEPRECATED_clientAuthParams))
clientAuthParams = DEPRECATED_clientAuthParams;
+ if (DEPRECATED_useTls != null) useTls = DEPRECATED_useTls;
+ if (DEPRECATED_tlsAllowInsecureConnection != null)
tlsAllowInsecureConnection = DEPRECATED_tlsAllowInsecureConnection;
+ if (DEPRECATED_tlsHostNameVerificationEnabled != null)
tlsHostNameVerificationEnabled = DEPRECATED_tlsHostNameVerificationEnabled;
+ if (!StringUtils.isBlank(DEPRECATED_tlsTrustCertFilePath))
tlsTrustCertFilePath = DEPRECATED_tlsTrustCertFilePath;
+ }
+
@Override
void runCmd() throws Exception {
-
CmdFunctions.startLocalRun(createSourceConfigProto2(sourceConfig),
sourceConfig.getParallelism(),
+ // merge deprecated args with new args
+ mergeArgs();
+
+ CmdFunctions.startLocalRun(createSourceConfigProto2(sourceConfig),
sourceConfig.getParallelism(),
0, brokerServiceUrl, null,
AuthenticationConfig.builder().clientAuthenticationPlugin(clientAuthPlugin)
.clientAuthenticationParameters(clientAuthParams).useTls(useTls)
@@ -199,13 +226,19 @@ void runCmd() throws Exception {
@Parameter(names = { "-t", "--source-type" }, description = "The
source's connector provider")
protected String sourceType;
- @Parameter(names = "--processingGuarantees", description = "The
processing guarantees (aka delivery semantics) applied to the Source")
+ @Parameter(names = "--processingGuarantees", description = "The
processing guarantees (aka delivery semantics) applied to the Source", hidden =
true)
+ protected FunctionConfig.ProcessingGuarantees
DEPRECATED_processingGuarantees;
+ @Parameter(names = "--processing-guarantees", description = "The
processing guarantees (aka delivery semantics) applied to the source")
protected FunctionConfig.ProcessingGuarantees processingGuarantees;
- @Parameter(names = { "-o", "--destinationTopicName" }, description =
"The Pulsar topic to which data is sent")
+ @Parameter(names = { "-o", "--destinationTopicName" }, description =
"The Pulsar topic to which data is sent", hidden = true)
+ protected String DEPRECATED_destinationTopicName;
+ @Parameter(names = "--destination-topic-name", description = "The
Pulsar topic to which data is sent")
protected String destinationTopicName;
- @Parameter(names = "--deserializationClassName", description = "The
SerDe classname for the source")
+ @Parameter(names = "--deserializationClassName", description = "The
SerDe classname for the source", hidden = true)
+ protected String DEPRECATED_deserializationClassName;
+ @Parameter(names = "--deserialization-classname", description = "The
SerDe classname for the source")
protected String deserializationClassName;
@Parameter(names = { "-st",
@@ -218,9 +251,14 @@ void runCmd() throws Exception {
@Parameter(names = { "-a", "--archive" },
description = "The path to the NAR archive for the Source. It
also supports url-path [http/https/file (file protocol assumes that file
already exists on worker host)] from which worker can download the package.",
listConverter = StringConverter.class)
protected String archive;
- @Parameter(names = "--className", description = "The source's class
name if archive is file-url-path (file://)")
+ @Parameter(names = "--className", description = "The source's class
name if archive is file-url-path (file://)", hidden = true)
+ protected String DEPRECATED_className;
+ @Parameter(names = "--classname", description = "The source's class
name if archive is file-url-path (file://)")
protected String className;
@Parameter(names = "--sourceConfigFile", description = "The path to a
YAML config file specifying the "
+ + "source's configuration", hidden = true)
+ protected String DEPRECATED_sourceConfigFile;
+ @Parameter(names = "--source-config-file", description = "The path to
a YAML config file specifying the "
+ "source's configuration")
protected String sourceConfigFile;
@Parameter(names = "--cpu", description = "The CPU (in cores) that
needs to be allocated per source instance (applicable only to Docker runtime)")
@@ -229,14 +267,27 @@ void runCmd() throws Exception {
protected Long ram;
@Parameter(names = "--disk", description = "The disk (in bytes) that
need to be allocated per source instance (applicable only to Docker runtime)")
protected Long disk;
- @Parameter(names = "--sourceConfig", description = "Source config
key/values")
+ @Parameter(names = "--sourceConfig", description = "Source config
key/values", hidden = true)
+ protected String DEPRECATED_sourceConfigString;
+ @Parameter(names = "--source-config", description = "Source config
key/values")
protected String sourceConfigString;
protected SourceConfig sourceConfig;
+ private void mergeArgs() {
+ if (DEPRECATED_processingGuarantees != null) processingGuarantees
= DEPRECATED_processingGuarantees;
+ if (!StringUtils.isBlank(DEPRECATED_destinationTopicName))
destinationTopicName = DEPRECATED_destinationTopicName;
+ if (!StringUtils.isBlank(DEPRECATED_deserializationClassName))
deserializationClassName = DEPRECATED_deserializationClassName;
+ if (!StringUtils.isBlank(DEPRECATED_className)) className =
DEPRECATED_className;
+ if (!StringUtils.isBlank(DEPRECATED_sourceConfigFile))
sourceConfigFile = DEPRECATED_sourceConfigFile;
+ if (!StringUtils.isBlank(DEPRECATED_sourceConfigString))
sourceConfigString = DEPRECATED_sourceConfigString;
+ }
+
@Override
void processArguments() throws Exception {
super.processArguments();
+ // merge deprecated args with new args
+ mergeArgs();
if (null != sourceConfigFile) {
this.sourceConfig = CmdUtils.loadConfig(sourceConfigFile,
SourceConfig.class);
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services