Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fortio --help should go to stdout not stderr #130 #264

Merged
merged 9 commits into from Jun 28, 2018

Conversation

olimpias
Copy link
Collaborator

@olimpias olimpias commented Jun 25, 2018

help is handled as an input argument and usage message is divided into two as info and error.

@olimpias olimpias requested a review from ldemailly June 25, 2018 20:58
@istio-testing
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:

Assign the PR to them by writing /assign in a comment when ready.

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@istio-testing
Copy link

Hi @olimpias. Thanks for your PR.

I'm waiting for a istio member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@olimpias
Copy link
Collaborator Author

I prefer to use help instead of --help because other arguments are done without dashes(like fortio load). But I can add if you want.

@codecov
Copy link

codecov bot commented Jun 25, 2018

Codecov Report

Merging #264 into master will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@          Coverage Diff           @@
##           master    #264   +/-   ##
======================================
  Coverage    90.6%   90.6%           
======================================
  Files          10      10           
  Lines        1952    1952           
======================================
  Hits         1769    1769           
  Misses        117     117           
  Partials       66      66

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update cdb2180...60c769b. Read the comment docs.

Copy link
Member

@ldemailly ldemailly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice, thanks, can we do like version where both fortio version and fortio -version works (so -help and help to stdout)?

@olimpias
Copy link
Collaborator Author

olimpias commented Jun 25, 2018 via email

@ldemailly
Copy link
Member

code/hack is in bin common, so maybe an issue to pass some call back. maybe not necessary/fine as is (should document “help” subcommand too)

@olimpias
Copy link
Collaborator Author

I think you are referring to Usage method in bin common. I can move it back to fortio_main. My point was to move there for reusing io dependency(not adding to fortio_main) also looking common method to me.

@olimpias
Copy link
Collaborator Author

olimpias commented Jun 26, 2018

I see your point common flag is all about flags. When I move Usage method to common_flag, it broke the meaning. I'm moving back to fortio_main. But I couldn't move to fortio_main because the help will be held in common_flag.

@olimpias
Copy link
Collaborator Author

olimpias commented Jun 26, 2018

My change on version printing is broke the release_test. I will take a look at night and reverse it. Nevermid I have done it now :).

Copy link
Member

@ldemailly ldemailly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see below,
also please test and paste the output of
fcurl
fcurl help
fortio
fortio help
fortio -help


// Usage prints usage according to input writer
func Usage(writer io.Writer) {
fmt.Fprintf(writer, "Φορτίο %s usageErr:\n\t%s command [flags] target\n%s\n%s\n%s\n%s\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

usage not usageErr here

@olimpias
Copy link
Collaborator Author

olimpias commented Jun 26, 2018

Outputs;

fortio fcurl and fortio fcurl help

Φορτίο 1.0.1-pre usage:
	./fortio command [flags] target
where command is one of: load (load testing), server (starts grpc ping and
http echo/ui/redirect/proxy servers), grpcping (grpc client), report (report only UI
server), redirect (redirect only server), or curl (single URL debug).
where target is a url (http load tests) or host:port (grpc health test).
flags are:
  -H value
    	Additional Header(s)
  -L	Follow redirects (implies -std-client) - do not use for load test
  -P value
    	Proxies to run, e.g -P "localport1 dest_host1:dest_port1" -P "[::1]:0 www.google.com:443" ...
  -a	Automatically save JSON result with filename based on labels & timestamp
  -abort-on int
    	Http code that if encountered aborts the run. e.g. 503 or -1 for socket errors.
  -allow-initial-errors
    	Allow and don't abort on initial warmup errors
  -base-url string
    	base URL used as prefix for data/index.tsv generation. (when empty, the url from the first request is used)
  -c int
    	Number of connections/goroutine/threads (default 4)
  -cacert string
    	Path to a custom CA certificate file to be used for the GRPC client TLS, if empty, use https:// prefix for standard internet CAs TLS
  -cert string
    	Path to the certificate file to be used for GRPC server TLS
  -compression
    	Enable http compression
  -curl
    	Just fetch the content once
  -data-dir string
    	Directory where JSON results are stored/read (default ".")
  -echo-debug-path string
    	http echo server URI for debug, empty turns off that part (more secure) (default "/debug")
  -gomaxprocs int
    	Setting for runtime.GOMAXPROCS, <1 doesn't change the default
  -grpc
    	Use GRPC (health check by default, add -ping for ping) for load testing
  -grpc-max-streams uint
    	MaxConcurrentStreams for the grpc server. Default (0) is to leave the option unset.
  -grpc-ping-delay duration
    	grpc ping delay in response
  -grpc-port string
    	grpc server port. Can be in the form of host:port, ip:port or port or "disabled" to not start the grpc server. (default "8079")
  -halfclose
    	When not keepalive, whether to half close the connection (only for fast http)
  -health
    	grpc ping client mode: use health instead of ping
  -healthservice string
    	which service string to pass to health check
  -http-port string
    	http echo server port. Can be in the form of host:port, ip:port or port. (default "8080")
  -http1.0
    	Use http1.0 (instead of http 1.1)
  -httpbufferkb int
    	Size of the buffer (max data size) for the optimized http client in kbytes (default 128)
  -httpccch
    	Check for Connection: Close Header
  -https-insecure
    	Long form of the -k flag
  -json string
    	Json output to provided file or '-' for stdout (empty = no json output, unless -a is used)
  -k	Do not verify certs in https connections
  -keepalive
    	Keep connection alive (only for fast http 1.1) (default true)
  -key string
    	Path to the key file used for GRPC server TLS
  -labels string
    	Additional config data/labels to add to the resulting JSON, defaults to target URL and hostname
  -logcaller
    	Logs filename and line number of callers to log (default true)
  -loglevel value
    	loglevel, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)
  -logprefix string
    	Prefix to log lines before logged messages (default "> ")
  -maxpayloadsizekb int
    	MaxPayloadSize is the maximum size of payload to be generated by the EchoHandler size= argument. In Kbytes. (default 256)
  -n int
    	Run for exactly this number of calls instead of duration. Default (0) is to use duration (-t). Default is 1 when used as grpc ping count.
  -p string
    	List of pXX to calculate (default "50,75,90,99,99.9")
  -payload string
    	Payload string to send along
  -ping
    	grpc load test: use ping instead of health
  -profile string
    	write .cpu and .mem profiles to file
  -qps float
    	Queries Per Seconds or 0 for no wait/max qps (default 8)
  -quiet
    	Quiet mode: sets the loglevel to Error and reduces the output.
  -r float
    	Resolution of the histogram lowest buckets in seconds (default 0.001)
  -redirect-port string
    	Redirect all incoming traffic to https URL (need ingress to work properly). Can be in the form of host:port, ip:port, port or "disabled" to disable the feature. (default "8081")
  -s int
    	Number of streams per grpc connection (default 1)
  -static-dir string
    	Absolute path to the dir containing the static files dir
  -stdclient
    	Use the slower net/http standard client (works for TLS)
  -sync string
    	index.tsv or s3/gcs bucket xml URL to fetch at startup for server modes.
  -sync-interval duration
    	Refresh the url every given interval (default, no refresh)
  -t duration
    	How long to run the test or 0 to run until ^C (default 5s)
  -timeout duration
    	Connection and read timeout value (for http) (default 15s)
  -ui-path string
    	http server URI for UI, empty turns off that part (more secure) (default "/fortio/")
  -user string
    	User credentials for basic authentication (for http). Input data format should be user:password
Error: unknown command fcurl

fortio

Φορτίο 1.0.1-pre usage:
	./fortio command [flags] target
where command is one of: load (load testing), server (starts grpc ping and
http echo/ui/redirect/proxy servers), grpcping (grpc client), report (report only UI
server), redirect (redirect only server), or curl (single URL debug).
where target is a url (http load tests) or host:port (grpc health test).
flags are:
  -H value
    	Additional Header(s)
  -L	Follow redirects (implies -std-client) - do not use for load test
  -P value
    	Proxies to run, e.g -P "localport1 dest_host1:dest_port1" -P "[::1]:0 www.google.com:443" ...
  -a	Automatically save JSON result with filename based on labels & timestamp
  -abort-on int
    	Http code that if encountered aborts the run. e.g. 503 or -1 for socket errors.
  -allow-initial-errors
    	Allow and don't abort on initial warmup errors
  -base-url string
    	base URL used as prefix for data/index.tsv generation. (when empty, the url from the first request is used)
  -c int
    	Number of connections/goroutine/threads (default 4)
  -cacert string
    	Path to a custom CA certificate file to be used for the GRPC client TLS, if empty, use https:// prefix for standard internet CAs TLS
  -cert string
    	Path to the certificate file to be used for GRPC server TLS
  -compression
    	Enable http compression
  -curl
    	Just fetch the content once
  -data-dir string
    	Directory where JSON results are stored/read (default ".")
  -echo-debug-path string
    	http echo server URI for debug, empty turns off that part (more secure) (default "/debug")
  -gomaxprocs int
    	Setting for runtime.GOMAXPROCS, <1 doesn't change the default
  -grpc
    	Use GRPC (health check by default, add -ping for ping) for load testing
  -grpc-max-streams uint
    	MaxConcurrentStreams for the grpc server. Default (0) is to leave the option unset.
  -grpc-ping-delay duration
    	grpc ping delay in response
  -grpc-port string
    	grpc server port. Can be in the form of host:port, ip:port or port or "disabled" to not start the grpc server. (default "8079")
  -halfclose
    	When not keepalive, whether to half close the connection (only for fast http)
  -health
    	grpc ping client mode: use health instead of ping
  -healthservice string
    	which service string to pass to health check
  -http-port string
    	http echo server port. Can be in the form of host:port, ip:port or port. (default "8080")
  -http1.0
    	Use http1.0 (instead of http 1.1)
  -httpbufferkb int
    	Size of the buffer (max data size) for the optimized http client in kbytes (default 128)
  -httpccch
    	Check for Connection: Close Header
  -https-insecure
    	Long form of the -k flag
  -json string
    	Json output to provided file or '-' for stdout (empty = no json output, unless -a is used)
  -k	Do not verify certs in https connections
  -keepalive
    	Keep connection alive (only for fast http 1.1) (default true)
  -key string
    	Path to the key file used for GRPC server TLS
  -labels string
    	Additional config data/labels to add to the resulting JSON, defaults to target URL and hostname
  -logcaller
    	Logs filename and line number of callers to log (default true)
  -loglevel value
    	loglevel, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)
  -logprefix string
    	Prefix to log lines before logged messages (default "> ")
  -maxpayloadsizekb int
    	MaxPayloadSize is the maximum size of payload to be generated by the EchoHandler size= argument. In Kbytes. (default 256)
  -n int
    	Run for exactly this number of calls instead of duration. Default (0) is to use duration (-t). Default is 1 when used as grpc ping count.
  -p string
    	List of pXX to calculate (default "50,75,90,99,99.9")
  -payload string
    	Payload string to send along
  -ping
    	grpc load test: use ping instead of health
  -profile string
    	write .cpu and .mem profiles to file
  -qps float
    	Queries Per Seconds or 0 for no wait/max qps (default 8)
  -quiet
    	Quiet mode: sets the loglevel to Error and reduces the output.
  -r float
    	Resolution of the histogram lowest buckets in seconds (default 0.001)
  -redirect-port string
    	Redirect all incoming traffic to https URL (need ingress to work properly). Can be in the form of host:port, ip:port, port or "disabled" to disable the feature. (default "8081")
  -s int
    	Number of streams per grpc connection (default 1)
  -static-dir string
    	Absolute path to the dir containing the static files dir
  -stdclient
    	Use the slower net/http standard client (works for TLS)
  -sync string
    	index.tsv or s3/gcs bucket xml URL to fetch at startup for server modes.
  -sync-interval duration
    	Refresh the url every given interval (default, no refresh)
  -t duration
    	How long to run the test or 0 to run until ^C (default 5s)
  -timeout duration
    	Connection and read timeout value (for http) (default 15s)
  -ui-path string
    	http server URI for UI, empty turns off that part (more secure) (default "/fortio/")
  -user string
    	User credentials for basic authentication (for http). Input data format should be user:password
Error: need at least 1 command parameter

fortio help and fortio -help

Φορτίο 1.0.1-pre usage:
	./fortio command [flags] target
where command is one of: load (load testing), server (starts grpc ping and
http echo/ui/redirect/proxy servers), grpcping (grpc client), report (report only UI
server), redirect (redirect only server), or curl (single URL debug).
where target is a url (http load tests) or host:port (grpc health test).
flags are:
  -H value
    	Additional Header(s)
  -L	Follow redirects (implies -std-client) - do not use for load test
  -a	Automatically save JSON result with filename based on labels & timestamp
  -abort-on int
    	Http code that if encountered aborts the run. e.g. 503 or -1 for socket errors.
  -allow-initial-errors
    	Allow and don't abort on initial warmup errors
  -base-url string
    	base URL used as prefix for data/index.tsv generation. (when empty, the url from the first request is used)
  -c int
    	Number of connections/goroutine/threads (default 4)
  -cacert string
    	Path to a custom CA certificate file to be used for the GRPC client TLS, if empty, use https:// prefix for standard internet CAs TLS
  -cert string
    	Path to the certificate file to be used for GRPC server TLS
  -compression
    	Enable http compression
  -curl
    	Just fetch the content once
  -data-dir string
    	Directory where JSON results are stored/read (default ".")
  -echo-debug-path string
    	http echo server URI for debug, empty turns off that part (more secure) (default "/debug")
  -gomaxprocs int
    	Setting for runtime.GOMAXPROCS, <1 doesn't change the default
  -grpc
    	Use GRPC (health check by default, add -ping for ping) for load testing
  -grpc-max-streams uint
    	MaxConcurrentStreams for the grpc server. Default (0) is to leave the option unset.
  -grpc-ping-delay duration
    	grpc ping delay in response
  -grpc-port string
    	grpc server port. Can be in the form of host:port, ip:port or port or "disabled" to not start the grpc server. (default "8079")
  -halfclose
    	When not keepalive, whether to half close the connection (only for fast http)
  -health
    	grpc ping client mode: use health instead of ping
  -healthservice string
    	which service string to pass to health check
  -http-port string
    	http echo server port. Can be in the form of host:port, ip:port or port. (default "8080")
  -http1.0
    	Use http1.0 (instead of http 1.1)
  -httpbufferkb int
    	Size of the buffer (max data size) for the optimized http client in kbytes (default 128)
  -httpccch
    	Check for Connection: Close Header
  -https-insecure
    	Long form of the -k flag
  -json string
    	Json output to provided file or '-' for stdout (empty = no json output, unless -a is used)
  -k	Do not verify certs in https connections
  -keepalive
    	Keep connection alive (only for fast http 1.1) (default true)
  -key string
    	Path to the key file used for GRPC server TLS
  -labels string
    	Additional config data/labels to add to the resulting JSON, defaults to target URL and hostname
  -logcaller
    	Logs filename and line number of callers to log (default true)
  -loglevel value
    	loglevel, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)
  -logprefix string
    	Prefix to log lines before logged messages (default "> ")
  -maxpayloadsizekb int
    	MaxPayloadSize is the maximum size of payload to be generated by the EchoHandler size= argument. In Kbytes. (default 256)
  -n int
    	Run for exactly this number of calls instead of duration. Default (0) is to use duration (-t). Default is 1 when used as grpc ping count.
  -p string
    	List of pXX to calculate (default "50,75,90,99,99.9")
  -payload string
    	Payload string to send along
  -ping
    	grpc load test: use ping instead of health
  -profile string
    	write .cpu and .mem profiles to file
  -qps float
    	Queries Per Seconds or 0 for no wait/max qps (default 8)
  -quiet
    	Quiet mode: sets the loglevel to Error and reduces the output.
  -r float
    	Resolution of the histogram lowest buckets in seconds (default 0.001)
  -redirect-port string
    	Redirect all incoming traffic to https URL (need ingress to work properly). Can be in the form of host:port, ip:port, port or "disabled" to disable the feature. (default "8081")
  -s int
    	Number of streams per grpc connection (default 1)
  -static-dir string
    	Absolute path to the dir containing the static files dir
  -stdclient
    	Use the slower net/http standard client (works for TLS)
  -sync string
    	index.tsv or s3/gcs bucket xml URL to fetch at startup for server modes.
  -sync-interval duration
    	Refresh the url every given interval (default, no refresh)
  -t duration
    	How long to run the test or 0 to run until ^C (default 5s)
  -timeout duration
    	Connection and read timeout value (for http) (default 15s)
  -ui-path string
    	http server URI for UI, empty turns off that part (more secure) (default "/fortio/")
  -user string
    	User credentials for basic authentication (for http). Input data format should be user:password

@ldemailly
Copy link
Member

I did mean fcurl, not fortio curl
fcurl is a seperate binary (make install to put it in your path)

the is the reason for bincommon, some flags are shared between those 2 seperate binaries

@olimpias
Copy link
Collaborator Author

fcurl

Φορτίο fortio-curl 1.0.1-pre usage:
	fcurl [flags] url
flags are:
  -H value
    	Additional Header(s)
  -L	Follow redirects (implies -std-client) - do not use for load test
  -compression
    	Enable http compression
  -halfclose
    	When not keepalive, whether to half close the connection (only for fast http)
  -http1.0
    	Use http1.0 (instead of http 1.1)
  -httpbufferkb int
    	Size of the buffer (max data size) for the optimized http client in kbytes (default 128)
  -httpccch
    	Check for Connection: Close Header
  -k	Do not verify certs in https connections
  -keepalive
    	Keep connection alive (only for fast http 1.1) (default true)
  -logcaller
    	Logs filename and line number of callers to log (default true)
  -loglevel value
    	loglevel, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)
  -logprefix string
    	Prefix to log lines before logged messages (default "> ")
  -quiet
    	Quiet mode: sets the loglevel to Error and reduces the output.
  -stdclient
    	Use the slower net/http standard client (works for TLS)
  -timeout duration
    	Connection and read timeout value (for http) (default 15s)
  -user string
    	User credentials for basic authentication (for http). Input data format should be user:password
Error: need a url as parameter21:56:25 E http_client.go:88> unexpected init with empty url
21:56:25 E http_client.go:88> unexpected init with empty url
21:56:25 E http_client.go:419> Only http is supported with the optimized client, use -stdclient for url 

fcurl help

Φορτίο 1.0.1-pre usage:
	fcurl command [flags] target
where command is one of: load (load testing), server (starts grpc ping and
http echo/ui/redirect/proxy servers), grpcping (grpc client), report (report only UI
server), redirect (redirect only server), or curl (single URL debug).
where target is a url (http load tests) or host:port (grpc health test).
flags are:
  -H value
    	Additional Header(s)
  -L	Follow redirects (implies -std-client) - do not use for load test
  -compression
    	Enable http compression
  -halfclose
    	When not keepalive, whether to half close the connection (only for fast http)
  -http1.0
    	Use http1.0 (instead of http 1.1)
  -httpbufferkb int
    	Size of the buffer (max data size) for the optimized http client in kbytes (default 128)
  -httpccch
    	Check for Connection: Close Header
  -k	Do not verify certs in https connections
  -keepalive
    	Keep connection alive (only for fast http 1.1) (default true)
  -logcaller
    	Logs filename and line number of callers to log (default true)
  -loglevel value
    	loglevel, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)
  -logprefix string
    	Prefix to log lines before logged messages (default "> ")
  -quiet
    	Quiet mode: sets the loglevel to Error and reduces the output.
  -stdclient
    	Use the slower net/http standard client (works for TLS)
  -timeout duration
    	Connection and read timeout value (for http) (default 15s)
  -user string
    	User credentials for basic authentication (for http). Input data format should be user:password

I didn't realize the fcurl binary :)

@ldemailly
Copy link
Member

fcurl help is wrong, doesn’t match the right short usage (there is no command in fcurl)

@olimpias
Copy link
Collaborator Author

olimpias commented Jun 26, 2018

I fixed it now and compared with master.

fcurl

Φορτίο fortio-curl 1.0.1-pre usage:
	fcurl [flags] url
flags are:
  -H value
    	Additional Header(s)
  -L	Follow redirects (implies -std-client) - do not use for load test
  -compression
    	Enable http compression
  -halfclose
    	When not keepalive, whether to half close the connection (only for fast http)
  -http1.0
    	Use http1.0 (instead of http 1.1)
  -httpbufferkb int
    	Size of the buffer (max data size) for the optimized http client in kbytes (default 128)
  -httpccch
    	Check for Connection: Close Header
  -k	Do not verify certs in https connections
  -keepalive
    	Keep connection alive (only for fast http 1.1) (default true)
  -logcaller
    	Logs filename and line number of callers to log (default true)
  -loglevel value
    	loglevel, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)
  -logprefix string
    	Prefix to log lines before logged messages (default "> ")
  -quiet
    	Quiet mode: sets the loglevel to Error and reduces the output.
  -stdclient
    	Use the slower net/http standard client (works for TLS)
  -timeout duration
    	Connection and read timeout value (for http) (default 15s)
  -user string
    	User credentials for basic authentication (for http). Input data format should be user:password
Error: need a url as parameter

fcurl help

22:33:14 W http_client.go:105> assuming http:// on missing scheme for 'help'
^C

version.Short(),
os.Args[0],
"where command is one of: load (load testing), server (starts grpc ping and",
"http echo/ui/redirect/proxy servers), grpcping (grpc client), report (report only UI",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leave that part in fortio_main as it is specific to the fortio binary (and fcurl can have its own specific string)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(I wrote that yesterday but somehow it didn't post ^)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was using Usage to print for help command in SharedMain method. Do you have any suggestion how I can move Usage method to fortio_main? If I move it, I will need to move help command action to fortio_main as well.

@ldemailly
Copy link
Member

I am doing the change needed on your PR directly, upcoming PR update
(take a look once I have that commit so you see what I meant/how I think it can be done best)

and use new command to simplify the release/updateFlags.sh script - no
more need to skip last line / error message
Linter are useful this was a real bug in my change
(We should ideally have a test for the command line errors)
Copy link
Member

@ldemailly ldemailly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

approving my own changes :-)

@ldemailly ldemailly merged commit 1e338e4 into fortio:master Jun 28, 2018
@olimpias
Copy link
Collaborator Author

Thanks! I see what you meant. Pass function pointer of usage from fortio_main and fcurl to sharedMain method to callback. I couldn't think like that. I need to get used to pass function pointer :).

@olimpias olimpias deleted the stdoutInfo branch June 29, 2018 13:21
@ldemailly
Copy link
Member

yes - it's a bit convoluted - we could also have passed a format/help string but this was overall minimizing the diff (also in go shorter names w vs writer are typical for un ambiguous variables etc)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants