Skip to content

Commit

Permalink
PHOENIX-6349 Add and use commons-cli to phoenix-thirdparty
Browse files Browse the repository at this point in the history
includes a patch that lets us disable the double quote removing "feature"
  • Loading branch information
stoty committed Jan 29, 2021
1 parent f13c57f commit 593ec7f
Show file tree
Hide file tree
Showing 4 changed files with 245 additions and 2 deletions.
169 changes: 169 additions & 0 deletions phoenix-shaded-commons-cli/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.phoenix.thirdparty</groupId>
<artifactId>phoenix-thirdparty</artifactId>
<version>1.1.0-SNAPSHOT</version>
</parent>
<artifactId>hbase-shaded-commons-cli</artifactId>
<name>Apache HBase Patched and Relocated (Shaded) Commons-CLI</name>
<description>
Pulls down commons-cli, patches it, compiles, and then relocates/shades.
</description>
<build>
<plugins>
<plugin>
<!--Clean needs to purge src/main/java since this is where
the unpack of commons-cli is overlaid. Do it for usual
clean goal but also before we unpack in case patches
delete/add files. We use src/main/java instead of dir
under 'target' because the jar plugin is dumb, hard to
make it source from other then src/main/java.-->
<artifactId>maven-clean-plugin</artifactId>
<executions>
<execution>
<id>pre-generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
<configuration>
<filesets>
<fileset>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/**</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<!--Download our dependency src, i.e. commons-cli, and
unpack it. Overlays src/main/java so ready for
compile-time (the jar plugin expects src in
src/main/java)-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>unpack</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>${commons-cli.version}</version>
<classifier>sources</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${basedir}/src/main/java</outputDirectory>
<includes>**/**</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<!--Apply our patches to the unpacked commons-cli src-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-patch-plugin</artifactId>
<version>1.2</version>
<configuration>
<targetDirectory>${basedir}</targetDirectory>
<skipApplication>false</skipApplication>
</configuration>
<executions>
<execution>
<id>patch</id>
<phase>process-sources</phase>
<goals>
<goal>apply</goal>
</goals>
<configuration>
<strip>0</strip>
<patchDirectory>${basedir}/src/main/patches</patchDirectory>
<patchTrackingFile>${project.build.directory}/patches-applied.txt</patchTrackingFile>
<naturalOrderProcessing>true</naturalOrderProcessing>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!--Above we built a jar. Now at package step, do relocation/shade-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadeSourcesContent>true</shadeSourcesContent>
<createSourcesJar>true</createSourcesJar>
<relocations>
<relocation>
<pattern>apache.commons.cli</pattern>
<shadedPattern>${rename.offset}.apache.commons.cli</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>${commons-cli.version}</version>
</dependency>
</dependencies>
</project>
72 changes: 72 additions & 0 deletions phoenix-shaded-commons-cli/src/main/patches/CLI-254-1.4.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
diff --git src/main/java/org/apache/commons/cli/DefaultParser.java src/main/java/org/apache/commons/cli/DefaultParser.java
index d762a3e..ebc324f 100644
--- src/main/java/org/apache/commons/cli/DefaultParser.java
+++ src/main/java/org/apache/commons/cli/DefaultParser.java
@@ -54,7 +54,44 @@ public class DefaultParser implements CommandLineParser

/** The required options and groups expected to be found when parsing the command line. */
protected List expectedOpts;
-
+
+ public DefaultParser() {
+ this.stripLeadingAndTrailingQuotes = true;
+ }
+
+ /** Flag indicating if balanced leading and trailing double quotes should be stripped from option arguments. */
+ private final boolean stripLeadingAndTrailingQuotes;
+
+ /**
+ * Create a new DefaultParser instance with the specified partial matching and quote
+ * stripping policy.
+ *
+ * By "partial matching" we mean that given the following code:
+ * <pre>
+ * {@code
+ * final Options options = new Options();
+ * options.addOption(new Option("d", "debug", false, "Turn on debug."));
+ * options.addOption(new Option("e", "extract", false, "Turn on extract."));
+ * options.addOption(new Option("o", "option", true, "Turn on option with argument."));
+ * }
+ * </pre>
+ * with "partial matching" turned on, <code>-de</code> only matches the
+ * <code>"debug"</code> option. However, with "partial matching" disabled,
+ * <code>-de</code> would enable both <code>debug</code> as well as
+ * <code>extract</code> options.
+ * with "stripping of balanced leading and trailing double quotes from option arguments" turned
+ * on, the outermost balanced double quotes of option arguments values will be removed.
+ * ie.
+ * for <code>-o '"x"'</code> getValue() will return <code>x</code>, instead of <code>"x"</code>
+ * @param allowPartialMatching if partial matching of long options shall be enabled
+ * @param stripLeadingAndTrailingQuotes if balanced outer double quoutes should be stripped
+ */
+ public DefaultParser(final boolean allowPartialMatching,
+ final boolean stripLeadingAndTrailingQuotes) {
+ // We do not care about allowPartialMatching in this patch
+ this.stripLeadingAndTrailingQuotes = stripLeadingAndTrailingQuotes;
+ }
+
public CommandLine parse(Options options, String[] arguments) throws ParseException
{
return parse(options, arguments, null);
@@ -232,7 +269,7 @@ public class DefaultParser implements CommandLineParser
}
else if (currentOption != null && currentOption.acceptsArg() && isArgument(token))
{
- currentOption.addValueForProcessing(Util.stripLeadingAndTrailingQuotes(token));
+ currentOption.addValueForProcessing(conditionallyStripLeadingAndTrailingQuotes(token));
}
else if (token.startsWith("--"))
{
@@ -704,4 +741,12 @@ public class DefaultParser implements CommandLineParser
}
}
}
+
+ protected String conditionallyStripLeadingAndTrailingQuotes(final String token) {
+ if(stripLeadingAndTrailingQuotes) {
+ return Util.stripLeadingAndTrailingQuotes(token);
+ } else {
+ return token;
+ }
+ }
}
2 changes: 1 addition & 1 deletion phoenix-shaded-guava/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.phoenix.thirdparty</groupId>
<artifactId>phoenix-thirdparty</artifactId>
<version>1.0.1-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</parent>

<artifactId>phoenix-shaded-guava</artifactId>
Expand Down
4 changes: 3 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

<groupId>org.apache.phoenix.thirdparty</groupId>
<artifactId>phoenix-thirdparty</artifactId>
<version>1.0.1-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Apache Phoenix Third-Party Libs</name>
<description>Packaging of relocated (renamed, shaded) third-party libraries used by Phoenix.</description>
Expand All @@ -50,6 +50,7 @@

<modules>
<module>phoenix-shaded-guava</module>
<module>phoenix-shaded-commons-cli</module>
</modules>

<scm>
Expand All @@ -68,6 +69,7 @@
<properties>
<rename.offset>org.apache.phoenix.thirdparty</rename.offset>
<guava.version>29.0-android</guava.version>
<commons-cli.version>1.4</commons-cli.version>
</properties>

<build>
Expand Down

0 comments on commit 593ec7f

Please sign in to comment.