Removes partial long options from the tools (#872)

Some of the command-line tools would allow partial long options (e.g.,
--datas instead of --dataset). These were inconsistently implemented,
difficult to maintain, and occasionally blocked useful long options.
They have been removed from all the tools.

NOTE: This change should NOT be merged to 1.12 or earlier.
This commit is contained in:
Dana Robinson 2021-08-03 14:04:58 -07:00 committed by GitHub
parent 04f1bff675
commit 5dabec4cf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 29 additions and 235 deletions

View File

@ -820,6 +820,15 @@ New Features
Tools:
------
- Removed partial long exceptions
Some of the tools accepted shortened versions of the long options
(ex: --datas instead of --dataset). These were implemented inconsistently,
are difficult to maintian, and occasionally block useful long option
names. These partial long options have been removed from all the tools.
(DER - 2021/08/03)
- h5repack added help text for user-defined filters.
Added help text line that states the valid values of the filter flag

View File

@ -82,124 +82,46 @@ struct handler_t {
/* "xxx" "yyy" into "xxxyyy". */
static const char * s_opts = "a:b*c:d:ef:g:hik:l:m:n*o*pq:rs:t:uvw:xyz:A*BCD:E*F:G:HM:N:O*RS:VX:";
static struct h5_long_options l_opts[] = {{"attribute", require_arg, 'a'},
{"attribut", require_arg, 'a'},
{"attribu", require_arg, 'a'},
{"attrib", require_arg, 'a'},
{"attri", require_arg, 'a'},
{"attr", require_arg, 'a'},
{"att", require_arg, 'a'},
{"at", require_arg, 'a'},
{"binary", optional_arg, 'b'},
{"count", require_arg, 'c'},
{"coun", require_arg, 'c'},
{"cou", require_arg, 'c'},
{"co", require_arg, 'c'},
{"dataset", require_arg, 'd'},
{"datase", require_arg, 'd'},
{"datas", require_arg, 'd'},
{"escape", no_arg, 'e'},
{"filedriver", require_arg, 'f'},
{"filedrive", require_arg, 'f'},
{"filedriv", require_arg, 'f'},
{"filedri", require_arg, 'f'},
{"filedr", require_arg, 'f'},
{"filed", require_arg, 'f'},
{"file", require_arg, 'f'},
{"fil", require_arg, 'f'},
{"fi", require_arg, 'f'},
{"group", require_arg, 'g'},
{"grou", require_arg, 'g'},
{"gro", require_arg, 'g'},
{"gr", require_arg, 'g'},
{"help", no_arg, 'h'},
{"hel", no_arg, 'h'},
{"object-ids", no_arg, 'i'},
{"object-id", no_arg, 'i'},
{"object-i", no_arg, 'i'},
{"object", no_arg, 'i'},
{"objec", no_arg, 'i'},
{"obje", no_arg, 'i'},
{"obj", no_arg, 'i'},
{"ob", no_arg, 'i'},
{"block", require_arg, 'k'},
{"bloc", require_arg, 'k'},
{"blo", require_arg, 'k'},
{"bl", require_arg, 'k'},
{"soft-link", require_arg, 'l'},
{"soft-lin", require_arg, 'l'},
{"soft-li", require_arg, 'l'},
{"soft-l", require_arg, 'l'},
{"soft", require_arg, 'l'},
{"sof", require_arg, 'l'},
{"format", require_arg, 'm'},
{"contents", optional_arg, 'n'},
{"output", optional_arg, 'o'},
{"outpu", optional_arg, 'o'},
{"outp", optional_arg, 'o'},
{"out", optional_arg, 'o'},
{"ou", optional_arg, 'o'},
{"properties", no_arg, 'p'},
{"sort_by", require_arg, 'q'},
{"string", no_arg, 'r'},
{"strin", no_arg, 'r'},
{"start", require_arg, 's'},
{"star", require_arg, 's'},
{"sta", require_arg, 's'},
{"datatype", require_arg, 't'},
{"datatyp", require_arg, 't'},
{"dataty", require_arg, 't'},
{"datat", require_arg, 't'},
{"use-dtd", no_arg, 'u'},
{"use-dt", no_arg, 'u'},
{"use-d", no_arg, 'u'},
{"use-", no_arg, 'u'},
{"use", no_arg, 'u'},
{"us", no_arg, 'u'},
{"u", no_arg, 'u'},
{"vds-view-first-missing", no_arg, 'v'},
{"width", require_arg, 'w'},
{"widt", require_arg, 'w'},
{"wid", require_arg, 'w'},
{"wi", require_arg, 'w'},
{"xml", no_arg, 'x'},
{"xm", no_arg, 'x'},
{"noindex", no_arg, 'y'},
{"sort_order", require_arg, 'z'},
{"onlyattr", optional_arg, 'A'},
{"superblock", no_arg, 'B'},
{"boot-block", no_arg, 'B'},
{"boot-bloc", no_arg, 'B'},
{"boot-blo", no_arg, 'B'},
{"boot-bl", no_arg, 'B'},
{"boot-b", no_arg, 'B'},
{"boot", no_arg, 'B'},
{"boo", no_arg, 'B'},
{"bo", no_arg, 'B'},
{"no-compact-subset", no_arg, 'C'},
{"xml-dtd", require_arg, 'D'},
{"xml-dt", require_arg, 'D'},
{"xml-d", require_arg, 'D'},
{"enable-error-stack", optional_arg, 'E'},
{"form", require_arg, 'F'},
{"vds-gap-size", require_arg, 'G'},
{"header", no_arg, 'H'},
{"heade", no_arg, 'H'},
{"head", no_arg, 'H'},
{"hea", no_arg, 'H'},
{"packed-bits", require_arg, 'M'},
{"any_path", require_arg, 'N'},
{"ddl", optional_arg, 'O'},
{"region", no_arg, 'R'},
{"stride", require_arg, 'S'},
{"strid", require_arg, 'S'},
{"version", no_arg, 'V'},
{"versio", no_arg, 'V'},
{"versi", no_arg, 'V'},
{"vers", no_arg, 'V'},
{"ver", no_arg, 'V'},
{"ve", no_arg, 'V'},
{"xml-ns", require_arg, 'X'},
{"xml-n", require_arg, 'X'},
{"s3-cred", require_arg, '$'},
{"hdfs-attrs", require_arg, '#'},
{"vol-value", require_arg, '1'},

View File

@ -39,26 +39,9 @@ static int verbose_g = 0;
* parameters.
*/
static const char * s_opts = "hVvd:n";
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'},
{"hel", no_arg, 'h'},
{"he", no_arg, 'h'},
{"version", no_arg, 'V'},
{"version", no_arg, 'V'},
{"versio", no_arg, 'V'},
{"versi", no_arg, 'V'},
{"vers", no_arg, 'V'},
{"verbose", no_arg, 'v'},
{"verbos", no_arg, 'v'},
{"verbo", no_arg, 'v'},
{"verb", no_arg, 'v'},
{"dname", require_arg, 'd'},
{"dnam", require_arg, 'd'},
{"dna", require_arg, 'd'},
{"dn", require_arg, 'd'},
{"noop", no_arg, 'n'},
{"noo", no_arg, 'n'},
{"no", no_arg, 'n'},
{"enable-error-stack", no_arg, 'E'},
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'}, {"version", no_arg, 'V'},
{"verbose", no_arg, 'v'}, {"dname", require_arg, 'd'},
{"noop", no_arg, 'n'}, {"enable-error-stack", no_arg, 'E'},
{NULL, 0, '\0'}};
/*-------------------------------------------------------------------------

View File

@ -34,14 +34,10 @@ char *ub_file = NULL;
* parameters. The long-named ones can be partially spelled. When
* adding more, make sure that they don't clash with each other.
*/
static const char * s_opts = "hi:u:o:c:V"; /* add more later ? */
static struct h5_long_options l_opts[] = {
{"help", no_arg, 'h'}, {"hel", no_arg, 'h'}, {"i", require_arg, 'i'}, /* input file */
{"u", require_arg, 'u'}, /* user block file */
{"o", require_arg, 'o'}, /* output file */
{"clobber", no_arg, 'c'}, /* clobber existing UB */
{"clobbe", no_arg, 'c'}, {"clobb", no_arg, 'c'}, {"clob", no_arg, 'c'},
{"clo", no_arg, 'c'}, {"cl", no_arg, 'c'}, {NULL, 0, '\0'}};
static const char * s_opts = "hi:u:o:c:V";
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'}, {"i", require_arg, 'i'},
{"u", require_arg, 'u'}, {"o", require_arg, 'o'},
{"clobber", no_arg, 'c'}, {NULL, 0, '\0'}};
/*-------------------------------------------------------------------------
* Function: usage

View File

@ -36,13 +36,9 @@ char *ub_file = NULL;
* adding more, make sure that they don't clash with each other.
*/
static const char * s_opts = "hu:i:o:d:V";
static struct h5_long_options l_opts[] = {
{"help", no_arg, 'h'}, {"hel", no_arg, 'h'}, {"i", require_arg, 'i'}, /* input file */
{"u", require_arg, 'u'}, /* user block file */
{"o", require_arg, 'o'}, /* output file */
{"delete", no_arg, 'd'}, /* delete ub */
{"delet", no_arg, 'd'}, {"dele", no_arg, 'd'}, {"del", no_arg, 'd'},
{"de", no_arg, 'd'}, {NULL, 0, '\0'}};
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'}, {"i", require_arg, 'i'},
{"u", require_arg, 'u'}, {"o", require_arg, 'o'},
{"delete", no_arg, 'd'}, {NULL, 0, '\0'}};
/*-------------------------------------------------------------------------
* Function: usage

View File

@ -172,102 +172,19 @@ struct handler_t {
static const char *s_opts = "Aa:Ddm:EFfhGgl:sSTO:Vw:H:";
/* e.g. "filemetadata" has to precede "file"; "groupmetadata" has to precede "group" etc. */
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'},
{"hel", no_arg, 'h'},
{"he", no_arg, 'h'},
{"filemetadata", no_arg, 'F'},
{"filemetadat", no_arg, 'F'},
{"filemetada", no_arg, 'F'},
{"filemetad", no_arg, 'F'},
{"filemeta", no_arg, 'F'},
{"filemet", no_arg, 'F'},
{"fileme", no_arg, 'F'},
{"filem", no_arg, 'F'},
{"file", no_arg, 'f'},
{"fil", no_arg, 'f'},
{"fi", no_arg, 'f'},
{"groupmetadata", no_arg, 'G'},
{"groupmetadat", no_arg, 'G'},
{"groupmetada", no_arg, 'G'},
{"groupmetad", no_arg, 'G'},
{"groupmeta", no_arg, 'G'},
{"groupmet", no_arg, 'G'},
{"groupme", no_arg, 'G'},
{"groupm", no_arg, 'G'},
{"group", no_arg, 'g'},
{"grou", no_arg, 'g'},
{"gro", no_arg, 'g'},
{"gr", no_arg, 'g'},
{"links", require_arg, 'l'},
{"link", require_arg, 'l'},
{"lin", require_arg, 'l'},
{"li", require_arg, 'l'},
{"dsetmetadata", no_arg, 'D'},
{"dsetmetadat", no_arg, 'D'},
{"dsetmetada", no_arg, 'D'},
{"dsetmetad", no_arg, 'D'},
{"dsetmeta", no_arg, 'D'},
{"dsetmet", no_arg, 'D'},
{"dsetme", no_arg, 'D'},
{"dsetm", no_arg, 'D'},
{"dset", no_arg, 'd'},
{"dse", no_arg, 'd'},
{"ds", no_arg, 'd'},
{"dims", require_arg, 'm'},
{"dim", require_arg, 'm'},
{"di", require_arg, 'm'},
{"dtypemetadata", no_arg, 'T'},
{"dtypemetadat", no_arg, 'T'},
{"dtypemetada", no_arg, 'T'},
{"dtypemetad", no_arg, 'T'},
{"dtypemeta", no_arg, 'T'},
{"dtypemet", no_arg, 'T'},
{"dtypeme", no_arg, 'T'},
{"dtypem", no_arg, 'T'},
{"dtype", no_arg, 'T'},
{"dtyp", no_arg, 'T'},
{"dty", no_arg, 'T'},
{"dt", no_arg, 'T'},
{"object", require_arg, 'O'},
{"objec", require_arg, 'O'},
{"obje", require_arg, 'O'},
{"obj", require_arg, 'O'},
{"ob", require_arg, 'O'},
{"version", no_arg, 'V'},
{"versio", no_arg, 'V'},
{"versi", no_arg, 'V'},
{"vers", no_arg, 'V'},
{"ver", no_arg, 'V'},
{"ve", no_arg, 'V'},
{"attribute", no_arg, 'A'},
{"attribut", no_arg, 'A'},
{"attribu", no_arg, 'A'},
{"attrib", no_arg, 'A'},
{"attri", no_arg, 'A'},
{"attr", no_arg, 'A'},
{"att", no_arg, 'A'},
{"at", no_arg, 'A'},
{"enable-error-stack", no_arg, 'E'},
{"numattrs", require_arg, 'a'},
{"numattr", require_arg, 'a'},
{"numatt", require_arg, 'a'},
{"numat", require_arg, 'a'},
{"numa", require_arg, 'a'},
{"num", require_arg, 'a'},
{"nu", require_arg, 'a'},
{"freespace", no_arg, 's'},
{"freespac", no_arg, 's'},
{"freespa", no_arg, 's'},
{"freesp", no_arg, 's'},
{"frees", no_arg, 's'},
{"free", no_arg, 's'},
{"fre", no_arg, 's'},
{"fr", no_arg, 's'},
{"summary", no_arg, 'S'},
{"summar", no_arg, 'S'},
{"summa", no_arg, 'S'},
{"summ", no_arg, 'S'},
{"sum", no_arg, 'S'},
{"su", no_arg, 'S'},
{"s3-cred", require_arg, 'w'},
{"hdfs-attrs", require_arg, 'H'},
{NULL, 0, '\0'}};

View File

@ -45,39 +45,10 @@ static hsize_t increment = DEFAULT_INCREMENT;
* Command-line options: only publicize long options
*/
static const char * s_opts = "hVsmzi*";
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'},
{"hel", no_arg, 'h'},
{"he", no_arg, 'h'},
{"version", no_arg, 'V'},
{"version", no_arg, 'V'},
{"versio", no_arg, 'V'},
{"versi", no_arg, 'V'},
{"vers", no_arg, 'V'},
{"status", no_arg, 's'},
{"statu", no_arg, 's'},
{"stat", no_arg, 's'},
{"sta", no_arg, 's'},
{"st", no_arg, 's'},
{"image", no_arg, 'm'},
{"imag", no_arg, 'm'},
{"ima", no_arg, 'm'},
{"im", no_arg, 'm'},
{"filesize", no_arg, 'z'},
{"filesiz", no_arg, 'z'},
{"filesi", no_arg, 'z'},
{"files", no_arg, 'z'},
{"file", no_arg, 'z'},
{"fil", no_arg, 'z'},
{"fi", no_arg, 'z'},
{"increment", optional_arg, 'i'},
{"incremen", optional_arg, 'i'},
{"increme", optional_arg, 'i'},
{"increm", optional_arg, 'i'},
{"incre", optional_arg, 'i'},
{"incr", optional_arg, 'i'},
{"inc", optional_arg, 'i'},
{"in", optional_arg, 'i'},
{NULL, 0, '\0'}};
static struct h5_long_options l_opts[] = {
{"help", no_arg, 'h'}, {"version", no_arg, 'V'}, {"status", no_arg, 's'},
{"image", no_arg, 'm'}, {"filesize", no_arg, 'z'}, {"increment", optional_arg, 'i'},
{NULL, 0, '\0'}};
/*-------------------------------------------------------------------------
* Function: usage

View File

@ -207,7 +207,7 @@
# -d --di=15
ADD_H5_ERR_TEST (h5stat_err1_dims 1 -d --dims=-1 h5stat_threshold.h5)
ADD_H5_TEST (h5stat_dims1 0 -gd -m 5 h5stat_threshold.h5)
ADD_H5_TEST (h5stat_dims2 0 -d --di=15 h5stat_threshold.h5)
ADD_H5_TEST (h5stat_dims2 0 -d --dims=15 h5stat_threshold.h5)
#
# Tests for -a option on h5stat_threshold.h5
# -a -2 (incorrect threshold value)

View File

@ -304,7 +304,7 @@ TOOLTEST h5stat_links5.ddl -g -l 40000 h5stat_newgrat.h5
# -d --di=15
TOOLTEST h5stat_err1_dims.ddl -d --dims=-1 h5stat_threshold.h5
TOOLTEST h5stat_dims1.ddl -gd -m 5 h5stat_threshold.h5
TOOLTEST h5stat_dims2.ddl -d --di=15 h5stat_threshold.h5
TOOLTEST h5stat_dims2.ddl -d --dims=15 h5stat_threshold.h5
#
# Tests for -a option on h5stat_threshold.h5
# -a -2 (incorrect threshold value)

View File

@ -397,7 +397,7 @@
#
# The following are tests to verify the expected exit code from h5clear:
# "h5clear -m h5clear_mdc_image.h5" (valid option, existing file, succeed exit code)
# "h5clear --vers" (valid option, version #, succeed exit code)
# "h5clear --version" (valid option, version #, succeed exit code)
# "h5clear -k" (invalid 1 option, no file, fail exit code)
# "h5clear -k junk.h5" (invalid 1 option, nonexisting file, fail exit code)
# "h5clear -l h5clear_sec2_v2.h5" (invalid 1 option, existing file, fail exit code)
@ -408,7 +408,7 @@
# "h5clear -m -l h5clear_sec2_v0.h5" (valid/invalid 2 options, existing file, fail exit code)
# "h5clear -l -m h5clear_sec2_v0.h5" (invalid/valid 2 options, existing file, fail exit code)
ADD_H5_RETTEST (h5clr_mdc_image "false" "-m" h5clear_mdc_image.h5)
ADD_H5_RETTEST (h5clr_vers "false" "--vers")
ADD_H5_RETTEST (h5clr_vers "false" "--version")
ADD_H5_RETTEST (h5clr_k "true" "-k")
ADD_H5_RETTEST (h5clr_k_junk "true" "-k" junk.h5)
ADD_H5_RETTEST (h5clr_l_sec2 "true" "-l" h5clear_sec2_v2.h5)

View File

@ -315,7 +315,7 @@ TOOLTEST_ERR orig_h5clear_sec2_v0.h5 -s -m "" h5clear_no_mdc_image.err
#
# The following are tests to verify the expected exit code from h5clear:
# "h5clear -m h5clear_mdc_image.h5" (valid option, existing file, succeed exit code)
# "h5clear --vers" (valid option, version #, succeed exit code)
# "h5clear --version" (valid option, version #, succeed exit code)
# "h5clear -k" (invalid 1 option, no file, fail exit code)
# "h5clear -k junk.h5" (invalid 1 option, nonexisting file, fail exit code)
# "h5clear -l h5clear_sec2_v2.h5" (invalid 1 option, existing file, fail exit code)
@ -326,7 +326,7 @@ TOOLTEST_ERR orig_h5clear_sec2_v0.h5 -s -m "" h5clear_no_mdc_image.err
# "h5clear -m -l h5clear_sec2_v0.h5" (valid/invalid 2 options, existing file, fail exit code)
# "h5clear -l -m h5clear_sec2_v0.h5" (invalid/valid 2 options, existing file, fail exit code)
TOOLTEST h5clear_mdc_image.h5 -m "" $SUCCEED
TOOLTEST "" --vers "" $SUCCEED
TOOLTEST "" --version "" $SUCCEED
TOOLTEST "" -k "" $FAIL
TOOLTEST junk.h5 -k "" $FAIL
TOOLTEST h5clear_sec2_v2.h5 -l "" $FAIL