sahib / rmlint

Extremely fast tool to remove duplicates and other lint from your filesystem
http://rmlint.rtfd.org
GNU General Public License v3.0
1.87k stars 130 forks source link

cfg.c: fix bug introduced in 2.10.0 #444

Closed ChrisBaker97 closed 3 years ago

ChrisBaker97 commented 3 years ago

This reversion back to the code from version 2.9.0 addresses #438. Obviously there is some functionality here that's being implemented that I'm not familiar enough with the project to understand, but hopefully this gives someone a head start in trying to track down the bug, while still keeping the intended new behavior.

sahib commented 3 years ago

Hmm, this seems to be a strange behavior difference between Linux and macOS (and BSDs). I will check (hopefully tomorrow) if we can live without that flag. Thanks for the PR. :+1:

sahib commented 3 years ago

Closed by accident, pardon.

sahib commented 3 years ago

So, here's the issue:

$ echo x > /tmp/a
$ echo x > /tmp/b
$ ln -s /tmp/a /tmp/la
$ ln -s /tmp/b /tmp/lb
$ rm /tmp/{a,b}
$ ./rmlint-with-flag /tmp/l{a,b}
# Bad symlink(s):
    rm '/tmp/la'
    rm '/tmp/lb'
$ ./rmlint-without-flag /tmp/l{a,b,}
WARNING: Can't open directory or file "/tmp/la": No such file or directory
WARNING: Can't open directory or file "/tmp/lb": No such file or directory
ERROR: Not all given paths are valid. Aborting.

This is expected since faccesat() will fail on a broken symbolic link without this flag. Seems we need to check if it is a symbolic link if faccessat() errors out...

ChrisBaker97 commented 3 years ago

I don't think I'll be able to contribute anything else to the coding, but I'm happy to help with any testing. Feel free to modify this PR as desired.

ericonr commented 3 years ago

Using readlink() might be a good solution here (note that I haven't looked into the code properly, the thought just crossed my mind).

ericonr commented 3 years ago

Ooh, this is a complicated one. I believe musl and glibc implement faccessat quite differently, where musl implements a workaround for correctness (probably approaches the result of the BSDs / MacOS) whereas glibc doesn't. That's my understanding, at least.

ericonr commented 3 years ago

Would it be possible to simply check if the file can be opened at a later point? Using access is racy and the behavior between the versions using faccessat and access is different.

ericonr commented 3 years ago

Lastly, if anything this should completely revert the commit, right? 5ca6d25905cd372e8b07ecd9696a097acb0d5742

sahib commented 3 years ago

Took me again a bit longer to come back to this, but I should have a fix with a726d0cb. @ericonr, @ChrisBaker97 - please test that one.

Ooh, this is a complicated one. I believe musl and glibc implement faccessat quite differently, where musl implements a workaround for correctness (probably approaches the result of the BSDs / MacOS) whereas glibc doesn't. That's my understanding, at least.

Yes, this seems to be the case.

Using readlink() might be a good solution here (note that I haven't looked into the code properly, the thought just crossed my mind).

That is indeed the solution I did go for now, but lstat() would have worked too.

Would it be possible to simply check if the file can be opened at a later point? Using access is racy and the behavior between the versions using faccessat and access is different.

That check is there to filter files out early that we can't open at all. There are other checks later on.

ChrisBaker97 commented 3 years ago

Seems to compile and run fine on macOS 10.14.6 Mojave. Thanks for the fix.

ericonr commented 3 years ago

Took me again a bit longer to come back to this, but I should have a fix with a726d0c. @ericonr, @ChrisBaker97 - please test that one.

It appears to be working, though I don't have much experience with the tool.

Thank you for the explanations :)

ericonr commented 3 years ago

That is indeed the solution I did go for now, but lstat() would have worked too.

As a general heads up, you shouldn't use lstat() here either. At least for both glibc and musl, they are implemented as simple wrappers on top of faccessat().

ChrisBaker97 commented 3 years ago

FYI, I just ran a partial test suite on just the new test added, using:

RM_TS_USE_VALGRIND=1 RM_TS_PRINT_CMD=1 RM_TS_PEDANTIC=1 nosetests-3.4 -s -a '!slow !known_issue' tests/test_robustness/test_badlinks_as_args.py

with the result:

======================================================================
FAIL: test_badlinks_as_args.test_bad_symlinks_as_direct_args
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/chris/.pyenv/versions/3.4.10/lib/python3.4/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/chris/Code/rmlint/tests/test_robustness/test_badlinks_as_args.py", line 33, in test_bad_symlinks_as_direct_args
    {link_a_path, link_b_path}
AssertionError

----------------------------------------------------------------------
Ran 3 tests in 3.381s

FAILED (failures=1)

I also ran what looks to be an existing symlink test:

$ RM_TS_USE_VALGRIND=1 RM_TS_PRINT_CMD=1 RM_TS_PEDANTIC=1 nosetests-3.4 -s -a '!slow !known_issue' tests/test_options/test_symlinks.py

and this was the result:

======================================================================
FAIL: test_symlinks.test_default
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/chris/.pyenv/versions/3.4.10/lib/python3.4/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 21, in test_default
    '/a/z',
AssertionError

======================================================================
FAIL: test_symlinks.test_merge_directories_with_ignored_symlinks
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/chris/.pyenv/versions/3.4.10/lib/python3.4/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 36, in test_merge_directories_with_ignored_symlinks
    '/b',
AssertionError

----------------------------------------------------------------------
Ran 5 tests in 27.876s

FAILED (failures=2)

I wasn't sure whether nosetests-3.4 was testing against Python 3.4, which is why I ran it using Python 3.4.10, but I'm also getting the same results with 3.8.6 and 3.9.0 as well.

sahib commented 3 years ago

As a general heads up, you shouldn't use lstat() here either. At least for both glibc and musl, they are implemented as simple wrappers on top of faccessat().

@ericonr : You probably mean as wrappers to fstatat()? I actually tested that variant and seemed to work.

FYI, I just ran a partial test suite on just the new test added, using:

I just tried to reproduce this behavior in an alpine docker container, but couldn't. Could it be that you have a old rmlint binary lying around?

ChrisBaker97 commented 3 years ago

FYI, I just ran a partial test suite on just the new test added, using:

I just tried to reproduce this behavior in an alpine docker container, but couldn't. Could it be that you have a old rmlint binary lying around?

which rmlint does, in fact, return my Homebrew-installed rmlint. I'm not familiar enough with nosetest to know if there's a better way to do this, but I just aliased rmlint to the version compiled from the latest develop branch, ran the tests again, and got the same result:

Code ```sh $ alias rmlint=$(pwd)/rmlint $ type rmlint rmlint is an alias for /Users/chris/Code/rmlint/rmlint rmlint is /usr/local/bin/rmlint $ which rmlint rmlint: aliased to /Users/chris/Code/rmlint/rmlint $ rmlint --version version 2.10.1 compiled: Dec 18 2020 at [14:17:10] "Ludicrous Lemur" (rev ef12a601) compiled with: -mounts -nonstripped -fiemap +sha512 +bigfiles +intl +replay +xattr -btrfs-support rmlint was written by Christopher Pahl and Daniel Thomas. The code at https://github.com/sahib/rmlint is licensed under the terms of the GPLv3. $ python --version Python 3.4.10 $ RM_TS_USE_VALGRIND=1 RM_TS_PRINT_CMD=1 RM_TS_PEDANTIC=1 nosetests-3.4 -s -a '!slow !known_issue' tests/test_options/test_symlinks.py tests/test_robustness/test_badlinks_as_args.py Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha512 -o json:/tmp/out.json -c json:oneline FRunning cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha512 -o json:/tmp/out.json -c json:oneline FRunning cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline ...Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline F.. ====================================================================== FAIL: test_symlinks.test_default ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.4.10/lib/python3.4/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 21, in test_default '/a/z', AssertionError ====================================================================== FAIL: test_symlinks.test_merge_directories_with_ignored_symlinks ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.4.10/lib/python3.4/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 36, in test_merge_directories_with_ignored_symlinks '/b', AssertionError ====================================================================== FAIL: test_badlinks_as_args.test_bad_symlinks_as_direct_args ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.4.10/lib/python3.4/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_robustness/test_badlinks_as_args.py", line 33, in test_bad_symlinks_as_direct_args {link_a_path, link_b_path} AssertionError ---------------------------------------------------------------------- Ran 8 tests in 32.696s FAILED (failures=3) ```

Again, run with Python 3.4, but same results in 3.9.0.

sahib commented 3 years ago

which rmlint does, in fact, return my Homebrew-installed rmlint. I'm not familiar enough with nosetest to know if there's a better way to do this, but I just aliased rmlint to the version compiled from the latest develop branch, ran the tests again, and got the same result:

alias won't help since it's seen only by your shell. nosetests simply picks the rmlint in the directory you're executing it from. But /Users/chris/Code/rmlint/rmlint already has the latest fix, judging from the --version output. Weird.

Again, run with Python 3.4, but same results in 3.9.0.

Python version probably does not matter here.


Still no luck reproducing that issue in my alpine container (which uses musl as libc, like other reporters). Maybe there's another issue on macOS' libc?

Seems to compile and run fine on macOS 10.14.6 Mojave. Thanks for the fix.

You did execute the test in https://github.com/sahib/rmlint/pull/444#issuecomment-727606928 and it worked (files were detected as broken symlinks), right? Also did the above tests also fail with versions that did not have the fix yet? The last test (which I added recently) is especially weird since it fails only at the last check, indicating that there were some files detected as bad links.

ChrisBaker97 commented 3 years ago

Gotcha. Yeah, I'm running it from the base directory of the repository, which is where rmlintgets built, so it looks like it's testing with the modified version either way.

You did execute the test in #444 (comment) and it worked (files were detected as broken symlinks), right? Also did the above tests also fail with versions that did not have the fix yet?

I didn't but here's the output. Looks like the modified version works as expected, while the stock 2.10.1 version doesn't:

$ echo x > /tmp/a > /tmp/b
$ ln -s /tmp/a /tmp/la
$ ln -s /tmp/b /tmp/lb
$ rm -f /tmp/{a,b}
$ ./rmlint --version
version 2.10.1 compiled: Dec 18 2020 at [14:17:10] "Ludicrous Lemur" (rev ef12a601)
compiled with: -mounts -nonstripped -fiemap +sha512 +bigfiles +intl +replay +xattr -btrfs-support

rmlint was written by Christopher <sahib> Pahl and Daniel <SeeSpotRun> Thomas.
The code at https://github.com/sahib/rmlint is licensed under the terms of the GPLv3.
$ ./rmlint /tmp/l{a,b}

# Bad symlink(s):
    rm '/tmp/lb'
    rm '/tmp/la'

==> Note: Please use the saved script below for removal, not the above output.
==> In total 2 files, whereof 0 are duplicates in 0 groups.
==> This equals 0 B of duplicates which could be removed.
==> 2 other suspicious item(s) found, which may vary in size.
==> Scanning took in total 0.054s.

Wrote a sh file to: /Users/chris/Code/rmlint/rmlint.sh
Wrote a json file to: /Users/chris/Code/rmlint/rmlint.json
$ /usr/local/bin/rmlint --version
version 2.10.1 compiled: Nov 12 2020 at [20:13:37] "Ludicrous Lemur" (rev unknown)
compiled with: -mounts -nonstripped -fiemap +sha512 +bigfiles +intl +replay +xattr -btrfs-support

rmlint was written by Christopher <sahib> Pahl and Daniel <SeeSpotRun> Thomas.
The code at https://github.com/sahib/rmlint is licensed under the terms of the GPLv3.
$ /usr/local/bin/rmlint /tmp/l{a,b}
WARNING: Can't open directory or file "/tmp/la": No such file or directory
WARNING: Can't open directory or file "/tmp/lb": No such file or directory
ERROR: Not all given paths are valid. Aborting.

(I should mention that the "stock" version is built after applying the patch I submitted to Homebrew's formula, deleting |AT_SYMLINK_NOFOLLOW from cfg.c as shown in the initial commit to this pull request, which was necessary to get it working at all on macOS 10.14.x Mojave and older after 2.9.0. If that's a problem, let me know, and I'll roll back to 2.9.0 and test again.)

sahib commented 3 years ago

Thanks @ChrisBaker97. I pushed a small commit with some added prints in the tests. Can you please re-run the problematic tests so we what's going on?

ChrisBaker97 commented 3 years ago

Here you go:

$ git fetch origin && git reset --hard origin/develop ```sh remote: Enumerating objects: 13, done. remote: Counting objects: 100% (13/13), done. remote: Compressing objects: 100% (1/1), done. remote: Total 7 (delta 6), reused 7 (delta 6), pack-reused 0 Unpacking objects: 100% (7/7), 589 bytes | 84.00 KiB/s, done. From https://github.com/sahib/rmlint ef12a601..58db7a30 develop -> origin/develop HEAD is now at 58db7a30 temp: add debug logs to some tests ```
$ scons config --without-gui && scons DEBUG=1 ```sh scons: Reading SConscript files ... Checking whether the C compiler works... (cached) yes Checking for git revision... (cached) 58db7a30 Checking for pkg-config... (cached) yes Checking for glib-2.0 >= 2.32... (cached) yes Checking for gio-unix-2.0... (cached) yes Checking for blkid... (cached) no Checking for json-glib-1.0... (cached) yes Checking for -std=c11 support...(cached) yes Checking for cygwin environment...(cached) Darwin/apollo.local/18.7.0/Darwin Kernel Version 18.7.0: Fri Oct 30 12:37:06 PDT 2020; root:xnu-4903.278.44.0.2~1/RELEASE_X86_64/x86_64/i386(cached) no Checking whether _mm_crc32_u64 is declared... (cached) yes Checking for GCC version... (cached) 4 Checking whether __builtin_cpu_supports is declared... (cached) no Checking whether blkid_devno_to_wholedisk is declared... (cached) no Checking for existence of /sys/block... (cached) no Checking for C header file libelf.h... (cached) no Checking for C type struct fiemap... (cached) no Checking for C function getxattr()... (cached) yes Checking for C function setxattr()... (cached) yes Checking for C function removexattr()... (cached) yes Checking for C function listxattr()... (cached) yes Checking for C function lgetxattr()... (cached) no Checking size of off_t ... (cached) yes Checking for C function stat64()... (cached) yes Checking whether G_CHECKSUM_SHA512 is declared... (cached) yes Checking for C header file locale.h... (cached) yes Checking for C header file linux/limits.h... (cached) no Checking whether posix_fadvise is declared... (cached) no Checking for C header file linux/btrfs.h... (cached) no Checking for C header file linux/fs.h... (cached) no Checking for C header file sys/utsname.h... (cached) yes Checking for C header file sys/sysmacros.h... (cached) no Using compiler optimisation -O2 (to change, run scons with O=[0|1|2|3|s|fast]) Running with --jobs=8 Building rmlint scons: done reading SConscript files. scons: Building targets ... Printing configuration... Using sphinx-build binary: /usr/local/bin/sphinx-build rmlint will be compiled with the following features: Find non-stripped binaries (needs libelf) : no Optimize using ioctl(FS_IOC_FIEMAP) (needs linux) : no Support for SHA512 (needs glib >= 2.31) : yes Build manpage from docs/rmlint.1.rst : yes, using /usr/local/bin/sphinx-build Support for caching checksums in file's xattr : yes Support for reading json caches (needs json-glib) : yes Checking for proper support of big files >= 4GB : yes (needs either sizeof(off_t) >= 8 ...) : yes (... or presence of stat64) : yes Optimize non-rotational disks : no (needs libblkid for resolving dev_t to path) : no (needs gio-unix-2.0) : yes Enable gettext localization : yes (needs for compile side support) : yes (needs msgfmt to compile .po files) : yes The following constants will be used during the build: Version information : 2.10.1 "Ludicrous Lemur" (rev 58db7a30) Compiler : gcc Install prefix : /usr/local Actual prefix : /usr/local Verbose building : no Adding debug checks : no Adding debug symbols : no Type 'scons' to actually compile rmlint now. Good luck. scons: done building targets. scons: Reading SConscript files ... Checking whether the C compiler works... (cached) yes Checking for git revision... (cached) 58db7a30 Checking for pkg-config... (cached) yes Checking for glib-2.0 >= 2.32... (cached) yes Checking for gio-unix-2.0... (cached) yes Checking for blkid... (cached) no Checking for json-glib-1.0... (cached) yes Checking for -std=c11 support...(cached) yes Checking for cygwin environment...(cached) Darwin/apollo.local/18.7.0/Darwin Kernel Version 18.7.0: Fri Oct 30 12:37:06 PDT 2020; root:xnu-4903.278.44.0.2~1/RELEASE_X86_64/x86_64/i386(cached) no Checking whether _mm_crc32_u64 is declared... (cached) yes Checking for GCC version... (cached) 4 Checking whether __builtin_cpu_supports is declared... (cached) no Checking whether blkid_devno_to_wholedisk is declared... (cached) no Checking for existence of /sys/block... (cached) no Checking for C header file libelf.h... (cached) no Checking for C type struct fiemap... (cached) no Checking for C function getxattr()... (cached) yes Checking for C function setxattr()... (cached) yes Checking for C function removexattr()... (cached) yes Checking for C function listxattr()... (cached) yes Checking for C function lgetxattr()... (cached) no Checking size of off_t ... (cached) yes Checking for C function stat64()... (cached) yes Checking whether G_CHECKSUM_SHA512 is declared... (cached) yes Checking for C header file locale.h... (cached) yes Checking for C header file linux/limits.h... (cached) no Checking whether posix_fadvise is declared... (cached) no Checking for C header file linux/btrfs.h... (cached) no Checking for C header file linux/fs.h... (cached) no Checking for C header file sys/utsname.h... (cached) yes Checking for C header file sys/sysmacros.h... (cached) no Compiling in debug mode Using compiler optimisation -Og (to change, run scons with O=[0|1|2|3|s|fast]) Running with --jobs=8 Building rmlint scons: done reading SConscript files. scons: Building targets ... build_config_template(["lib/config.h"], ["lib/config.h.in"]) build_python_formatter(["lib/formats/py.c"], ["lib/formats/py.c.in"]) build_sh_formatter(["lib/formats/sh.c"], ["lib/formats/sh.c.in"]) scons: `docs/_build/man/rmlint.1' is up to date. scons: `docs/rmlint.1.gz' is up to date. Compiling ==> lib/formats/sh.c Compiling ==> lib/formats/py.c Compiling ==> lib/checksums/metrohash128.c Compiling ==> lib/session.c Compiling ==> lib/formats.c Compiling ==> lib/formats/_equal.c Compiling ==> lib/checksums/blake2/blake2b-ref.c Compiling ==> lib/treemerge.c Compiling ==> lib/cmdline.c Compiling ==> lib/formats/summary.c Compiling ==> lib/md-scheduler.c Compiling ==> lib/formats/json.c Compiling ==> lib/hasher.c Compiling ==> lib/checksums/blake2/blake2sp-ref.c Compiling ==> src/rmlint.c Compiling ==> lib/replay.c Compiling ==> lib/fts/fts.c Compiling ==> lib/formats/progressbar.c Compiling ==> lib/file.c Compiling ==> lib/checksums/xxhash/xxhash.c Compiling ==> lib/traverse.c Compiling ==> lib/checksum.c Compiling ==> lib/formats/stats.c Compiling ==> lib/formats/fdupes.c Compiling ==> lib/checksums/blake2/blake2s-ref.c Compiling ==> lib/xattr.c Compiling ==> lib/preprocess.c Compiling ==> lib/formats/uniques.c Compiling ==> lib/hash-utility.c Compiling ==> lib/formats/pretty.c Compiling ==> lib/checksums/blake2/blake2xs-ref.c Compiling ==> lib/shredder.c Compiling ==> lib/formats/csv.c Compiling ==> lib/checksums/blake2/blake2bp-ref.c Compiling ==> lib/utilities.c Compiling ==> lib/pathtricia.c Compiling ==> lib/formats/timestamp.c Compiling ==> lib/formats/null.c Compiling ==> lib/cfg.c Compiling ==> lib/checksums/blake2/blake2xb-ref.c Linking Static Library ==> librmlint.a Ranlib Library ==> librmlint.a Linking Program ==> rmlint scons: done building targets. ```
$ ./rmlint --version ```sh version 2.10.1 compiled: Dec 19 2020 at [11:05:28] "Ludicrous Lemur" (rev 58db7a30) compiled with: -mounts -nonstripped -fiemap +sha512 +bigfiles +intl +replay +xattr -btrfs-support rmlint was written by Christopher Pahl and Daniel Thomas. The code at https://github.com/sahib/rmlint is licensed under the terms of the GPLv3. ```
$ RM_TS_USE_VALGRIND=1 RM_TS_PRINT_CMD=1 RM_TS_PEDANTIC=1 nosetests-3.4 -s -a '!slow !known_issue' tests/test_options/test_symlinks.py tests/test_robustness/test_badlinks_as_args.py ```sh Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir --algorithm=sha512 -o json:/tmp/out.json -c json:oneline {'-testdir/b/x', '-testdir/b/y', '-testdir/a/z', '-testdir/b/z'} FRunning cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -T df,dd --algorithm=sha512 -o json:/tmp/out.json -c json:oneline {'-testdir/b', '-testdir/a'} FRunning cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline ...Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /tmp/rmlint-unit-testdir /tmp/rmlint-unit-testdir/link_a /tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline {'/private/tmp/rmlint-unit-testdir/link_b', '/private/tmp/rmlint-unit-testdir/link_a'} F.. ====================================================================== FAIL: test_symlinks.test_default ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 18, in test_default assert {e["path"][len(TESTDIR_NAME):] for e in data} == { AssertionError ====================================================================== FAIL: test_symlinks.test_merge_directories_with_ignored_symlinks ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 36, in test_merge_directories_with_ignored_symlinks assert {e["path"][len(TESTDIR_NAME):] for e in data if e["type"] == "duplicate_dir"} == { AssertionError ====================================================================== FAIL: test_badlinks_as_args.test_bad_symlinks_as_direct_args ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_robustness/test_badlinks_as_args.py", line 33, in test_bad_symlinks_as_direct_args assert {data[0]['path'], data[1]['path']} == \ AssertionError ---------------------------------------------------------------------- Ran 8 tests in 33.946s FAILED (failures=3) ```
sahib commented 3 years ago

Okay, thanks. Good news, it's just a error in the test :smile: The paths get cut off incorrectly on macOS, probably because rmlint followed a link (which shows in the path, ). Will fix tomorrow.

Out of curiosity, do the test work when you do this?

$ RM_TS_DIR=/private/tmp/rmlint-unit-testdir/ RM_TS_PRINT_CMD=1 nosetests-3.4 -d -s -a '!slow !known_issue' tests/test_options/test_symlinks.py tests/test_robustness/test_badlinks_as_args.py

...also I suppose those are not the only tests that fail on macOS?

sahib commented 3 years ago

I should have noted: The -d above makes nose output the values it tried to assert, which is helpful during debugging.

sahib commented 3 years ago

17ada44f contains a fix that should do the trick for those tests.

ChrisBaker97 commented 3 years ago

Out of curiosity, do the test work when you do this?

$ RM_TS_DIR=/private/tmp/rmlint-unit-testdir/ RM_TS_PRINT_CMD=1 nosetests-3.4 -d -s -a '!slow !known_issue' tests/test_options/test_symlinks.py tests/test_robustness/test_badlinks_as_args.py ``` Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir/ -o json:/tmp/out.json -c json:oneline {'b/z', 'b/y', 'b/x', 'a/z'} FRunning cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir/ -T df,dd -o json:/tmp/out.json -c json:oneline {'a', 'b'} FRunning cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir/ -F -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir/ -f -S a -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir/ -@ -S a -o json:/tmp/out.json -c json:oneline ...Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir/ /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b -o json:/tmp/out.json -c json:oneline {'/private/tmp/rmlint-unit-testdir/link_b', '/private/tmp/rmlint-unit-testdir/link_a'} ... ====================================================================== FAIL: test_symlinks.test_default ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 18, in test_default assert {e["path"][len(TESTDIR_NAME):] for e in data} == { AssertionError: ====================================================================== FAIL: test_symlinks.test_merge_directories_with_ignored_symlinks ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_symlinks.py", line 36, in test_merge_directories_with_ignored_symlinks assert {e["path"][len(TESTDIR_NAME):] for e in data if e["type"] == "duplicate_dir"} == { AssertionError: ---------------------------------------------------------------------- Ran 8 tests in 0.987s FAILED (failures=2) ```

...also I suppose those are not the only tests that fail on macOS?

You know, I've tried to run the full test suite a couple of times, but always run out of patience after 30 mins or so. Pretty deep into it, IIRC, it prints a line F.. and then seems to hang longer than I care to wait. The system is still loaded from it, and I end up having to close out the terminal.

We can work on that next, if you want. 😊

17ada44 contains a fix that should do the trick for those tests.

Looks good, I think.

$ git fetch origin && git reset --hard origin/develop ``` remote: Enumerating objects: 28, done. remote: Counting objects: 100% (28/28), done. remote: Compressing objects: 100% (7/7), done. remote: Total 18 (delta 15), reused 14 (delta 11), pack-reused 0 Unpacking objects: 100% (18/18), 1.68 KiB | 122.00 KiB/s, done. From https://github.com/sahib/rmlint 58db7a30..17ada44f develop -> origin/develop HEAD is now at 17ada44f macos: hopefully fix run on macOS ```
$ scons config --without-gui && scons DEBUG=1 ``` scons: Reading SConscript files ... Checking whether the C compiler works... (cached) yes Checking for git revision... (cached) 17ada44f Checking for pkg-config... (cached) yes Checking for glib-2.0 >= 2.32... (cached) yes Checking for gio-unix-2.0... (cached) yes Checking for blkid... (cached) no Checking for json-glib-1.0... (cached) yes Checking for -std=c11 support...(cached) yes Checking for cygwin environment...(cached) Darwin/apollo.local/18.7.0/Darwin Kernel Version 18.7.0: Fri Oct 30 12:37:06 PDT 2020; root:xnu-4903.278.44.0.2~1/RELEASE_X86_64/x86_64/i386(cached) no Checking whether _mm_crc32_u64 is declared... (cached) yes Checking for GCC version... (cached) 4 Checking whether __builtin_cpu_supports is declared... (cached) no Checking whether blkid_devno_to_wholedisk is declared... (cached) no Checking for existence of /sys/block... (cached) no Checking for C header file libelf.h... (cached) no Checking for C type struct fiemap... (cached) no Checking for C function getxattr()... (cached) yes Checking for C function setxattr()... (cached) yes Checking for C function removexattr()... (cached) yes Checking for C function listxattr()... (cached) yes Checking for C function lgetxattr()... (cached) no Checking size of off_t ... (cached) yes Checking for C function stat64()... (cached) yes Checking whether G_CHECKSUM_SHA512 is declared... (cached) yes Checking for C header file locale.h... (cached) yes Checking for C header file linux/limits.h... (cached) no Checking whether posix_fadvise is declared... (cached) no Checking for C header file linux/btrfs.h... (cached) no Checking for C header file linux/fs.h... (cached) no Checking for C header file sys/utsname.h... (cached) yes Checking for C header file sys/sysmacros.h... (cached) no Using compiler optimisation -O2 (to change, run scons with O=[0|1|2|3|s|fast]) Running with --jobs=8 Building rmlint scons: done reading SConscript files. scons: Building targets ... Printing configuration... Using sphinx-build binary: /usr/local/bin/sphinx-build rmlint will be compiled with the following features: Find non-stripped binaries (needs libelf) : no Optimize using ioctl(FS_IOC_FIEMAP) (needs linux) : no Support for SHA512 (needs glib >= 2.31) : yes Build manpage from docs/rmlint.1.rst : yes, using /usr/local/bin/sphinx-build Support for caching checksums in file's xattr : yes Support for reading json caches (needs json-glib) : yes Checking for proper support of big files >= 4GB : yes (needs either sizeof(off_t) >= 8 ...) : yes (... or presence of stat64) : yes Optimize non-rotational disks : no (needs libblkid for resolving dev_t to path) : no (needs gio-unix-2.0) : yes Enable gettext localization : yes (needs for compile side support) : yes (needs msgfmt to compile .po files) : yes The following constants will be used during the build: Version information : 2.10.1 "Ludicrous Lemur" (rev 17ada44f) Compiler : gcc Install prefix : /usr/local Actual prefix : /usr/local Verbose building : no Adding debug checks : no Adding debug symbols : no Type 'scons' to actually compile rmlint now. Good luck. scons: done building targets. scons: Reading SConscript files ... Checking whether the C compiler works... (cached) yes Checking for git revision... (cached) 17ada44f Checking for pkg-config... (cached) yes Checking for glib-2.0 >= 2.32... (cached) yes Checking for gio-unix-2.0... (cached) yes Checking for blkid... (cached) no Checking for json-glib-1.0... (cached) yes Checking for -std=c11 support...(cached) yes Checking for cygwin environment...(cached) Darwin/apollo.local/18.7.0/Darwin Kernel Version 18.7.0: Fri Oct 30 12:37:06 PDT 2020; root:xnu-4903.278.44.0.2~1/RELEASE_X86_64/x86_64/i386(cached) no Checking whether _mm_crc32_u64 is declared... (cached) yes Checking for GCC version... (cached) 4 Checking whether __builtin_cpu_supports is declared... (cached) no Checking whether blkid_devno_to_wholedisk is declared... (cached) no Checking for existence of /sys/block... (cached) no Checking for C header file libelf.h... (cached) no Checking for C type struct fiemap... (cached) no Checking for C function getxattr()... (cached) yes Checking for C function setxattr()... (cached) yes Checking for C function removexattr()... (cached) yes Checking for C function listxattr()... (cached) yes Checking for C function lgetxattr()... (cached) no Checking size of off_t ... (cached) yes Checking for C function stat64()... (cached) yes Checking whether G_CHECKSUM_SHA512 is declared... (cached) yes Checking for C header file locale.h... (cached) yes Checking for C header file linux/limits.h... (cached) no Checking whether posix_fadvise is declared... (cached) no Checking for C header file linux/btrfs.h... (cached) no Checking for C header file linux/fs.h... (cached) no Checking for C header file sys/utsname.h... (cached) yes Checking for C header file sys/sysmacros.h... (cached) no Compiling in debug mode Using compiler optimisation -Og (to change, run scons with O=[0|1|2|3|s|fast]) Running with --jobs=8 Building rmlint scons: done reading SConscript files. scons: Building targets ... build_config_template(["lib/config.h"], ["lib/config.h.in"]) build_python_formatter(["lib/formats/py.c"], ["lib/formats/py.c.in"]) build_sh_formatter(["lib/formats/sh.c"], ["lib/formats/sh.c.in"]) scons: `docs/_build/man/rmlint.1' is up to date. scons: `docs/rmlint.1.gz' is up to date. Compiling ==> lib/formats/sh.c Compiling ==> lib/formats/py.c Compiling ==> lib/formats/progressbar.c Compiling ==> lib/checksums/blake2/blake2b-ref.c Compiling ==> lib/xattr.c Compiling ==> lib/preprocess.c Compiling ==> lib/checksum.c Compiling ==> lib/formats/stats.c Compiling ==> lib/formats/fdupes.c Compiling ==> lib/shredder.c Compiling ==> lib/formats.c Compiling ==> lib/formats/uniques.c Compiling ==> lib/formats/pretty.c Compiling ==> lib/checksums/blake2/blake2xs-ref.c Compiling ==> lib/checksums/xxhash/xxhash.c Compiling ==> lib/utilities.c Compiling ==> lib/pathtricia.c Compiling ==> lib/cfg.c Compiling ==> lib/formats/csv.c Compiling ==> lib/checksums/blake2/blake2s-ref.c Compiling ==> lib/checksums/metrohash128.c Compiling ==> src/rmlint.c Compiling ==> lib/session.c Compiling ==> lib/file.c Compiling ==> lib/formats/timestamp.c Compiling ==> lib/formats/null.c Compiling ==> lib/checksums/blake2/blake2xb-ref.c Compiling ==> lib/treemerge.c Compiling ==> lib/md-scheduler.c Compiling ==> lib/hash-utility.c Compiling ==> lib/formats/_equal.c Compiling ==> lib/checksums/blake2/blake2bp-ref.c Compiling ==> lib/replay.c Compiling ==> lib/cmdline.c Compiling ==> lib/formats/summary.c Compiling ==> lib/formats/json.c Compiling ==> lib/checksums/blake2/blake2sp-ref.c Compiling ==> lib/traverse.c Compiling ==> lib/hasher.c Compiling ==> lib/fts/fts.c Linking Static Library ==> librmlint.a Ranlib Library ==> librmlint.a Linking Program ==> rmlint scons: done building targets. ```
$ ./rmlint --version ``` version 2.10.1 compiled: Dec 19 2020 at [12:45:54] "Ludicrous Lemur" (rev 17ada44f) compiled with: -mounts -nonstripped -fiemap +sha512 +bigfiles +intl +replay +xattr -btrfs-support rmlint was written by Christopher Pahl and Daniel Thomas. The code at https://github.com/sahib/rmlint is licensed under the terms of the GPLv3. ```
$ RM_TS_USE_VALGRIND=1 RM_TS_PRINT_CMD=1 RM_TS_PEDANTIC=1 nosetests-3.4 -d -s -a '!slow !known_issue' tests/test_options/test_symlinks.py tests/test_robustness/test_badlinks_as_args.py ``` Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --algorithm=sha512 -o json:/tmp/out.json -c json:oneline .Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -T df,dd --algorithm=sha512 -o json:/tmp/out.json -c json:oneline .Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -F --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -f -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -@ -S a --algorithm=sha512 -o json:/tmp/out.json -c json:oneline ...Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --with-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --without-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --fake-pathindex-as-disk -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --fake-fiemap -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b -P -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b -PP -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --limit-mem 1M --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --buffered-read -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --threads=1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --shred-never-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --shred-always-wait -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --no-mount-table -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=murmur -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=metro -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=metro256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=md5 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha1 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha3-256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha3-384 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha3-512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=blake2s -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=blake2b -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=blake2sp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=blake2bp -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=xxhash -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=highway64 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=highway128 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=highway256 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=paranoid -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline Running cmd from `/Users/chris/Code/rmlint`: /Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir /private/tmp/rmlint-unit-testdir/link_a /private/tmp/rmlint-unit-testdir/link_b --algorithm=sha512 -o json:/tmp/out.json -c json:oneline ... ---------------------------------------------------------------------- Ran 8 tests in 33.572s OK ```
sahib commented 3 years ago

You know, I've tried to run the full test suite a couple of times, but always run out of patience after 30 mins or so. Pretty deep into it, IIRC, it prints a line F.. and then seems to hang longer than I care to wait. The system is still loaded from it, and I end up having to close out the terminal.

Welp, interesting. Does that still happen if you just do:

# That takes about 60s on my rather slow laptop:
$ nosetests -d -s -a '!slow' tests

Just for background:

Looks good, I think.

Nice.

ChrisBaker97 commented 3 years ago

That completed at least. Look's like Apple's touch doesn't like -d.

$ nosetests -d -s -a '!slow' tests ``` .........EEEEE.............................................................touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... Ftouch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... F..touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... Ftouch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... touch: illegal option -- d usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... FF.......................................E.................................................. ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_formatters/test_py.py", line 8, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_formatters/test_sh.py", line 8, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'psutil') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_mains/test_dedupe.py", line 8, in import psutil ModuleNotFoundError: No module named 'psutil' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_mains/test_hash.py", line 7, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_options/test_cache.py", line 5, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_options/test_stdin.py", line 6, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== FAIL: test_mtime_window.test_consider_mtime ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 36, in test_consider_mtime assert len(data) == 2 AssertionError: {'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --mtime-window=0 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'blake2b', 'merge_directories': False}, *[], {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0} = run_rmlint('--mtime-window=0') >> assert len([]) == 2 assert {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0}['total_files'] == 4 assert {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0}['total_lint_size'] == 3 ====================================================================== FAIL: test_mtime_window.test_consider_mtime_subsecond ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 66, in test_consider_mtime_subsecond assert len(data) == 0 AssertionError: {'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --mtime-window=1.9 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'blake2b', 'merge_directories': False}, *[{'id': 855184727, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/a', 'size': 3, 'depth': 1, 'inode': 8748188040, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608474432.4454415}, {'id': 2524578547, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/b', 'size': 3, 'depth': 1, 'inode': 8748188041, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608474432.4456284}], {'aborted': False, 'progress': 100, 'total_files': 2, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 1, 'duplicate_sets': 1, 'total_lint_size': 3} = run_rmlint('--mtime-window=1.9') >> assert len([{'id': 855184727, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/a', 'size': 3, 'depth': 1, 'inode': 8748188040, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608474432.4454415}, {'id': 2524578547, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/b', 'size': 3, 'depth': 1, 'inode': 8748188041, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608474432.4456284}]) == 0 ====================================================================== FAIL: test_mtime_window.test_consider_mtime_fail_by_association ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 89, in test_consider_mtime_fail_by_association assert len(data) == 0 AssertionError: >> assert len([{'id': 855184715, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/a', 'size': 3, 'depth': 1, 'inode': 8748188052, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608474432.6068008}, {'id': 1277086968, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/c', 'size': 3, 'depth': 1, 'inode': 8748188054, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608474432.6072524}]) == 0 assert {'aborted': False, 'progress': 100, 'total_files': 3, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 1, 'duplicate_sets': 1, 'total_lint_size': 3}['total_files'] == 3 assert {'aborted': False, 'progress': 100, 'total_files': 3, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 1, 'duplicate_sets': 1, 'total_lint_size': 3}['total_lint_size'] == 0 ====================================================================== FAIL: test_mtime_window.test_mtime_and_unmatched_basenames ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 115, in test_mtime_and_unmatched_basenames assert len(data) == 2 AssertionError: >> assert len([{'id': 2136460892, 'type': 'duplicate_file', 'progress': 100, 'checksum': '0289ad1458eb3749903b23682a42c94f3659600d306fce6e2fce8e5c49bfda5dfd4971c4db287bf888ace21903bd54f30e01b7669421e5a10635a29c7d033eb0', 'path': '/private/tmp/rmlint-unit-testdir/dir1/b', 'size': 3, 'depth': 2, 'inode': 8748188064, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608474432.806419}, {'id': 1989104419, 'type': 'duplicate_file', 'progress': 100, 'checksum': '0289ad1458eb3749903b23682a42c94f3659600d306fce6e2fce8e5c49bfda5dfd4971c4db287bf888ace21903bd54f30e01b7669421e5a10635a29c7d033eb0', 'path': '/private/tmp/rmlint-unit-testdir/dir2/c', 'size': 3, 'depth': 2, 'inode': 8748188066, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608474432.8070312}, {'id': 1973716072, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/dir1/a', 'size': 3, 'depth': 2, 'inode': 8748188060, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608474432.8058524}, {'id': 3908624190, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330a', 'path': '/private/tmp/rmlint-unit-testdir/dir1/c', 'size': 3, 'depth': 2, 'inode': 8748188061, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608474432.8060827}]) == 2 assert {'aborted': False, 'progress': 100, 'total_files': 6, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 2, 'duplicate_sets': 2, 'total_lint_size': 6}['total_files'] == 6 assert {'aborted': False, 'progress': 100, 'total_files': 6, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 2, 'duplicate_sets': 2, 'total_lint_size': 6}['total_lint_size'] == 3 ====================================================================== FAIL: test_newer_than.test_simple ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_newer_than.py", line 50, in test_simple assert len(data) == expect AssertionError: {'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -S a -N 2020-12-20T14:27:14-0500 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'blake2b', 'merge_directories': False}, *[], {'aborted': False, 'progress': 100, 'total_files': 3, 'ignored_files': 1, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0} = run_rmlint_once('-S a -N ' + '2020-12-20T14:27:14-0500') >> assert len([]) == 3 ---------------------------------------------------------------------- Ran 172 tests in 72.499s FAILED (errors=6, failures=5) ```

I had been using RM_TS_USE_VALGRIND=1 RM_TS_PRINT_CMD=1 RM_TS_PEDANTIC=1 nosetests-3.4 -s -a '!slow !known_issue' to run all tests before. (Not sure if leaving off tests at the end was causing it to pick up anything outside of the tests directory as well.)

ChrisBaker97 commented 3 years ago

A little over an hour later...

$ RM_TS_USE_VALGRIND=1 RM_TS_PRINT_CMD=1 RM_TS_PEDANTIC=1 nosetests-3.4 -d -s -a '!slow !known_issue' tests ``` ... ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_formatters/test_py.py", line 8, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_formatters/test_sh.py", line 8, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'psutil') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_mains/test_dedupe.py", line 8, in import psutil ModuleNotFoundError: No module named 'psutil' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_mains/test_hash.py", line 7, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_options/test_cache.py", line 5, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== ERROR: test_replay.test_replay_no_dir ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_replay.py", line 222, in test_replay_no_dir head, *data, footer = run_rmlint( File "/Users/chris/Code/rmlint/tests/utils.py", line 299, in run_rmlint return run_rmlint_pedantic(*args, **kwargs) File "/Users/chris/Code/rmlint/tests/utils.py", line 258, in run_rmlint_pedantic if has_feature('sha512'): File "/Users/chris/Code/rmlint/tests/utils.py", line 98, in has_feature return ('+' + feature) in subprocess.check_output( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/subprocess.py", line 420, in check_output return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/subprocess.py", line 501, in run with Popen(*popenargs, **kwargs) as process: File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/subprocess.py", line 947, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/subprocess.py", line 1819, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: './rmlint' ====================================================================== ERROR: Failure: ModuleNotFoundError (No module named 'parameterized') ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/failure.py", line 39, in runTest raise self.exc_val.with_traceback(self.tb) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/loader.py", line 417, in loadTestsFromName module = self.importer.importFromPath( File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 234, in load_module return load_source(name, filename, file) File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/imp.py", line 171, in load_source module = _load(spec) File "", line 711, in _load File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/Users/chris/Code/rmlint/tests/test_options/test_stdin.py", line 6, in from parameterized import parameterized ModuleNotFoundError: No module named 'parameterized' ====================================================================== FAIL: test_merge_directories.test_equal_content_different_layout ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_merge_directories.py", line 440, in test_equal_content_different_layout head, *data, footer = run_rmlint('-p -D --rank-by a') File "/Users/chris/Code/rmlint/tests/utils.py", line 299, in run_rmlint return run_rmlint_pedantic(*args, **kwargs) File "/Users/chris/Code/rmlint/tests/utils.py", line 290, in run_rmlint_pedantic raise AssertionError("Optimisation too optimized: " + option) AssertionError: Optimisation too optimized: --algorithm=sha1 .([{'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -p -D --rank-by a --algorithm=md5 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'md5', 'merge_directories': True}, {'id': 4194910784, 'type': 'part_of_directory', 'progress': 100, 'checksum': 'f0a4058fd33489695d53df156b77c724', 'path': '/private/tmp/rmlint-unit-testdir/tree-a/sub1/y', 'size': 3, 'depth': 3, 'inode': 8748194687, 'disk_id': 16777222, 'is_original': False, 'parent_path': '/private/tmp/rmlint-unit-testdir/tree-a/sub1', 'mtime': 1608475774.4258957}, {'id': 2703645375, 'type': 'part_of_directory', 'progress': 100, 'checksum': 'f561aaf6ef0bf14d4208bb46a4ccb3ad', 'path': '/private/tmp/rmlint-unit-testdir/tree-a/sub2/x', 'size': 3, 'depth': 3, 'inode': 8748194685, 'disk_id': 16777222, 'is_original': False, 'parent_path': '/private/tmp/rmlint-unit-testdir/tree-a/sub2', 'mtime': 1608475774.4254923}, {'id': 4255397530, 'type': 'part_of_directory', 'progress': 100, 'checksum': 'f561aaf6ef0bf14d4208bb46a4ccb3ad', 'path': '/private/tmp/rmlint-unit-testdir/tree-b/x', 'size': 3, 'depth': 2, 'inode': 8748194689, 'disk_id': 16777222, 'is_original': True, 'parent_path': '/private/tmp/rmlint-unit-testdir/tree-b', 'mtime': 1608475774.4264994}, {'id': 1977235119, 'type': 'part_of_directory', 'progress': 100, 'checksum': 'f0a4058fd33489695d53df156b77c724', 'path': '/private/tmp/rmlint-unit-testdir/tree-b/y', 'size': 3, 'depth': 2, 'inode': 8748194691, 'disk_id': 16777222, 'is_original': True, 'parent_path': '/private/tmp/rmlint-unit-testdir/tree-b', 'mtime': 1608475774.426853}, {'id': 1693209562, 'type': 'duplicate_dir', 'progress': 100, 'checksum': '05c5af793c3f78241f5b6453cfbb7489', 'path': '/private/tmp/rmlint-unit-testdir/tree-a', 'size': 6, 'depth': 4, 'inode': 8748194683, 'disk_id': 16777222, 'is_original': True, 'n_children': 2, 'twins': 2, 'mtime': 1608475774.425696}, {'id': 1282648705, 'type': 'duplicate_dir', 'progress': 100, 'checksum': '05c5af793c3f78241f5b6453cfbb7489', 'path': '/private/tmp/rmlint-unit-testdir/tree-b', 'size': 6, 'depth': 4, 'inode': 8748194688, 'disk_id': 16777222, 'is_original': False, 'n_children': 2, 'twins': 2, 'mtime': 1608475774.4267452}, {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 2, 'duplicate_sets': 2, 'total_lint_size': 6}]) .([{'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -p -D --rank-by a --algorithm=sha1 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'sha1', 'merge_directories': True}, {'id': 3843750055, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b60d121b438a380c343d5ec3c2037564b82ffef3', 'path': '/private/tmp/rmlint-unit-testdir/tree-a/sub2/x', 'size': 3, 'depth': 3, 'inode': 8748194685, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608475774.4254923}, {'id': 3113784450, 'type': 'duplicate_file', 'progress': 100, 'checksum': 'b60d121b438a380c343d5ec3c2037564b82ffef3', 'path': '/private/tmp/rmlint-unit-testdir/tree-b/x', 'size': 3, 'depth': 2, 'inode': 8748194689, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608475774.4264994}, {'id': 2754604867, 'type': 'duplicate_file', 'progress': 100, 'checksum': '186154712b2d5f6791d85b9a0987b98fa231779c', 'path': '/private/tmp/rmlint-unit-testdir/tree-a/sub1/y', 'size': 3, 'depth': 3, 'inode': 8748194687, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608475774.4258957}, {'id': 737975212, 'type': 'duplicate_file', 'progress': 100, 'checksum': '186154712b2d5f6791d85b9a0987b98fa231779c', 'path': '/private/tmp/rmlint-unit-testdir/tree-b/y', 'size': 3, 'depth': 2, 'inode': 8748194691, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608475774.426853}, {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 2, 'duplicate_sets': 2, 'total_lint_size': 6}]) >> raise AssertionError("Optimisation too optimized: " + '--algorithm=sha1') ====================================================================== FAIL: test_mtime_window.test_consider_mtime ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 36, in test_consider_mtime assert len(data) == 2 AssertionError: {'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --mtime-window=0 --algorithm=sha512 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'sha512', 'merge_directories': False}, *[], {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0} = run_rmlint('--mtime-window=0') >> assert len([]) == 2 assert {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0}['total_files'] == 4 assert {'aborted': False, 'progress': 100, 'total_files': 4, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0}['total_lint_size'] == 3 ====================================================================== FAIL: test_mtime_window.test_consider_mtime_subsecond ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 66, in test_consider_mtime_subsecond assert len(data) == 0 AssertionError: {'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir --mtime-window=1.9 --algorithm=sha512 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'sha512', 'merge_directories': False}, *[{'id': 214529317, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/a', 'size': 3, 'depth': 1, 'inode': 8748194949, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608475835.264542}, {'id': 2823447171, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/b', 'size': 3, 'depth': 1, 'inode': 8748194950, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608475835.264883}], {'aborted': False, 'progress': 100, 'total_files': 2, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 1, 'duplicate_sets': 1, 'total_lint_size': 3} = run_rmlint('--mtime-window=1.9') >> assert len([{'id': 214529317, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/a', 'size': 3, 'depth': 1, 'inode': 8748194949, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608475835.264542}, {'id': 2823447171, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/b', 'size': 3, 'depth': 1, 'inode': 8748194950, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608475835.264883}]) == 0 ====================================================================== FAIL: test_mtime_window.test_consider_mtime_fail_by_association ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 89, in test_consider_mtime_fail_by_association assert len(data) == 0 AssertionError: >> assert len([{'id': 214529401, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/a', 'size': 3, 'depth': 1, 'inode': 8748195033, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608475855.7154937}, {'id': 1915661514, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/c', 'size': 3, 'depth': 1, 'inode': 8748195035, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608475855.7160108}]) == 0 assert {'aborted': False, 'progress': 100, 'total_files': 3, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 1, 'duplicate_sets': 1, 'total_lint_size': 3}['total_files'] == 3 assert {'aborted': False, 'progress': 100, 'total_files': 3, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 1, 'duplicate_sets': 1, 'total_lint_size': 3}['total_lint_size'] == 0 ====================================================================== FAIL: test_mtime_window.test_mtime_and_unmatched_basenames ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_mtime_window.py", line 115, in test_mtime_and_unmatched_basenames assert len(data) == 2 AssertionError: >> assert len([{'id': 3687803558, 'type': 'duplicate_file', 'progress': 100, 'checksum': '97848439adcede20ef21ae7224e36960f0c3c967ba22403d39865bf94bc6a01ca7b64634b7be2d4a30384176bd8472c1fe856f8c6a966c41eb4e06ad8dac7841', 'path': '/private/tmp/rmlint-unit-testdir/dir1/b', 'size': 3, 'depth': 2, 'inode': 8748195119, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608475876.4546227}, {'id': 3524786117, 'type': 'duplicate_file', 'progress': 100, 'checksum': '97848439adcede20ef21ae7224e36960f0c3c967ba22403d39865bf94bc6a01ca7b64634b7be2d4a30384176bd8472c1fe856f8c6a966c41eb4e06ad8dac7841', 'path': '/private/tmp/rmlint-unit-testdir/dir2/c', 'size': 3, 'depth': 2, 'inode': 8748195121, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608475876.4552174}, {'id': 1268049312, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/dir1/a', 'size': 3, 'depth': 2, 'inode': 8748195115, 'disk_id': 16777222, 'is_original': True, 'twins': 2, 'mtime': 1608475876.453674}, {'id': 3603480304, 'type': 'duplicate_file', 'progress': 100, 'checksum': '9057ff1aa9509b2a0af624d687461d2bbeb07e2f37d953b1ce4a9dc921a7f19c45dc35d7c5363b373792add57d0d7dc41596e1c585d6ef7844cdf8ae87af443f', 'path': '/private/tmp/rmlint-unit-testdir/dir1/c', 'size': 3, 'depth': 2, 'inode': 8748195116, 'disk_id': 16777222, 'is_original': False, 'twins': 2, 'mtime': 1608475876.4541006}]) == 2 assert {'aborted': False, 'progress': 100, 'total_files': 6, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 2, 'duplicate_sets': 2, 'total_lint_size': 6}['total_files'] == 6 assert {'aborted': False, 'progress': 100, 'total_files': 6, 'ignored_files': 0, 'ignored_folders': 0, 'duplicates': 2, 'duplicate_sets': 2, 'total_lint_size': 6}['total_lint_size'] == 3 ====================================================================== FAIL: test_newer_than.test_simple ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/chris/.pyenv/versions/3.9.0/lib/python3.9/site-packages/nose/case.py", line 198, in runTest self.test(*self.arg) File "/Users/chris/Code/rmlint/tests/test_options/test_newer_than.py", line 50, in test_simple assert len(data) == expect AssertionError: {'description': 'rmlint json-dump of lint files', 'cwd': '/Users/chris/Code/rmlint/', 'args': '/Users/chris/Code/rmlint/rmlint -V /private/tmp/rmlint-unit-testdir -S a -N 2020-12-20T14:51:38-0500 -o json:/tmp/out.json -c json:oneline', 'version': '2.10.1', 'rev': '17ada44f', 'progress': 0, 'checksum_type': 'blake2b', 'merge_directories': False}, *[], {'aborted': False, 'progress': 100, 'total_files': 3, 'ignored_files': 1, 'ignored_folders': 0, 'duplicates': 0, 'duplicate_sets': 0, 'total_lint_size': 0} = run_rmlint_once('-S a -N ' + '2020-12-20T14:51:38-0500') >> assert len([]) == 3 ---------------------------------------------------------------------- Ran 172 tests in 4128.897s FAILED (errors=7, failures=6) ```

Full output, if you need it.

sahib commented 3 years ago

Thanks @ChrisBaker97,

some errors happen because you're missing some test dependencies (parametrized for example). You can install them with pip3 install -r test-requirements.txt. Some of the other errors need more debugging - can't tell if they hint at bugs. Would be good if somebody with macOS could take a look and make a PR eventually.

But I think the original cause of this issue has been resolved, so I will close that ticket here. Thanks all.