From 407c0a64c7194a1ccbff70a1b6997477fb6e3523 Mon Sep 17 00:00:00 2001 From: Kazuki Suzuki Przyborowski Date: Tue, 30 Apr 2024 16:47:48 -0500 Subject: [PATCH] Add files via upload --- catfile.py | 165 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 85 insertions(+), 80 deletions(-) diff --git a/catfile.py b/catfile.py index e585c72..8b848fe 100755 --- a/catfile.py +++ b/catfile.py @@ -75,26 +75,37 @@ __version_date__ = pycatfile.__version_date__; __version_date_plusrc__ = pycatfile.__version_date_plusrc__; __version__ = pycatfile.__version__; +# Initialize the argument parser argparser = argparse.ArgumentParser(description="Manipulate concatenated files.", conflict_handler="resolve", add_help=True); + +# Version information argparser.add_argument("-V", "--version", action="version", version=__program_name__ + " " + __version__); +# Input and output specifications argparser.add_argument("-i", "--input", help="Specify the file(s) to concatenate or the concatenated file to extract.", required=True); -argparser.add_argument("-d", "--verbose", action="store_true", help="Enable verbose mode to display various debugging information."); -argparser.add_argument("-c", "--create", action="store_true", help="Perform concatenation operation only."); -argparser.add_argument("-v", "--validate", action="store_true", help="Validate CatFile checksums."); -argparser.add_argument("-C", "--checksum", default="crc32", help="Specify the type of checksum to use. The default is crc32."); -argparser.add_argument("-s", "--skipchecksum", action="store_true", help="Skip the checksum check of files."); -argparser.add_argument("-e", "--extract", action="store_true", help="Perform extraction operation only."); +argparser.add_argument("-o", "--output", default=None, help="Specify the name for the extracted or output concatenated files."); +# Operations +argparser.add_argument("-c", "--create", action="store_true", help="Perform only the concatenation operation."); +argparser.add_argument("-e", "--extract", action="store_true", help="Perform only the extraction operation."); +argparser.add_argument("-t", "--convert", action="store_true", help="Convert a tar/zip/rar/7zip file to a concatenated file."); +argparser.add_argument("-r", "--repack", action="store_true", help="Re-concatenate files, fixing checksum errors if any."); +# File manipulation options argparser.add_argument("-F", "--format", default=__file_format_list__[0], help="Specify the format to use."); argparser.add_argument("-D", "--delimiter", default=__file_format_list__[5], help="Specify the delimiter to use."); argparser.add_argument("-m", "--formatver", default=__file_format_list__[6], help="Specify the format version."); argparser.add_argument("-l", "--list", action="store_true", help="List files included in the concatenated file."); -argparser.add_argument("-p", "--preserve", action="store_false", help="Preserve permissions and timestamps of files."); -argparser.add_argument("-r", "--repack", action="store_true", help="Re-concatenate files, fixing checksum errors, if any."); -argparser.add_argument("-o", "--output", default=None, help="Specify the name for the extracted or output concatenated files."); +# Compression options argparser.add_argument("-P", "--compression", default="auto", help="Specify the compression method to use for concatenation."); argparser.add_argument("-L", "--level", default=None, help="Specify the compression level for concatenation."); -argparser.add_argument("-t", "--convert", action="store_true", help="Convert a tar / zip / rar / 7zip file to a CatFile."); +# Checksum and validation +argparser.add_argument("-v", "--validate", action="store_true", help="Validate concatenated file checksums."); +argparser.add_argument("-C", "--checksum", default="crc32", help="Specify the type of checksum to use. The default is crc32."); +argparser.add_argument("-s", "--skipchecksum", action="store_true", help="Skip the checksum check of files."); +# Permissions and metadata +argparser.add_argument("-p", "--preserve", action="store_false", help="Do not preserve permissions and timestamps of files."); +# Miscellaneous +argparser.add_argument("-d", "--verbose", action="store_true", help="Enable verbose mode to display various debugging information."); argparser.add_argument("-T", "--text", action="store_true", help="Read file locations from a text file."); +# Parse the arguments getargs = argparser.parse_args(); fname = getargs.format; @@ -107,79 +118,73 @@ fnamelst = __use_advanced_list__; fnameino = __use_alt_inode__; fnamelist = [fname, fnamemagic, fnamelower, fnamelen, fnamehex, getargs.delimiter, getargs.formatver, fnamesty, fnamelst, fnameino]; -# Determine actions based on user input -should_create = getargs.create and not getargs.extract and not getargs.list; -should_extract = getargs.extract and not getargs.create and not getargs.list; -should_list = getargs.list and not getargs.create and not getargs.extract; -should_repack = getargs.create and getargs.repack; -should_validate = getargs.validate; +# Determine the primary action based on user input +actions = ['pack', 'unpack', 'list', 'repack', 'validate']; +active_action = next((action for action in actions if getattr(getargs, action)), None); # Execute the appropriate functions based on determined actions and arguments -if should_create: - if getargs.convert: - checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); - if(checkcompressfile=="catfile"): - tmpout = pycatfile.RePackArchiveFile(getargs.input, getargs.output, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); - else: - tmpout = pycatfile.PackArchiveFileFromInFile(getargs.input, getargs.output, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); - if(not tmpout): - sys.exit(1); - else: - pycatfile.PackArchiveFile(getargs.input, getargs.output, getargs.text, getargs.compression, getargs.level, False, getargs.checksum, [], fnamelist, getargs.verbose, False); - -elif should_repack: - if getargs.convert: - checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); - if(checkcompressfile=="catfile"): - pycatfile.RePackArchiveFile(getargs.input, getargs.output, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); +if active_action: + if active_action=='pack': + if getargs.convert: + checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); + if(checkcompressfile=="catfile"): + tmpout = pycatfile.RePackArchiveFile(getargs.input, getargs.output, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); + else: + tmpout = pycatfile.PackArchiveFileFromInFile(getargs.input, getargs.output, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); + if(not tmpout): + sys.exit(1); else: - pycatfile.PackArchiveFileFromInFile(getargs.input, getargs.output, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); - if(not tmpout): - sys.exit(1); - else: - pycatfile.RePackArchiveFile(getargs.input, getargs.output, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); - -elif should_extract: - if getargs.convert: - checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); - tempout = BytesIO(); - if(checkcompressfile=="catfile"): - tmpout = pycatfile.RePackArchiveFile(getargs.input, tempout, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); + pycatfile.PackArchiveFile(getargs.input, getargs.output, getargs.text, getargs.compression, getargs.level, False, getargs.checksum, [], fnamelist, getargs.verbose, False); + elif active_action=='repack': + if getargs.convert: + checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); + if(checkcompressfile=="catfile"): + pycatfile.RePackArchiveFile(getargs.input, getargs.output, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); + else: + pycatfile.PackArchiveFileFromInFile(getargs.input, getargs.output, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); + if(not tmpout): + sys.exit(1); else: - tmpout = pycatfile.PackArchiveFileFromInFile(getargs.input, tempout, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); - if(not tmpout): - sys.exit(1); - getargs.input = tempout; - pycatfile.UnPackArchiveFile(getargs.input, getargs.output, False, 0, 0, getargs.skipchecksum, fnamelist, getargs.verbose, getargs.preserve, getargs.preserve, False); - -elif should_list: - if getargs.convert: - checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); - if(checkcompressfile=="catfile"): - tmpout = pycatfile.ArchiveFileListFiles(getargs.input, 0, 0, getargs.skipchecksum, fnamelist, getargs.verbose, False); + pycatfile.RePackArchiveFile(getargs.input, getargs.output, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); + elif active_action=='unpack': + if getargs.convert: + checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); + tempout = BytesIO(); + if(checkcompressfile=="catfile"): + tmpout = pycatfile.RePackArchiveFile(getargs.input, tempout, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); + else: + tmpout = pycatfile.PackArchiveFileFromInFile(getargs.input, tempout, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); + if(not tmpout): + sys.exit(1); + getargs.input = tempout; + pycatfile.UnPackArchiveFile(getargs.input, getargs.output, False, 0, 0, getargs.skipchecksum, fnamelist, getargs.verbose, getargs.preserve, getargs.preserve, False); + elif active_action=='list': + if getargs.convert: + checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); + if(checkcompressfile=="catfile"): + tmpout = pycatfile.ArchiveFileListFiles(getargs.input, 0, 0, getargs.skipchecksum, fnamelist, getargs.verbose, False); + else: + tmpout = pycatfile.InFileListFiles(getargs.input, getargs.verbose, fnamelist, False); + if(not tmpout): + sys.exit(1); else: - tmpout = pycatfile.InFileListFiles(getargs.input, getargs.verbose, fnamelist, False); - if(not tmpout): - sys.exit(1); - else: - pycatfile.ArchiveFileListFiles(getargs.input, 0, 0, getargs.skipchecksum, fnamelist, getargs.verbose, False); - -elif should_validate: - if getargs.convert: - checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); - tempout = BytesIO(); - if(checkcompressfile=="catfile"): - tmpout = pycatfile.RePackArchiveFile(getargs.input, tempout, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); + pycatfile.ArchiveFileListFiles(getargs.input, 0, 0, getargs.skipchecksum, fnamelist, getargs.verbose, False); + elif active_action=='validate': + if getargs.convert: + checkcompressfile = pycatfile.CheckCompressionSubType(getargs.input, fnamelist, True); + tempout = BytesIO(); + if(checkcompressfile=="catfile"): + tmpout = pycatfile.RePackArchiveFile(getargs.input, tempout, getargs.compression, getargs.level, False, 0, 0, getargs.checksum, getargs.skipchecksum, [], fnamelist, getargs.verbose, False); + else: + tmpout = pycatfile.PackArchiveFileFromInFile(getargs.input, tempout, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); + getargs.input = tempout; + if(not tmpout): + sys.exit(1); + fvalid = pycatfile.ArchiveFileValidate(getargs.input, fnamelist, getargs.verbose, False); + if(not getargs.verbose): + import sys, logging; + logging.basicConfig(format="%(message)s", stream=sys.stdout, level=logging.DEBUG); + if(fvalid): + pycatfile.VerbosePrintOut("File is valid: \n" + str(getargs.input)); else: - tmpout = pycatfile.PackArchiveFileFromInFile(getargs.input, tempout, getargs.compression, getargs.level, getargs.checksum, [], fnamelist, getargs.verbose, False); - getargs.input = tempout; - if(not tmpout): - sys.exit(1); - fvalid = pycatfile.ArchiveFileValidate(getargs.input, fnamelist, getargs.verbose, False); - if(not getargs.verbose): - import sys, logging; - logging.basicConfig(format="%(message)s", stream=sys.stdout, level=logging.DEBUG); - if(fvalid): - pycatfile.VerbosePrintOut("File is valid: \n" + str(getargs.input)); - else: - pycatfile.VerbosePrintOut("File is invalid: \n" + str(getargs.input)); + pycatfile.VerbosePrintOut("File is invalid: \n" + str(getargs.input)); -- 2.11.4.GIT