mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-31 12:21:19 -03:00
Also prepend "./" for filter if a filename starts with "-"
This is now added to the two commands that definitely deal with relative paths. It doesn't work for e.g. `path basename`, because after removing the dirname prepending a "./" doesn't refer to the same file, and the basename is also expected to not contain any slashes.
This commit is contained in:
@@ -170,6 +170,8 @@ The filter options can either be given as multiple options, or comma-separated -
|
|||||||
|
|
||||||
With ``--invert``, the meaning of the filtering is inverted - any path that wouldn't pass (including by not existing) passes, and any path that would pass fails.
|
With ``--invert``, the meaning of the filtering is inverted - any path that wouldn't pass (including by not existing) passes, and any path that would pass fails.
|
||||||
|
|
||||||
|
When a path starts with ``-``, ``path filter`` will prepend ``./`` to avoid it being interpreted as an option otherwise.
|
||||||
|
|
||||||
It returns 0 if at least one path passed the filter.
|
It returns 0 if at least one path passed the filter.
|
||||||
|
|
||||||
``path is`` is shorthand for ``path filter -q``, i.e. just checking without producing output, see :ref:`The is subcommand <cmd-path-is>`.
|
``path is`` is shorthand for ``path filter -q``, i.e. just checking without producing output, see :ref:`The is subcommand <cmd-path-is>`.
|
||||||
|
|||||||
@@ -815,7 +815,15 @@ static int path_filter(parser_t &parser, io_streams_t &streams, int argc, const
|
|||||||
if (ok == opts.invert) continue;
|
if (ok == opts.invert) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
path_out(streams, opts, *arg);
|
// We *know* this is a filename,
|
||||||
|
// and so if it starts with a `-` we *know* it is relative
|
||||||
|
// to $PWD. So we can add `./`.
|
||||||
|
if (!arg->empty() && arg->front() == L'-') {
|
||||||
|
wcstring out = L"./" + *arg;
|
||||||
|
path_out(streams, opts, out);
|
||||||
|
} else {
|
||||||
|
path_out(streams, opts, *arg);
|
||||||
|
}
|
||||||
n_transformed++;
|
n_transformed++;
|
||||||
if (opts.quiet) return STATUS_CMD_OK;
|
if (opts.quiet) return STATUS_CMD_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,6 +120,11 @@ path normalize -- -/foo -foo/foo
|
|||||||
path normalize -- ../-foo
|
path normalize -- ../-foo
|
||||||
# CHECK: ../-foo
|
# CHECK: ../-foo
|
||||||
|
|
||||||
|
# This goes for filter as well
|
||||||
|
touch -- -foo
|
||||||
|
path filter -f -- -foo
|
||||||
|
# CHECK: ./-foo
|
||||||
|
|
||||||
# We need to remove the rest of the path because we have no idea what its value looks like.
|
# We need to remove the rest of the path because we have no idea what its value looks like.
|
||||||
path resolve bin//sh | string match -r -- 'bin/bash$'
|
path resolve bin//sh | string match -r -- 'bin/bash$'
|
||||||
# The "//" is squashed, and the symlink is resolved.
|
# The "//" is squashed, and the symlink is resolved.
|
||||||
|
|||||||
Reference in New Issue
Block a user