Using `--iterate foo='bar baz'` and `--set foo='rab'` at the same time is not an error
emanuele6 opened this issue · 4 comments
Using duplicate --set
components is an error:
$ trurl -s 'fragment=1' -s 'fragment=2' localhost
trurl error: duplicate --set for component fragment
trurl error: Try trurl -h for help
And using duplicate --iterate
components is an error:
$ trurl --iterate 'fragment=1' --iterate 'fragment=2' localhost
trurl error: duplicate component for iterate: fragment
trurl error: Try trurl -h for help
But using the same component both with --set
and --iterate
is not an error:
$ trurl --iterate 'fragment=1 2' -s 'fragment=3' localhost
http://localhost/#1
http://localhost/#2
Here, first -s 'fragment=3'
is applied and then --iterate 'fragment=1 2'
overwrites it, so -s 'fragment=3'
is just silently "ignored".
Should we reconsider and just use -s
for even for iterations? If there's a space it means a list and then we iterate. It would make it clearer that iterate is just another version of set, and perhaps also simplify the code for tings like this.
Should we reconsider and just use
-s
for even for iterations
This makes sense
I would prefer that the -s
/--set
option just sets the specified component to the value given value without any special parsing/handling: no, \n
/\t
/etc expansion; no space splitting for iteration; etc.
E.g. trurl -s query='foo ba\nr' localhost
should (as it does now) simply set the query to that value.
$ trurl -s query='foo ba\nr' localhost
http://localhost/?foo+ba%5cnr
Not output:
http://localhost/?foo
http://localhost/?ba%5cnr
or
http://localhost/?foo
http://localhost/?ba%0ar
If you want to allow multiple -s
for the same component, and e.g. make -s host=example.org -s host=curl.se
equivalent to --iterate 'host=example.org curl.se'
, I am not opposed to that.
I personally do find --iterate
very useful, but, for users that want to be able to iterate multiple values for a component -s path=foo -s path=bar
is probably better than --iterate 'path=foo bar'
anyway, since with --iterate
you cannot use a foo
, or bar
that contains spaces, but with -s
you can.
Right. It does have its merits to keep them separate. I have a patch coming to fix this issue.