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.
Files changed (511) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +32 -0
  4. data/.rubocop_todo.yml +754 -0
  5. data/COPYING +502 -0
  6. data/Gemfile +17 -0
  7. data/LICENSE +12 -0
  8. data/README.adoc +1045 -0
  9. data/Rakefile +12 -0
  10. data/benchmark/README.md +260 -0
  11. data/benchmark/benchmark_suite.rb +125 -0
  12. data/benchmark/compression_bench.rb +181 -0
  13. data/benchmark/filter_bench.rb +180 -0
  14. data/benchmark/models/benchmark_result.rb +59 -0
  15. data/benchmark/models/comparison_result.rb +69 -0
  16. data/benchmark/profile_suite.rb +167 -0
  17. data/benchmark/reporter.rb +150 -0
  18. data/benchmark/run_benchmarks.rb +66 -0
  19. data/benchmark/test_data.rb +137 -0
  20. data/config/formats/rar3_spec.yml +91 -0
  21. data/config/formats/rar5_spec.yml +102 -0
  22. data/docs/.github/workflows/docs.yml +142 -0
  23. data/docs/.gitignore +21 -0
  24. data/docs/.lychee.toml +67 -0
  25. data/docs/Gemfile +13 -0
  26. data/docs/RAR_WRITE_SUPPORT.md +26 -0
  27. data/docs/README.md +101 -0
  28. data/docs/_config.yml +112 -0
  29. data/docs/assets/logo.svg +1 -0
  30. data/docs/assets/omnizip-logo.pdf +1540 -11
  31. data/docs/comparison/feature-matrix.adoc +694 -0
  32. data/docs/comparison/index.adoc +113 -0
  33. data/docs/comparison/vs-7zip.adoc +309 -0
  34. data/docs/comparison/vs-peazip.adoc +77 -0
  35. data/docs/comparison/vs-rubyzip.adoc +342 -0
  36. data/docs/comparison/vs-winrar.adoc +100 -0
  37. data/docs/compatibility.adoc +579 -0
  38. data/docs/concepts/index.adoc +129 -0
  39. data/docs/developer/architecture.adoc +256 -0
  40. data/docs/developer/contributing.adoc +158 -0
  41. data/docs/developer/index.adoc +25 -0
  42. data/docs/developer/testing.adoc +212 -0
  43. data/docs/getting-started/basic-usage.adoc +271 -0
  44. data/docs/getting-started/index.adoc +42 -0
  45. data/docs/getting-started/installation.adoc +138 -0
  46. data/docs/getting-started/quick-start.adoc +185 -0
  47. data/docs/getting-started/your-first-archive.adoc +218 -0
  48. data/docs/guides/advanced-features/encryption.adoc +300 -0
  49. data/docs/guides/advanced-features/index.adoc +49 -0
  50. data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
  51. data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
  52. data/docs/guides/advanced-features/streaming.adoc +212 -0
  53. data/docs/guides/archive-formats/gzip-format.adoc +107 -0
  54. data/docs/guides/archive-formats/index.adoc +130 -0
  55. data/docs/guides/archive-formats/rar-format.adoc +104 -0
  56. data/docs/guides/archive-formats/rar5.adoc +521 -0
  57. data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
  58. data/docs/guides/archive-formats/tar-format.adoc +106 -0
  59. data/docs/guides/archive-formats/xz-format.adoc +118 -0
  60. data/docs/guides/archive-formats/zip-format.adoc +35 -0
  61. data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
  62. data/docs/guides/compression-algorithms/deflate.adoc +319 -0
  63. data/docs/guides/compression-algorithms/index.adoc +190 -0
  64. data/docs/guides/compression-algorithms/lzma.adoc +398 -0
  65. data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
  66. data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
  67. data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
  68. data/docs/guides/creating-archives.adoc +354 -0
  69. data/docs/guides/extracting-archives.adoc +53 -0
  70. data/docs/guides/format-conversion.adoc +64 -0
  71. data/docs/guides/index.adoc +49 -0
  72. data/docs/guides/migration-rubyzip.adoc +217 -0
  73. data/docs/guides/parity-archives.adoc +605 -0
  74. data/docs/guides/performance-tuning.adoc +88 -0
  75. data/docs/index.adoc +218 -0
  76. data/docs/lychee.toml +67 -0
  77. data/docs/reference/api/overview.adoc +188 -0
  78. data/docs/reference/cli/compress-command.adoc +114 -0
  79. data/docs/reference/cli/overview.adoc +140 -0
  80. data/docs/reference/index.adoc +26 -0
  81. data/docs/resources/faq.adoc +185 -0
  82. data/docs/resources/quick-reference.adoc +222 -0
  83. data/docs/troubleshooting/index.adoc +208 -0
  84. data/examples/api_comparison.rb +205 -0
  85. data/examples/deflate64_example.rb +96 -0
  86. data/examples/par2_demo.rb +121 -0
  87. data/examples/quick_start_native.rb +150 -0
  88. data/examples/quick_start_rubyzip.rb +115 -0
  89. data/examples/rubyzip_compatibility_demo.rb +194 -0
  90. data/exe/omnizip +27 -0
  91. data/lib/omnizip/algorithm.rb +130 -0
  92. data/lib/omnizip/algorithm_registry.rb +86 -0
  93. data/lib/omnizip/algorithms/.keep +0 -0
  94. data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
  95. data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
  96. data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
  97. data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
  98. data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
  99. data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
  100. data/lib/omnizip/algorithms/bzip2.rb +130 -0
  101. data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
  102. data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
  103. data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
  104. data/lib/omnizip/algorithms/deflate.rb +128 -0
  105. data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
  106. data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
  107. data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
  108. data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
  109. data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
  110. data/lib/omnizip/algorithms/deflate64.rb +109 -0
  111. data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
  112. data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
  113. data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
  114. data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
  115. data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
  116. data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
  117. data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
  118. data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
  119. data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
  120. data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
  121. data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
  122. data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
  123. data/lib/omnizip/algorithms/lzma/match.rb +32 -0
  124. data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
  125. data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
  126. data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
  127. data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
  128. data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
  129. data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
  130. data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
  131. data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
  132. data/lib/omnizip/algorithms/lzma/state.rb +127 -0
  133. data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
  134. data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
  135. data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
  136. data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
  137. data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
  138. data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
  139. data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
  140. data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
  141. data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
  142. data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
  143. data/lib/omnizip/algorithms/lzma.rb +238 -0
  144. data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
  145. data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
  146. data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
  147. data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
  148. data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
  149. data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
  150. data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
  151. data/lib/omnizip/algorithms/lzma2.rb +141 -0
  152. data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
  153. data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
  154. data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
  155. data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
  156. data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
  157. data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
  158. data/lib/omnizip/algorithms/ppmd7.rb +116 -0
  159. data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
  160. data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
  161. data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
  162. data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
  163. data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
  164. data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
  165. data/lib/omnizip/algorithms/ppmd8.rb +82 -0
  166. data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
  167. data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
  168. data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
  169. data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
  170. data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
  171. data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
  172. data/lib/omnizip/algorithms/zstandard.rb +138 -0
  173. data/lib/omnizip/buffer/memory_archive.rb +251 -0
  174. data/lib/omnizip/buffer/memory_extractor.rb +224 -0
  175. data/lib/omnizip/buffer.rb +176 -0
  176. data/lib/omnizip/checksum_registry.rb +114 -0
  177. data/lib/omnizip/checksums/crc32.rb +100 -0
  178. data/lib/omnizip/checksums/crc64.rb +101 -0
  179. data/lib/omnizip/checksums/crc_base.rb +158 -0
  180. data/lib/omnizip/checksums/verifier.rb +131 -0
  181. data/lib/omnizip/chunked/memory_manager.rb +194 -0
  182. data/lib/omnizip/chunked/reader.rb +78 -0
  183. data/lib/omnizip/chunked/writer.rb +120 -0
  184. data/lib/omnizip/chunked.rb +129 -0
  185. data/lib/omnizip/cli/output_formatter.rb +104 -0
  186. data/lib/omnizip/cli.rb +572 -0
  187. data/lib/omnizip/commands/.keep +0 -0
  188. data/lib/omnizip/commands/archive_create_command.rb +427 -0
  189. data/lib/omnizip/commands/archive_extract_command.rb +272 -0
  190. data/lib/omnizip/commands/archive_list_command.rb +218 -0
  191. data/lib/omnizip/commands/archive_repair_command.rb +131 -0
  192. data/lib/omnizip/commands/archive_verify_command.rb +117 -0
  193. data/lib/omnizip/commands/compress_command.rb +117 -0
  194. data/lib/omnizip/commands/decompress_command.rb +120 -0
  195. data/lib/omnizip/commands/list_command.rb +53 -0
  196. data/lib/omnizip/commands/metadata_command.rb +153 -0
  197. data/lib/omnizip/commands/parity_create_command.rb +122 -0
  198. data/lib/omnizip/commands/parity_repair_command.rb +122 -0
  199. data/lib/omnizip/commands/parity_verify_command.rb +124 -0
  200. data/lib/omnizip/commands/profile_list_command.rb +56 -0
  201. data/lib/omnizip/commands/profile_show_command.rb +44 -0
  202. data/lib/omnizip/convenience.rb +359 -0
  203. data/lib/omnizip/converter/conversion_registry.rb +49 -0
  204. data/lib/omnizip/converter/conversion_strategy.rb +121 -0
  205. data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
  206. data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
  207. data/lib/omnizip/converter.rb +105 -0
  208. data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
  209. data/lib/omnizip/crypto/aes256/constants.rb +28 -0
  210. data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
  211. data/lib/omnizip/crypto/aes256.rb +102 -0
  212. data/lib/omnizip/error.rb +106 -0
  213. data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
  214. data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
  215. data/lib/omnizip/eta/rate_calculator.rb +104 -0
  216. data/lib/omnizip/eta/sample_history.rb +143 -0
  217. data/lib/omnizip/eta/time_estimator.rb +106 -0
  218. data/lib/omnizip/eta.rb +63 -0
  219. data/lib/omnizip/extraction/filter_chain.rb +177 -0
  220. data/lib/omnizip/extraction/glob_pattern.rb +140 -0
  221. data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
  222. data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
  223. data/lib/omnizip/extraction/regex_pattern.rb +50 -0
  224. data/lib/omnizip/extraction/selective_extractor.rb +240 -0
  225. data/lib/omnizip/extraction.rb +111 -0
  226. data/lib/omnizip/file_type/mime_classifier.rb +144 -0
  227. data/lib/omnizip/file_type.rb +113 -0
  228. data/lib/omnizip/filter.rb +139 -0
  229. data/lib/omnizip/filter_pipeline.rb +108 -0
  230. data/lib/omnizip/filter_registry.rb +166 -0
  231. data/lib/omnizip/filters/bcj.rb +279 -0
  232. data/lib/omnizip/filters/bcj2/constants.rb +53 -0
  233. data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
  234. data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
  235. data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
  236. data/lib/omnizip/filters/bcj2.rb +99 -0
  237. data/lib/omnizip/filters/bcj_arm.rb +176 -0
  238. data/lib/omnizip/filters/bcj_arm64.rb +244 -0
  239. data/lib/omnizip/filters/bcj_ia64.rb +196 -0
  240. data/lib/omnizip/filters/bcj_ppc.rb +190 -0
  241. data/lib/omnizip/filters/bcj_sparc.rb +176 -0
  242. data/lib/omnizip/filters/bcj_x86.rb +193 -0
  243. data/lib/omnizip/filters/delta.rb +196 -0
  244. data/lib/omnizip/filters/filter_base.rb +72 -0
  245. data/lib/omnizip/filters/registry.rb +123 -0
  246. data/lib/omnizip/filters/xz_delta.rb +258 -0
  247. data/lib/omnizip/format_detector.rb +162 -0
  248. data/lib/omnizip/format_registry.rb +59 -0
  249. data/lib/omnizip/formats/.keep +0 -0
  250. data/lib/omnizip/formats/bzip2_file.rb +172 -0
  251. data/lib/omnizip/formats/cpio/constants.rb +55 -0
  252. data/lib/omnizip/formats/cpio/entry.rb +385 -0
  253. data/lib/omnizip/formats/cpio/reader.rb +196 -0
  254. data/lib/omnizip/formats/cpio/writer.rb +234 -0
  255. data/lib/omnizip/formats/cpio.rb +140 -0
  256. data/lib/omnizip/formats/format_spec_loader.rb +230 -0
  257. data/lib/omnizip/formats/gzip.rb +238 -0
  258. data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
  259. data/lib/omnizip/formats/iso/directory_record.rb +152 -0
  260. data/lib/omnizip/formats/iso/joliet.rb +204 -0
  261. data/lib/omnizip/formats/iso/path_table.rb +125 -0
  262. data/lib/omnizip/formats/iso/reader.rb +197 -0
  263. data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
  264. data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
  265. data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
  266. data/lib/omnizip/formats/iso/writer.rb +530 -0
  267. data/lib/omnizip/formats/iso.rb +140 -0
  268. data/lib/omnizip/formats/lzip.rb +175 -0
  269. data/lib/omnizip/formats/lzma_alone.rb +171 -0
  270. data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
  271. data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
  272. data/lib/omnizip/formats/rar/block_parser.rb +243 -0
  273. data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
  274. data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
  275. data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
  276. data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
  277. data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
  278. data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
  279. data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
  280. data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
  281. data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
  282. data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
  283. data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
  284. data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
  285. data/lib/omnizip/formats/rar/constants.rb +82 -0
  286. data/lib/omnizip/formats/rar/decompressor.rb +238 -0
  287. data/lib/omnizip/formats/rar/external_writer.rb +312 -0
  288. data/lib/omnizip/formats/rar/header.rb +192 -0
  289. data/lib/omnizip/formats/rar/license_validator.rb +109 -0
  290. data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
  291. data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
  292. data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
  293. data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
  294. data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
  295. data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
  296. data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
  297. data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
  298. data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
  299. data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
  300. data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
  301. data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
  302. data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
  303. data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
  304. data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
  305. data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
  306. data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
  307. data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
  308. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
  309. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
  310. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
  311. data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
  312. data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
  313. data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
  314. data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
  315. data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
  316. data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
  317. data/lib/omnizip/formats/rar/reader.rb +366 -0
  318. data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
  319. data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
  320. data/lib/omnizip/formats/rar/writer.rb +431 -0
  321. data/lib/omnizip/formats/rar.rb +205 -0
  322. data/lib/omnizip/formats/rar3/compressor.rb +73 -0
  323. data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
  324. data/lib/omnizip/formats/rar3/reader.rb +386 -0
  325. data/lib/omnizip/formats/rar3/writer.rb +219 -0
  326. data/lib/omnizip/formats/rar5/compressor.rb +73 -0
  327. data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
  328. data/lib/omnizip/formats/rar5/reader.rb +342 -0
  329. data/lib/omnizip/formats/rar5/writer.rb +214 -0
  330. data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
  331. data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
  332. data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
  333. data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
  334. data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
  335. data/lib/omnizip/formats/seven_zip/header.rb +106 -0
  336. data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
  337. data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
  338. data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
  339. data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
  340. data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
  341. data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
  342. data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
  343. data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
  344. data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
  345. data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
  346. data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
  347. data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
  348. data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
  349. data/lib/omnizip/formats/seven_zip.rb +93 -0
  350. data/lib/omnizip/formats/tar/constants.rb +73 -0
  351. data/lib/omnizip/formats/tar/entry.rb +94 -0
  352. data/lib/omnizip/formats/tar/header.rb +168 -0
  353. data/lib/omnizip/formats/tar/reader.rb +121 -0
  354. data/lib/omnizip/formats/tar/writer.rb +216 -0
  355. data/lib/omnizip/formats/tar.rb +84 -0
  356. data/lib/omnizip/formats/xz/reader.rb +116 -0
  357. data/lib/omnizip/formats/xz.rb +237 -0
  358. data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
  359. data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
  360. data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
  361. data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
  362. data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
  363. data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
  364. data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
  365. data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
  366. data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
  367. data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
  368. data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
  369. data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
  370. data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
  371. data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
  372. data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
  373. data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
  374. data/lib/omnizip/formats/zip/constants.rb +69 -0
  375. data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
  376. data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
  377. data/lib/omnizip/formats/zip/reader.rb +250 -0
  378. data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
  379. data/lib/omnizip/formats/zip/writer.rb +375 -0
  380. data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
  381. data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
  382. data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
  383. data/lib/omnizip/formats/zip.rb +50 -0
  384. data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
  385. data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
  386. data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
  387. data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
  388. data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
  389. data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
  390. data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
  391. data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
  392. data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
  393. data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
  394. data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
  395. data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
  396. data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
  397. data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
  398. data/lib/omnizip/io/buffered_input.rb +146 -0
  399. data/lib/omnizip/io/buffered_output.rb +105 -0
  400. data/lib/omnizip/io/stream_manager.rb +115 -0
  401. data/lib/omnizip/link_handler/hard_link.rb +79 -0
  402. data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
  403. data/lib/omnizip/link_handler.rb +124 -0
  404. data/lib/omnizip/metadata/archive_metadata.rb +114 -0
  405. data/lib/omnizip/metadata/entry_metadata.rb +146 -0
  406. data/lib/omnizip/metadata/metadata_editor.rb +171 -0
  407. data/lib/omnizip/metadata/metadata_registry.rb +64 -0
  408. data/lib/omnizip/metadata/metadata_validator.rb +99 -0
  409. data/lib/omnizip/metadata.rb +57 -0
  410. data/lib/omnizip/models/.keep +0 -0
  411. data/lib/omnizip/models/algorithm_metadata.rb +73 -0
  412. data/lib/omnizip/models/compression_options.rb +71 -0
  413. data/lib/omnizip/models/conversion_options.rb +87 -0
  414. data/lib/omnizip/models/conversion_result.rb +135 -0
  415. data/lib/omnizip/models/eta_result.rb +46 -0
  416. data/lib/omnizip/models/extraction_rule.rb +115 -0
  417. data/lib/omnizip/models/filter_chain.rb +144 -0
  418. data/lib/omnizip/models/filter_config.rb +183 -0
  419. data/lib/omnizip/models/match_result.rb +124 -0
  420. data/lib/omnizip/models/optimization_suggestion.rb +91 -0
  421. data/lib/omnizip/models/parallel_options.rb +104 -0
  422. data/lib/omnizip/models/performance_result.rb +79 -0
  423. data/lib/omnizip/models/profile_report.rb +82 -0
  424. data/lib/omnizip/models/progress_options.rb +38 -0
  425. data/lib/omnizip/models/split_options.rb +116 -0
  426. data/lib/omnizip/optimization_registry.rb +81 -0
  427. data/lib/omnizip/parallel/job_queue.rb +209 -0
  428. data/lib/omnizip/parallel/job_scheduler.rb +203 -0
  429. data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
  430. data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
  431. data/lib/omnizip/parallel/worker_pool.rb +223 -0
  432. data/lib/omnizip/parallel.rb +149 -0
  433. data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
  434. data/lib/omnizip/parity/galois16.rb +145 -0
  435. data/lib/omnizip/parity/models/creator_packet.rb +73 -0
  436. data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
  437. data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
  438. data/lib/omnizip/parity/models/main_packet.rb +128 -0
  439. data/lib/omnizip/parity/models/packet.rb +156 -0
  440. data/lib/omnizip/parity/models/packet_registry.rb +109 -0
  441. data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
  442. data/lib/omnizip/parity/par2_creator.rb +531 -0
  443. data/lib/omnizip/parity/par2_repairer.rb +407 -0
  444. data/lib/omnizip/parity/par2_verifier.rb +364 -0
  445. data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
  446. data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
  447. data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
  448. data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
  449. data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
  450. data/lib/omnizip/parity.rb +186 -0
  451. data/lib/omnizip/password/encryption_registry.rb +65 -0
  452. data/lib/omnizip/password/encryption_strategy.rb +96 -0
  453. data/lib/omnizip/password/password_validator.rb +129 -0
  454. data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
  455. data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
  456. data/lib/omnizip/password.rb +87 -0
  457. data/lib/omnizip/pipe/stream_compressor.rb +124 -0
  458. data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
  459. data/lib/omnizip/pipe.rb +121 -0
  460. data/lib/omnizip/platform/ntfs_streams.rb +201 -0
  461. data/lib/omnizip/platform.rb +189 -0
  462. data/lib/omnizip/profile/archive_profile.rb +39 -0
  463. data/lib/omnizip/profile/balanced_profile.rb +33 -0
  464. data/lib/omnizip/profile/binary_profile.rb +36 -0
  465. data/lib/omnizip/profile/compression_profile.rb +158 -0
  466. data/lib/omnizip/profile/custom_profile.rb +157 -0
  467. data/lib/omnizip/profile/fast_profile.rb +33 -0
  468. data/lib/omnizip/profile/maximum_profile.rb +33 -0
  469. data/lib/omnizip/profile/profile_detector.rb +110 -0
  470. data/lib/omnizip/profile/profile_registry.rb +161 -0
  471. data/lib/omnizip/profile/text_profile.rb +36 -0
  472. data/lib/omnizip/profile.rb +190 -0
  473. data/lib/omnizip/profiler/memory_profiler.rb +66 -0
  474. data/lib/omnizip/profiler/method_profiler.rb +49 -0
  475. data/lib/omnizip/profiler/report_generator.rb +169 -0
  476. data/lib/omnizip/profiler.rb +204 -0
  477. data/lib/omnizip/progress/callback_reporter.rb +36 -0
  478. data/lib/omnizip/progress/console_reporter.rb +62 -0
  479. data/lib/omnizip/progress/log_reporter.rb +91 -0
  480. data/lib/omnizip/progress/operation_progress.rb +118 -0
  481. data/lib/omnizip/progress/progress_bar.rb +156 -0
  482. data/lib/omnizip/progress/progress_reporter.rb +40 -0
  483. data/lib/omnizip/progress/progress_tracker.rb +190 -0
  484. data/lib/omnizip/progress/silent_reporter.rb +24 -0
  485. data/lib/omnizip/progress.rb +127 -0
  486. data/lib/omnizip/rubyzip_compat.rb +63 -0
  487. data/lib/omnizip/temp/safe_extract.rb +168 -0
  488. data/lib/omnizip/temp/temp_file.rb +124 -0
  489. data/lib/omnizip/temp/temp_file_pool.rb +109 -0
  490. data/lib/omnizip/temp.rb +181 -0
  491. data/lib/omnizip/version.rb +5 -0
  492. data/lib/omnizip/zip/entry.rb +156 -0
  493. data/lib/omnizip/zip/file.rb +485 -0
  494. data/lib/omnizip/zip/input_stream.rb +273 -0
  495. data/lib/omnizip/zip/output_stream.rb +324 -0
  496. data/lib/omnizip.rb +156 -0
  497. data/readme-docs/advanced-features.adoc +515 -0
  498. data/readme-docs/api-usage.adoc +444 -0
  499. data/readme-docs/architecture.adoc +449 -0
  500. data/readme-docs/archive-formats.adoc +479 -0
  501. data/readme-docs/cli-usage.adoc +222 -0
  502. data/readme-docs/compression-algorithms.adoc +442 -0
  503. data/readme-docs/compression-profiles.adoc +247 -0
  504. data/readme-docs/encryption-checksums.adoc +328 -0
  505. data/readme-docs/format-converter.adoc +325 -0
  506. data/readme-docs/installation.adoc +228 -0
  507. data/readme-docs/par2-archives.adoc +608 -0
  508. data/readme-docs/performance-profiler.adoc +389 -0
  509. data/readme-docs/preprocessing-filters.adoc +280 -0
  510. data/xz-file-format-1.2.1.txt +1174 -0
  511. 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]