Discussion:
[PATCH] Make ls.test work without awk.
(too old to reply)
enh
2017-04-05 17:28:58 UTC
Permalink
Raw Message
---
tests/ls.test | 4 ++++
1 file changed, 4 insertions(+)
Rob Landley
2017-04-11 19:14:56 UTC
Permalink
Raw Message
Post by enh
tests/ls.test | 4 ++++
1 file changed, 4 insertions(+)
This patch removes no lines, it just adds a new test. How does this make
it work without awk in a way that wasn't previously the case? (The
description doesn't match what the patch does?)

Also, minor quibble, they're called symlinks (symbolic links) not
softlinks. Kinda fixed in stone on linux because that's what the syscall
to make 'em is called (man 2 symlink).

Also, I want a grep option that ignores whitespace differences like
patch -l does. Squash all runs of whitespace to one ascii 32 space
character, then compare. Alas I'd probably have to use a --longopt for
the name and I dislike those slightly more than I want this feature.

And if you want to be really cruel to this test:

ln -s "three -> four" "one -> two"
lrwxrwxrwx 1 landley landley 13 Apr 11 12:39 one -> two -> three -> four

Which is why ls -1b and readlink exist, but my -b needs upgrading? It's
wildcarding stuff out ala -q but that can cause collisions, and given
the other one escapes spaces what it really means by "nongraphic" is
escape anything that prevents the shell from seeing this as a single
argument, and I'm not entirely sure what that list is...

$ mkdir sub
$ cd sub
$ touch "$(echo -e "$(X=0;while [ $X -lt 255 ];do X=$(($X+1));[ $X -eq
47 ]&& continue;printf '\\x%02x' $X; done)")"
$ ls -b

Answer: it's anything <= 32 and >= 128, which gets an octal escape,
except for \a\b\t\n\v\f\r and "\ ". And backslash is escaped with
another backslash.

And the FUN part is that I should add the above to the test suite. Wow
that's ugly. Should use the octal not hex escapes though...

(You want to know why I can't work through my todo list until it's
smaller? That's why. Working through my todo list makes it BIGGER.
Always has.)

Except... looking in ls there's code to do this. Why isn't it
triggering... Huh, Izabera pointed out that ubuntu's ls defaults to -q
and so I made it do that, and -q trumps -b. Blah.

Ok, fixed and my code is escaping \e which ubuntu's ls isn't. But both
printf and echo support \e so I think I'm right. :)

Rob
Rob Landley
2017-04-11 19:18:17 UTC
Permalink
Raw Message
Post by Rob Landley
Except... looking in ls there's code to do this. Why isn't it
triggering... Huh, Izabera pointed out that ubuntu's ls defaults to -q
and so I made it do that, and -q trumps -b. Blah.
Ok, fixed and my code is escaping \e which ubuntu's ls isn't. But both
printf and echo support \e so I think I'm right. :)
But that's wrong because it escapes the high ascii stuff by default, and
that produces unicode characters. So if they didn't _explicitly_ say -b
then I don't want to escape unicode.

Grrr.

Rob
enh
2017-04-11 19:56:44 UTC
Permalink
Raw Message
Post by Rob Landley
Post by enh
tests/ls.test | 4 ++++
1 file changed, 4 insertions(+)
This patch removes no lines, it just adds a new test. How does this make
it work without awk in a way that wasn't previously the case? (The
description doesn't match what the patch does?)
yeah, i fucked up trying to manage too many patches at once. those four
lines should replace the four lines immediately below.
Post by Rob Landley
Also, minor quibble, they're called symlinks (symbolic links) not
softlinks. Kinda fixed in stone on linux because that's what the syscall
to make 'em is called (man 2 symlink).
(yeah, that was me only changing the part that _needed_ to change. except i
screwed that up so it was no longer obvious.)
Post by Rob Landley
Also, I want a grep option that ignores whitespace differences like
patch -l does. Squash all runs of whitespace to one ascii 32 space
character, then compare. Alas I'd probably have to use a --longopt for
the name and I dislike those slightly more than I want this feature.
speaking of which: all the blkid tests fail if you run it on the desktop
because you don't output trailing spaces. i'm not sure whether to "break"
toybox blkid to just always output trailing spaces or make the test less
readable to allow either output. (regular expression matches rather than
just literal matches might help here.)
Post by Rob Landley
ln -s "three -> four" "one -> two"
lrwxrwxrwx 1 landley landley 13 Apr 11 12:39 one -> two -> three -> four
Which is why ls -1b and readlink exist, but my -b needs upgrading? It's
wildcarding stuff out ala -q but that can cause collisions, and given
the other one escapes spaces what it really means by "nongraphic" is
escape anything that prevents the shell from seeing this as a single
argument, and I'm not entirely sure what that list is...
$ mkdir sub
$ cd sub
$ touch "$(echo -e "$(X=0;while [ $X -lt 255 ];do X=$(($X+1));[ $X -eq
47 ]&& continue;printf '\\x%02x' $X; done)")"
$ ls -b
Answer: it's anything <= 32 and >= 128, which gets an octal escape,
except for \a\b\t\n\v\f\r and "\ ". And backslash is escaped with
another backslash.
And the FUN part is that I should add the above to the test suite. Wow
that's ugly. Should use the octal not hex escapes though...
(You want to know why I can't work through my todo list until it's
smaller? That's why. Working through my todo list makes it BIGGER.
Always has.)
everyone else's too. this is why we give in and have bug databases. anr/or
XFAIL tests.
Post by Rob Landley
Except... looking in ls there's code to do this. Why isn't it
triggering... Huh, Izabera pointed out that ubuntu's ls defaults to -q
and so I made it do that, and -q trumps -b. Blah.
Ok, fixed and my code is escaping \e which ubuntu's ls isn't. But both
printf and echo support \e so I think I'm right. :)
Rob
--
Elliott Hughes - http://who/enh - http://jessies.org/~enh/
Android native code/tools questions? Mail me/drop by/add me as a reviewer.
enh
2017-04-14 20:45:18 UTC
Permalink
Raw Message
sorry it took so long, but here's the patch i intended to send 9 days ago
:-/

the stats look more plausible this time too:

---
tests/ls.test | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Post by enh
Post by Rob Landley
Post by enh
tests/ls.test | 4 ++++
1 file changed, 4 insertions(+)
This patch removes no lines, it just adds a new test. How does this make
it work without awk in a way that wasn't previously the case? (The
description doesn't match what the patch does?)
yeah, i fucked up trying to manage too many patches at once. those four
lines should replace the four lines immediately below.
Post by Rob Landley
Also, minor quibble, they're called symlinks (symbolic links) not
softlinks. Kinda fixed in stone on linux because that's what the syscall
to make 'em is called (man 2 symlink).
(yeah, that was me only changing the part that _needed_ to change. except
i screwed that up so it was no longer obvious.)
Post by Rob Landley
Also, I want a grep option that ignores whitespace differences like
patch -l does. Squash all runs of whitespace to one ascii 32 space
character, then compare. Alas I'd probably have to use a --longopt for
the name and I dislike those slightly more than I want this feature.
speaking of which: all the blkid tests fail if you run it on the desktop
because you don't output trailing spaces. i'm not sure whether to "break"
toybox blkid to just always output trailing spaces or make the test less
readable to allow either output. (regular expression matches rather than
just literal matches might help here.)
Post by Rob Landley
ln -s "three -> four" "one -> two"
lrwxrwxrwx 1 landley landley 13 Apr 11 12:39 one -> two -> three -> four
Which is why ls -1b and readlink exist, but my -b needs upgrading? It's
wildcarding stuff out ala -q but that can cause collisions, and given
the other one escapes spaces what it really means by "nongraphic" is
escape anything that prevents the shell from seeing this as a single
argument, and I'm not entirely sure what that list is...
$ mkdir sub
$ cd sub
$ touch "$(echo -e "$(X=0;while [ $X -lt 255 ];do X=$(($X+1));[ $X -eq
47 ]&& continue;printf '\\x%02x' $X; done)")"
$ ls -b
Answer: it's anything <= 32 and >= 128, which gets an octal escape,
except for \a\b\t\n\v\f\r and "\ ". And backslash is escaped with
another backslash.
And the FUN part is that I should add the above to the test suite. Wow
that's ugly. Should use the octal not hex escapes though...
(You want to know why I can't work through my todo list until it's
smaller? That's why. Working through my todo list makes it BIGGER.
Always has.)
everyone else's too. this is why we give in and have bug databases. anr/or
XFAIL tests.
Post by Rob Landley
Except... looking in ls there's code to do this. Why isn't it
triggering... Huh, Izabera pointed out that ubuntu's ls defaults to -q
and so I made it do that, and -q trumps -b. Blah.
Ok, fixed and my code is escaping \e which ubuntu's ls isn't. But both
printf and echo support \e so I think I'm right. :)
Rob
--
Elliott Hughes - http://who/enh - http://jessies.org/~enh/
Android native code/tools questions? Mail me/drop by/add me as a reviewer.
--
Elliott Hughes - http://who/enh - http://jessies.org/~enh/
Android native code/tools questions? Mail me/drop by/add me as a reviewer.
Rob Landley
2017-04-17 17:54:54 UTC
Permalink
Raw Message
Post by Rob Landley
Also, I want a grep option that ignores whitespace differences like
patch -l does. Squash all runs of whitespace to one ascii 32 space
character, then compare. Alas I'd probably have to use a --longopt for
the name and I dislike those slightly more than I want this feature.
speaking of which: all the blkid tests fail if you run it on the desktop
because you don't output trailing spaces.
Because trailing spaces are usually bad. :)

And my ls -C has one space between columns as its minimal packing, when
ubuntu has two. (Do a "ls toys" in the toybox source, for example. The
default is -C.) That was a judgement call but if -m can do one space and
consider it legible why can't -C?
Post by Rob Landley
i'm not sure whether to
"break" toybox blkid to just always output trailing spaces or make the
test less readable to allow either output. (regular expression matches
rather than just literal matches might help here.)
Hence grep ignoring whitespace. :P

Invoking my "black belt in horrible solutions", I could make a sgrep
shell function that modifies grep's first argument to replace each " "
with "[:space:][:space:]*" and then add a "[:space:]*" to the beginning
and the end...

This fixes it for the test code but not as a generally available thing.
(I still have to redo adding grep color support. It turns out to be
intrusive because it's a second user of the -o logic which is currently
specific to -o...)

Not sure which approach to take...
Post by Rob Landley
(You want to know why I can't work through my todo list until it's
smaller? That's why. Working through my todo list makes it BIGGER.
Always has.)
everyone else's too. this is why we give in and have bug databases.
anr/or XFAIL tests.
No, I've met people who go through a todo list and reach the end without
new todo items. Not sure if this is "boring projects", "boring people",
or some sort of skill I haven't got.
Post by Rob Landley
Except... looking in ls there's code to do this. Why isn't it
triggering... Huh, Izabera pointed out that ubuntu's ls defaults to -q
and so I made it do that, and -q trumps -b. Blah.
Ok, fixed and my code is escaping \e which ubuntu's ls isn't. But both
printf and echo support \e so I think I'm right. :)
I changed the default output (when there's a tty) to -b rather than -q,
so it's accurately escaping stuff instead of wildcarding it out. This
differs from upstream ls but I think is better behavior. I can change it
back if it breaks stuff for you.

Rob

Loading...