New Upstream Snapshot - r-cran-getopt

Ready changes

Summary

Merged new upstream version: 1.20.3+git20211008.1.28b381a (was: 1.20.3).

Resulting package

Built on 2023-01-20T01:13 (took 7m3s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots r-cran-getopt

Lintian Result

Diff

diff --git a/DESCRIPTION b/DESCRIPTION
index 166f203..f7c79ad 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,8 @@
+Encoding: UTF-8
 Package: getopt
 Type: Package
 Title: C-Like 'getopt' Behavior
-Version: 1.20.3
+Version: 1.20.4
 Authors@R: c(person("Trevor L", "Davis", role=c("aut", "cre"), email="trevor.l.davis@gmail.com"),
     person("Allen", "Day", role="aut", comment="Original package author"),
     person("Roman", "Zenka", role="ctb"))
@@ -15,12 +16,10 @@ Description: Package designed to be used with Rscript to write
     support for default values, positional argument support, etc.
 License: GPL (>= 2)
 Suggests: covr, testthat
-RoxygenNote: 6.1.1
+RoxygenNote: 7.1.1
 NeedsCompilation: no
-Packaged: 2019-03-22 19:27:49 UTC; trevorld
+Packaged: 2023-01-20 01:09:22 UTC; root
 Author: Trevor L Davis [aut, cre],
   Allen Day [aut] (Original package author),
   Roman Zenka [ctb]
 Maintainer: Trevor L Davis <trevor.l.davis@gmail.com>
-Repository: CRAN
-Date/Publication: 2019-03-22 20:10:03 UTC
diff --git a/MD5 b/MD5
deleted file mode 100644
index b33ba2c..0000000
--- a/MD5
+++ /dev/null
@@ -1,13 +0,0 @@
-b234ee4d69f5fce4486a80fdaf4a4263 *COPYING
-4fa994bf12089b1576a146f57637af98 *DESCRIPTION
-d400adb3d8a7edbac587ac399fdeb451 *NAMESPACE
-207afc894101f9cf06056ff778fc5e0a *NEWS.md
-a40a1a79c4d4770d9232c30a7951a07e *R/getopt.R
-5121860755a766ac2c250aa5909680bf *R/utils.R
-d4b58fcd686375f5884c3bb8d7428d32 *README.md
-74d919a70588c23dcd41197ec49cd73f *exec/example.R
-6f64f9d572b196c7a8b134220425a06a *man/get_Rscript_filename.Rd
-69fda93b3a4098d70c5994d809b1dc5a *man/getopt.Rd
-9ba3ea21bace8ecaa9b3687fa55f7efe *man/sort_list.Rd
-35fe6c4707e36c320771156c47cc943f *tests/run-all.R
-5d60af18504ba5aaf38be3d049eb4a7d *tests/testthat/test-getopt.R
diff --git a/R/getopt.R b/R/getopt.R
index b3b65cd..6d3137d 100644
--- a/R/getopt.R
+++ b/R/getopt.R
@@ -1,55 +1,55 @@
 # Copyright (c) 2008-2010 Allen Day
-# Copyright (c) 2011-2018 Trevor L. Davis <trevor.l.davis@gmail.com>  
-#  
-#  This file is free software: you may copy, redistribute and/or modify it  
-#  under the terms of the GNU General Public License as published by the  
-#  Free Software Foundation, either version 2 of the License, or (at your  
-#  option) any later version.  
-#  
-#  This file is distributed in the hope that it will be useful, but  
-#  WITHOUT ANY WARRANTY; without even the implied warranty of  
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  
-#  General Public License for more details.  
-#  
-#  You should have received a copy of the GNU General Public License  
-#  along with this program.  If not, see <http://www.gnu.org/licenses/>.  
+# Copyright (c) 2011-2018 Trevor L. Davis <trevor.l.davis@gmail.com>
+#
+#  This file is free software: you may copy, redistribute and/or modify it
+#  under the terms of the GNU General Public License as published by the
+#  Free Software Foundation, either version 2 of the License, or (at your
+#  option) any later version.
+#
+#  This file is distributed in the hope that it will be useful, but
+#  WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #' C-like getopt behavior
-#' 
+#'
 #' getopt is primarily intended to be used with ``\link{Rscript}''.  It
 #' facilitates writing ``\#!'' shebang scripts that accept short and long
 #' flags/options.  It can also be used from ``R'' directly, but is probably less
 #' useful in this context.
-#' 
+#'
 #' getopt() returns a \link{list} data structure containing \link{names} of the
 #' flags that were present in the \link{character} \link{vector} passed in under
 #' the \emph{opt} argument.  Each value of the \link{list} is coerced to the
 #' data type specified according to the value of the \emph{spec} argument.  See
 #' below for details.
-#' 
+#'
 #' Notes on naming convention:
-#' 
+#'
 #' 1. An \emph{option} is one of the shell-split input strings.
-#' 
+#'
 #' 2. A \emph{flag} is a type of \emph{option}.  a \emph{flag} can be defined as
 #' having no \emph{argument} (defined below), a required \emph{argument}, or an
 #' optional \emph{argument}.
-#' 
+#'
 #' 3. An \emph{argument} is a type of \emph{option}, and is the value associated
 #' with a flag.
-#' 
+#'
 #' 4. A \emph{long flag} is a type of \emph{flag}, and begins with the string
 #' ``--''.  If the \emph{long flag} has an associated \emph{argument}, it may be
 #' delimited from the \emph{long flag} by either a trailing \emph{=}, or may be
 #' the subsequent \emph{option}.
-#' 
+#'
 #' 5. A \emph{short flag} is a type of \emph{flag}, and begins with the string
 #' ``-''.  If a \emph{short flag} has an associated \emph{argument}, it is the
 #' subsequent \emph{option}.  \emph{short flags} may be bundled together,
 #' sharing a single leading ``-'', but only the final \emph{short flag} is able
 #' to have a corresponding \emph{argument}.
 #'
-#' Many users wonder whether they should use the getopt package, optparse package, 
+#' Many users wonder whether they should use the getopt package, optparse package,
 #' or argparse package.
 #' Here is some of the major differences:
 #'
@@ -58,14 +58,14 @@
 #' 1. As well as allowing one to specify options that take either
 #'      no argument or a required argument like \code{optparse},
 #'    \code{getopt} also allows one to specify option with an optional argument.
-#' 
+#'
 #' Some features implemented in \code{optparse} package unavailable in \code{getopt}
 #'
 #' 1. Limited support for capturing positional arguments after the optional arguments
-#' when \code{positional_arguments} set to TRUE in \code{parse_args} 
+#' when \code{positional_arguments} set to TRUE in \code{parse_args}
 #'
 #' 2. Automatic generation of an help option and printing of help text when encounters an "-h"
-#' 
+#'
 #' 3. Option to specify default arguments for options as well the
 #'    variable name to store option values
 #'
@@ -75,64 +75,64 @@
 #' like the getopt and optparse packages.
 #'
 #' Some Features unlikely to be implemented in \code{getopt}:
-#' 
+#'
 #' 1. Support for multiple, identical flags, e.g. for "-m 3 -v 5 -v", the
 #' trailing "-v" overrides the preceding "-v 5", result is v=TRUE (or equivalent
 #' typecast).
-#' 
+#'
 #' 2. Support for multi-valued flags, e.g. "--libpath=/usr/local/lib
 #' --libpath=/tmp/foo".
-#' 
+#'
 #' 3. Support for lists, e.g. "--define os=linux --define os=redhat" would
 #' set result$os$linux=TRUE and result$os$redhat=TRUE.
-#' 
+#'
 #' 4. Support for incremental, argument-less flags, e.g. "/path/to/script
 #' -vvv" should set v=3.
-#' 
+#'
 #' 5. Support partial-but-unique string match on options, e.g. "--verb" and
 #' "--verbose" both match long flag "--verbose".
-#' 
+#'
 #' 6. No support for mixing in positional arguments or extra arguments that
 #' don't match any options.  For example, you can't do "my.R --arg1 1 foo bar
 #' baz" and recover "foo", "bar", "baz" as a list.  Likewise for "my.R foo
 #' --arg1 1 bar baz".
-#' 
+#'
 #' @aliases getopt getopt-package
 #' @param spec The getopt specification, or spec of what options are considered
 #' valid.  The specification must be either a 4-5 column \link{matrix}, or a
 #' \link{character} \link{vector} coercible into a 4 column \link{matrix} using
 #' \link{matrix}(x,ncol=4,byrow=TRUE) command.  The \link{matrix}/\link{vector}
 #' contains:
-#' 
+#'
 #' Column 1: the \emph{long flag} name.  A multi-\link{character} string.
-#' 
+#'
 #' Column 2: \emph{short flag} alias of Column 1.  A single-\link{character}
 #' string.
-#' 
+#'
 #' Column 3: \emph{Argument} mask of the \emph{flag}.  An \link{integer}.
 #' Possible values: 0=no argument, 1=required argument, 2=optional argument.
-#' 
+#'
 #' Column 4: Data type to which the \emph{flag}'s argument shall be cast using
 #' \link{storage.mode}.  A multi-\link{character} string.  This only considered
 #' for same-row Column 3 values of 1,2.  Possible values: \link{logical},
 #' \link{integer}, \link{double}, \link{complex}, \link{character}.
 #' If \link{numeric} is encountered then it will be converted to double.
-#' 
+#'
 #' Column 5 (optional): A brief description of the purpose of the option.
-#' 
+#'
 #' The terms \emph{option}, \emph{flag}, \emph{long flag}, \emph{short flag},
 #' and \emph{argument} have very specific meanings in the context of this
 #' document.  Read the ``Description'' section for definitions.
-#' @param opt This defaults to the return value of \link{commandArgs}(TRUE) unless 
-#'    \code{argv} is in the global environment in which case it uses that instead 
+#' @param opt This defaults to the return value of \link{commandArgs}(TRUE) unless
+#'    \code{argv} is in the global environment in which case it uses that instead
 #'    (this is for compatibility with littler).
-#' 
+#'
 #' If R was invoked directly via the ``R'' command, this corresponds to all
 #' arguments passed to R after the ``--args'' flag.
-#' 
+#'
 #' If R was invoked via the ``\link{Rscript}'' command, this corresponds to all
 #' arguments after the name of the R script file.
-#' 
+#'
 #' Read about \link{commandArgs} and \link{Rscript} to learn more.
 #' @param command The string to use in the usage message as the name of the
 #' script.  See argument \emph{usage}.
@@ -157,326 +157,331 @@
 #'   'sd'     , 's', 1, "double"
 #' ), byrow=TRUE, ncol=4)
 #' opt = getopt(spec)
-#' 
-#' # if help was asked for print a friendly message 
+#'
+#' # if help was asked for print a friendly message
 #' # and exit with a non-zero error code
-#' if ( !is.null(opt$help) ) {
-#'   cat(getopt(spec, usage=TRUE))
-#'   q(status=1)
+#' if (!is.null(opt$help)) {
+#'   cat(getopt(spec, usage = TRUE))
+#'   q(status = 1)
 #' }
-#' 
+#'
 #' # set some reasonable defaults for the options that are needed,
 #' # but were not specified.
-#' if ( is.null(opt$mean    ) ) { opt$mean    = 0     }
-#' if ( is.null(opt$sd      ) ) { opt$sd      = 1     }
-#' if ( is.null(opt$count   ) ) { opt$count   = 10    }
-#' if ( is.null(opt$verbose ) ) { opt$verbose = FALSE }
-#' 
+#' if (is.null(opt$mean)) opt$mean <- 0
+#' if (is.null(opt$sd)) opt$sd <- 1
+#' if (is.null(opt$count)) opt$count <- 10
+#' if (is.null(opt$verbose)) opt$verbose <- FALSE
+#'
 #' # print some progress messages to stderr, if requested.
-#' if ( opt$verbose ) { write("writing...",stderr()) }
-#' 
+#' if (opt$verbose) write("writing...", stderr())
+#'
 #' # do some operation based on user input.
-#' cat(paste(rnorm(opt$count,mean=opt$mean,sd=opt$sd),collapse="\n"))
+#' cat(paste(rnorm(opt$count, mean = opt$mean, sd = opt$sd), collapse = "\n"))
 #' cat("\n")
-#' 
+#'
 #' # signal success and exit.
 #' # q(status=0)
-#' 
-#' @import stats 
-getopt = function (spec=NULL,opt=NULL,command=get_Rscript_filename(),usage=FALSE,debug=FALSE) {
+#'
+#' @import stats
+getopt <- function(spec = NULL, opt = NULL, command = get_Rscript_filename(), usage = FALSE, debug = FALSE) { # nolint
 
   # littler compatibility - map argv vector to opt
   if (is.null(opt)) {
       if (exists("argv", where = .GlobalEnv, inherits = FALSE)) {
-        opt = get("argv", envir = .GlobalEnv) #nocov
+        opt <- get("argv", envir = .GlobalEnv) # nocov
       } else {
-        opt = commandArgs(TRUE)
+        opt <- commandArgs(TRUE)
       }
   }
 
-  ncol=4
-  maxcol=6
-  col.long.name    = 1
-  col.short.name   = 2
-  col.has.argument = 3
-  col.mode         = 4
-  col.description  = 5
+  ncol <- 4
+  maxcol <- 6
+  col_long_name <- 1
+  col_short_name <- 2
+  col_has_argument <- 3
+  col_mode <- 4
+  col_description <- 5
 
-  flag.no.argument = 0
-  flag.required.argument = 1
-  flag.optional.argument = 2
+  flag_no_argument <- 0
+  flag_required_argument <- 1
+  flag_optional_argument <- 2
 
-  result = list()
-  result$ARGS = vector(mode="character")
+  result <- list()
+  result$ARGS <- vector(mode = "character") # nolint
 
-  #no spec.  fail.
-  if ( is.null(spec) ) {
+  # no spec.  fail.
+  if (is.null(spec)) {
     stop('argument "spec" must be non-null.')
 
-  #spec is not a matrix.  attempt to coerce, if possible.  issue a warning.
-  } else if ( !is.matrix(spec) ) {
-    if ( length(spec)/4 == as.integer(length(spec)/4) ) {
+  # spec is not a matrix.  attempt to coerce, if possible.  issue a warning.
+  } else if (!is.matrix(spec)) {
+    if (length(spec) / 4 == as.integer(length(spec) / 4)) {
       warning('argument "spec" was coerced to a 4-column (row-major) matrix.  use a matrix to prevent the coercion')
-      spec = matrix( spec, ncol=ncol, byrow=TRUE )
+      spec <- matrix(spec, ncol = ncol, byrow = TRUE)
     } else {
       stop('argument "spec" must be a matrix, or a character vector with length divisible by 4, rtfm.')
     }
 
-  #spec is a matrix, but it has too few columns.
-  } else if ( dim(spec)[2] < ncol ) {
-    stop(paste('"spec" should have at least ', ncol, ' columns.',sep=''))
+  # spec is a matrix, but it has too few columns.
+  } else if (dim(spec)[2] < ncol) {
+    stop(paste('"spec" should have at least ', ncol, " columns.", sep = ""))
 
-  #spec is a matrix, but it has too many columns.
-  } else if ( dim(spec)[2] > maxcol ) {
-    stop(paste('"spec" should have no more than ', maxcol, ' columns.',sep=''))
+  # spec is a matrix, but it has too many columns.
+  } else if (dim(spec)[2] > maxcol) {
+    stop(paste('"spec" should have no more than ', maxcol, " columns.", sep = ""))
 
-  #spec is a matrix, and it has some optional columns.
-  } else if ( dim(spec)[2] != ncol ) {
-    ncol = dim(spec)[2]
+  # spec is a matrix, and it has some optional columns.
+  } else if (dim(spec)[2] != ncol) {
+    ncol <- dim(spec)[2]
   }
 
-  #sanity check.  make sure long names are unique, and short names are unique.
-  if ( length(unique(spec[,col.long.name])) != length(spec[,col.long.name]) ) {
-    stop(paste('redundant long names for flags (column ',col.long.name,' of spec matrix).',sep=''))
+  # sanity check.  make sure long names are unique, and short names are unique.
+  if (length(unique(spec[, col_long_name])) != length(spec[, col_long_name])) {
+    stop(paste("redundant long names for flags (column ", col_long_name, " of spec matrix).", sep = ""))
   }
-  if ( length(stats::na.omit(unique(spec[,col.short.name]))) != length(stats::na.omit(spec[,col.short.name])) ) {
-    stop(paste('redundant short names for flags (column ',col.short.name,' of spec matrix).',sep=''))
+  if (length(stats::na.omit(unique(spec[, col_short_name]))) != length(stats::na.omit(spec[, col_short_name]))) {
+    stop(paste("redundant short names for flags (column ", col_short_name, " of spec matrix).", sep = ""))
   }
   # convert numeric type to double type
-  spec[,4] <- gsub("numeric", "double", spec[,4])
+  spec[, 4] <- gsub("numeric", "double", spec[, 4])
 
   # if usage=TRUE, don't process opt, but generate a usage string from the data in spec
-  if ( usage ) {
-    ret = ''
-    ret = paste(ret,"Usage: ",command,sep='')
-    for ( j in 1:(dim(spec))[1] ) {
-      ret = paste(ret,' [-[-',spec[j,col.long.name],'|',spec[j,col.short.name],']',sep='')
-      if (spec[j,col.has.argument] == flag.no.argument) {
-        ret = paste(ret,']',sep='')
-      } else if (spec[j,col.has.argument] == flag.required.argument) {
-        ret = paste(ret,' <',spec[j,col.mode],'>]',sep='')
-      } else if (spec[j,col.has.argument] == flag.optional.argument) {
-        ret = paste(ret,' [<',spec[j,col.mode],'>]]',sep='')
+  if (usage) {
+    ret <- ""
+    ret <- paste(ret, "Usage: ", command, sep = "")
+    for (j in 1:(dim(spec))[1]) {
+      ret <- paste(ret, " [-[-", spec[j, col_long_name], "|", spec[j, col_short_name], "]", sep = "")
+      if (spec[j, col_has_argument] == flag_no_argument) {
+        ret <- paste(ret, "]", sep = "")
+      } else if (spec[j, col_has_argument] == flag_required_argument) {
+        ret <- paste(ret, " <", spec[j, col_mode], ">]", sep = "")
+      } else if (spec[j, col_has_argument] == flag_optional_argument) {
+        ret <- paste(ret, " [<", spec[j, col_mode], ">]]", sep = "")
       }
     }
     # include usage strings
-    if ( ncol >= 5 ) {
-      max.long = max(apply(cbind(spec[,col.long.name]),1,function(x)length(strsplit(x,'')[[1]])))
-      ret = paste(ret,"\n",sep='')
-      for (j in 1:(dim(spec))[1] ) {
-        ret = paste(ret,sprintf(paste("    -%s|--%-",max.long,"s    %s\n",sep=''),
-          spec[j,col.short.name],spec[j,col.long.name],spec[j,col.description]
-        ),sep='')
+    if (ncol >= 5) {
+      max.long <- max(apply(cbind(spec[, col_long_name]), 1, function(x)length(strsplit(x, "")[[1]])))
+      ret <- paste(ret, "\n", sep = "")
+      for (j in 1:(dim(spec))[1]) {
+        ret <- paste(ret, sprintf(paste("    -%s|--%-", max.long, "s    %s\n",  sep = ""),
+          spec[j, col_short_name], spec[j, col_long_name], spec[j, col_description]
+        ), sep = "")
       }
     }
     else {
-      ret = paste(ret,"\n",sep='')
+      ret <- paste(ret, "\n", sep = "")
     }
     return(ret)
   }
 
-  #XXX check spec validity here.  e.g. column three should be convertible to integer
+  # XXX check spec validity here.  e.g. column three should be convertible to integer
 
-  i = 1
+  i <- 1
 
-  while ( i <= length(opt) ) {
-    if ( debug ) print(paste("processing",opt[i]))
+  while (i <= length(opt)) {
+    if (debug) print(paste("processing", opt[i]))
 
-    current.flag = 0 #XXX use NA
-    optstring = opt[i]
+    current_flag <- 0 # XXX use NA
+    optstring <- opt[i]
 
 
-    #long flag
-    if ( substr(optstring, 1, 2) == '--' ) {
-      if ( debug ) print(paste("  long option:",opt[i]))
+    # long flag
+    if (substr(optstring, 1, 2) == "--") {
+      if (debug) print(paste("  long option:", opt[i]))
 
-      optstring = substring(optstring,3)
+      optstring <- substring(optstring, 3)
 
-      this.flag = NA
-      this.argument = NA
-      kv = strsplit(optstring, '=')[[1]]
-      # if ( !is.na(kv[2]) ) {
-      if ( grepl('=', optstring) ) {
-        this.flag = kv[1]
-        this.argument = paste(kv[-1], collapse="=")
+      this_flag <- NA
+      this_argument <- NA
+      kv <- strsplit(optstring, "=")[[1]]
+      # if (!is.na(kv[2])) {
+      if (grepl("=", optstring)) {
+        this_flag <- kv[1]
+        this_argument <- paste(kv[-1], collapse = "=")
       } else {
-        this.flag = optstring
+        this_flag <- optstring
       }
 
-      rowmatch = grep( this.flag, spec[,col.long.name],fixed=TRUE )
+      rowmatch <- grep(this_flag, spec[, col_long_name], fixed = TRUE)
 
-      #long flag is invalid, matches no options
-      if ( length(rowmatch) == 0 ) {
-        stop(paste('long flag "', this.flag, '" is invalid', sep=''))
+      # long flag is invalid, matches no options
+      if (length(rowmatch) == 0) {
+        stop(paste('long flag "', this_flag, '" is invalid', sep = ""))
 
-      #long flag is ambiguous, matches too many options
-      } else if ( length(rowmatch) > 1 ) {
+      # long flag is ambiguous, matches too many options
+      } else if (length(rowmatch) > 1) {
         # check if there is an exact match and use that
-        rowmatch = which(this.flag == spec[,col.long.name])
-        if(length(rowmatch) == 0) {
-          stop(paste('long flag "', this.flag, '" is ambiguous', sep=''))
+        rowmatch <- which(this_flag == spec[, col_long_name])
+        if (length(rowmatch) == 0) {
+          stop(paste('long flag "', this_flag, '" is ambiguous', sep = ""))
         }
       }
 
-      #if we have an argument
-      if ( !is.na(this.argument) ) {
-        #if we can't accept the argument, bail out
-        if ( spec[rowmatch, col.has.argument] == flag.no.argument ) {
-          stop(paste('long flag "', this.flag, '" accepts no arguments', sep=''))
+      # if we have an argument
+      if (!is.na(this_argument)) {
+        # if we can't accept the argument, bail out
+        if (spec[rowmatch, col_has_argument] == flag_no_argument) {
+          stop(paste('long flag "', this_flag, '" accepts no arguments', sep = ""))
 
-        #otherwise assign the argument to the flag
+        # otherwise assign the argument to the flag
         } else {
-          mode = spec[rowmatch, col.mode]
-          warning_msg <- tryCatch(storage.mode(this.argument) <- mode,
-                   warning = function(w) {warning(paste(mode, "expected, got", dQuote(this.argument)))})
-          if( is.na(this.argument) && !grepl("expected, got",  warning_msg) ) {
-              warning(paste('long flag', this.flag, 'given a bad argument'))
+          mode <- spec[rowmatch, col_mode]
+          warning_msg <- tryCatch(storage.mode(this_argument) <- mode,
+                   warning = function(w) warning(paste(mode, "expected, got", dQuote(this_argument))))
+          if (is.na(this_argument) && !grepl("expected, got",  warning_msg)) {
+              warning(paste("long flag", this_flag, "given a bad argument"))
           }
-          result[spec[rowmatch, col.long.name]] = this.argument
-	  i = i + 1
-	  next
+          result[spec[rowmatch, col_long_name]] <- this_argument
+          i <- i + 1
+          next
         }
 
-      #otherwise, we don't have an argument
+      # otherwise, we don't have an argument
       } else {
-        #if we require an argument, bail out
-        ###if ( spec[rowmatch, col.has.argument] == flag.required.argument ) {
-        ###  stop(paste('long flag "', this.flag, '" requires an argument', sep=''))
-
-        #long flag has no attached argument. set flag as present.  set current.flag so we can peek ahead later and consume the argument if it's there
+        # nolint start
+        # if we require an argument, bail out
+        ### if (spec[rowmatch, col_has_argument] == flag_required_argument) {
+        ###  stop(paste('long flag "', this_flag, '" requires an argument', sep = ""))
+
+        # long flag has no attached argument. set flag as present.  
+        # set current_flag so we can peek ahead later and consume the argument if it's there
+        # nolint end
         ###} else {
-          result[spec[rowmatch, col.long.name]] = TRUE
-          current.flag = rowmatch
+          result[spec[rowmatch, col_long_name]] <- TRUE
+          current_flag <- rowmatch
         ###}
       }
 
-    #short flag(s)
-    } else if ( substr(optstring, 1, 1) == '-' ) {
-      if ( debug ) print(paste("  short option:",opt[i]))
+    # short flag(s)
+    } else if (substr(optstring, 1, 1) == "-") {
+      if (debug) print(paste("  short option:", opt[i]))
 
-      these.flags = strsplit(optstring,'')[[1]]
+      these_flags <- strsplit(optstring, "")[[1]]
 
-      done = FALSE
-      for ( j in 2:length(these.flags) ) {
-        this.flag = these.flags[j]
-        rowmatch = grep( this.flag, spec[,col.short.name],fixed=TRUE )
+      done <- FALSE
+      for (j in 2:length(these_flags)) {
+        this_flag <- these_flags[j]
+        rowmatch <- grep(this_flag, spec[, col_short_name], fixed = TRUE)
 
-        #short flag is invalid, matches no options
-        if ( length(rowmatch) == 0 ) {
-          stop(paste('short flag "', this.flag, '" is invalid', sep=''))
+        # short flag is invalid, matches no options
+        if (length(rowmatch) == 0) {
+          stop(paste('short flag "', this_flag, '" is invalid', sep = ""))
 
-        #short flag has an argument, but is not the last in a compound flag string
-        } else if ( j < length(these.flags) & spec[rowmatch,col.has.argument] == flag.required.argument ) {
-          stop(paste('short flag "', this.flag, '" requires an argument, but has none', sep=''))
+        # short flag has an argument, but is not the last in a compound flag string
+        } else if (j < length(these_flags) & spec[rowmatch, col_has_argument] == flag_required_argument) {
+          stop(paste('short flag "', this_flag, '" requires an argument, but has none', sep = ""))
 
-        #short flag has no argument, flag it as present
-        } else if ( spec[rowmatch,col.has.argument] == flag.no.argument ) {
-          result[spec[rowmatch, col.long.name]] = TRUE
-	  done = TRUE
+        # short flag has no argument, flag it as present
+        } else if (spec[rowmatch, col_has_argument] == flag_no_argument) {
+          result[spec[rowmatch, col_long_name]] <- TRUE
+          done <- TRUE
 
-        #can't definitively process this flag yet, need to see if next option is an argument or not
+        # can't definitively process this_flag flag yet, need to see if next option is an argument or not
         } else {
-          result[spec[rowmatch, col.long.name]] = TRUE
-          current.flag = rowmatch
-          done = FALSE
+          result[spec[rowmatch, col_long_name]] <- TRUE
+          current_flag <- rowmatch
+          done <- FALSE
         }
       }
-      if ( done ) {
-        i = i + 1
+      if (done) {
+        i <- i + 1
         next
       }
     }
 
-    #invalid opt
-    if ( current.flag == 0 ) {
-      stop(paste('"', optstring, '" is not a valid option, or does not support an argument', sep=''))
-      #TBD support for positional args
-      #if ( debug ) print(paste('"', optstring, '" not a valid option.  It is appended to getopt(...)$ARGS', sep=''))
-      #result$ARGS = append(result$ARGS, optstring)
+    # invalid opt
+    if (current_flag == 0) {
+        stop(paste('"', optstring, '" is not a valid option, or does not support an argument', sep = ""))
+
+        # nolint start
+        # TBD support for positional args
+        # if (debug) print(paste('"', optstring, '" not a valid option.  It is appended to getopt(...)$ARGS', sep = ""))
+        # result$ARGS = append(result$ARGS, optstring)
+        # nolint end
 
     # some dangling flag, handle it
-    } else if ( current.flag > 0 ) {
-      if ( debug ) print('    dangling flag')
-      if ( length(opt) > i ) {
-        peek.optstring = opt[i + 1]
-        if ( debug ) print(paste('      peeking ahead at: "',peek.optstring,'"',sep=''))
-
-        #got an argument.  attach it, increment the index, and move on to the next option.  we don't allow arguments beginning with '-' UNLESS
-	#specfile indicates the value is an "integer" or "double", in which case we allow a leading dash (and verify trailing digits/decimals).
-        if ( substr(peek.optstring, 1, 1) != '-' |
-	  #match negative double
-	  ( substr(peek.optstring, 1, 1) == '-'
-	  & regexpr("^-[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$", peek.optstring) > 0
-	  & spec[current.flag, col.mode]== 'double'
-	  ) |
-	  #match negative integer
-	  ( substr(peek.optstring, 1, 1) == '-'
-	  & regexpr("^-[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$", peek.optstring) > 0
-	  & spec[current.flag, col.mode]== 'integer'
-	  )
-	) {
-          if ( debug ) print(paste('        consuming argument *',peek.optstring,'*',sep=''))
-
-          # storage.mode(peek.optstring) = spec[current.flag, col.mode]
-          mode = spec[current.flag, col.mode]
-          tryCatch(storage.mode(peek.optstring) <- mode,
-                   warning = function(w) {warning(paste(mode, "expected, got", dQuote(peek.optstring)))})
-          result[spec[current.flag, col.long.name]] = peek.optstring
-          i = i + 1
-
-	#a lone dash
-	} else if ( substr(peek.optstring, 1, 1) == '-' & length(strsplit(peek.optstring,'')[[1]]) == 1 ) {
-          if ( debug ) print('        consuming "lone dash" argument')
-          # storage.mode(peek.optstring) = spec[current.flag, col.mode]
-          mode = spec[current.flag, col.mode]
-          tryCatch(storage.mode(peek.optstring) <- mode,
-                   warning = function(w) {warning(paste(mode, "expected, got", dQuote(peek.optstring)))}) #nocov 
-          result[spec[current.flag, col.long.name]] = peek.optstring
-          i = i + 1
-
-        #no argument
+    } else if (current_flag > 0) {
+      if (debug) print("    dangling flag")
+      if (length(opt) > i) {
+        peek_optstring <- opt[i + 1]
+        if (debug) print(paste('      peeking ahead at: "', peek_optstring, '"', sep = ""))
+
+        # got an argument.  attach it, increment the index, and move on to the next option.
+        # we don't allow arguments beginning with "-" UNLESS specfile indicates the value is an "integer" or "double",
+        # in which case we allow a leading dash (and verify trailing digits/decimals).
+        if (substr(peek_optstring, 1, 1) != "-" |
+          # match negative double
+          (substr(peek_optstring, 1, 1) == "-"
+          & regexpr("^-[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$", peek_optstring) > 0
+          & spec[current_flag, col_mode] ==  "double"
+          ) |
+          # match negative integer
+          (substr(peek_optstring, 1, 1) == "-"
+          & regexpr("^-[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$", peek_optstring) > 0
+          & spec[current_flag, col_mode] ==  "integer"
+          )
+        ) {
+          if (debug) print(paste("        consuming argument *", peek_optstring, "*", sep = ""))
+
+          mode <- spec[current_flag, col_mode]
+          tryCatch(storage.mode(peek_optstring) <- mode,
+                   warning = function(w) warning(paste(mode, "expected, got", dQuote(peek_optstring))))
+          result[spec[current_flag, col_long_name]] <- peek_optstring
+          i <- i + 1
+
+        # a lone dash
+        } else if (substr(peek_optstring, 1, 1) == "-" & length(strsplit(peek_optstring, "")[[1]]) == 1) {
+          if (debug) print('        consuming "lone dash" argument')
+          mode <- spec[current_flag, col_mode]
+          tryCatch(storage.mode(peek_optstring) <- mode,
+                   warning = function(w) warning(paste(mode, "expected, got", dQuote(peek_optstring)))) # nocov
+          result[spec[current_flag, col_long_name]] <- peek_optstring
+          i <- i + 1
+
+        # no argument
         } else {
-          if ( debug ) print('        no argument!')
+          if (debug) print("        no argument!")
 
-          #if we require an argument, bail out
-          if ( spec[current.flag, col.has.argument] == flag.required.argument ) {
-            stop(paste('flag "', this.flag, '" requires an argument', sep=''))
+          # if we require an argument, bail out
+          if (spec[current_flag, col_has_argument] == flag_required_argument) {
+            stop(paste('flag "', this_flag, '" requires an argument', sep = ""))
 
-          #otherwise set flag as present.
+          # otherwise set flag as present.
           } else if (
-	    spec[current.flag, col.has.argument] == flag.optional.argument |
-	    spec[current.flag, col.has.argument] == flag.no.argument 
-	  ) {
-  	    x = TRUE
-  	    storage.mode(x) = spec[current.flag, col.mode]
-            result[spec[current.flag, col.long.name]] = x
+            spec[current_flag, col_has_argument] == flag_optional_argument |
+            spec[current_flag, col_has_argument] == flag_no_argument
+          ) {
+            x <- TRUE
+            storage.mode(x) <- spec[current_flag, col_mode]
+            result[spec[current_flag, col_long_name]] <- x
           } else {
-            stop(paste("This should never happen.", #nocov
-              "Is your spec argument correct?  Maybe you forgot to set", #nocov
-              "ncol=4, byrow=TRUE in your matrix call?")) #nocov
-	  }
+            stop(paste("This should never happen.", # nocov
+              "Is your spec argument correct?  Maybe you forgot to set", # nocov
+              "ncol=4, byrow=TRUE in your matrix call?")) # nocov
+          }
         }
-      #trailing flag without required argument
-      } else if ( spec[current.flag, col.has.argument] == flag.required.argument ) {
-        stop(paste('flag "', this.flag, '" requires an argument', sep=''))
-
-      #trailing flag without optional argument
-      } else if ( spec[current.flag, col.has.argument] == flag.optional.argument ) {
-        x = TRUE
-        storage.mode(x) = spec[current.flag, col.mode]
-        result[spec[current.flag, col.long.name]] = x
-
-      #trailing flag without argument
-      } else if ( spec[current.flag, col.has.argument] == flag.no.argument ) {
-        x = TRUE
-        storage.mode(x) = spec[current.flag, col.mode]
-        result[spec[current.flag, col.long.name]] = x
+      # trailing flag without required argument
+      } else if (spec[current_flag, col_has_argument] == flag_required_argument) {
+        stop(paste('flag "', this_flag, '" requires an argument', sep = ""))
+
+      # trailing flag without optional argument
+      } else if (spec[current_flag, col_has_argument] == flag_optional_argument) {
+        x <- TRUE
+        storage.mode(x) <- spec[current_flag, col_mode]
+        result[spec[current_flag, col_long_name]] <- x
+
+      # trailing flag without argument
+      } else if (spec[current_flag, col_has_argument] == flag_no_argument) {
+        x <- TRUE
+        storage.mode(x) <- spec[current_flag, col_mode]
+        result[spec[current_flag, col_long_name]] <- x
       } else {
-        stop("this should never happen (2).  please inform the author.") #nocov
+        stop("this should never happen (2).  please inform the author.") # nocov
       }
-    } #no dangling flag, nothing to do.
+    } # no dangling flag, nothing to do.
 
-    i = i+1
+    i <- i + 1
   }
   return(result)
 }
diff --git a/R/utils.R b/R/utils.R
index 6f2b91f..39d3185 100644
--- a/R/utils.R
+++ b/R/utils.R
@@ -1,28 +1,28 @@
-# Copyright (c) 2011-2013 Trevor L. Davis <trevor.l.davis@gmail.com>  
-#  
-#  This file is free software: you may copy, redistribute and/or modify it  
-#  under the terms of the GNU General Public License as published by the  
-#  Free Software Foundation, either version 2 of the License, or (at your  
-#  option) any later version.  
-#  
-#  This file is distributed in the hope that it will be useful, but  
-#  WITHOUT ANY WARRANTY; without even the implied warranty of  
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  
-#  General Public License for more details.  
-#  
-#  You should have received a copy of the GNU General Public License  
-#  along with this program.  If not, see <http://www.gnu.org/licenses/>.  
+# Copyright (c) 2011-2013 Trevor L. Davis <trevor.l.davis@gmail.com>
+#
+#  This file is free software: you may copy, redistribute and/or modify it
+#  under the terms of the GNU General Public License as published by the
+#  Free Software Foundation, either version 2 of the License, or (at your
+#  option) any later version.
+#
+#  This file is distributed in the hope that it will be useful, but
+#  WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #' Returns file name of calling Rscript
 #'
-#' \code{get_Rscript_filename} returns the file name of calling Rscript 
+#' \code{get_Rscript_filename} returns the file name of calling Rscript
 #' @return A string with the filename of the calling script.
 #'      If not found (i.e. you are in a interactive session) returns NA.
 #'
 #' @export
-get_Rscript_filename <- function() {
-    prog <- sub("--file=", "", grep("--file=", commandArgs(), value=TRUE)[1])
-    if( .Platform$OS.type == "windows") { 
+get_Rscript_filename <- function() { # nolint
+    prog <- sub("--file=", "", grep("--file=", commandArgs(), value = TRUE)[1])
+    if (.Platform$OS.type == "windows") {
         prog <- gsub("\\\\", "\\\\\\\\", prog)
     }
     prog
@@ -35,10 +35,10 @@ get_Rscript_filename <- function() {
 #' @return A sorted list.
 #' @export
 sort_list <- function(unsorted_list) {
-    for(ii in seq(along=unsorted_list)) {
-        if(is.list(unsorted_list[[ii]])) {
+    for (ii in seq(along = unsorted_list)) {
+        if (is.list(unsorted_list[[ii]])) {
             unsorted_list[[ii]] <- sort_list(unsorted_list[[ii]])
         }
     }
-    unsorted_list[sort(names(unsorted_list))] 
+    unsorted_list[sort(names(unsorted_list))]
 }
diff --git a/README.md b/README.md
deleted file mode 100644
index 9d95b9b..0000000
--- a/README.md
+++ /dev/null
@@ -1,78 +0,0 @@
-getopt
-======
-
-[![CRAN Status Badge](https://www.r-pkg.org/badges/version/getopt)](https://cran.r-project.org/package=getopt)
-
-[![Build Status](https://travis-ci.org/trevorld/r-getopt.svg?branch=master)](https://travis-ci.org/trevorld/r-getopt)
-
-[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/trevorld/r-getopt?branch=master&svg=true)](https://ci.appveyor.com/project/trevorld/r-getopt)
-
-[![Coverage Status](https://img.shields.io/codecov/c/github/trevorld/r-getopt.svg)](https://codecov.io/github/trevorld/r-getopt?branch=master)
-
-[![RStudio CRAN mirror downloads](https://cranlogs.r-pkg.org/badges/getopt)](https://cran.r-project.org/package=getopt)
-
-[![Project Status: Active -- The project has reached a stable, usable state but is no longer being actively developed; support/maintenance will be provided as time allows.](http://www.repostatus.org/badges/latest/inactive.svg)](http://www.repostatus.org/#inactive)
-
-`getopt` is an R package designed to be used with `Rscript` to write
-\"\#!\"-shebang scripts that accept short and long flags/options. Many
-users will prefer using instead the package
-[optparse](https://github.com/trevorld/r-optparse) which adds extra
-features (automatically generated help option and usage, support for
-default values, basic positional argument support).
-
-To install the last version released on CRAN use the following command:
-
-``` {.sourceCode .r}
-install.packages("getopt")
-```
-
-To install the development version use the following command:
-
-``` {.sourceCode .r}
-install.packages("remotes")
-remotes:install_github("trevorld/r-getopt")
-```
-
-example
--------
-
-An example Rscript using `getopt`:
-
-``` {.sourceCode .r}
-#!/path/to/Rscript
-library('getopt')
-# get options, using the spec as defined by the enclosed list.
-# we read the options from the default: commandArgs(TRUE).
-spec = matrix(c(
-  'verbose', 'v', 2, "integer",
-  'help'   , 'h', 0, "logical",
-  'count'  , 'c', 1, "integer",
-  'mean'   , 'm', 1, "double",
-  'sd'     , 's', 1, "double"
-), byrow=TRUE, ncol=4)
-opt = getopt(spec)
-
-# if help was asked for print a friendly message 
-# and exit with a non-zero error code
-if ( !is.null(opt$help) ) {
-  cat(getopt(spec, usage=TRUE))
-  q(status=1)
-}
-
-# set some reasonable defaults for the options that are needed,
-# but were not specified.
-if ( is.null(opt$mean    ) ) { opt$mean    = 0     }
-if ( is.null(opt$sd      ) ) { opt$sd      = 1     }
-if ( is.null(opt$count   ) ) { opt$count   = 10    }
-if ( is.null(opt$verbose ) ) { opt$verbose = FALSE }
-
-# print some progress messages to stderr, if requested.
-if ( opt$verbose ) { write("writing...",stderr()) }
-
-# do some operation based on user input.
-cat(paste(rnorm(opt$count,mean=opt$mean,sd=opt$sd),collapse="\n"))
-cat("\n")
-
-# signal success and exit.
-# q(status=0)
-```
diff --git a/debian/changelog b/debian/changelog
index 6667c5f..5c5c626 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+r-cran-getopt (1.20.3+git20211008.1.28b381a-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 20 Jan 2023 01:09:33 -0000
+
 r-cran-getopt (1.20.3-3) unstable; urgency=medium
 
   * Rebuilt for r-4.0 transition
diff --git a/debian/patches/patch_Rscript_path_in_example b/debian/patches/patch_Rscript_path_in_example
index eb7f7ca..f66c5ab 100644
--- a/debian/patches/patch_Rscript_path_in_example
+++ b/debian/patches/patch_Rscript_path_in_example
@@ -4,8 +4,10 @@ Origin: other
 Forwarded: not-needed
 Last-Update: 2019-03-24
 
---- r-cran-getopt-1.20.3.orig/exec/example.R
-+++ r-cran-getopt-1.20.3/exec/example.R
+Index: r-cran-getopt.git/exec/example.R
+===================================================================
+--- r-cran-getopt.git.orig/exec/example.R
++++ r-cran-getopt.git/exec/example.R
 @@ -1,4 +1,4 @@
 -#!/path/to/Rscript
 +#!/usr/bin/Rscript
diff --git a/man/figures/logo.png b/man/figures/logo.png
new file mode 100644
index 0000000..9297010
Binary files /dev/null and b/man/figures/logo.png differ
diff --git a/man/figures/logo.svg b/man/figures/logo.svg
new file mode 100644
index 0000000..3280be1
--- /dev/null
+++ b/man/figures/logo.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="216pt" height="216pt" viewBox="0 0 216 216" version="1.1">
+<defs>
+<image id="image5" width="48" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAQCAYAAABQrvyxAAAABmJLR0QA/wD/AP+gvaeTAAAAcUlEQVRIiWNgGAXDB/yHYrqaz0RDC+kChrwHGKE0rqinRJ4RiY1PnpDZBM3HlraQxQjJ4xOjuflDPgmxkKCWliUM2YAUDzASVkJ/MOSTECWlCLoabOqIMZ9Ys/GZj1UhvdI8RXYN+STEwkBaFI4CagMASVcp/XnawCoAAAAASUVORK5CYII="/>
+<clipPath id="clip1">
+  <path d="M 65 101.519531 L 151 101.519531 L 151 187.917969 L 65 187.917969 Z M 65 101.519531 "/>
+</clipPath>
+<image id="image8" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQ4jWNgGCzgPxSjs/GpY2BgYGBgotRmJjQTcbHxGsCIxMfFxmsARWDgDWBkwB9YBMOB1ECkfjoYBQwMACiUDA3GCNdrAAAAAElFTkSuQmCC"/>
+</defs>
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80.392157%,49.803922%,19.607843%);fill-opacity:1;" d="M 108 0 L 14.46875 54 L 14.46875 162 L 108 216 L 201.53125 162 L 201.53125 54 Z M 108 0 "/>
+<use xlink:href="#image5" transform="matrix(2.835,0,0,2.835,39.96,52.92)"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<use xlink:href="#image8" transform="matrix(5.4,0,0,5.4,64.8,101.52)"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 108 6.480469 L 20.082031 57.238281 L 20.082031 158.761719 L 108 209.519531 L 195.917969 158.761719 L 195.917969 57.238281 Z M 108 0 L 14.46875 54 L 14.46875 162 L 108 216 L 201.53125 162 L 201.53125 54 Z M 108 0 "/>
+</g>
+</svg>
diff --git a/man/getopt.Rd b/man/getopt.Rd
index 35ad276..18a4a6e 100644
--- a/man/getopt.Rd
+++ b/man/getopt.Rd
@@ -5,8 +5,13 @@
 \alias{getopt-package}
 \title{C-like getopt behavior}
 \usage{
-getopt(spec = NULL, opt = NULL, command = get_Rscript_filename(),
-  usage = FALSE, debug = FALSE)
+getopt(
+  spec = NULL,
+  opt = NULL,
+  command = get_Rscript_filename(),
+  usage = FALSE,
+  debug = FALSE
+)
 }
 \arguments{
 \item{spec}{The getopt specification, or spec of what options are considered
@@ -35,8 +40,8 @@ The terms \emph{option}, \emph{flag}, \emph{long flag}, \emph{short flag},
 and \emph{argument} have very specific meanings in the context of this
 document.  Read the ``Description'' section for definitions.}
 
-\item{opt}{This defaults to the return value of \link{commandArgs}(TRUE) unless 
-   \code{argv} is in the global environment in which case it uses that instead 
+\item{opt}{This defaults to the return value of \link{commandArgs}(TRUE) unless
+   \code{argv} is in the global environment in which case it uses that instead
    (this is for compatibility with littler).
 
 If R was invoked directly via the ``R'' command, this corresponds to all
@@ -90,7 +95,7 @@ subsequent \emph{option}.  \emph{short flags} may be bundled together,
 sharing a single leading ``-'', but only the final \emph{short flag} is able
 to have a corresponding \emph{argument}.
 
-Many users wonder whether they should use the getopt package, optparse package, 
+Many users wonder whether they should use the getopt package, optparse package,
 or argparse package.
 Here is some of the major differences:
 
@@ -153,26 +158,26 @@ spec = matrix(c(
 ), byrow=TRUE, ncol=4)
 opt = getopt(spec)
 
-# if help was asked for print a friendly message 
+# if help was asked for print a friendly message
 # and exit with a non-zero error code
-if ( !is.null(opt$help) ) {
-  cat(getopt(spec, usage=TRUE))
-  q(status=1)
+if (!is.null(opt$help)) {
+  cat(getopt(spec, usage = TRUE))
+  q(status = 1)
 }
 
 # set some reasonable defaults for the options that are needed,
 # but were not specified.
-if ( is.null(opt$mean    ) ) { opt$mean    = 0     }
-if ( is.null(opt$sd      ) ) { opt$sd      = 1     }
-if ( is.null(opt$count   ) ) { opt$count   = 10    }
-if ( is.null(opt$verbose ) ) { opt$verbose = FALSE }
+if (is.null(opt$mean)) opt$mean <- 0
+if (is.null(opt$sd)) opt$sd <- 1
+if (is.null(opt$count)) opt$count <- 10
+if (is.null(opt$verbose)) opt$verbose <- FALSE
 
 # print some progress messages to stderr, if requested.
-if ( opt$verbose ) { write("writing...",stderr()) }
+if (opt$verbose) write("writing...", stderr())
 
 # do some operation based on user input.
-cat(paste(rnorm(opt$count,mean=opt$mean,sd=opt$sd),collapse="\\n"))
-cat("\\n")
+cat(paste(rnorm(opt$count, mean = opt$mean, sd = opt$sd), collapse = "\n"))
+cat("\n")
 
 # signal success and exit.
 # q(status=0)
diff --git a/tests/testthat/test-getopt.R b/tests/testthat/test-getopt.R
index fb57483..5eb04b9 100644
--- a/tests/testthat/test-getopt.R
+++ b/tests/testthat/test-getopt.R
@@ -1,79 +1,79 @@
 context("Testing getopt")
 test_that("getopt works as expected", {
-    spec = matrix(c(
-      'verbose', 'v', 2, "integer",
-      'help'   , 'h', 0, "logical",
-      'dummy1' , 'd', 0, "logical",
-      'dummy2' , 'e', 2, "logical",
-      'count'  , 'c', 1, "integer",
-      'mean'   , 'm', 1, "double",
-      'sd'     , 's', 1, "double",
-      'output' , 'O', 1, "character"
-    ), ncol=4, byrow=TRUE)
-    expect_equal(sort_list(getopt(spec, c('-c', '-1', '-m', '-1.2'))),
-                    sort_list(list(ARGS=character(0), count=-1, mean=-1.2)))
-    expect_equal(sort_list(getopt(spec, c('-v', '-m', '3'))),
-                    sort_list(list(ARGS=character(0), verbose=1, mean=3)))
-    expect_equal(sort_list(getopt(spec, c('-m', '3', '-v'))),
-            sort_list(list(ARGS=character(0), mean=3, verbose=1)))
-    expect_equal(sort_list(getopt(spec, c('-m', '3', '-v', '2', '-v'))),
-            sort_list(list(ARGS=character(0), mean=3, verbose=1)))
-    expect_equal(sort_list(getopt(spec, c('-O', '-', '-m', '3'))),
-            sort_list(list(ARGS=character(0), output="-", mean=3)))
-    expect_equal(sort_list(getopt(spec, c('-O', '-', '-m', '3'))),
-            sort_list(getopt(spec, c('-m', '3', '-O', '-'))))
-    expect_equal(sort_list(getopt(spec, c('-de'))), 
-            sort_list(getopt(spec, c('-ed'))))
-    expect_equal(sort_list(getopt(spec, c('-de'))), 
-            sort_list(list(ARGS=character(0), dummy1=TRUE, dummy2=TRUE)))
-    expect_equal(sort_list(getopt(spec, c('-de', '1'))),
-            sort_list(list(ARGS=character(0), dummy1=TRUE, dummy2=NA)))
-    expect_equal(sort_list(getopt(spec, c('--verbose'))),
-            sort_list(list(ARGS=character(0), verbose=1)))
-    expect_equal(sort_list(getopt(spec, c('--verbose', '--help'))),
-            sort_list(list(ARGS=character(0), verbose=1, help=TRUE)))
-    expect_equal(sort_list(getopt(spec, c('--verbose', '--mean', '5'))),
-            sort_list(list(ARGS=character(0), verbose=1, mean=5)))
-    expect_equal(sort_list(getopt(spec, c('--mean=5'))), 
-            sort_list(list(ARGS=character(0), mean=5)))
-    expect_equal(sort_list(getopt(spec, c('--verbose', '--mean=5', '--sd', '5'))),
-            sort_list(list(ARGS=character(0), verbose=1, mean=5, sd=5)))
-    expect_equal(sort_list(getopt(spec, c('--verbose', '--mean=5', '--sd', '5'))),
-            sort_list(getopt(spec, c('--mean=5', '--sd', '5', '--verbose'))))
-
-    spec = c(
-      'date'     , 'd', 1, "character",
-      'help'     , 'h', 0, "logical",
-      'getdata'  , 'g', 0, "logical",
-      'market'   , 'm', 1, "character",
-      'threshold', 't', 1, "double"
+    spec <- matrix(c(
+      "verbose", "v", 2, "integer",
+      "help", "h", 0, "logical",
+      "dummy1", "d", 0, "logical",
+      "dummy2", "e", 2, "logical",
+      "count", "c", 1, "integer",
+      "mean", "m", 1, "double",
+      "sd", "s", 1, "double",
+      "output", "O", 1, "character"
+    ), ncol = 4, byrow = TRUE)
+    expect_equal(sort_list(getopt(spec, c("-c", "-1", "-m", "-1.2"))),
+                    sort_list(list(ARGS = character(0), count = -1, mean = -1.2)))
+    expect_equal(sort_list(getopt(spec, c("-v", "-m", "3"))),
+                    sort_list(list(ARGS = character(0), verbose = 1, mean = 3)))
+    expect_equal(sort_list(getopt(spec, c("-m", "3", "-v"))),
+            sort_list(list(ARGS = character(0), mean = 3, verbose = 1)))
+    expect_equal(sort_list(getopt(spec, c("-m", "3", "-v", "2", "-v"))),
+            sort_list(list(ARGS = character(0), mean = 3, verbose = 1)))
+    expect_equal(sort_list(getopt(spec, c("-O", "-", "-m", "3"))),
+            sort_list(list(ARGS = character(0), output = "-", mean = 3)))
+    expect_equal(sort_list(getopt(spec, c("-O", "-", "-m", "3"))),
+            sort_list(getopt(spec, c("-m", "3", "-O", "-"))))
+    expect_equal(sort_list(getopt(spec, c("-de"))),
+            sort_list(getopt(spec, c("-ed"))))
+    expect_equal(sort_list(getopt(spec, c("-de"))),
+            sort_list(list(ARGS = character(0), dummy1 = TRUE, dummy2 = TRUE)))
+    expect_equal(sort_list(getopt(spec, c("-de", "1"))),
+            sort_list(list(ARGS = character(0), dummy1 = TRUE, dummy2 = NA)))
+    expect_equal(sort_list(getopt(spec, c("--verbose"))),
+            sort_list(list(ARGS = character(0), verbose = 1)))
+    expect_equal(sort_list(getopt(spec, c("--verbose", "--help"))),
+            sort_list(list(ARGS = character(0), verbose = 1, help = TRUE)))
+    expect_equal(sort_list(getopt(spec, c("--verbose", "--mean", "5"))),
+            sort_list(list(ARGS = character(0), verbose = 1, mean = 5)))
+    expect_equal(sort_list(getopt(spec, c("--mean=5"))),
+            sort_list(list(ARGS = character(0), mean = 5)))
+    expect_equal(sort_list(getopt(spec, c("--verbose", "--mean=5", "--sd", "5"))),
+            sort_list(list(ARGS = character(0), verbose = 1, mean = 5, sd = 5)))
+    expect_equal(sort_list(getopt(spec, c("--verbose", "--mean=5", "--sd", "5"))),
+            sort_list(getopt(spec, c("--mean=5", "--sd", "5", "--verbose"))))
+
+    spec <- c(
+      "date", "d", 1, "character",
+      "help", "h", 0, "logical",
+      "getdata", "g", 0, "logical",
+      "market", "m", 1, "character",
+      "threshold", "t", 1, "double"
     )
-    spec2 <- matrix(spec, ncol=4, byrow=TRUE)
+    spec2 <- matrix(spec, ncol = 4, byrow = TRUE)
     # should give warning is spec is not matrix
-    expect_that(getopt(spec, c('--date','20080421','--market','YM','--getdata')), gives_warning())
-    expect_equal(sort_list(getopt(spec2, c('--date','20080421','--market','YM','--getdata'))),
-            sort_list(list(ARGS=character(0), date='20080421', market='YM', getdata=TRUE)))
-    expect_equal(sort_list(getopt(spec2, c('--date','20080421','--market','YM','--getdata'))),
-            sort_list(getopt(spec2, c('--date','20080421','--getdata','--market','YM'))))
-    expect_that(getopt(spec2, c('--date','20080421','--getdata','--market','YM'),debug=TRUE), 
+    expect_that(getopt(spec, c("--date", "20080421", "--market", "YM", "--getdata")), gives_warning())
+    expect_equal(sort_list(getopt(spec2, c("--date", "20080421", "--market", "YM", "--getdata"))),
+            sort_list(list(ARGS = character(0), date = "20080421", market = "YM", getdata = TRUE)))
+    expect_equal(sort_list(getopt(spec2, c("--date", "20080421", "--market", "YM", "--getdata"))),
+            sort_list(getopt(spec2, c("--date", "20080421", "--getdata", "--market", "YM"))))
+    expect_that(getopt(spec2, c("--date", "20080421", "--getdata", "--market", "YM"), debug = TRUE),
             prints_text("processing "))
-    expect_that(print(getopt(spec2, c('--date','20080421','--getdata','--market','YM'),usage=TRUE)),
+    expect_that(print(getopt(spec2, c("--date", "20080421", "--getdata", "--market", "YM"), usage = TRUE)),
             prints_text("Usage: "))
 })
 test_that("numeric is cast to double", {
     # Feature reported upstream (optparse) by Miroslav Posta
-    spec = matrix(c("count", "c", 1, "integer"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "integer"), ncol = 4, byrow = TRUE)
     opt <- getopt(spec, c("-c", "-55"))
     expect_equal(typeof(opt$count), "integer")
 
 
-    spec = matrix(c("count", "c", 1, "numeric"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "numeric"), ncol = 4, byrow = TRUE)
     opt <- getopt(spec, c("-c", "-55.0"))
     expect_equal(typeof(opt$count), "double")
 })
 test_that("empty strings are handled correctly for mandatory character arguments", {
-    spec = matrix(c("string", "s", 1, "character",
-                    "number", "n", 1, "numeric"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("string", "s", 1, "character",
+                    "number", "n", 1, "numeric"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("--string=foo"))$string, "foo")
     expect_equal(getopt(spec, c("--string="))$string, "")
     expect_warning(getopt(spec, c("--number=")))
@@ -82,107 +82,107 @@ test_that("empty strings are handled correctly for mandatory character arguments
 
 test_that("negative numbers are handled correctly", {
     # Issue if negative number preceded by space instead of '=' reported by Roman Zenka
-    spec = matrix(c("count", "c", 1, "integer"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "integer"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("-c", "5"))$count, 5)
-    spec = matrix(c("count", "c", 1, "integer"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "integer"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("-c", "-5"))$count, -5)
-    spec = matrix(c("count", "c", 1, "integer"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "integer"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("--count=-1E5"))$count, -1E5)
-    spec = matrix(c("count", "c", 1, "double"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "double"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("-c", "-5"))$count, -5)
-    spec = matrix(c("count", "c", 1, "double"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "double"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("-c", "-1e5"))$count, -1e5)
-    spec = matrix(c("count", "c", 1, "double"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "double"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("--count=-1.2e5"))$count, -1.2e5)
-    spec = matrix(c("count", "c", 1, "double"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "double"), ncol = 4, byrow = TRUE)
     expect_equal(getopt(spec, c("--count", "-1e5"))$count, -1e5)
 })
 
 test_that("more helpful warnings upon incorrect input", {
     # Give more pointed warning upon wildly incorrect input
-    spec = matrix(c("count", "c", 1, "integer"), ncol=4, byrow=TRUE)
+    spec <- matrix(c("count", "c", 1, "integer"), ncol = 4, byrow = TRUE)
     expect_warning(getopt(spec, c("-c", "hello"))$count, paste("integer expected, got", dQuote("hello")))
 
-    spec = NULL
+    spec <- NULL
     expect_error(getopt(spec, ""), 'argument "spec" must be non-null.')
 
-    spec = c("foo", "f", 0)
-    expect_error(getopt(spec, ""), 'or a character vector with length divisible by 4, rtfm')
+    spec <- c("foo", "f", 0)
+    expect_error(getopt(spec, ""), "or a character vector with length divisible by 4, rtfm")
 
-    spec = matrix(c("foo", "f", 0, "integer"), ncol=2)
+    spec <- matrix(c("foo", "f", 0, "integer"), ncol = 2)
     expect_error(getopt(spec, ""), '"spec" should have at least 4 columns.')
 
-    spec = matrix(c("foo", "f", 0, "integer", "bar", "b", 0, "integer"), ncol=8)
+    spec <- matrix(c("foo", "f", 0, "integer", "bar", "b", 0, "integer"), ncol = 8)
     expect_error(getopt(spec, ""), '"spec" should have no more than 6 columns.')
 })
 
 test_that("don't throw error if multiple matches match one argument fully", {
-    # test if partial name matches fully, 
+    # test if partial name matches fully,
     # still throw error if multiple matches and doesn't match both fully
     # feature request from Jonas Zimmermann
-    spec = matrix(c(
-      'foo'      , 'f', 0, "logical",
-      'foobar'   , 'b', 0, "logical",
-      'biz'      , 'z', 0, "logical"
-      ), ncol=4, byrow=TRUE)
-    expect_that(getopt(spec, c('--fo')), throws_error())
-    expect_equal(getopt(spec, c('--foo')), sort_list(list(ARGS=character(0), foo=TRUE)))
+    spec <- matrix(c(
+      "foo", "f", 0, "logical",
+      "foobar", "b", 0, "logical",
+      "biz", "z", 0, "logical"
+      ), ncol = 4, byrow = TRUE)
+    expect_that(getopt(spec, c("--fo")), throws_error())
+    expect_equal(getopt(spec, c("--foo")), sort_list(list(ARGS = character(0), foo = TRUE)))
 })
 
 context("Test sort_list")
 test_that("sort_list works as expected", {
     expect_equal(sort_list(list(a = 3, b = 2)), sort_list(list(b = 2, a = 3)))
     expect_false(identical(sort_list(list(b = 3, a = 2)), list(b = 3, a = 2)))
-    expect_false(identical(sort_list(list(b = list(b = 3, c = 2), a = 2)), 
+    expect_false(identical(sort_list(list(b = list(b = 3, c = 2), a = 2)),
                            list(b = list(c = 2, b = 3), a = 2)))
 })
 
 context("Use h flag for non-help")
 test_that("Use h flag for non help", {
-    spec = matrix(c( 'foo' , 'h', 0, "logical"), ncol=4, byrow=TRUE)
-    expect_equal(getopt(spec, c('-h')), sort_list(list(ARGS=character(0), foo=TRUE)))
+    spec <- matrix(c("foo", "h", 0, "logical"), ncol = 4, byrow = TRUE)
+    expect_equal(getopt(spec, c("-h")), sort_list(list(ARGS = character(0), foo = TRUE)))
 
-    spec = matrix(c( 'foo' , 'h', 0, "logical", 
-                   'help', 'h', 0, "logical"), ncol=4, byrow=TRUE)
-    expect_error(getopt(spec, c('-h')), "redundant short names for flags")
+    spec <- matrix(c("foo", "h", 0, "logical",
+                   "help", "h", 0, "logical"), ncol = 4, byrow = TRUE)
+    expect_error(getopt(spec, c("-h")), "redundant short names for flags")
 
-    spec = matrix(c( 'foo' , 'f', 0, "logical", 
-                   'foo', 'h', 0, "logical"), ncol=4, byrow=TRUE)
-    expect_error(getopt(spec, c('-h')), "redundant long names for flags")
+    spec <- matrix(c("foo", "f", 0, "logical",
+                   "foo", "h", 0, "logical"), ncol = 4, byrow = TRUE)
+    expect_error(getopt(spec, c("-h")), "redundant long names for flags")
 })
 
 context("Optional usage strings")
 test_that("Optional usage strings work as expected", {
-    spec = matrix(c(
-      'foo'      , 'f', 0, "logical", "foo usage",
-      'foobar'   , 'b', 1, "character", "foobar usage",
-      'biz'      , 'z', 2, "logical", "biz usage",
-      'number'   , 'n', 1, "numeric", "number usage",
-      'help'     , 'h', 0, "logical", "help"
-      ), ncol=5, byrow=TRUE)
-    expect_output(cat(getopt(spec, usage=TRUE)), "foobar usage")
+    spec <- matrix(c(
+      "foo", "f", 0, "logical", "foo usage",
+      "foobar", "b", 1, "character", "foobar usage",
+      "biz", "z", 2, "logical", "biz usage",
+      "number", "n", 1, "numeric", "number usage",
+      "help", "h", 0, "logical", "help"
+      ), ncol = 5, byrow = TRUE)
+    expect_output(cat(getopt(spec, usage = TRUE)), "foobar usage")
 })
 
 context("More tests to get coverage up")
 test_that("tests to get coverage up", {
-    spec = matrix(c(
-      'foo'      , 'f', 0, "logical", "foo usage",
-      'foobar'   , 'b', 1, "character", "foobar usage",
-      'biz'      , 'z', 2, "logical", "biz usage",
-      'number'   , 'n', 1, "numeric", "number usage",
-      'help'     , 'h', 0, "logical", "help"
-      ), ncol=5, byrow=TRUE)
+    spec <- matrix(c(
+      "foo", "f", 0, "logical", "foo usage",
+      "foobar", "b", 1, "character", "foobar usage",
+      "biz", "z", 2, "logical", "biz usage",
+      "number", "n", 1, "numeric", "number usage",
+      "help", "h", 0, "logical", "help"
+      ), ncol = 5, byrow = TRUE)
     expect_error(getopt(spec, "--whodunit"), 'long flag "whodunit" is invalid')
 
     expect_error(getopt(spec, "--foo=4"), 'long flag "foo" accepts no arguments')
 
-    ## expect_error(getopt(spec, c("--foo", "4")), 'long flag "foo" accepts no arguments')
+    # expect_error(getopt(spec, c("--foo", "4")), 'long flag "foo" accepts no arguments') # nolint
 
-    expect_equal(getopt(spec, "--biz", "4"), sort_list(list(ARGS=character(0), biz=TRUE)))
+    expect_equal(getopt(spec, "--biz", "4"), sort_list(list(ARGS = character(0), biz = TRUE)))
 
-    expect_warning(getopt(spec, c("-n", "bar")), paste('double expected, got', dQuote("bar")))
+    expect_warning(getopt(spec, c("-n", "bar")), paste("double expected, got", dQuote("bar")))
 
-    expect_warning(getopt(spec, c("--number=bar")), paste('double expected, got', dQuote("bar")))
+    expect_warning(getopt(spec, c("--number=bar")), paste("double expected, got", dQuote("bar")))
 
     expect_error(getopt(spec, "-n"), 'flag "n" requires an argument')
 
@@ -196,8 +196,7 @@ test_that("tests to get coverage up", {
     expect_error(getopt(spec, c("--foobar")), 'flag "foobar" requires an argument')
     expect_error(getopt(spec, c("--foobar", "--help")), 'flag "foobar" requires an argument')
 
-    expect_output(getopt(spec, c("-n", "2"), debug=TRUE), "short option: -n")
-    expect_output(getopt(spec, c("-b", "-"), debug=TRUE), 'lone dash')
-    # causes covr::report() to crash even though test() runs fine
-    # expect_warning(getopt(spec, c("-n", "-")), 'double expected, got "-"')  
+    expect_output(getopt(spec, c("-n", "2"), debug = TRUE), "short option: -n")
+    expect_output(getopt(spec, c("-b", "-"), debug = TRUE), "lone dash")
+    expect_warning(getopt(spec, c("-n", "-")), paste("double expected, got",  dQuote("-")))
 })

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/R/site-library/getopt/help/figures/logo.png
-rw-r--r--  root/root   /usr/lib/R/site-library/getopt/help/figures/logo.svg

Control files: lines which differ (wdiff format)

  • Depends: r-base-core (>= 4.3.0-1~jan+lint2), 4.2.0-1~jan+unchanged1), r-api-4.0

More details

Full run details