cycode 3.4.1.dev5__tar.gz → 3.4.2.dev1__tar.gz

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 (164) hide show
  1. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/PKG-INFO +3 -3
  2. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/README.md +2 -2
  3. cycode-3.4.2.dev1/cycode/__init__.py +1 -0
  4. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/commit_range_scanner.py +9 -2
  5. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/consts.py +1 -0
  6. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/commit_range_documents.py +47 -11
  7. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/pyproject.toml +1 -1
  8. cycode-3.4.1.dev5/cycode/__init__.py +0 -1
  9. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/LICENCE +0 -0
  10. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/__main__.py +0 -0
  11. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/__init__.py +0 -0
  12. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/app.py +0 -0
  13. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/__init__.py +0 -0
  14. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
  15. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
  16. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
  17. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
  18. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/auth/__init__.py +0 -0
  19. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/auth/auth_command.py +0 -0
  20. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/auth/auth_common.py +0 -0
  21. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/auth/auth_manager.py +0 -0
  22. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/auth/models.py +0 -0
  23. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/configure/__init__.py +0 -0
  24. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/configure/configure_command.py +0 -0
  25. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/configure/consts.py +0 -0
  26. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/configure/messages.py +0 -0
  27. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/configure/prompts.py +0 -0
  28. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/ignore/__init__.py +0 -0
  29. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/ignore/ignore_command.py +0 -0
  30. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/mcp/__init__.py +0 -0
  31. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/mcp/mcp_command.py +0 -0
  32. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/__init__.py +0 -0
  33. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/report_command.py +0 -0
  34. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/__init__.py +0 -0
  35. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/common.py +0 -0
  36. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
  37. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
  38. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
  39. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
  40. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
  41. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
  42. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/__init__.py +0 -0
  43. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/aggregation_report.py +0 -0
  44. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/code_scanner.py +0 -0
  45. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
  46. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
  47. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/detection_excluder.py +0 -0
  48. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/path/__init__.py +0 -0
  49. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/path/path_command.py +0 -0
  50. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
  51. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
  52. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
  53. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
  54. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
  55. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/repository/__init__.py +0 -0
  56. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
  57. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
  58. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
  59. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
  60. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/scan_command.py +0 -0
  61. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/scan_parameters.py +0 -0
  62. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/scan/scan_result.py +0 -0
  63. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/status/__init__.py +0 -0
  64. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/status/get_cli_status.py +0 -0
  65. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/status/models.py +0 -0
  66. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/status/status_command.py +0 -0
  67. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/apps/status/version_command.py +0 -0
  68. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/cli_types.py +0 -0
  69. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/config.py +0 -0
  70. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/console.py +0 -0
  71. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/exceptions/__init__.py +0 -0
  72. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/exceptions/custom_exceptions.py +0 -0
  73. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
  74. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
  75. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/exceptions/handle_errors.py +0 -0
  76. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
  77. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
  78. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/__init__.py +0 -0
  79. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/file_excluder.py +0 -0
  80. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/iac/__init__.py +0 -0
  81. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
  82. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/models/__init__.py +0 -0
  83. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
  84. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/path_documents.py +0 -0
  85. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/repository_documents.py +0 -0
  86. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/__init__.py +0 -0
  87. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
  88. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
  89. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
  90. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
  91. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +0 -0
  92. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
  93. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
  94. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
  95. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
  96. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
  97. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
  98. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
  99. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
  100. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
  101. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
  102. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/walk_ignore.py +0 -0
  103. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/files_collector/zip_documents.py +0 -0
  104. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/logger.py +0 -0
  105. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/main.py +0 -0
  106. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/models.py +0 -0
  107. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/__init__.py +0 -0
  108. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/console_printer.py +0 -0
  109. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/json_printer.py +0 -0
  110. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/printer_base.py +0 -0
  111. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/rich_printer.py +0 -0
  112. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/tables/__init__.py +0 -0
  113. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/tables/sca_table_printer.py +0 -0
  114. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/tables/table.py +0 -0
  115. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/tables/table_models.py +0 -0
  116. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/tables/table_printer.py +0 -0
  117. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/tables/table_printer_base.py +0 -0
  118. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/text_printer.py +0 -0
  119. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/utils/__init__.py +0 -0
  120. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
  121. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/utils/detection_data.py +0 -0
  122. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
  123. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
  124. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
  125. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/printers/utils/rich_helpers.py +0 -0
  126. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/user_settings/__init__.py +0 -0
  127. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/user_settings/base_file_manager.py +0 -0
  128. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/user_settings/config_file_manager.py +0 -0
  129. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/user_settings/configuration_manager.py +0 -0
  130. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/user_settings/credentials_manager.py +0 -0
  131. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/user_settings/jwt_creator.py +0 -0
  132. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/__init__.py +0 -0
  133. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/enum_utils.py +0 -0
  134. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/get_api_client.py +0 -0
  135. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/git_proxy.py +0 -0
  136. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/ignore_utils.py +0 -0
  137. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/jwt_utils.py +0 -0
  138. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/path_utils.py +0 -0
  139. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/progress_bar.py +0 -0
  140. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/scan_batch.py +0 -0
  141. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/scan_utils.py +0 -0
  142. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/sentry.py +0 -0
  143. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/shell_executor.py +0 -0
  144. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/string_utils.py +0 -0
  145. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/task_timer.py +0 -0
  146. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/version_checker.py +0 -0
  147. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cli/utils/yaml_utils.py +0 -0
  148. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/config.py +0 -0
  149. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/__init__.py +0 -0
  150. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/auth_client.py +0 -0
  151. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/client_creator.py +0 -0
  152. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/config.py +0 -0
  153. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/config_dev.py +0 -0
  154. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/cycode_client.py +0 -0
  155. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/cycode_client_base.py +0 -0
  156. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/cycode_dev_based_client.py +0 -0
  157. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/cycode_token_based_client.py +0 -0
  158. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/headers.py +0 -0
  159. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/logger.py +0 -0
  160. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/models.py +0 -0
  161. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/report_client.py +0 -0
  162. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/scan_client.py +0 -0
  163. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/cyclient/scan_config_base.py +0 -0
  164. {cycode-3.4.1.dev5 → cycode-3.4.2.dev1}/cycode/logger.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cycode
3
- Version: 3.4.1.dev5
3
+ Version: 3.4.2.dev1
4
4
  Summary: Boost security in your dev lifecycle via SAST, SCA, Secrets & IaC scanning.
5
5
  Home-page: https://github.com/cycodehq/cycode-cli
6
6
  License: MIT
@@ -277,7 +277,7 @@ Perform the following steps to install the pre-commit hook:
277
277
  ```yaml
278
278
  repos:
279
279
  - repo: https://github.com/cycodehq/cycode-cli
280
- rev: v3.2.0
280
+ rev: v3.4.2
281
281
  hooks:
282
282
  - id: cycode
283
283
  stages:
@@ -289,7 +289,7 @@ Perform the following steps to install the pre-commit hook:
289
289
  ```yaml
290
290
  repos:
291
291
  - repo: https://github.com/cycodehq/cycode-cli
292
- rev: v3.2.0
292
+ rev: v3.4.2
293
293
  hooks:
294
294
  - id: cycode
295
295
  stages:
@@ -233,7 +233,7 @@ Perform the following steps to install the pre-commit hook:
233
233
  ```yaml
234
234
  repos:
235
235
  - repo: https://github.com/cycodehq/cycode-cli
236
- rev: v3.2.0
236
+ rev: v3.4.2
237
237
  hooks:
238
238
  - id: cycode
239
239
  stages:
@@ -245,7 +245,7 @@ Perform the following steps to install the pre-commit hook:
245
245
  ```yaml
246
246
  repos:
247
247
  - repo: https://github.com/cycodehq/cycode-cli
248
- rev: v3.2.0
248
+ rev: v3.4.2
249
249
  hooks:
250
250
  - id: cycode
251
251
  stages:
@@ -0,0 +1 @@
1
+ __version__ = '3.4.2.dev1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
@@ -25,6 +25,7 @@ from cycode.cli.files_collector.commit_range_documents import (
25
25
  get_diff_file_content,
26
26
  get_diff_file_path,
27
27
  get_pre_commit_modified_documents,
28
+ get_safe_head_reference_for_diff,
28
29
  parse_commit_range_sast,
29
30
  parse_commit_range_sca,
30
31
  )
@@ -271,7 +272,9 @@ def _scan_sca_pre_commit(ctx: typer.Context, repo_path: str) -> None:
271
272
 
272
273
  def _scan_secret_pre_commit(ctx: typer.Context, repo_path: str) -> None:
273
274
  progress_bar = ctx.obj['progress_bar']
274
- diff_index = git_proxy.get_repo(repo_path).index.diff(consts.GIT_HEAD_COMMIT_REV, create_patch=True, R=True)
275
+ repo = git_proxy.get_repo(repo_path)
276
+ head_reference = get_safe_head_reference_for_diff(repo)
277
+ diff_index = repo.index.diff(head_reference, create_patch=True, R=True)
275
278
 
276
279
  progress_bar.set_section_length(ScanProgressBarSection.PREPARE_LOCAL_FILES, len(diff_index))
277
280
 
@@ -279,7 +282,11 @@ def _scan_secret_pre_commit(ctx: typer.Context, repo_path: str) -> None:
279
282
  for diff in diff_index:
280
283
  progress_bar.update(ScanProgressBarSection.PREPARE_LOCAL_FILES)
281
284
  documents_to_scan.append(
282
- Document(get_path_by_os(get_diff_file_path(diff)), get_diff_file_content(diff), is_git_diff_format=True)
285
+ Document(
286
+ get_path_by_os(get_diff_file_path(diff, repo=repo)),
287
+ get_diff_file_content(diff),
288
+ is_git_diff_format=True,
289
+ )
283
290
  )
284
291
  documents_to_scan = excluder.exclude_irrelevant_documents_to_scan(consts.SECRET_SCAN_TYPE, documents_to_scan)
285
292
 
@@ -261,6 +261,7 @@ SCAN_STATUS_ERROR = 'Error'
261
261
  # git consts
262
262
  COMMIT_DIFF_DELETED_FILE_CHANGE_TYPE = 'D'
263
263
  GIT_HEAD_COMMIT_REV = 'HEAD'
264
+ GIT_EMPTY_TREE_OBJECT = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
264
265
  EMPTY_COMMIT_SHA = '0000000000000000000000000000000000000000'
265
266
  GIT_PUSH_OPTION_COUNT_ENV_VAR_NAME = 'GIT_PUSH_OPTION_COUNT'
266
267
  GIT_PUSH_OPTION_ENV_VAR_PREFIX = 'GIT_PUSH_OPTION_'
@@ -22,6 +22,31 @@ if TYPE_CHECKING:
22
22
  logger = get_logger('Commit Range Collector')
23
23
 
24
24
 
25
+ def get_safe_head_reference_for_diff(repo: 'Repo') -> str:
26
+ """Get a safe reference to use for diffing against the current HEAD.
27
+ In repositories with no commits, HEAD doesn't exist, so we return the empty tree hash.
28
+
29
+ Args:
30
+ repo: Git repository object
31
+
32
+ Returns:
33
+ Either "HEAD" string if commits exist, or empty tree hash if no commits exist
34
+ """
35
+ try:
36
+ repo.rev_parse(consts.GIT_HEAD_COMMIT_REV)
37
+ return consts.GIT_HEAD_COMMIT_REV
38
+ except Exception as e: # actually gitdb.exc.BadObject; no import because of lazy loading
39
+ logger.debug(
40
+ 'Repository has no commits, using empty tree hash for diffs, %s',
41
+ {'repo_path': repo.working_tree_dir},
42
+ exc_info=e,
43
+ )
44
+
45
+ # Repository has no commits, use the universal empty tree hash
46
+ # This is the standard Git approach for initial commits
47
+ return consts.GIT_EMPTY_TREE_OBJECT
48
+
49
+
25
50
  def _does_reach_to_max_commits_to_scan_limit(commit_ids: list[str], max_commits_count: Optional[int]) -> bool:
26
51
  if max_commits_count is None:
27
52
  return False
@@ -62,7 +87,7 @@ def collect_commit_range_diff_documents(
62
87
  for diff in diff_index:
63
88
  commit_documents_to_scan.append(
64
89
  Document(
65
- path=get_path_by_os(get_diff_file_path(diff)),
90
+ path=get_path_by_os(get_diff_file_path(diff, repo=repo)),
66
91
  content=get_diff_file_content(diff),
67
92
  is_git_diff_format=True,
68
93
  unique_id=commit_id,
@@ -141,7 +166,7 @@ def get_commit_range_modified_documents(
141
166
  for diff in modified_files_diff:
142
167
  progress_bar.update(progress_bar_section)
143
168
 
144
- file_path = get_path_by_os(get_diff_file_path(diff))
169
+ file_path = get_path_by_os(get_diff_file_path(diff, repo=repo))
145
170
 
146
171
  diff_documents.append(
147
172
  Document(
@@ -186,16 +211,24 @@ def parse_pre_receive_input() -> str:
186
211
  return pre_receive_input.splitlines()[0]
187
212
 
188
213
 
189
- def get_diff_file_path(diff: 'Diff', relative: bool = False) -> Optional[str]:
214
+ def get_diff_file_path(diff: 'Diff', relative: bool = False, repo: Optional['Repo'] = None) -> Optional[str]:
190
215
  if relative:
191
216
  # relative to the repository root
192
217
  return diff.b_path if diff.b_path else diff.a_path
193
218
 
219
+ # Try blob-based paths first (most reliable when available)
194
220
  if diff.b_blob:
195
221
  return diff.b_blob.abspath
196
222
  if diff.a_blob:
197
223
  return diff.a_blob.abspath
198
224
 
225
+ # Fallback: construct an absolute path from a relative path
226
+ # This handles renames and other cases where blobs might be None
227
+ if repo and repo.working_tree_dir:
228
+ target_path = diff.b_path if diff.b_path else diff.a_path
229
+ if target_path:
230
+ return os.path.abspath(os.path.join(repo.working_tree_dir, target_path))
231
+
199
232
  return None
200
233
 
201
234
 
@@ -213,12 +246,13 @@ def get_pre_commit_modified_documents(
213
246
  diff_documents = []
214
247
 
215
248
  repo = git_proxy.get_repo(repo_path)
216
- diff_index = repo.index.diff(consts.GIT_HEAD_COMMIT_REV, create_patch=True, R=True)
249
+ head_reference = get_safe_head_reference_for_diff(repo)
250
+ diff_index = repo.index.diff(head_reference, create_patch=True, R=True)
217
251
  progress_bar.set_section_length(progress_bar_section, len(diff_index))
218
252
  for diff in diff_index:
219
253
  progress_bar.update(progress_bar_section)
220
254
 
221
- file_path = get_path_by_os(get_diff_file_path(diff))
255
+ file_path = get_path_by_os(get_diff_file_path(diff, repo=repo))
222
256
 
223
257
  diff_documents.append(
224
258
  Document(
@@ -228,9 +262,11 @@ def get_pre_commit_modified_documents(
228
262
  )
229
263
  )
230
264
 
231
- file_content = _get_file_content_from_commit_diff(repo, consts.GIT_HEAD_COMMIT_REV, diff)
232
- if file_content:
233
- git_head_documents.append(Document(file_path, file_content))
265
+ # Only get file content from HEAD if HEAD exists (not the empty tree hash)
266
+ if head_reference == consts.GIT_HEAD_COMMIT_REV:
267
+ file_content = _get_file_content_from_commit_diff(repo, head_reference, diff)
268
+ if file_content:
269
+ git_head_documents.append(Document(file_path, file_content))
234
270
 
235
271
  if os.path.exists(file_path):
236
272
  file_content = get_file_content(file_path)
@@ -274,13 +310,13 @@ def parse_commit_range_sast(commit_range: str, path: str) -> tuple[Optional[str]
274
310
  else:
275
311
  # Git commands like 'git diff <commit>' compare against HEAD.
276
312
  from_spec = commit_range
277
- to_spec = 'HEAD'
313
+ to_spec = consts.GIT_HEAD_COMMIT_REV
278
314
 
279
315
  # If a spec is empty (e.g., from '..master'), default it to 'HEAD'
280
316
  if not from_spec:
281
- from_spec = 'HEAD'
317
+ from_spec = consts.GIT_HEAD_COMMIT_REV
282
318
  if not to_spec:
283
- to_spec = 'HEAD'
319
+ to_spec = consts.GIT_HEAD_COMMIT_REV
284
320
 
285
321
  try:
286
322
  # Use rev_parse to resolve each specifier to its full commit SHA
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "cycode"
3
- version = "3.4.1.dev5" # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
3
+ version = "3.4.2.dev1" # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
4
4
  description = "Boost security in your dev lifecycle via SAST, SCA, Secrets & IaC scanning."
5
5
  keywords=["secret-scan", "cycode", "devops", "token", "secret", "security", "cycode", "code"]
6
6
  authors = ["Cycode <support@cycode.com>"]
@@ -1 +0,0 @@
1
- __version__ = '3.4.1.dev5' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
File without changes