node-tar icon indicating copy to clipboard operation
node-tar copied to clipboard

[FEATURE] Add ability to ignore files if they don't exist

Open linkjay opened this issue 5 years ago • 1 comments

What / Why

Would be nice if there was a way to specify in the tar options to ignore files if they don't exist.

In my code, I am specifying a list of files that I want to compress into an archive, but it's in a dynamic directory so sometimes the files get removed. This will spit out an error with lstat saying that it does not exist.

When

Simply have an argument in the options table for tar.c

How

Could probably do it and have it almost like a "less strict" mode. When the file is being retrieved for the archive, have a checker that is like if(!fs.existsSync(file)) { return } or something.

Current Behavior

Feeding in a list of files in an array, and having one of them not exist will pass an error.

Expected Behavior

Having an option to specify something like ignoreNotFound should have it just ignore any entries in the array that do not exist.

linkjay avatar Apr 23 '20 08:04 linkjay

This is a completely reasonable idea, I think.

The inverse of this, I notice that tar.x({file}, ['not-found-in-archive']) does not warn that the file wasn't found in the archive, and tar xf file.tar not-found does warn, so that's another issue. (The reason is that the files list is converted into a filter function, but there's no check to see that every file listed was actually found.)

Maybe a decent way forward is to implement ignoreMissing: Boolean option, which defaults to true for extraction/parsing (and will warn if not ignored), and false for creation. Then in a semver major bump (ie, tar v7), we can make it default to true for both, but make it a warning rather than error if the file is missing, to match bsdtar? (Note that warnings are errors in strict: true mode, so anyone who still wants the crash can have it.)

isaacs avatar Aug 10 '21 16:08 isaacs