Added --exclude-compressed flag feature that skips compression of precompressed files

This commit is contained in:
Shashank Tavildar
2019-10-25 15:49:11 -07:00
parent c2140e9db0
commit 55ee7d56e4
5 changed files with 52 additions and 2 deletions
+6 -1
View File
@@ -1453,7 +1453,12 @@ FIO_compressFilename_srcFile(FIO_prefs_t* const prefs,
ress.srcFile = FIO_openSrcFile(srcFileName);
if (ress.srcFile == NULL) return 1; /* srcFile could not be opened */
if (g_excludeCompressedFiles && !UTIL_isPrecompressedFile(srcFileName)) { /* precompressed file (--exclude-compressed). DO NOT COMPRESS */
DISPLAYLEVEL(4, "Precompressed file: %s \n", srcFileName);
fclose(ress.srcFile);
ress.srcFile = NULL;
return 0;
}
result = FIO_compressFilename_dstFile(prefs, ress, dstFileName, srcFileName, compressionLevel);
fclose(ress.srcFile);
+21
View File
@@ -326,6 +326,27 @@ int UTIL_prepareFileList(const char *dirName, char** bufStart, size_t* pos, char
#endif /* #ifdef _WIN32 */
/* Check if the file is precompressed (.zst, .lz4, .gz, .xz).
YES => Skip the file (return 0)
NO => return 1
*/
int UTIL_isPrecompressedFile(const char *inputName)
{
return compareExtensions(inputName,compressedFileExtensions);
}
int compareExtensions(const char* infilename, const char extensionList[4][10])
{
int i=0;
//char* ext = strchr(infilename, '.');
for(i=0;i<4;i++)
{
char* ext = strstr(infilename,extensionList[i]);
if(ext)
return 0;
}
return 1;
}
/*
* UTIL_createFileList - takes a list of files and directories (params: inputNames, inputNamesNb), scans directories,
* and returns a new list of files (params: return value, allocatedBuffer, allocatedNamesNb).
+4
View File
@@ -127,6 +127,8 @@ extern int g_utilDisplayLevel;
typedef struct stat stat_t;
#endif
int g_excludeCompressedFiles;
static const char compressedFileExtensions[4][10] = {".zst",".gz",".xz",".lz4"};
int UTIL_fileExist(const char* filename);
int UTIL_isRegularFile(const char* infilename);
@@ -135,6 +137,8 @@ U32 UTIL_isDirectory(const char* infilename);
int UTIL_getFileStat(const char* infilename, stat_t* statbuf);
int UTIL_isSameFile(const char* file1, const char* file2);
int UTIL_compareStr(const void *p1, const void *p2);
int UTIL_isPrecompressedFile(const char* infilename);
int compareExtensions(const char* infilename, const char extensionList[4][10]);
U32 UTIL_isFIFO(const char* infilename);
U32 UTIL_isLink(const char* infilename);
+2 -1
View File
@@ -118,6 +118,7 @@ static int usage(const char* programName)
#endif
DISPLAY( " -D file: use `file` as Dictionary \n");
DISPLAY( " -o file: result stored into `file` (only if 1 input file) \n");
DISPLAY( "--exclude-compressed: only compress files that are not previously compressed \n");
DISPLAY( " -f : overwrite output without prompting and (de)compress links \n");
DISPLAY( "--rm : remove source file(s) after successful de/compression \n");
DISPLAY( " -k : preserve source file(s) (default) \n");
@@ -708,7 +709,7 @@ int main(int argCount, const char* argv[])
if (!strcmp(argument, "--compress-literals")) { literalCompressionMode = ZSTD_lcm_huffman; continue; }
if (!strcmp(argument, "--no-compress-literals")) { literalCompressionMode = ZSTD_lcm_uncompressed; continue; }
if (!strcmp(argument, "--no-progress")) { FIO_setNoProgress(1); continue; }
if (!strcmp(argument, "--exclude-compressed")) { g_excludeCompressedFiles = 1; continue; }
/* long commands with arguments */
#ifndef ZSTD_NODICT
if (longCommandWArg(&argument, "--train-cover")) {