omnizip 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +32 -0
- data/.rubocop_todo.yml +754 -0
- data/COPYING +502 -0
- data/Gemfile +17 -0
- data/LICENSE +12 -0
- data/README.adoc +1045 -0
- data/Rakefile +12 -0
- data/benchmark/README.md +260 -0
- data/benchmark/benchmark_suite.rb +125 -0
- data/benchmark/compression_bench.rb +181 -0
- data/benchmark/filter_bench.rb +180 -0
- data/benchmark/models/benchmark_result.rb +59 -0
- data/benchmark/models/comparison_result.rb +69 -0
- data/benchmark/profile_suite.rb +167 -0
- data/benchmark/reporter.rb +150 -0
- data/benchmark/run_benchmarks.rb +66 -0
- data/benchmark/test_data.rb +137 -0
- data/config/formats/rar3_spec.yml +91 -0
- data/config/formats/rar5_spec.yml +102 -0
- data/docs/.github/workflows/docs.yml +142 -0
- data/docs/.gitignore +21 -0
- data/docs/.lychee.toml +67 -0
- data/docs/Gemfile +13 -0
- data/docs/RAR_WRITE_SUPPORT.md +26 -0
- data/docs/README.md +101 -0
- data/docs/_config.yml +112 -0
- data/docs/assets/logo.svg +1 -0
- data/docs/assets/omnizip-logo.pdf +1540 -11
- data/docs/comparison/feature-matrix.adoc +694 -0
- data/docs/comparison/index.adoc +113 -0
- data/docs/comparison/vs-7zip.adoc +309 -0
- data/docs/comparison/vs-peazip.adoc +77 -0
- data/docs/comparison/vs-rubyzip.adoc +342 -0
- data/docs/comparison/vs-winrar.adoc +100 -0
- data/docs/compatibility.adoc +579 -0
- data/docs/concepts/index.adoc +129 -0
- data/docs/developer/architecture.adoc +256 -0
- data/docs/developer/contributing.adoc +158 -0
- data/docs/developer/index.adoc +25 -0
- data/docs/developer/testing.adoc +212 -0
- data/docs/getting-started/basic-usage.adoc +271 -0
- data/docs/getting-started/index.adoc +42 -0
- data/docs/getting-started/installation.adoc +138 -0
- data/docs/getting-started/quick-start.adoc +185 -0
- data/docs/getting-started/your-first-archive.adoc +218 -0
- data/docs/guides/advanced-features/encryption.adoc +300 -0
- data/docs/guides/advanced-features/index.adoc +49 -0
- data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
- data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
- data/docs/guides/advanced-features/streaming.adoc +212 -0
- data/docs/guides/archive-formats/gzip-format.adoc +107 -0
- data/docs/guides/archive-formats/index.adoc +130 -0
- data/docs/guides/archive-formats/rar-format.adoc +104 -0
- data/docs/guides/archive-formats/rar5.adoc +521 -0
- data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
- data/docs/guides/archive-formats/tar-format.adoc +106 -0
- data/docs/guides/archive-formats/xz-format.adoc +118 -0
- data/docs/guides/archive-formats/zip-format.adoc +35 -0
- data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
- data/docs/guides/compression-algorithms/deflate.adoc +319 -0
- data/docs/guides/compression-algorithms/index.adoc +190 -0
- data/docs/guides/compression-algorithms/lzma.adoc +398 -0
- data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
- data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
- data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
- data/docs/guides/creating-archives.adoc +354 -0
- data/docs/guides/extracting-archives.adoc +53 -0
- data/docs/guides/format-conversion.adoc +64 -0
- data/docs/guides/index.adoc +49 -0
- data/docs/guides/migration-rubyzip.adoc +217 -0
- data/docs/guides/parity-archives.adoc +605 -0
- data/docs/guides/performance-tuning.adoc +88 -0
- data/docs/index.adoc +218 -0
- data/docs/lychee.toml +67 -0
- data/docs/reference/api/overview.adoc +188 -0
- data/docs/reference/cli/compress-command.adoc +114 -0
- data/docs/reference/cli/overview.adoc +140 -0
- data/docs/reference/index.adoc +26 -0
- data/docs/resources/faq.adoc +185 -0
- data/docs/resources/quick-reference.adoc +222 -0
- data/docs/troubleshooting/index.adoc +208 -0
- data/examples/api_comparison.rb +205 -0
- data/examples/deflate64_example.rb +96 -0
- data/examples/par2_demo.rb +121 -0
- data/examples/quick_start_native.rb +150 -0
- data/examples/quick_start_rubyzip.rb +115 -0
- data/examples/rubyzip_compatibility_demo.rb +194 -0
- data/exe/omnizip +27 -0
- data/lib/omnizip/algorithm.rb +130 -0
- data/lib/omnizip/algorithm_registry.rb +86 -0
- data/lib/omnizip/algorithms/.keep +0 -0
- data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
- data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
- data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
- data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
- data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
- data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
- data/lib/omnizip/algorithms/bzip2.rb +130 -0
- data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
- data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
- data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
- data/lib/omnizip/algorithms/deflate.rb +128 -0
- data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
- data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
- data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
- data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
- data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
- data/lib/omnizip/algorithms/deflate64.rb +109 -0
- data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
- data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
- data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
- data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
- data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
- data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
- data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
- data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
- data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
- data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
- data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
- data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
- data/lib/omnizip/algorithms/lzma/match.rb +32 -0
- data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
- data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
- data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
- data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
- data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
- data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
- data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
- data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
- data/lib/omnizip/algorithms/lzma/state.rb +127 -0
- data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
- data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
- data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
- data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
- data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
- data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
- data/lib/omnizip/algorithms/lzma.rb +238 -0
- data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
- data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
- data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
- data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
- data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
- data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
- data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
- data/lib/omnizip/algorithms/lzma2.rb +141 -0
- data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
- data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
- data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
- data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
- data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
- data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
- data/lib/omnizip/algorithms/ppmd7.rb +116 -0
- data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
- data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
- data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
- data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
- data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
- data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
- data/lib/omnizip/algorithms/ppmd8.rb +82 -0
- data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
- data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
- data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
- data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
- data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
- data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
- data/lib/omnizip/algorithms/zstandard.rb +138 -0
- data/lib/omnizip/buffer/memory_archive.rb +251 -0
- data/lib/omnizip/buffer/memory_extractor.rb +224 -0
- data/lib/omnizip/buffer.rb +176 -0
- data/lib/omnizip/checksum_registry.rb +114 -0
- data/lib/omnizip/checksums/crc32.rb +100 -0
- data/lib/omnizip/checksums/crc64.rb +101 -0
- data/lib/omnizip/checksums/crc_base.rb +158 -0
- data/lib/omnizip/checksums/verifier.rb +131 -0
- data/lib/omnizip/chunked/memory_manager.rb +194 -0
- data/lib/omnizip/chunked/reader.rb +78 -0
- data/lib/omnizip/chunked/writer.rb +120 -0
- data/lib/omnizip/chunked.rb +129 -0
- data/lib/omnizip/cli/output_formatter.rb +104 -0
- data/lib/omnizip/cli.rb +572 -0
- data/lib/omnizip/commands/.keep +0 -0
- data/lib/omnizip/commands/archive_create_command.rb +427 -0
- data/lib/omnizip/commands/archive_extract_command.rb +272 -0
- data/lib/omnizip/commands/archive_list_command.rb +218 -0
- data/lib/omnizip/commands/archive_repair_command.rb +131 -0
- data/lib/omnizip/commands/archive_verify_command.rb +117 -0
- data/lib/omnizip/commands/compress_command.rb +117 -0
- data/lib/omnizip/commands/decompress_command.rb +120 -0
- data/lib/omnizip/commands/list_command.rb +53 -0
- data/lib/omnizip/commands/metadata_command.rb +153 -0
- data/lib/omnizip/commands/parity_create_command.rb +122 -0
- data/lib/omnizip/commands/parity_repair_command.rb +122 -0
- data/lib/omnizip/commands/parity_verify_command.rb +124 -0
- data/lib/omnizip/commands/profile_list_command.rb +56 -0
- data/lib/omnizip/commands/profile_show_command.rb +44 -0
- data/lib/omnizip/convenience.rb +359 -0
- data/lib/omnizip/converter/conversion_registry.rb +49 -0
- data/lib/omnizip/converter/conversion_strategy.rb +121 -0
- data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
- data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
- data/lib/omnizip/converter.rb +105 -0
- data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
- data/lib/omnizip/crypto/aes256/constants.rb +28 -0
- data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
- data/lib/omnizip/crypto/aes256.rb +102 -0
- data/lib/omnizip/error.rb +106 -0
- data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
- data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
- data/lib/omnizip/eta/rate_calculator.rb +104 -0
- data/lib/omnizip/eta/sample_history.rb +143 -0
- data/lib/omnizip/eta/time_estimator.rb +106 -0
- data/lib/omnizip/eta.rb +63 -0
- data/lib/omnizip/extraction/filter_chain.rb +177 -0
- data/lib/omnizip/extraction/glob_pattern.rb +140 -0
- data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
- data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
- data/lib/omnizip/extraction/regex_pattern.rb +50 -0
- data/lib/omnizip/extraction/selective_extractor.rb +240 -0
- data/lib/omnizip/extraction.rb +111 -0
- data/lib/omnizip/file_type/mime_classifier.rb +144 -0
- data/lib/omnizip/file_type.rb +113 -0
- data/lib/omnizip/filter.rb +139 -0
- data/lib/omnizip/filter_pipeline.rb +108 -0
- data/lib/omnizip/filter_registry.rb +166 -0
- data/lib/omnizip/filters/bcj.rb +279 -0
- data/lib/omnizip/filters/bcj2/constants.rb +53 -0
- data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
- data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
- data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
- data/lib/omnizip/filters/bcj2.rb +99 -0
- data/lib/omnizip/filters/bcj_arm.rb +176 -0
- data/lib/omnizip/filters/bcj_arm64.rb +244 -0
- data/lib/omnizip/filters/bcj_ia64.rb +196 -0
- data/lib/omnizip/filters/bcj_ppc.rb +190 -0
- data/lib/omnizip/filters/bcj_sparc.rb +176 -0
- data/lib/omnizip/filters/bcj_x86.rb +193 -0
- data/lib/omnizip/filters/delta.rb +196 -0
- data/lib/omnizip/filters/filter_base.rb +72 -0
- data/lib/omnizip/filters/registry.rb +123 -0
- data/lib/omnizip/filters/xz_delta.rb +258 -0
- data/lib/omnizip/format_detector.rb +162 -0
- data/lib/omnizip/format_registry.rb +59 -0
- data/lib/omnizip/formats/.keep +0 -0
- data/lib/omnizip/formats/bzip2_file.rb +172 -0
- data/lib/omnizip/formats/cpio/constants.rb +55 -0
- data/lib/omnizip/formats/cpio/entry.rb +385 -0
- data/lib/omnizip/formats/cpio/reader.rb +196 -0
- data/lib/omnizip/formats/cpio/writer.rb +234 -0
- data/lib/omnizip/formats/cpio.rb +140 -0
- data/lib/omnizip/formats/format_spec_loader.rb +230 -0
- data/lib/omnizip/formats/gzip.rb +238 -0
- data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
- data/lib/omnizip/formats/iso/directory_record.rb +152 -0
- data/lib/omnizip/formats/iso/joliet.rb +204 -0
- data/lib/omnizip/formats/iso/path_table.rb +125 -0
- data/lib/omnizip/formats/iso/reader.rb +197 -0
- data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
- data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
- data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
- data/lib/omnizip/formats/iso/writer.rb +530 -0
- data/lib/omnizip/formats/iso.rb +140 -0
- data/lib/omnizip/formats/lzip.rb +175 -0
- data/lib/omnizip/formats/lzma_alone.rb +171 -0
- data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
- data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
- data/lib/omnizip/formats/rar/block_parser.rb +243 -0
- data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
- data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
- data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
- data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
- data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
- data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
- data/lib/omnizip/formats/rar/constants.rb +82 -0
- data/lib/omnizip/formats/rar/decompressor.rb +238 -0
- data/lib/omnizip/formats/rar/external_writer.rb +312 -0
- data/lib/omnizip/formats/rar/header.rb +192 -0
- data/lib/omnizip/formats/rar/license_validator.rb +109 -0
- data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
- data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
- data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
- data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
- data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
- data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
- data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
- data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
- data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
- data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
- data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
- data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
- data/lib/omnizip/formats/rar/reader.rb +366 -0
- data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
- data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
- data/lib/omnizip/formats/rar/writer.rb +431 -0
- data/lib/omnizip/formats/rar.rb +205 -0
- data/lib/omnizip/formats/rar3/compressor.rb +73 -0
- data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar3/reader.rb +386 -0
- data/lib/omnizip/formats/rar3/writer.rb +219 -0
- data/lib/omnizip/formats/rar5/compressor.rb +73 -0
- data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar5/reader.rb +342 -0
- data/lib/omnizip/formats/rar5/writer.rb +214 -0
- data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
- data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
- data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
- data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
- data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
- data/lib/omnizip/formats/seven_zip/header.rb +106 -0
- data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
- data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
- data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
- data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
- data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
- data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
- data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
- data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
- data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
- data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
- data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
- data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
- data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
- data/lib/omnizip/formats/seven_zip.rb +93 -0
- data/lib/omnizip/formats/tar/constants.rb +73 -0
- data/lib/omnizip/formats/tar/entry.rb +94 -0
- data/lib/omnizip/formats/tar/header.rb +168 -0
- data/lib/omnizip/formats/tar/reader.rb +121 -0
- data/lib/omnizip/formats/tar/writer.rb +216 -0
- data/lib/omnizip/formats/tar.rb +84 -0
- data/lib/omnizip/formats/xz/reader.rb +116 -0
- data/lib/omnizip/formats/xz.rb +237 -0
- data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
- data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
- data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
- data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
- data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
- data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
- data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
- data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
- data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
- data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
- data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
- data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
- data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
- data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
- data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
- data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
- data/lib/omnizip/formats/zip/constants.rb +69 -0
- data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
- data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
- data/lib/omnizip/formats/zip/reader.rb +250 -0
- data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
- data/lib/omnizip/formats/zip/writer.rb +375 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
- data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
- data/lib/omnizip/formats/zip.rb +50 -0
- data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
- data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
- data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
- data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
- data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
- data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
- data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
- data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
- data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
- data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
- data/lib/omnizip/io/buffered_input.rb +146 -0
- data/lib/omnizip/io/buffered_output.rb +105 -0
- data/lib/omnizip/io/stream_manager.rb +115 -0
- data/lib/omnizip/link_handler/hard_link.rb +79 -0
- data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
- data/lib/omnizip/link_handler.rb +124 -0
- data/lib/omnizip/metadata/archive_metadata.rb +114 -0
- data/lib/omnizip/metadata/entry_metadata.rb +146 -0
- data/lib/omnizip/metadata/metadata_editor.rb +171 -0
- data/lib/omnizip/metadata/metadata_registry.rb +64 -0
- data/lib/omnizip/metadata/metadata_validator.rb +99 -0
- data/lib/omnizip/metadata.rb +57 -0
- data/lib/omnizip/models/.keep +0 -0
- data/lib/omnizip/models/algorithm_metadata.rb +73 -0
- data/lib/omnizip/models/compression_options.rb +71 -0
- data/lib/omnizip/models/conversion_options.rb +87 -0
- data/lib/omnizip/models/conversion_result.rb +135 -0
- data/lib/omnizip/models/eta_result.rb +46 -0
- data/lib/omnizip/models/extraction_rule.rb +115 -0
- data/lib/omnizip/models/filter_chain.rb +144 -0
- data/lib/omnizip/models/filter_config.rb +183 -0
- data/lib/omnizip/models/match_result.rb +124 -0
- data/lib/omnizip/models/optimization_suggestion.rb +91 -0
- data/lib/omnizip/models/parallel_options.rb +104 -0
- data/lib/omnizip/models/performance_result.rb +79 -0
- data/lib/omnizip/models/profile_report.rb +82 -0
- data/lib/omnizip/models/progress_options.rb +38 -0
- data/lib/omnizip/models/split_options.rb +116 -0
- data/lib/omnizip/optimization_registry.rb +81 -0
- data/lib/omnizip/parallel/job_queue.rb +209 -0
- data/lib/omnizip/parallel/job_scheduler.rb +203 -0
- data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
- data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
- data/lib/omnizip/parallel/worker_pool.rb +223 -0
- data/lib/omnizip/parallel.rb +149 -0
- data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
- data/lib/omnizip/parity/galois16.rb +145 -0
- data/lib/omnizip/parity/models/creator_packet.rb +73 -0
- data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
- data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
- data/lib/omnizip/parity/models/main_packet.rb +128 -0
- data/lib/omnizip/parity/models/packet.rb +156 -0
- data/lib/omnizip/parity/models/packet_registry.rb +109 -0
- data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
- data/lib/omnizip/parity/par2_creator.rb +531 -0
- data/lib/omnizip/parity/par2_repairer.rb +407 -0
- data/lib/omnizip/parity/par2_verifier.rb +364 -0
- data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
- data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
- data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
- data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
- data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
- data/lib/omnizip/parity.rb +186 -0
- data/lib/omnizip/password/encryption_registry.rb +65 -0
- data/lib/omnizip/password/encryption_strategy.rb +96 -0
- data/lib/omnizip/password/password_validator.rb +129 -0
- data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
- data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
- data/lib/omnizip/password.rb +87 -0
- data/lib/omnizip/pipe/stream_compressor.rb +124 -0
- data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
- data/lib/omnizip/pipe.rb +121 -0
- data/lib/omnizip/platform/ntfs_streams.rb +201 -0
- data/lib/omnizip/platform.rb +189 -0
- data/lib/omnizip/profile/archive_profile.rb +39 -0
- data/lib/omnizip/profile/balanced_profile.rb +33 -0
- data/lib/omnizip/profile/binary_profile.rb +36 -0
- data/lib/omnizip/profile/compression_profile.rb +158 -0
- data/lib/omnizip/profile/custom_profile.rb +157 -0
- data/lib/omnizip/profile/fast_profile.rb +33 -0
- data/lib/omnizip/profile/maximum_profile.rb +33 -0
- data/lib/omnizip/profile/profile_detector.rb +110 -0
- data/lib/omnizip/profile/profile_registry.rb +161 -0
- data/lib/omnizip/profile/text_profile.rb +36 -0
- data/lib/omnizip/profile.rb +190 -0
- data/lib/omnizip/profiler/memory_profiler.rb +66 -0
- data/lib/omnizip/profiler/method_profiler.rb +49 -0
- data/lib/omnizip/profiler/report_generator.rb +169 -0
- data/lib/omnizip/profiler.rb +204 -0
- data/lib/omnizip/progress/callback_reporter.rb +36 -0
- data/lib/omnizip/progress/console_reporter.rb +62 -0
- data/lib/omnizip/progress/log_reporter.rb +91 -0
- data/lib/omnizip/progress/operation_progress.rb +118 -0
- data/lib/omnizip/progress/progress_bar.rb +156 -0
- data/lib/omnizip/progress/progress_reporter.rb +40 -0
- data/lib/omnizip/progress/progress_tracker.rb +190 -0
- data/lib/omnizip/progress/silent_reporter.rb +24 -0
- data/lib/omnizip/progress.rb +127 -0
- data/lib/omnizip/rubyzip_compat.rb +63 -0
- data/lib/omnizip/temp/safe_extract.rb +168 -0
- data/lib/omnizip/temp/temp_file.rb +124 -0
- data/lib/omnizip/temp/temp_file_pool.rb +109 -0
- data/lib/omnizip/temp.rb +181 -0
- data/lib/omnizip/version.rb +5 -0
- data/lib/omnizip/zip/entry.rb +156 -0
- data/lib/omnizip/zip/file.rb +485 -0
- data/lib/omnizip/zip/input_stream.rb +273 -0
- data/lib/omnizip/zip/output_stream.rb +324 -0
- data/lib/omnizip.rb +156 -0
- data/readme-docs/advanced-features.adoc +515 -0
- data/readme-docs/api-usage.adoc +444 -0
- data/readme-docs/architecture.adoc +449 -0
- data/readme-docs/archive-formats.adoc +479 -0
- data/readme-docs/cli-usage.adoc +222 -0
- data/readme-docs/compression-algorithms.adoc +442 -0
- data/readme-docs/compression-profiles.adoc +247 -0
- data/readme-docs/encryption-checksums.adoc +328 -0
- data/readme-docs/format-converter.adoc +325 -0
- data/readme-docs/installation.adoc +228 -0
- data/readme-docs/par2-archives.adoc +608 -0
- data/readme-docs/performance-profiler.adoc +389 -0
- data/readme-docs/preprocessing-filters.adoc +280 -0
- data/xz-file-format-1.2.1.txt +1174 -0
- metadata +617 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
= Archive Formats
|
|
2
|
+
:toc:
|
|
3
|
+
:toclevels: 3
|
|
4
|
+
|
|
5
|
+
== Purpose
|
|
6
|
+
|
|
7
|
+
Omnizip supports multiple archive formats with full read/write capabilities. This document provides detailed usage examples for each supported format.
|
|
8
|
+
|
|
9
|
+
== Supported Formats
|
|
10
|
+
|
|
11
|
+
[cols="20,20,20,40",options="header"]
|
|
12
|
+
|===
|
|
13
|
+
|Format |Read |Write |Notes
|
|
14
|
+
|
|
15
|
+
|**7z**
|
|
16
|
+
|✅
|
|
17
|
+
|✅
|
|
18
|
+
|Full support, solid compression, split archives
|
|
19
|
+
|
|
20
|
+
|**ZIP**
|
|
21
|
+
|✅
|
|
22
|
+
|✅
|
|
23
|
+
|ZIP64, WinZip AES, full compatibility
|
|
24
|
+
|
|
25
|
+
|**RAR**
|
|
26
|
+
|✅
|
|
27
|
+
|🟡
|
|
28
|
+
|Read RAR3/RAR5, write via external WinRAR
|
|
29
|
+
|
|
30
|
+
|**TAR**
|
|
31
|
+
|✅
|
|
32
|
+
|✅
|
|
33
|
+
|POSIX extensions, permissions, links
|
|
34
|
+
|
|
35
|
+
|**ISO 9660**
|
|
36
|
+
|✅
|
|
37
|
+
|✅
|
|
38
|
+
|Rock Ridge, Joliet, CD/DVD images
|
|
39
|
+
|
|
40
|
+
|**CPIO**
|
|
41
|
+
|✅
|
|
42
|
+
|✅
|
|
43
|
+
|newc, CRC formats, initramfs
|
|
44
|
+
|
|
45
|
+
|**GZIP**
|
|
46
|
+
|✅
|
|
47
|
+
|✅
|
|
48
|
+
|Single file compression
|
|
49
|
+
|
|
50
|
+
|**XZ**
|
|
51
|
+
|✅
|
|
52
|
+
|✅
|
|
53
|
+
|LZMA2-based format
|
|
54
|
+
|
|
55
|
+
|**BZIP2**
|
|
56
|
+
|✅
|
|
57
|
+
|✅
|
|
58
|
+
|Single file compression
|
|
59
|
+
|===
|
|
60
|
+
|
|
61
|
+
== 7-Zip Format (.7z)
|
|
62
|
+
|
|
63
|
+
=== Creating 7z Archives
|
|
64
|
+
|
|
65
|
+
[source,ruby]
|
|
66
|
+
----
|
|
67
|
+
# Basic 7z archive
|
|
68
|
+
Omnizip::Formats::SevenZip::Writer.new('archive.7z') do |sz|
|
|
69
|
+
sz.add_file('file1.txt')
|
|
70
|
+
sz.add_file('file2.dat')
|
|
71
|
+
sz.add_directory('folder/')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# With compression options
|
|
75
|
+
Omnizip::Formats::SevenZip::Writer.new('archive.7z',
|
|
76
|
+
algorithm: :lzma2,
|
|
77
|
+
level: 9,
|
|
78
|
+
solid: true
|
|
79
|
+
) do |sz|
|
|
80
|
+
sz.add_directory('data/')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# With password encryption
|
|
84
|
+
Omnizip::Formats::SevenZip::Writer.new('secure.7z',
|
|
85
|
+
password: 'secret123',
|
|
86
|
+
encrypt_header: true
|
|
87
|
+
) do |sz|
|
|
88
|
+
sz.add_file('confidential.doc')
|
|
89
|
+
end
|
|
90
|
+
----
|
|
91
|
+
|
|
92
|
+
=== Extracting 7z Archives
|
|
93
|
+
|
|
94
|
+
[source,ruby]
|
|
95
|
+
----
|
|
96
|
+
# Extract all files
|
|
97
|
+
Omnizip::Formats::SevenZip::Reader.open('archive.7z') do |sz|
|
|
98
|
+
sz.extract_all('output/')
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Extract with password
|
|
102
|
+
Omnizip::Formats::SevenZip::Reader.open('secure.7z',
|
|
103
|
+
password: 'secret123'
|
|
104
|
+
) do |sz|
|
|
105
|
+
sz.extract_all('output/')
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# List contents
|
|
109
|
+
Omnizip::Formats::SevenZip::Reader.open('archive.7z') do |sz|
|
|
110
|
+
sz.entries.each do |entry|
|
|
111
|
+
puts "#{entry.name}: #{entry.size} bytes"
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
----
|
|
115
|
+
|
|
116
|
+
=== Split Archives (Multi-volume)
|
|
117
|
+
|
|
118
|
+
[source,ruby]
|
|
119
|
+
----
|
|
120
|
+
# Create split archive (100MB volumes)
|
|
121
|
+
Omnizip::Formats::SevenZip::SplitArchiveWriter.new('archive.7z',
|
|
122
|
+
volume_size: 100 * 1024 * 1024
|
|
123
|
+
) do |sz|
|
|
124
|
+
sz.add_directory('large_dataset/')
|
|
125
|
+
end
|
|
126
|
+
# Creates: archive.7z.001, archive.7z.002, etc.
|
|
127
|
+
|
|
128
|
+
# Extract split archive
|
|
129
|
+
Omnizip::Formats::SevenZip::SplitArchiveReader.open('archive.7z.001') do |sz|
|
|
130
|
+
sz.extract_all('output/') # Auto-reads all volumes
|
|
131
|
+
end
|
|
132
|
+
----
|
|
133
|
+
|
|
134
|
+
== ZIP Format
|
|
135
|
+
|
|
136
|
+
=== Creating ZIP Archives
|
|
137
|
+
|
|
138
|
+
[source,ruby]
|
|
139
|
+
----
|
|
140
|
+
# Basic ZIP
|
|
141
|
+
Omnizip::Formats::Zip::Writer.open('archive.zip') do |zip|
|
|
142
|
+
zip.add_file('file.txt')
|
|
143
|
+
zip.add_directory('data/')
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# With WinZip AES encryption
|
|
147
|
+
Omnizip::Formats::Zip::Writer.open('secure.zip',
|
|
148
|
+
password: 'secret',
|
|
149
|
+
encryption: :aes256
|
|
150
|
+
) do |zip|
|
|
151
|
+
zip.add_file('private.doc')
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# ZIP64 for large archives
|
|
155
|
+
Omnizip::Formats::Zip::Writer.open('large.zip',
|
|
156
|
+
zip64: true
|
|
157
|
+
) do |zip|
|
|
158
|
+
zip.add_file('huge_file.bin') # >4GB file
|
|
159
|
+
end
|
|
160
|
+
----
|
|
161
|
+
|
|
162
|
+
=== Extracting ZIP Archives
|
|
163
|
+
|
|
164
|
+
[source,ruby]
|
|
165
|
+
----
|
|
166
|
+
# Extract ZIP
|
|
167
|
+
Omnizip::Formats::Zip::Reader.open('archive.zip') do |zip|
|
|
168
|
+
zip.extract_all('output/')
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Extract with password
|
|
172
|
+
Omnizip::Formats::Zip::Reader.open('secure.zip',
|
|
173
|
+
password: 'secret'
|
|
174
|
+
) do |zip|
|
|
175
|
+
zip.extract_all('output/')
|
|
176
|
+
end
|
|
177
|
+
----
|
|
178
|
+
|
|
179
|
+
== RAR Format
|
|
180
|
+
|
|
181
|
+
=== Extracting RAR Archives
|
|
182
|
+
|
|
183
|
+
[source,ruby]
|
|
184
|
+
----
|
|
185
|
+
# Extract RAR (read-only)
|
|
186
|
+
Omnizip::Formats::Rar::Reader.open('archive.rar') do |rar|
|
|
187
|
+
rar.extract_all('output/')
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Multi-volume RAR
|
|
191
|
+
Omnizip::Formats::Rar::Reader.open('archive.part001.rar') do |rar|
|
|
192
|
+
rar.extract_all('output/') # Handles all .part00N.rar files
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# With password
|
|
196
|
+
Omnizip::Formats::Rar::Reader.open('secure.rar',
|
|
197
|
+
password: 'secret'
|
|
198
|
+
) do |rar|
|
|
199
|
+
rar.extract_all('output/')
|
|
200
|
+
end
|
|
201
|
+
----
|
|
202
|
+
|
|
203
|
+
=== Creating RAR Archives (External)
|
|
204
|
+
|
|
205
|
+
[source,ruby]
|
|
206
|
+
----
|
|
207
|
+
# Requires licensed WinRAR installation
|
|
208
|
+
if Omnizip::Formats::Rar::ExternalWriter.available?
|
|
209
|
+
writer = Omnizip::Formats::Rar::ExternalWriter.new('archive.rar',
|
|
210
|
+
license_confirmed: true,
|
|
211
|
+
compression_level: 5
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
writer.add_file('file.txt')
|
|
215
|
+
writer.write
|
|
216
|
+
else
|
|
217
|
+
puts "WinRAR not installed. Use 7z format instead:"
|
|
218
|
+
# Create 7z archive as alternative
|
|
219
|
+
end
|
|
220
|
+
----
|
|
221
|
+
|
|
222
|
+
== TAR Format
|
|
223
|
+
|
|
224
|
+
=== Creating TAR Archives
|
|
225
|
+
|
|
226
|
+
[source,ruby]
|
|
227
|
+
----
|
|
228
|
+
# Basic TAR
|
|
229
|
+
Omnizip::Formats::Tar::Writer.open('archive.tar') do |tar|
|
|
230
|
+
tar.add_file('file.txt')
|
|
231
|
+
tar.add_directory('data/', recursive: true)
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# Preserve permissions
|
|
235
|
+
Omnizip::Formats::Tar::Writer.open('backup.tar',
|
|
236
|
+
preserve_permissions: true
|
|
237
|
+
) do |tar|
|
|
238
|
+
tar.add_file('/etc/config')
|
|
239
|
+
tar.add_symlink('link', '/path/to/target')
|
|
240
|
+
end
|
|
241
|
+
----
|
|
242
|
+
|
|
243
|
+
=== Extracting TAR Archives
|
|
244
|
+
|
|
245
|
+
[source,ruby]
|
|
246
|
+
----
|
|
247
|
+
# Extract TAR
|
|
248
|
+
Omnizip::Formats::Tar::Reader.open('archive.tar') do |tar|
|
|
249
|
+
tar.extract_all('output/')
|
|
250
|
+
end
|
|
251
|
+
----
|
|
252
|
+
|
|
253
|
+
=== Combined TAR+Compression
|
|
254
|
+
|
|
255
|
+
[source,ruby]
|
|
256
|
+
----
|
|
257
|
+
# Create .tar.gz
|
|
258
|
+
require 'zlib'
|
|
259
|
+
File.open('archive.tar.gz', 'wb') do |gz_file|
|
|
260
|
+
Zlib::GzipWriter.wrap(gz_file) do |gz|
|
|
261
|
+
Omnizip::Formats::Tar::Writer.new(gz) do |tar|
|
|
262
|
+
tar.add_directory('data/')
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
# Create .tar.xz
|
|
268
|
+
Omnizip::Formats::Xz.compress_stream do |xz|
|
|
269
|
+
Omnizip::Formats::Tar::Writer.new(xz) do |tar|
|
|
270
|
+
tar.add_directory('data/')
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
----
|
|
274
|
+
|
|
275
|
+
== ISO 9660 Format
|
|
276
|
+
|
|
277
|
+
=== Creating ISO Images
|
|
278
|
+
|
|
279
|
+
[source,ruby]
|
|
280
|
+
----
|
|
281
|
+
# Basic ISO
|
|
282
|
+
Omnizip::Formats::Iso::Writer.new('disk.iso',
|
|
283
|
+
volume_label: 'MY_DISK'
|
|
284
|
+
) do |iso|
|
|
285
|
+
iso.add_file('README.txt')
|
|
286
|
+
iso.add_directory('docs/', recursive: true)
|
|
287
|
+
iso.write
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# With Rock Ridge (Unix metadata)
|
|
291
|
+
Omnizip::Formats::Iso::Writer.new('backup.iso',
|
|
292
|
+
rock_ridge: true
|
|
293
|
+
) do |iso|
|
|
294
|
+
iso.add_directory('/home/user/data', recursive: true)
|
|
295
|
+
iso.write
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# With Joliet (long filenames, Unicode)
|
|
299
|
+
Omnizip::Formats::Iso::Writer.new('unicode.iso',
|
|
300
|
+
joliet: true,
|
|
301
|
+
volume_label: '日本語ディスク'
|
|
302
|
+
) do |iso|
|
|
303
|
+
iso.add_file('文書.txt')
|
|
304
|
+
iso.write
|
|
305
|
+
end
|
|
306
|
+
----
|
|
307
|
+
|
|
308
|
+
=== Extracting ISO Images
|
|
309
|
+
|
|
310
|
+
[source,ruby]
|
|
311
|
+
----
|
|
312
|
+
# Extract ISO
|
|
313
|
+
Omnizip::Formats::Iso::Reader.open('disk.iso') do |iso|
|
|
314
|
+
iso.extract_all('output/')
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
# List ISO contents
|
|
318
|
+
Omnizip::Formats::Iso::Reader.open('disk.iso') do |iso|
|
|
319
|
+
iso.entries.each do |entry|
|
|
320
|
+
puts "#{entry.name}: #{entry.size} bytes"
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
----
|
|
324
|
+
|
|
325
|
+
== CPIO Format
|
|
326
|
+
|
|
327
|
+
=== Creating CPIO Archives
|
|
328
|
+
|
|
329
|
+
[source,ruby]
|
|
330
|
+
----
|
|
331
|
+
# Create CPIO (newc format)
|
|
332
|
+
Omnizip::Formats::Cpio::Writer.new('archive.cpio',
|
|
333
|
+
format: :newc
|
|
334
|
+
) do |cpio|
|
|
335
|
+
cpio.add_file('file.txt')
|
|
336
|
+
cpio.add_directory('data/')
|
|
337
|
+
cpio.write
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
# CPIO with CRC
|
|
341
|
+
Omnizip::Formats::Cpio::Writer.new('archive.cpio',
|
|
342
|
+
format: :crc
|
|
343
|
+
) do |cpio|
|
|
344
|
+
cpio.add_file('important.dat')
|
|
345
|
+
cpio.write
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
# For initramfs
|
|
349
|
+
Omnizip::Formats::Cpio::Writer.new('initramfs.cpio',
|
|
350
|
+
format: :newc
|
|
351
|
+
) do |cpio|
|
|
352
|
+
cpio.add_directory('/boot/initramfs/', recursive: true)
|
|
353
|
+
cpio.write
|
|
354
|
+
end
|
|
355
|
+
----
|
|
356
|
+
|
|
357
|
+
=== Extracting CPIO Archives
|
|
358
|
+
|
|
359
|
+
[source,ruby]
|
|
360
|
+
----
|
|
361
|
+
# Extract CPIO
|
|
362
|
+
Omnizip::Formats::Cpio::Reader.new('archive.cpio') do |cpio|
|
|
363
|
+
cpio.extract_all('output/')
|
|
364
|
+
end
|
|
365
|
+
----
|
|
366
|
+
|
|
367
|
+
== Single-File Formats
|
|
368
|
+
|
|
369
|
+
=== GZIP
|
|
370
|
+
|
|
371
|
+
[source,ruby]
|
|
372
|
+
----
|
|
373
|
+
# Compress file
|
|
374
|
+
Omnizip::Formats::Gzip.compress('input.txt', 'output.txt.gz')
|
|
375
|
+
|
|
376
|
+
# Decompress file
|
|
377
|
+
Omnizip::Formats::Gzip.decompress('output.txt.gz', 'restored.txt')
|
|
378
|
+
|
|
379
|
+
# With compression level
|
|
380
|
+
Omnizip::Formats::Gzip.compress('data.txt', 'data.txt.gz', level: 9)
|
|
381
|
+
----
|
|
382
|
+
|
|
383
|
+
=== XZ (LZMA2)
|
|
384
|
+
|
|
385
|
+
[source,ruby]
|
|
386
|
+
----
|
|
387
|
+
# Compress file
|
|
388
|
+
Omnizip::Formats::Xz.compress('input.txt', 'output.txt.xz')
|
|
389
|
+
|
|
390
|
+
# Decompress file
|
|
391
|
+
Omnizip::Formats::Xz.decompress('output.txt.xz', 'restored.txt')
|
|
392
|
+
|
|
393
|
+
# With high compression
|
|
394
|
+
Omnizip::Formats::Xz.compress('large.dat', 'large.dat.xz', level: 9)
|
|
395
|
+
----
|
|
396
|
+
|
|
397
|
+
=== BZIP2
|
|
398
|
+
|
|
399
|
+
[source,ruby]
|
|
400
|
+
----
|
|
401
|
+
# Compress file
|
|
402
|
+
Omnizip::Formats::Bzip2File.compress('input.txt', 'output.txt.bz2')
|
|
403
|
+
|
|
404
|
+
# Decompress file
|
|
405
|
+
Omnizip::Formats::Bzip2File.decompress('output.txt.bz2', 'restored.txt')
|
|
406
|
+
|
|
407
|
+
# With compression level
|
|
408
|
+
Omnizip::Formats::Bzip2File.compress('data.txt', 'data.txt.bz2', level: 9)
|
|
409
|
+
----
|
|
410
|
+
|
|
411
|
+
== Format Comparison
|
|
412
|
+
|
|
413
|
+
[cols="15,15,15,15,40",options="header"]
|
|
414
|
+
|===
|
|
415
|
+
|Format |Compression |Speed |Size |Best For
|
|
416
|
+
|
|
417
|
+
|**7z**
|
|
418
|
+
|Excellent
|
|
419
|
+
|Slow
|
|
420
|
+
|Smallest
|
|
421
|
+
|Maximum compression, solid archives
|
|
422
|
+
|
|
423
|
+
|**ZIP**
|
|
424
|
+
|Good
|
|
425
|
+
|Fast
|
|
426
|
+
|Medium
|
|
427
|
+
|Compatibility, wide support
|
|
428
|
+
|
|
429
|
+
|**RAR**
|
|
430
|
+
|Excellent
|
|
431
|
+
|Medium
|
|
432
|
+
|Small
|
|
433
|
+
|Read-only, recovery records
|
|
434
|
+
|
|
435
|
+
|**TAR**
|
|
436
|
+
|None*
|
|
437
|
+
|Very Fast
|
|
438
|
+
|Large
|
|
439
|
+
|Unix backups, containers
|
|
440
|
+
|
|
441
|
+
|**ISO**
|
|
442
|
+
|None
|
|
443
|
+
|Fast
|
|
444
|
+
|Large
|
|
445
|
+
|CD/DVD images, bootable media
|
|
446
|
+
|
|
447
|
+
|**CPIO**
|
|
448
|
+
|None*
|
|
449
|
+
|Very Fast
|
|
450
|
+
|Large
|
|
451
|
+
|initramfs, RPM packages
|
|
452
|
+
|
|
453
|
+
|**GZIP**
|
|
454
|
+
|Good
|
|
455
|
+
|Fast
|
|
456
|
+
|Medium
|
|
457
|
+
|Quick compression, streaming
|
|
458
|
+
|
|
459
|
+
|**XZ**
|
|
460
|
+
|Excellent
|
|
461
|
+
|Slow
|
|
462
|
+
|Smallest
|
|
463
|
+
|Maximum compression, single files
|
|
464
|
+
|
|
465
|
+
|**BZIP2**
|
|
466
|
+
|Very Good
|
|
467
|
+
|Medium
|
|
468
|
+
|Small
|
|
469
|
+
|Good balance, text files
|
|
470
|
+
|===
|
|
471
|
+
|
|
472
|
+
_* TAR and CPIO are container formats, combine with GZIP/XZ/BZIP2 for compression_
|
|
473
|
+
|
|
474
|
+
== See Also
|
|
475
|
+
|
|
476
|
+
* link:compression-profiles.adoc[Compression Profiles]
|
|
477
|
+
* link:format-converter.adoc[Format Converter]
|
|
478
|
+
* link:par2-archives.adoc[PAR2 Archives]
|
|
479
|
+
* link:../README.adoc[Main README]
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
= Command-Line Interface Usage
|
|
2
|
+
:toc:
|
|
3
|
+
:toclevels: 3
|
|
4
|
+
|
|
5
|
+
== Purpose
|
|
6
|
+
|
|
7
|
+
This document provides comprehensive CLI documentation for using Omnizip from the command line. The CLI is built using Thor and provides commands for compression, decompression, and archive operations.
|
|
8
|
+
|
|
9
|
+
== General
|
|
10
|
+
|
|
11
|
+
The `omnizip` command provides utilities for compressing and decompressing files.
|
|
12
|
+
|
|
13
|
+
The CLI is built using Thor and provides four main commands: `compress`, `decompress`, `list`, and `version`. All commands support a `--verbose` flag for detailed output.
|
|
14
|
+
|
|
15
|
+
== Available Commands
|
|
16
|
+
|
|
17
|
+
Get help on available commands:
|
|
18
|
+
|
|
19
|
+
[source,sh]
|
|
20
|
+
----
|
|
21
|
+
$ omnizip help
|
|
22
|
+
Commands:
|
|
23
|
+
omnizip archive create ARCHIVE FILES... # Create an archive
|
|
24
|
+
omnizip archive extract ARCHIVE [DIR] # Extract an archive
|
|
25
|
+
omnizip archive list ARCHIVE # List archive contents
|
|
26
|
+
omnizip compress INPUT OUTPUT # Compress a file
|
|
27
|
+
omnizip decompress INPUT OUTPUT # Decompress a file
|
|
28
|
+
omnizip help [COMMAND] # Describe available commands
|
|
29
|
+
omnizip list # List available algorithms
|
|
30
|
+
omnizip version # Display version information
|
|
31
|
+
----
|
|
32
|
+
|
|
33
|
+
[[compress-command]]
|
|
34
|
+
== Compressing Files
|
|
35
|
+
|
|
36
|
+
Compress a file using the LZMA algorithm:
|
|
37
|
+
|
|
38
|
+
[source,sh]
|
|
39
|
+
----
|
|
40
|
+
# Basic compression with default settings (level 5)
|
|
41
|
+
$ omnizip compress input.txt output.lzma
|
|
42
|
+
Compressed: input.txt -> output.lzma
|
|
43
|
+
|
|
44
|
+
# Compress with maximum compression (level 9)
|
|
45
|
+
$ omnizip compress input.txt output.lzma --level 9
|
|
46
|
+
|
|
47
|
+
# Compress with verbose output
|
|
48
|
+
$ omnizip compress input.txt output.lzma --level 7 --verbose
|
|
49
|
+
Compressing input.txt to output.lzma...
|
|
50
|
+
Algorithm: lzma, Level: 7
|
|
51
|
+
|
|
52
|
+
Input size: 1024000 bytes
|
|
53
|
+
Output size: 245760 bytes
|
|
54
|
+
Ratio: 76.0%
|
|
55
|
+
Time: 1.23s
|
|
56
|
+
----
|
|
57
|
+
|
|
58
|
+
Get detailed help for the compress command:
|
|
59
|
+
|
|
60
|
+
[source,sh]
|
|
61
|
+
----
|
|
62
|
+
$ omnizip help compress
|
|
63
|
+
Usage:
|
|
64
|
+
omnizip compress INPUT OUTPUT
|
|
65
|
+
|
|
66
|
+
Options:
|
|
67
|
+
[--algorithm=ALGORITHM] # Compression algorithm to use
|
|
68
|
+
# Default: lzma
|
|
69
|
+
[--level=N] # Compression level (1-9)
|
|
70
|
+
# Default: 5
|
|
71
|
+
-v, [--verbose] # Enable verbose output
|
|
72
|
+
|
|
73
|
+
Description:
|
|
74
|
+
Compress INPUT file and write the result to OUTPUT file.
|
|
75
|
+
----
|
|
76
|
+
|
|
77
|
+
[[decompress-command]]
|
|
78
|
+
== Decompressing Files
|
|
79
|
+
|
|
80
|
+
Decompress a compressed file:
|
|
81
|
+
|
|
82
|
+
[source,sh]
|
|
83
|
+
----
|
|
84
|
+
# Basic decompression
|
|
85
|
+
$ omnizip decompress output.lzma restored.txt
|
|
86
|
+
Decompressed: output.lzma -> restored.txt
|
|
87
|
+
|
|
88
|
+
# Decompress with verbose output
|
|
89
|
+
$ omnizip decompress output.lzma restored.txt --verbose
|
|
90
|
+
Decompressing output.lzma to restored.txt...
|
|
91
|
+
Algorithm: lzma (auto-detected)
|
|
92
|
+
|
|
93
|
+
Output size: 1024000 bytes
|
|
94
|
+
Time: 0.45s
|
|
95
|
+
----
|
|
96
|
+
|
|
97
|
+
Get detailed help for the decompress command:
|
|
98
|
+
|
|
99
|
+
[source,sh]
|
|
100
|
+
----
|
|
101
|
+
$ omnizip help decompress
|
|
102
|
+
Usage:
|
|
103
|
+
omnizip decompress INPUT OUTPUT
|
|
104
|
+
|
|
105
|
+
Options:
|
|
106
|
+
[--algorithm=ALGORITHM] # Decompression algorithm
|
|
107
|
+
# (auto-detect if omitted)
|
|
108
|
+
-v, [--verbose] # Enable verbose output
|
|
109
|
+
|
|
110
|
+
Description:
|
|
111
|
+
Decompress INPUT file and write the result to OUTPUT file.
|
|
112
|
+
----
|
|
113
|
+
|
|
114
|
+
[[list-command]]
|
|
115
|
+
== Listing Available Algorithms
|
|
116
|
+
|
|
117
|
+
List all registered compression algorithms:
|
|
118
|
+
|
|
119
|
+
[source,sh]
|
|
120
|
+
----
|
|
121
|
+
$ omnizip list
|
|
122
|
+
Available compression algorithms:
|
|
123
|
+
|
|
124
|
+
lzma
|
|
125
|
+
Description: LZMA compression using range coding and dictionary compression
|
|
126
|
+
Version: 1.0.0
|
|
127
|
+
----
|
|
128
|
+
|
|
129
|
+
[[archive-commands]]
|
|
130
|
+
== Archive Operations
|
|
131
|
+
|
|
132
|
+
=== Creating Archives
|
|
133
|
+
|
|
134
|
+
Create a .7z archive from multiple files:
|
|
135
|
+
|
|
136
|
+
[source,sh]
|
|
137
|
+
----
|
|
138
|
+
# Create archive with default settings (LZMA2)
|
|
139
|
+
$ omnizip archive create myfiles.7z file1.txt file2.bin directory/
|
|
140
|
+
|
|
141
|
+
# Create with specific algorithm
|
|
142
|
+
$ omnizip archive create --algorithm lzma myfiles.7z *.txt
|
|
143
|
+
|
|
144
|
+
# Create with password protection
|
|
145
|
+
$ omnizip archive create --password secret myfiles.7z sensitive.doc
|
|
146
|
+
|
|
147
|
+
# Create with filters for executables
|
|
148
|
+
$ omnizip archive create --filter bcj_x86 programs.7z *.exe
|
|
149
|
+
|
|
150
|
+
# Verbose output
|
|
151
|
+
$ omnizip archive create --verbose archive.7z data/
|
|
152
|
+
Creating archive.7z...
|
|
153
|
+
Adding: data/file1.txt (1.2 MB)
|
|
154
|
+
Adding: data/file2.bin (3.4 MB)
|
|
155
|
+
Algorithm: LZMA2, Compression: Level 5
|
|
156
|
+
Total: 2 files, 4.6 MB → 1.8 MB (60.9% reduction)
|
|
157
|
+
----
|
|
158
|
+
|
|
159
|
+
=== Extracting Archives
|
|
160
|
+
|
|
161
|
+
Extract files from a .7z archive:
|
|
162
|
+
|
|
163
|
+
[source,sh]
|
|
164
|
+
----
|
|
165
|
+
# Extract to current directory
|
|
166
|
+
$ omnizip archive extract myfiles.7z
|
|
167
|
+
|
|
168
|
+
# Extract to specific directory
|
|
169
|
+
$ omnizip archive extract myfiles.7z output/
|
|
170
|
+
|
|
171
|
+
# Extract password-protected archive
|
|
172
|
+
$ omnizip archive extract --password secret encrypted.7z
|
|
173
|
+
|
|
174
|
+
# Verbose extraction
|
|
175
|
+
$ omnizip archive extract --verbose archive.7z
|
|
176
|
+
Extracting archive.7z...
|
|
177
|
+
Extracting: data/file1.txt (1.2 MB)
|
|
178
|
+
Extracting: data/file2.bin (3.4 MB)
|
|
179
|
+
Total: 2 files extracted
|
|
180
|
+
----
|
|
181
|
+
|
|
182
|
+
=== Listing Archive Contents
|
|
183
|
+
|
|
184
|
+
View contents of an archive:
|
|
185
|
+
|
|
186
|
+
[source,sh]
|
|
187
|
+
----
|
|
188
|
+
$ omnizip archive list myfiles.7z
|
|
189
|
+
Archive: myfiles.7z
|
|
190
|
+
Files: 3
|
|
191
|
+
|
|
192
|
+
Name Size Compressed Ratio Modified
|
|
193
|
+
────────────────────────────────────────────────────────────────
|
|
194
|
+
file1.txt 1048576 245760 76.6% 2025-11-15
|
|
195
|
+
file2.bin 3538944 892416 74.8% 2025-11-15
|
|
196
|
+
directory/readme.md 2048 1024 50.0% 2025-11-14
|
|
197
|
+
────────────────────────────────────────────────────────────────
|
|
198
|
+
Total: 4589568 1139200 75.2%
|
|
199
|
+
----
|
|
200
|
+
|
|
201
|
+
== Version Information
|
|
202
|
+
|
|
203
|
+
Display version information:
|
|
204
|
+
|
|
205
|
+
[source,sh]
|
|
206
|
+
----
|
|
207
|
+
$ omnizip version
|
|
208
|
+
Omnizip v1.0.0
|
|
209
|
+
Pure Ruby implementation of 7-Zip algorithms
|
|
210
|
+
|
|
211
|
+
# Short form
|
|
212
|
+
$ omnizip -v
|
|
213
|
+
Omnizip v1.0.0
|
|
214
|
+
Pure Ruby implementation of 7-Zip algorithms
|
|
215
|
+
----
|
|
216
|
+
|
|
217
|
+
== See Also
|
|
218
|
+
|
|
219
|
+
* link:api-usage.adoc[Library API Usage]
|
|
220
|
+
* link:compression-algorithms.adoc[Compression Algorithms]
|
|
221
|
+
* link:archive-formats.adoc[Archive Formats]
|
|
222
|
+
* link:../README.adoc[Main README]
|