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,26 @@
1
+ ---
2
+ title: Reference
3
+ nav_order: 50
4
+ has_children: true
5
+ ---
6
+
7
+ == Reference
8
+
9
+ Complete technical reference for Omnizip CLI and Ruby API.
10
+
11
+ === Command-Line Interface
12
+
13
+ * link:cli/overview.html[CLI Overview] - Command-line interface introduction
14
+ * link:cli/compress-command.html[compress] - Compress files command reference
15
+
16
+ === Ruby API
17
+
18
+ * link:api/overview.html[API Overview] - Ruby API introduction and examples
19
+
20
+ == Additional Resources
21
+
22
+ For more detailed guides, see:
23
+
24
+ * link:../guides/[How-To Guides] - Step-by-step guides for common tasks
25
+ * link:../getting-started/[Getting Started] - Installation and quick start
26
+ * link:../comparison/[Comparison] - Compare with other tools
@@ -0,0 +1,185 @@
1
+ ---
2
+ title: FAQ
3
+ nav_order: 71
4
+ ---
5
+
6
+ == Frequently Asked Questions
7
+
8
+ === General Questions
9
+
10
+ ==== What is Omnizip?
11
+
12
+ Omnizip is a pure Ruby compression library supporting multiple compression algorithms (LZMA, LZMA2, BZip2, PPMd, Deflate, Zstandard) and archive formats (7z, ZIP, RAR, TAR, etc.) with zero external dependencies.
13
+
14
+ ==== Why use Omnizip?
15
+
16
+ * **Portability** - Works on all Ruby platforms (MRI, JRuby, TruffleRuby)
17
+ * **No Dependencies** - Zero external dependencies or native extensions
18
+ * **Comprehensive** - Support for 10+ archive formats and 6 compression algorithms
19
+ * **Extensible** - Registry-based plugin architecture
20
+
21
+ ==== How fast is Omnizip?
22
+
23
+ Pure Ruby implementation is 10-60x slower than native implementations:
24
+
25
+ * LZMA encode: 13-15x slower
26
+ * LZMA decode: 8-10x slower
27
+ * BWT transform: 50-60x slower
28
+
29
+ This is an acceptable trade-off for maximum portability.
30
+
31
+ === Installation
32
+
33
+ ==== What Ruby version is required?
34
+
35
+ Ruby 3.0 or higher is required.
36
+
37
+ ==== Does Omnizip work on JRuby?
38
+
39
+ Yes, Omnizip works on JRuby 9.4+.
40
+
41
+ ==== Does Omnizip work on TruffleRuby?
42
+
43
+ Yes, Omnizip works on TruffleRuby 22+.
44
+
45
+ === Usage
46
+
47
+ ==== How do I compress a file?
48
+
49
+ [source,bash]
50
+ ----
51
+ omnizip compress input.txt output.lzma
52
+ ----
53
+
54
+ [source,ruby]
55
+ ----
56
+ Omnizip.compress_file('input.txt', 'output.lzma')
57
+ ----
58
+
59
+ ==== How do I create an archive?
60
+
61
+ [source,bash]
62
+ ----
63
+ omnizip archive create backup.7z documents/
64
+ ----
65
+
66
+ [source,ruby]
67
+ ----
68
+ writer = Omnizip::Formats::SevenZip::Writer.new('backup.7z')
69
+ writer.add_directory('documents/')
70
+ writer.close
71
+ ----
72
+
73
+ ==== How do I extract an archive?
74
+
75
+ [source,bash]
76
+ ----
77
+ omnizip archive extract backup.7z output/
78
+ ----
79
+
80
+ [source,ruby]
81
+ ----
82
+ reader = Omnizip::Formats::SevenZip::Reader.new('backup.7z')
83
+ reader.extract_all('output/')
84
+ reader.close
85
+ ----
86
+
87
+ ==== What compression level should I use?
88
+
89
+ * **Levels 1-3**: Fast compression for temporary files
90
+ * **Levels 4-6**: Balanced speed/ratio for general use (default: 5)
91
+ * **Levels 7-9**: Maximum compression for storage
92
+
93
+ === Compatibility
94
+
95
+ ==== Can Omnizip extract 7-Zip archives?
96
+
97
+ Yes, Omnizip can extract archives created by 7-Zip.
98
+
99
+ ==== Can Omnizip create ZIP files?
100
+
101
+ Yes, Omnizip can create ZIP files compatible with all ZIP tools.
102
+
103
+ ==== Can Omnizip create RAR archives?
104
+
105
+ Yes, Omnizip can create RAR5 archives using pure Ruby implementation.
106
+
107
+ === Performance
108
+
109
+ ==== How can I speed up compression?
110
+
111
+ 1. Use lower compression levels (--level 1-3)
112
+ 2. Use faster algorithms (zstandard, deflate)
113
+ 3. Enable parallel processing (--threads)
114
+ 4. Use compression profiles for automatic selection
115
+
116
+ ==== Why is compression slow?
117
+
118
+ Pure Ruby implementation prioritizes portability over performance. Native implementations are 10-60x faster but require platform-specific compilation.
119
+
120
+ === Troubleshooting
121
+
122
+ ==== Compression failed with "Algorithm not found"
123
+
124
+ Ensure the algorithm name is correct:
125
+
126
+ [source,bash]
127
+ ----
128
+ omnizip list # See available algorithms
129
+ ----
130
+
131
+ ==== Archive extraction failed
132
+
133
+ Verify the archive is not corrupted:
134
+
135
+ [source,bash]
136
+ ----
137
+ omnizip archive list archive.7z
138
+ ----
139
+
140
+ Try different extraction options or check file integrity.
141
+
142
+ ==== Out of memory error
143
+
144
+ For large files, consider:
145
+
146
+ 1. Using chunked processing
147
+ 2. Reducing compression level
148
+ 3. Using faster algorithms
149
+
150
+ === Advanced
151
+
152
+ ==== How do I use filters?
153
+
154
+ [source,bash]
155
+ ----
156
+ omnizip archive create binaries.7z app.exe --filters bcj_x86
157
+ ----
158
+
159
+ [source,ruby]
160
+ ----
161
+ writer = Omnizip::Formats::SevenZip::Writer.new('binaries.7z',
162
+ filters: [:bcj_x86]
163
+ )
164
+ ----
165
+
166
+ ==== How do I encrypt archives?
167
+
168
+ [source,bash]
169
+ ----
170
+ omnizip archive create secure.7z data/ --password "PASSWORD"
171
+ ----
172
+
173
+ [source,ruby]
174
+ ----
175
+ writer = Omnizip::Formats::SevenZip::Writer.new('secure.7z',
176
+ password: 'PASSWORD'
177
+ )
178
+ ----
179
+
180
+ === See Also
181
+
182
+ * link:../getting-started/[Getting Started]
183
+ * link:../guides/[Usage Guides]
184
+ * link:../troubleshooting/[Troubleshooting]
185
+ * link:../resources/quick-reference[Quick Reference]
@@ -0,0 +1,222 @@
1
+ ---
2
+ title: Quick Reference
3
+ nav_order: 70
4
+ ---
5
+
6
+ == Quick Reference
7
+
8
+ Cheat sheet for common Omnizip operations.
9
+
10
+ === Command-Line Quick Reference
11
+
12
+ ==== File Compression
13
+
14
+ [source,bash]
15
+ ----
16
+ # Basic compression
17
+ omnizip compress INPUT OUTPUT
18
+
19
+ # With algorithm and level
20
+ omnizip compress INPUT OUTPUT --algorithm ALGORITHM --level N
21
+
22
+ # Pipe mode
23
+ cat INPUT | omnizip compress - OUTPUT
24
+ ----
25
+
26
+ ==== Archive Operations
27
+
28
+ [source,bash]
29
+ ----
30
+ # Create archive
31
+ omnizip archive create OUTPUT INPUT...
32
+
33
+ # Extract archive
34
+ omnizip archive extract ARCHIVE [OUTPUT_DIR]
35
+
36
+ # List contents
37
+ omnizip archive list ARCHIVE
38
+ ----
39
+
40
+ ==== Common Options
41
+
42
+ `--algorithm`:: Compression algorithm (lzma, lzma2, bzip2, ppmd7, deflate, zstandard)
43
+ `--level N`:: Compression level (1-9)
44
+ `--verbose`, `-v`:: Verbose output
45
+ `--help`, `-h`:: Show help
46
+
47
+ === Ruby API Quick Reference
48
+
49
+ ==== Convenience Methods
50
+
51
+ [source,ruby]
52
+ ----
53
+ # Compress file
54
+ Omnizip.compress_file('input.txt', 'output.lzma')
55
+
56
+ # Decompress file
57
+ Omnizip.decompress_file('output.lzma', 'restored.txt')
58
+
59
+ # Extract archive
60
+ Omnizip.extract_archive('archive.7z', 'output/')
61
+
62
+ # List archive
63
+ Omnizip.list_archive('archive.7z')
64
+ ----
65
+
66
+ ==== Registry Methods
67
+
68
+ [source,ruby]
69
+ ----
70
+ # Get algorithm
71
+ algorithm = Omnizip::AlgorithmRegistry.get(:lzma2).new(level: 9)
72
+
73
+ # Get format writer
74
+ writer = Omnizip::FormatRegistry.get(:seven_zip).new_writer('archive.7z')
75
+ ----
76
+
77
+ === Compression Algorithm Quick Reference
78
+
79
+ [cols="1,1,2,2"]
80
+ |===
81
+ |Algorithm |Option |Speed |Best For
82
+
83
+ |LZMA
84
+ |--algorithm lzma
85
+ |Slow
86
+ |Maximum compression
87
+
88
+ |LZMA2
89
+ |--algorithm lzma2 (default)
90
+ |Slow
91
+ |Archives, backups
92
+
93
+ |BZip2
94
+ |--algorithm bzip2
95
+ |Medium
96
+ |Text files
97
+
98
+ |PPMd7
99
+ |--algorithm ppmd7
100
+ |Medium
101
+ |Text, documents
102
+
103
+ |Deflate
104
+ |--algorithm deflate
105
+ |Fast
106
+ |Compatibility
107
+
108
+ |Zstandard
109
+ |--algorithm zstandard
110
+ |Very Fast
111
+ |Speed-sensitive
112
+ |===
113
+
114
+ === Compression Level Quick Reference
115
+
116
+ [cols="1,1,2"]
117
+ |===
118
+ |Level |Option |Use Case
119
+
120
+ |1
121
+ |--level 1
122
+ |Fastest, temporary files
123
+
124
+ |3
125
+ |--level 3
126
+ |Fast, frequent operations
127
+
128
+ |5
129
+ |--level 5 (default)
130
+ |Balanced, general use
131
+
132
+ |7
133
+ |--level 7
134
+ |High compression, storage
135
+
136
+ |9
137
+ |--level 9
138
+ |Maximum compression
139
+ |===
140
+
141
+ === Archive Format Quick Reference
142
+
143
+ [cols="1,2,2"]
144
+ |===
145
+ |Format |Extension |Best For
146
+
147
+ |7z
148
+ |.7z
149
+ |Maximum compression, solid archives
150
+
151
+ |ZIP
152
+ |.zip
153
+ |Cross-platform compatibility
154
+
155
+ |RAR4/RAR5
156
+ |.rar
157
+ |Binary distribution, multi-volume
158
+
159
+ |TAR
160
+ |.tar
161
+ |Unix backups
162
+
163
+ |GZIP
164
+ |.gz
165
+ |Single file compression
166
+
167
+ |XZ
168
+ |.xz
169
+ |System packages
170
+ |===
171
+
172
+ === Common Patterns
173
+
174
+ ==== Backup Script
175
+
176
+ [source,bash]
177
+ ----
178
+ #!/bin/bash
179
+ DATE=$(date +%Y%m%d)
180
+ omnizip archive create "backup_${DATE}.7z" \
181
+ documents/ projects/ \
182
+ --level 7 --solid
183
+ ----
184
+
185
+ ==== Batch Compression
186
+
187
+ [source,bash]
188
+ ----
189
+ for file in *.txt; do
190
+ omnizip compress "$file" "${file}.lzma" --level 5
191
+ done
192
+ ----
193
+
194
+ ==== Ruby Backup Script
195
+
196
+ [source,ruby]
197
+ ----
198
+ require 'omnizip'
199
+ require 'time'
200
+
201
+ timestamp = Time.now.strftime('%Y%m%d')
202
+ archive_name = "backup_#{timestamp}.7z"
203
+
204
+ writer = Omnizip::Formats::SevenZip::Writer.new(archive_name,
205
+ level: 7,
206
+ solid: true
207
+ )
208
+
209
+ %w[documents projects].each do |dir|
210
+ writer.add_directory(dir) if Dir.exist?(dir)
211
+ end
212
+
213
+ writer.close
214
+ puts "Created #{archive_name}"
215
+ ----
216
+
217
+ === See Also
218
+
219
+ * link:../getting-started/quick-start[Quick Start Guide]
220
+ * link:../guides/basic-usage/[Basic Usage Guides]
221
+ * link:../reference/cli/[CLI Reference]
222
+ * link:../reference/api/[API Reference]
@@ -0,0 +1,208 @@
1
+ ---
2
+ title: Troubleshooting
3
+ nav_order: 80
4
+ ---
5
+
6
+ == Troubleshooting
7
+
8
+ Common problems and solutions when using Omnizip.
9
+
10
+ === Common Issues
11
+
12
+ ==== "Algorithm not found" Error
13
+
14
+ **Problem**: Compression fails with algorithm not found error.
15
+
16
+ **Solution**: Check available algorithms:
17
+
18
+ [source,bash]
19
+ ----
20
+ omnizip list
21
+ ----
22
+
23
+ [source,ruby]
24
+ ----
25
+ Omnizip::AlgorithmRegistry.registered.each do |name|
26
+ puts name
27
+ end
28
+ ----
29
+
30
+ **Causes**:
31
+ * Typo in algorithm name
32
+ * Algorithm not registered
33
+
34
+ ==== "File not found" Error
35
+
36
+ **Problem**: Cannot read input file.
37
+
38
+ **Solution**: Verify file paths and permissions:
39
+
40
+ [source,bash]
41
+ ----
42
+ # Check file exists
43
+ ls -la input.txt
44
+
45
+ # Check permissions
46
+ chmod +r input.txt
47
+ ----
48
+
49
+ ==== "Out of memory" Error
50
+
51
+ **Problem**: Large file compression fails.
52
+
53
+ **Solutions**:
54
+
55
+ 1. Use lower compression level:
56
+ [source,bash]
57
+ ----
58
+ omnizip compress large.txt output.lzma --level 1
59
+ ----
60
+
61
+ 2. Use faster algorithm:
62
+ [source,bash]
63
+ ----
64
+ omnizip compress large.txt output.zst --algorithm zstandard
65
+ ----
66
+
67
+ 3. Use chunked processing:
68
+ [source,ruby]
69
+ ----
70
+ Omnizip.compress_file_chunked('large.txt', 'output.lzma',
71
+ chunk_size: 10 * 1024 * 1024
72
+ )
73
+ ----
74
+
75
+ ==== "Archive corrupted" Error
76
+
77
+ **Problem**: Cannot extract archive.
78
+
79
+ **Solutions**:
80
+
81
+ 1. Verify archive integrity:
82
+ [source,bash]
83
+ ----
84
+ omnizip archive list archive.7z
85
+ ----
86
+
87
+ 2. Try recovery mode:
88
+ [source,ruby]
89
+ ----
90
+ reader = Omnizip::Formats::SevenZip::Reader.new('archive.7z',
91
+ salvage_mode: true
92
+ )
93
+ reader.extract_all('output/')
94
+ ----
95
+
96
+ 3. Check CRC:
97
+ [source,ruby]
98
+ ----
99
+ if Omnizip::Checksums.verify_file('archive.7z', :crc32)
100
+ puts "Archive is valid"
101
+ else
102
+ puts "Archive is corrupted"
103
+ end
104
+ ----
105
+
106
+ === Performance Issues
107
+
108
+ ==== Slow Compression
109
+
110
+ **Solutions**:
111
+
112
+ 1. Use lower compression level:
113
+ [source,bash]
114
+ ----
115
+ omnizip compress input.txt output.lzma --level 3
116
+ ----
117
+
118
+ 2. Use faster algorithm:
119
+ [source,bash]
120
+ ----
121
+ omnizip compress input.txt output.zst --algorithm zstandard
122
+ ----
123
+
124
+ 3. Enable parallel processing:
125
+ [source,ruby]
126
+ ----
127
+ Omnizip.compress_file('input.txt', 'output.lzma',
128
+ parallel: true,
129
+ threads: 4
130
+ )
131
+ ----
132
+
133
+ ==== Slow Decompression
134
+
135
+ **Solutions**:
136
+
137
+ 1. Use buffered reading:
138
+ [source,ruby]
139
+ ----
140
+ reader = Omnizip::Formats::SevenZip::Reader.new('archive.7z',
141
+ buffer_size: 1024 * 1024
142
+ )
143
+ reader.extract_all('output/')
144
+ ----
145
+
146
+ 2. Extract specific files only:
147
+ [source,bash]
148
+ ----
149
+ omnizip archive extract archive.7z output/ \
150
+ --pattern 'important.txt'
151
+ ----
152
+
153
+ === Format-Specific Issues
154
+
155
+ ==== 7z Issues
156
+
157
+ **Problem**: 7z archive not compatible with 7-Zip.
158
+
159
+ **Solution**: Ensure standard options:
160
+
161
+ [source,ruby]
162
+ ----
163
+ writer = Omnizip::Formats::SevenZip::Writer.new('archive.7z',
164
+ algorithm: :lzma2,
165
+ level: 5 # Standard level
166
+ )
167
+ ----
168
+
169
+ ==== ZIP Issues
170
+
171
+ **Problem**: ZIP not readable by other tools.
172
+
173
+ **Solution**: Use Deflate algorithm:
174
+
175
+ [source,bash]
176
+ ----
177
+ omnizip archive create archive.zip files/ \
178
+ --algorithm deflate --level 5
179
+ ----
180
+
181
+ ==== RAR Issues
182
+
183
+ **Problem**: RAR extraction fails.
184
+
185
+ **Solution**: Verify RAR version:
186
+
187
+ [source,ruby]
188
+ ----
189
+ # Try RAR4 reader
190
+ reader = Omnizip::Formats::Rar::Reader.new('archive.rar')
191
+
192
+ # Or RAR5 reader
193
+ reader = Omnizip::Formats::Rar::Rar5::Reader.new('archive.rar')
194
+ ----
195
+
196
+ ### Getting Help
197
+
198
+ If you continue to have issues:
199
+
200
+ 1. Check link:../resources/faq[FAQ]
201
+ 2. Review link:../guides/[usage guides]
202
+ 3. Search link:https://github.com/metanorma/omnizip/issues[GitHub issues]
203
+ 4. Create a new issue with:
204
+ * Omnizip version
205
+ * Ruby version
206
+ * Operating system
207
+ * Error message
208
+ * Minimal reproduction code