git 5.0.0.beta.3 → 5.0.0.beta.4

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 (268) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +27 -0
  3. data/.github/copilot-instructions.md +3 -8
  4. data/.github/hooks/bin-setup-on-worktree.json +11 -0
  5. data/.github/hooks/run-bin-setup-once.sh +14 -0
  6. data/.github/skills/breaking-change-analysis/SKILL.md +6 -9
  7. data/.github/skills/ci-cd-troubleshooting/SKILL.md +2 -2
  8. data/.github/skills/command-implementation/REFERENCE.md +34 -33
  9. data/.github/skills/command-implementation/SKILL.md +5 -4
  10. data/.github/skills/command-test-conventions/SKILL.md +13 -9
  11. data/.github/skills/command-yard-documentation/SKILL.md +14 -6
  12. data/.github/skills/development-workflow/SKILL.md +20 -14
  13. data/.github/skills/facade-implementation/REFERENCE.md +19 -22
  14. data/.github/skills/facade-implementation/SKILL.md +0 -5
  15. data/.github/skills/facade-test-conventions/SKILL.md +4 -7
  16. data/.github/skills/facade-yard-documentation/SKILL.md +8 -2
  17. data/.github/skills/make-skill-template/SKILL.md +53 -3
  18. data/.github/skills/pr-readiness-review/SKILL.md +22 -2
  19. data/.github/skills/project-context/SKILL.md +16 -23
  20. data/.github/skills/pull-request-review/SKILL.md +2 -2
  21. data/.github/skills/rebase/SKILL.md +148 -0
  22. data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +1 -1
  23. data/.github/skills/resolve-feedback/SKILL.md +288 -0
  24. data/.github/skills/review-arguments-dsl/CHECKLIST.md +3 -3
  25. data/.github/skills/reviewing-skills/SKILL.md +28 -3
  26. data/.github/skills/test-debugging/SKILL.md +20 -19
  27. data/.github/skills/yard-documentation/SKILL.md +671 -483
  28. data/.github/skills/yard-documentation/element-rules.md +162 -0
  29. data/.github/skills-deprecated/README.md +21 -0
  30. data/.github/{skills → skills-deprecated}/extract-command-from-lib/SKILL.md +9 -9
  31. data/.github/{skills → skills-deprecated}/extract-facade-from-base-lib/SKILL.md +12 -12
  32. data/.github/workflows/continuous_integration.yml +3 -2
  33. data/.rubocop.yml +7 -39
  34. data/.yard-lint.yml +75 -0
  35. data/CONTRIBUTING.md +186 -174
  36. data/Gemfile +17 -0
  37. data/README.md +47 -12
  38. data/Rakefile +3 -21
  39. data/UPGRADING.md +219 -70
  40. data/docker/test/Dockerfile +32 -0
  41. data/docker/test/docker-compose.yml +0 -0
  42. data/git.gemspec +3 -4
  43. data/lib/git/author.rb +20 -1
  44. data/lib/git/branch.rb +26 -6
  45. data/lib/git/branch_delete_failure.rb +3 -0
  46. data/lib/git/branch_delete_result.rb +6 -3
  47. data/lib/git/branch_info.rb +6 -6
  48. data/lib/git/command_line/base.rb +6 -13
  49. data/lib/git/command_line/capturing.rb +67 -10
  50. data/lib/git/command_line/result.rb +0 -8
  51. data/lib/git/command_line/streaming.rb +45 -5
  52. data/lib/git/command_line.rb +4 -3
  53. data/lib/git/commands/add.rb +61 -53
  54. data/lib/git/commands/am/abort.rb +2 -2
  55. data/lib/git/commands/am/apply.rb +109 -98
  56. data/lib/git/commands/am/continue.rb +2 -2
  57. data/lib/git/commands/am/quit.rb +2 -2
  58. data/lib/git/commands/am/retry.rb +4 -2
  59. data/lib/git/commands/am/show_current_patch.rb +1 -1
  60. data/lib/git/commands/am/skip.rb +2 -2
  61. data/lib/git/commands/am.rb +2 -2
  62. data/lib/git/commands/apply.rb +7 -2
  63. data/lib/git/commands/archive/list_formats.rb +3 -3
  64. data/lib/git/commands/archive.rb +7 -2
  65. data/lib/git/commands/arguments.rb +1370 -359
  66. data/lib/git/commands/base.rb +111 -13
  67. data/lib/git/commands/branch/copy.rb +29 -21
  68. data/lib/git/commands/branch/create.rb +72 -68
  69. data/lib/git/commands/branch/delete.rb +25 -17
  70. data/lib/git/commands/branch/list.rb +76 -60
  71. data/lib/git/commands/branch/move.rb +29 -21
  72. data/lib/git/commands/branch/set_upstream.rb +8 -8
  73. data/lib/git/commands/branch/show_current.rb +3 -3
  74. data/lib/git/commands/branch/unset_upstream.rb +4 -8
  75. data/lib/git/commands/branch.rb +2 -2
  76. data/lib/git/commands/cat_file/batch.rb +36 -20
  77. data/lib/git/commands/cat_file/filtered.rb +12 -12
  78. data/lib/git/commands/cat_file/raw.rb +13 -13
  79. data/lib/git/commands/cat_file.rb +4 -4
  80. data/lib/git/commands/checkout/branch.rb +7 -5
  81. data/lib/git/commands/checkout/files.rb +5 -4
  82. data/lib/git/commands/checkout.rb +4 -4
  83. data/lib/git/commands/checkout_index.rb +5 -4
  84. data/lib/git/commands/clean.rb +6 -4
  85. data/lib/git/commands/clone.rb +5 -4
  86. data/lib/git/commands/commit.rb +5 -4
  87. data/lib/git/commands/commit_tree.rb +5 -4
  88. data/lib/git/commands/config_option_syntax/add.rb +7 -4
  89. data/lib/git/commands/config_option_syntax/get.rb +9 -5
  90. data/lib/git/commands/config_option_syntax/get_all.rb +7 -4
  91. data/lib/git/commands/config_option_syntax/get_color.rb +8 -4
  92. data/lib/git/commands/config_option_syntax/get_color_bool.rb +7 -4
  93. data/lib/git/commands/config_option_syntax/get_regexp.rb +8 -4
  94. data/lib/git/commands/config_option_syntax/get_urlmatch.rb +8 -4
  95. data/lib/git/commands/config_option_syntax/list.rb +8 -4
  96. data/lib/git/commands/config_option_syntax/remove_section.rb +7 -2
  97. data/lib/git/commands/config_option_syntax/rename_section.rb +7 -2
  98. data/lib/git/commands/config_option_syntax/replace_all.rb +7 -2
  99. data/lib/git/commands/config_option_syntax/set.rb +7 -2
  100. data/lib/git/commands/config_option_syntax/unset.rb +7 -4
  101. data/lib/git/commands/config_option_syntax/unset_all.rb +7 -2
  102. data/lib/git/commands/describe.rb +5 -4
  103. data/lib/git/commands/diff.rb +13 -12
  104. data/lib/git/commands/diff_files.rb +7 -6
  105. data/lib/git/commands/diff_index.rb +10 -7
  106. data/lib/git/commands/fetch.rb +6 -4
  107. data/lib/git/commands/fsck.rb +6 -4
  108. data/lib/git/commands/gc.rb +6 -4
  109. data/lib/git/commands/grep.rb +6 -5
  110. data/lib/git/commands/init.rb +6 -4
  111. data/lib/git/commands/log.rb +287 -285
  112. data/lib/git/commands/ls_files.rb +69 -65
  113. data/lib/git/commands/ls_remote.rb +62 -56
  114. data/lib/git/commands/ls_tree.rb +50 -46
  115. data/lib/git/commands/maintenance/register.rb +25 -23
  116. data/lib/git/commands/maintenance/run.rb +7 -2
  117. data/lib/git/commands/maintenance/start.rb +7 -2
  118. data/lib/git/commands/maintenance/stop.rb +7 -2
  119. data/lib/git/commands/maintenance/unregister.rb +7 -2
  120. data/lib/git/commands/merge/abort.rb +2 -2
  121. data/lib/git/commands/merge/continue.rb +2 -2
  122. data/lib/git/commands/merge/quit.rb +2 -2
  123. data/lib/git/commands/merge/start.rb +7 -2
  124. data/lib/git/commands/merge.rb +2 -2
  125. data/lib/git/commands/merge_base.rb +7 -2
  126. data/lib/git/commands/mv.rb +7 -2
  127. data/lib/git/commands/name_rev.rb +7 -2
  128. data/lib/git/commands/pull.rb +7 -2
  129. data/lib/git/commands/push.rb +7 -2
  130. data/lib/git/commands/read_tree.rb +7 -2
  131. data/lib/git/commands/remote/add.rb +7 -2
  132. data/lib/git/commands/remote/get_url.rb +4 -2
  133. data/lib/git/commands/remote/list.rb +4 -2
  134. data/lib/git/commands/remote/prune.rb +4 -2
  135. data/lib/git/commands/remote/remove.rb +4 -2
  136. data/lib/git/commands/remote/rename.rb +4 -2
  137. data/lib/git/commands/remote/set_branches.rb +9 -2
  138. data/lib/git/commands/remote/set_head.rb +12 -5
  139. data/lib/git/commands/remote/set_url.rb +9 -2
  140. data/lib/git/commands/remote/set_url_add.rb +11 -2
  141. data/lib/git/commands/remote/set_url_delete.rb +9 -2
  142. data/lib/git/commands/remote/show.rb +18 -12
  143. data/lib/git/commands/remote/update.rb +19 -12
  144. data/lib/git/commands/remote.rb +2 -2
  145. data/lib/git/commands/repack.rb +67 -63
  146. data/lib/git/commands/reset.rb +51 -44
  147. data/lib/git/commands/rev_parse.rb +135 -128
  148. data/lib/git/commands/revert/abort.rb +2 -2
  149. data/lib/git/commands/revert/continue.rb +7 -2
  150. data/lib/git/commands/revert/quit.rb +2 -2
  151. data/lib/git/commands/revert/skip.rb +2 -2
  152. data/lib/git/commands/revert/start.rb +7 -2
  153. data/lib/git/commands/revert.rb +2 -2
  154. data/lib/git/commands/rm.rb +35 -36
  155. data/lib/git/commands/show.rb +1 -1
  156. data/lib/git/commands/show_ref/exclude_existing.rb +3 -4
  157. data/lib/git/commands/show_ref/exists.rb +15 -13
  158. data/lib/git/commands/show_ref/list.rb +39 -35
  159. data/lib/git/commands/show_ref/verify.rb +29 -27
  160. data/lib/git/commands/show_ref.rb +4 -4
  161. data/lib/git/commands/stash/apply.rb +31 -25
  162. data/lib/git/commands/stash/branch.rb +10 -8
  163. data/lib/git/commands/stash/clear.rb +7 -5
  164. data/lib/git/commands/stash/create.rb +10 -8
  165. data/lib/git/commands/stash/drop.rb +15 -9
  166. data/lib/git/commands/stash/list.rb +9 -5
  167. data/lib/git/commands/stash/pop.rb +21 -12
  168. data/lib/git/commands/stash/push.rb +20 -11
  169. data/lib/git/commands/stash/show.rb +21 -12
  170. data/lib/git/commands/stash/store.rb +19 -10
  171. data/lib/git/commands/stash.rb +2 -2
  172. data/lib/git/commands/status.rb +7 -2
  173. data/lib/git/commands/symbolic_ref/delete.rb +18 -14
  174. data/lib/git/commands/symbolic_ref/read.rb +24 -20
  175. data/lib/git/commands/symbolic_ref/update.rb +20 -17
  176. data/lib/git/commands/symbolic_ref.rb +4 -4
  177. data/lib/git/commands/tag/create.rb +45 -42
  178. data/lib/git/commands/tag/delete.rb +5 -3
  179. data/lib/git/commands/tag/list.rb +47 -44
  180. data/lib/git/commands/tag/verify.rb +12 -12
  181. data/lib/git/commands/tag.rb +2 -2
  182. data/lib/git/commands/update_ref/batch.rb +6 -1
  183. data/lib/git/commands/update_ref/delete.rb +19 -21
  184. data/lib/git/commands/update_ref/update.rb +22 -25
  185. data/lib/git/commands/update_ref.rb +4 -4
  186. data/lib/git/commands/version.rb +14 -11
  187. data/lib/git/commands/worktree/add.rb +50 -51
  188. data/lib/git/commands/worktree/list.rb +17 -17
  189. data/lib/git/commands/worktree/lock.rb +12 -12
  190. data/lib/git/commands/worktree/move.rb +16 -16
  191. data/lib/git/commands/worktree/prune.rb +2 -2
  192. data/lib/git/commands/worktree/remove.rb +2 -2
  193. data/lib/git/commands/worktree/repair.rb +2 -2
  194. data/lib/git/commands/worktree/unlock.rb +2 -2
  195. data/lib/git/commands/write_tree.rb +2 -2
  196. data/lib/git/commands.rb +4 -3
  197. data/lib/git/config.rb +47 -1
  198. data/lib/git/configuring.rb +89 -15
  199. data/lib/git/detached_head_info.rb +4 -1
  200. data/lib/git/diff.rb +2 -5
  201. data/lib/git/diff_file_numstat_info.rb +3 -1
  202. data/lib/git/diff_file_patch_info.rb +3 -1
  203. data/lib/git/diff_file_raw_info.rb +3 -1
  204. data/lib/git/diff_info.rb +8 -15
  205. data/lib/git/diff_path_status.rb +16 -3
  206. data/lib/git/diff_result.rb +3 -1
  207. data/lib/git/diff_stats.rb +15 -0
  208. data/lib/git/dirstat_info.rb +24 -8
  209. data/lib/git/encoding_utils.rb +32 -1
  210. data/lib/git/errors.rb +19 -9
  211. data/lib/git/escaped_path.rb +55 -3
  212. data/lib/git/execution_context/repository.rb +15 -0
  213. data/lib/git/execution_context.rb +76 -74
  214. data/lib/git/file_ref.rb +6 -3
  215. data/lib/git/fsck_object.rb +8 -0
  216. data/lib/git/fsck_result.rb +26 -15
  217. data/lib/git/log.rb +152 -5
  218. data/lib/git/object.rb +284 -8
  219. data/lib/git/parsers/branch.rb +18 -0
  220. data/lib/git/parsers/cat_file.rb +2 -2
  221. data/lib/git/parsers/diff.rb +213 -5
  222. data/lib/git/parsers/fsck.rb +11 -0
  223. data/lib/git/parsers/ls_remote.rb +1 -1
  224. data/lib/git/parsers/stash.rb +51 -0
  225. data/lib/git/parsers/tag.rb +38 -0
  226. data/lib/git/remote.rb +34 -2
  227. data/lib/git/repository/branching.rb +23 -21
  228. data/lib/git/repository/committing.rb +46 -6
  229. data/lib/git/repository/context_helpers.rb +45 -16
  230. data/lib/git/repository/diffing.rb +32 -23
  231. data/lib/git/repository/factories.rb +153 -28
  232. data/lib/git/repository/inspecting.rb +1 -1
  233. data/lib/git/repository/logging.rb +169 -30
  234. data/lib/git/repository/maintenance.rb +1 -1
  235. data/lib/git/repository/merging.rb +3 -3
  236. data/lib/git/repository/object_operations.rb +108 -14
  237. data/lib/git/repository/remote_operations.rb +150 -171
  238. data/lib/git/repository/shared_private.rb +7 -5
  239. data/lib/git/repository/staging.rb +36 -12
  240. data/lib/git/repository/stashing.rb +16 -16
  241. data/lib/git/repository/status_operations.rb +1 -1
  242. data/lib/git/repository/worktree_operations.rb +1 -1
  243. data/lib/git/repository.rb +123 -63
  244. data/lib/git/stash.rb +16 -21
  245. data/lib/git/stash_info.rb +4 -4
  246. data/lib/git/stashes.rb +20 -26
  247. data/lib/git/status.rb +21 -7
  248. data/lib/git/tag_delete_failure.rb +3 -0
  249. data/lib/git/tag_delete_result.rb +6 -3
  250. data/lib/git/tag_info.rb +1 -0
  251. data/lib/git/url.rb +12 -5
  252. data/lib/git/version.rb +6 -4
  253. data/lib/git/version_constraint.rb +4 -0
  254. data/lib/git.rb +398 -314
  255. data/redesign/3_architecture_implementation.md +59 -29
  256. data/redesign/Phase 4 - Step B.md +921 -0
  257. data/redesign/Phase 4 - Step C.md +833 -0
  258. data/redesign/c1a-public-api-scope.tsv +256 -0
  259. data/redesign/phase-4-step-b-test-audit.tsv +485 -0
  260. data/tasks/yard.rake +24 -17
  261. metadata +24 -57
  262. data/commitlint.test +0 -4
  263. data/lib/git/args_builder.rb +0 -103
  264. data/lib/git/command_line_result.rb +0 -8
  265. data/lib/git/deprecation.rb +0 -9
  266. data/tasks/test.rake +0 -25
  267. /data/.github/{skills → skills-deprecated}/extract-facade-from-base-lib/KEYWORD_ARG_REMEDIATION.md +0 -0
  268. /data/.github/{skills → skills-deprecated}/review-backward-compatibility/SKILL.md +0 -0
@@ -0,0 +1,485 @@
1
+ file|line|style|test_name|initial_verdict|final_verdict|target_layer|spec_coverage|verify_notes|behavior|disposition|target_spec|port_status
2
+ test_archive.rb|23|def|test_archive|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/object_operations_spec.rb|Covered by spec/integration/git/repository/object_operations_spec.rb explicit archive file and repository unit wiring.|repository archive writes explicit output file|covered||
3
+ test_archive.rb|29|def|test_archive_object|REDUNDANT|REDUNDANT|none|spec/unit/git/object_spec.rb|Covered by spec/unit/git/object_spec.rb Object#archive delegation with explicit output file.|object archive delegates explicit output file to repository|covered||
4
+ test_archive.rb|35|def|test_archive_object_with_no_filename|PORT|PORT|unit|none|Object#archive no-argument default nil delegation is not directly unit-covered; repository temp-file behavior is covered separately.|object archive without filename returns written temp file|port|spec/unit/git/object_spec.rb|ported
5
+ test_archive.rb|41|def|test_archive_to_tar|PORT|REDUNDANT|none|none|Pass-through behavior: the gem forwards archive flags and returns git's archive bytes unparsed, so asserting tar member content tests git, not the gem; flag forwarding is unit-covered. Usage preserved as a YARD example via target_spec.|tar archive contains expected fixture paths|document|yard:Git::Object#archive|merged
6
+ test_archive.rb|56|def|test_archive_to_zip|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/object_operations_spec.rb|Covered by spec/integration/git/repository/object_operations_spec.rb zip explicit output file.|zip archive writes explicit output file|covered||
7
+ test_archive.rb|62|def|test_archive_to_tgz|PORT|REDUNDANT|none|none|Pass-through behavior: prefix forwarding is unit-covered and tgz byte capture integration-covered; asserting prefixed entries in real tgz bytes tests git, not the gem. Usage preserved as a YARD example via target_spec.|tgz archive with prefix contains prefixed paths|document|yard:Git::Object#archive|merged
8
+ test_archive.rb|80|def|test_archive_with_prefix_and_path|PORT|REDUNDANT|none|none|Pass-through behavior: prefix/path forwarding is unit-covered; asserting filtered prefixed members in real tar bytes tests git, not the gem. Usage preserved as a YARD example via target_spec.|archive with prefix and path contains filtered prefixed path|document|yard:Git::Object#archive|merged
9
+ test_archive.rb|93|def|test_archive_branch|PORT|REDUNDANT|none|none|Pass-through behavior: the gem forwards branch archive flags and returns git's bytes unparsed; remote/branch wiring is covered separately, so content assertions test git, not the gem. Usage preserved as a YARD example via target_spec.|remote branch archive writes tgz file|document|yard:Git::Branch#archive|merged
10
+ test_bare.rb|10|def|test_commit|PORT|PORT|integration|none|Bare-repo object lookup wiring is not covered by RSpec integration; object metadata parsing itself is unit-covered in spec/unit/git/object_spec.rb.|bare repository object lookup exposes commit metadata and ancestry|port|spec/integration/git/repository/object_operations_spec.rb|ported
11
+ test_branch.rb|17|macro|Git::Repository#branch with no args should return current branch|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/branching_spec.rb|Integration branching #branch defaults to current branch; unit covers current_branch name handling.|branch with no args returns current branch|covered||
12
+ test_branch.rb|29|macro|Git::Repository#branches|REDUNDANT|REDUNDANT|none|spec/unit/git/branches_spec.rb;spec/integration/git/repository/branching_spec.rb|Branches and branch parser unit specs cover local/remote metadata; branching integration covers remote-tracking branches.|branches include local and remote tracking refs after clone|covered||
13
+ test_branch.rb|53|macro|Git::Repository#branches when checked out branch is a remote branch|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/branch_spec.rb|Branch parser unit/integration specs skip detached HEAD entries, covering detached remote checkout output handling.|branches does not raise when HEAD is detached at remote branch|covered||
14
+ test_branch.rb|75|macro|Git::Repository::Branching#current_branch_state -- empty repository|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb;spec/integration/git/repository/branching_spec.rb|Unit covers :unborn HeadState and integration covers real empty repository unborn state.|current_branch_state returns unborn initial branch in empty repo|covered||
15
+ test_branch.rb|84|macro|Git::Repository::Branching#current_branch_state -- new orphan branch|PORT|REDUNDANT|none|none|Orphan checkout is the same :unborn HeadState path already unit-covered and real-git unborn wiring is covered.|current_branch_state returns unborn orphan branch after checkout orphan|covered||
16
+ test_branch.rb|97|macro|Git::Repository::Branching#current_branch_state -- active branch|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb;spec/integration/git/repository/branching_spec.rb|Unit and integration specs cover active current_branch_state.|current_branch_state returns active branch name|covered||
17
+ test_branch.rb|109|macro|Git::Repository::Branching#current_branch_state -- detached HEAD|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb;spec/integration/git/repository/branching_spec.rb|Unit and integration specs cover detached HeadState with name HEAD.|current_branch_state returns detached HEAD|covered||
18
+ test_branch.rb|127|macro|Git::Repository::Branching#current_branch -- active branch|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/branching_spec.rb|current_branch active branch is covered by unit non-empty stdout and integration default branch.|current_branch returns active branch name|covered||
19
+ test_branch.rb|138|macro|Git::Repository::Branching#current_branch -- unborn branch|PORT|PORT|integration|none|current_branch on an unborn real repository is not asserted; needs thin real-git integration.|current_branch returns unborn branch name in empty repo|port|spec/integration/git/repository/branching_spec.rb|ported
20
+ test_branch.rb|146|macro|Git::Repository::Branching#current_branch -- detached HEAD|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/branching_spec.rb|current_branch detached state is covered by unit empty stdout and integration detached HEAD.|current_branch returns HEAD in detached state|covered||
21
+ test_branch.rb|163|macro|Git::Repository#branch with detached head|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb;spec/integration/git/repository/branching_spec.rb|Branch factory defaulting to current_branch and detached current_branch are already covered.|branch factory returns HEAD branch in detached state|covered||
22
+ test_branch.rb|183|macro|Git::Repository#branches with detached head|REDUNDANT|REDUNDANT|none|spec/integration/git/parsers/branch_spec.rb;spec/integration/git/repository/branching_spec.rb|Parser unit/integration filters detached HEAD and branching integration covers branches_all in detached state.|branches filters detached HEAD and returns real branches|covered||
23
+ test_branch.rb|203|def|test_branches_local|REDUNDANT|REDUNDANT|none|spec/unit/git/branches_spec.rb;spec/integration/git/branches_spec.rb|Branches#local unit spec covers filtering local branches.|branches.local returns local branches|covered||
24
+ test_branch.rb|208|def|test_branches_remote|REDUNDANT|REDUNDANT|none|spec/unit/git/branches_spec.rb;spec/unit/git/parsers/branch_spec.rb|Branches#remote and parser unit specs cover remote-tracking branch filtering.|branches.remote returns remote tracking branches|covered||
25
+ test_branch.rb|213|def|test_branches_single|REDUNDANT|REDUNDANT|none|spec/unit/git/branches_spec.rb;spec/unit/git/branch_spec.rb;spec/unit/git/remote_spec.rb|Branch and Branches unit specs cover lookup, remote metadata, and origin/main aliasing.|branch lookup returns local and remote branch metadata|covered||
26
+ test_branch.rb|228|def|test_true_branch_contains?|REDUNDANT|REDUNDANT|none|spec/unit/git/branch_spec.rb;spec/integration/git/repository/branching_spec.rb|Branch#contains? true path is unit-covered; branch_contains facade has unit and integration coverage.|Branch#contains? true when branch contains commit|covered||
27
+ test_branch.rb|232|def|test_false_branch_contains?|REDUNDANT|REDUNDANT|none|spec/unit/git/branch_spec.rb;spec/integration/git/repository/branching_spec.rb|Branch#contains? false path is unit-covered; branch_contains empty output is covered.|Branch#contains? false when branch lacks commit|covered||
28
+ test_branch.rb|236|def|test_branch_commit|REDUNDANT|REDUNDANT|none|spec/unit/git/branch_spec.rb;spec/unit/git/repository/object_operations_spec.rb|Branch#gcommit delegation is unit-covered; object operations cover commit objects separately.|Branch#gcommit returns commit object for branch|covered||
29
+ test_branch.rb|240|def|test_branch_create_and_switch|PORT|PORT|integration|none|Heavy workflow should be thinned, but Branch object create/checkout/delete-current/error wiring lacks direct integration.|branch create checkout delete current delete error and checkout branch object workflow|port|spec/integration/git/branch_spec.rb|ported
30
+ test_branch.rb|283|def|test_branch_update_ref|REDUNDANT|REDUNDANT|none|spec/unit/git/branch_spec.rb;spec/integration/git/repository/branching_spec.rb|Branch#update_ref unit covers full refs/heads routing and branching integration verifies update_ref effect.|Branch#update_ref updates full refs heads branch|covered||
31
+ test_checkout.rb|6|macro|checkout with no args|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout/branch_spec.rb;spec/unit/git/repository/branching_spec.rb|Checkout command and facade unit specs cover no-arg checkout delegation.|checkout with no args runs git checkout|covered||
32
+ test_checkout.rb|11|macro|checkout with no args and options|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout/branch_spec.rb;spec/unit/git/repository/branching_spec.rb|Checkout command and facade unit specs cover force option with nil branch.|checkout forwards force option with no branch|covered||
33
+ test_checkout.rb|16|macro|checkout with branch|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout/branch_spec.rb;spec/unit/git/repository/branching_spec.rb|Checkout command and facade unit specs cover branch-name checkout.|checkout branch name runs git checkout branch|covered||
34
+ test_checkout.rb|21|macro|checkout with branch and options|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout/branch_spec.rb;spec/unit/git/repository/branching_spec.rb|Checkout command and facade unit specs cover branch plus force option.|checkout branch forwards force option|covered||
35
+ test_checkout.rb|26|macro|checkout with branch name and new_branch: true|PORT|PORT|unit|none|Facade translation for new_branch: true without start_point is not covered; option mapping is unit logic.|checkout new_branch true without start_point maps to -b branch|port|spec/unit/git/repository/branching_spec.rb|ported
36
+ test_checkout.rb|31|macro|checkout with force: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout/branch_spec.rb;spec/unit/git/repository/branching_spec.rb|Duplicate of branch plus force option already covered in command and facade unit specs.|checkout force true emits force flag|covered||
37
+ test_checkout.rb|36|macro|"checkout with branch name and new_branch: true and start_point: ""sha"""|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb;spec/integration/git/repository/branching_spec.rb|Facade unit and integration specs cover new branch from start_point mapping.|checkout new branch from start_point maps to -b branch start_point|covered||
38
+ test_checkout.rb|43|macro|when checkout succeeds an error should not be raised|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/checkout/branch_spec.rb;spec/integration/git/repository/branching_spec.rb|Checkout command/repository integration already verifies successful real-git checkout wiring.|successful checkout does not raise|covered||
39
+ test_checkout.rb|53|macro|when checkout fails a Git::FailedError should be raised|PORT|PORT|integration|none|Checkout failure on unborn repository is real-git stateful behavior not covered by current integration.|checkout current branch in repository with no commits raises Git::FailedError|port|spec/integration/git/repository/branching_spec.rb|ported
40
+ test_checkout.rb|61|macro|checking out to a branch whose name contains slashes|REDUNDANT|REDUNDANT|none|spec/unit/git/branch_spec.rb;spec/integration/git/repository/branching_spec.rb|Branch initialization preserves slash names and checkout facade integration covers switching branches.|Branch#checkout handles branch names containing slashes|covered||
41
+ test_checkout_index.rb|6|macro|checkout_index with no args|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|CheckoutIndex command and facade unit specs cover no-arg invocation.|checkout_index with no args runs checkout-index|covered||
42
+ test_checkout_index.rb|11|macro|checkout_index with :all option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|CheckoutIndex command and facade unit specs cover all: true.|checkout_index all option emits --all|covered||
43
+ test_checkout_index.rb|16|macro|checkout_index with :force option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|CheckoutIndex command and facade unit specs cover force: true.|checkout_index force option emits --force|covered||
44
+ test_checkout_index.rb|21|macro|checkout_index with :prefix option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|CheckoutIndex command and facade unit specs cover prefix option.|checkout_index prefix option emits --prefix|covered||
45
+ test_checkout_index.rb|26|macro|checkout_index with all options combined|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|CheckoutIndex command unit spec covers combined all, force, and prefix ordering.|checkout_index combines all force prefix options|covered||
46
+ test_checkout_index.rb|33|macro|checkout_index with :path_limiter as a string|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|Facade unit converts string path_limiter to operand and command unit emits -- separator.|checkout_index string path_limiter becomes path operand|covered||
47
+ test_checkout_index.rb|38|macro|checkout_index with :path_limiter as an array|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|Facade unit converts array path_limiter to multiple operands and command unit emits them.|checkout_index array path_limiter becomes multiple operands|covered||
48
+ test_checkout_index.rb|45|macro|checkout_index with :path_limiter and :force|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/checkout_index_spec.rb;spec/unit/git/repository/branching_spec.rb|Facade and command unit specs cover force combined with a path operand.|checkout_index combines force and path_limiter|covered||
49
+ test_command_line.rb|7|macro|initialize|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/base_spec.rb;spec/unit/git/command_line/capturing_spec.rb|Covered by spec/unit/git/command_line/base_spec.rb and capturing_spec.rb #initialize storing env, binary_path, global_opts, logger.|Capturing stores constructor env binary global opts and logger|covered||
50
+ test_command_line.rb|60|macro|it should raise an ArgumentError if the timeout is not an Integer, Float, or nil|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U1: already covered by capturing_spec.rb 'when ProcessExecuter raises ArgumentError' (translation path); legacy test exercised real ProcessExecuter validation. Invalid timeout type is an ArgumentError path; current unit specs cover timeout forwarding and generic ProcessExecuter::ArgumentError translation but not timeout-specific message. Stub ProcessExecuter, no real subprocess.|invalid timeout type raises ArgumentError|covered|spec/unit/git/command_line/capturing_spec.rb|
51
+ test_command_line.rb|69|macro|it should raise a Git::TimeoutError if the command takes too long|PORT|PORT|integration|none|Unit specs cover timed_out result translation, but this legacy case verifies a real slow subprocess timeout. Port as thin integration using bin/command_line_test.|bin/command_line_test slow command raises TimeoutError|port|spec/integration/git/command_line_spec.rb|ported
52
+ test_command_line.rb|79|macro|the error raised should indicate the command timed out|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered by capturing_spec.rb timeout context asserting Git::TimeoutError carries a result whose status.timed_out? is true and timeout_duration is set.|TimeoutError result status reports timed_out|covered||
53
+ test_command_line.rb|95|macro|run_with_capture should return a result that includes the command ran, its output, and resulting status|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U1: already covered by capturing_spec.rb 'with no options' example asserting command array, stdout, stderr from a stubbed PE result. Successful run result wrapping is only partially covered; add unit coverage for built git_cmd and success status with ProcessExecuter stubbed.|bin/command_line_test result includes command stdout stderr status|covered|spec/unit/git/command_line/capturing_spec.rb|
54
+ test_command_line.rb|107|macro|run_with_capture should raise FailedError if command fails|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered by capturing_spec.rb raise_on_failure true context asserting FailedError and attached result stdout, stderr, status.success?, and exitstatus.|failed command raises FailedError with result output and status|covered||
55
+ test_command_line.rb|126|macro|run_with_capture should raise SignaledError if command exits because of an uncaught signal|PORT|PORT|integration|none|Unit specs cover signaled? translation, but this verifies real signal termination and termsig. Port as non-Windows thin integration using bin/command_line_test.|bin/command_line_test signal exit raises SignaledError with termsig|port|spec/integration/git/command_line_spec.rb|ported
56
+ test_command_line.rb|144|macro|run_with_capture should chomp output if chomp is true|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered by capturing_spec.rb with chomp: true asserting stdout and stderr are chomped.|chomp true removes trailing newline from captured output|covered||
57
+ test_command_line.rb|153|macro|run_with_capture should normalize output if normalize is true|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered by capturing_spec.rb with normalize: true converting non-UTF-8 encoded stdout and stderr to UTF-8.|normalize true converts non UTF-8 output to UTF-8|covered||
58
+ test_command_line.rb|169|macro|run_with_capture should NOT normalize output if normalize is false|PORT|PORT|unit|none|normalize: false raw-byte preservation is not covered; port as unit with stubbed ProcessExecuter returning non-UTF-8 bytes.|normalize false preserves raw non UTF-8 bytes from fixture file|port|spec/unit/git/command_line/capturing_spec.rb|ported
59
+ test_command_line.rb|186|macro|run_with_capture should redirect stderr to stdout if merge is true|PORT|PORT|integration|none|Unit specs only assert merge_output: true is forwarded. Verifying stdout and stderr are actually merged requires real ProcessExecuter/subprocess wiring with bin/command_line_test.|merge true returns stdout and stderr together from real process|port|spec/integration/git/command_line_spec.rb|ported
60
+ test_command_line.rb|198|macro|run_with_capture should log command and output if logger is given|PORT|PORT|unit|none|Command/result logging format is Git::CommandLine::Base logic and is not directly covered; port with ProcessExecuter stub and StringIO logger.|logger records command status and captured stdout stderr|port|spec/unit/git/command_line/capturing_spec.rb|ported
61
+ test_command_line.rb|212|macro|run_with_capture should be able to redirect stdout to a file|PORT|PORT|integration|none|Unit specs only assert out: is forwarded. Verifying a real stdout writer receives subprocess output is IO wiring and should be a thin integration using bin/command_line_test.|out writer file receives stdout from real process|port|spec/integration/git/command_line_spec.rb|ported
62
+ test_command_line.rb|224|macro|run_with_capture should raise a Git::ProcessIOError if there was an error raised writing stdout|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered at the unit layer by capturing_spec.rb translating ProcessExecuter::ProcessIOError to Git::ProcessIOError and preserving the IO cause.|stdout writer IOError becomes Git::ProcessIOError with cause|covered||
63
+ test_command_line.rb|242|macro|run_with_capture should be able to redirect stderr to a file|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered by capturing_spec.rb result/error examples that assert captured stderr is propagated into Git::CommandLineResult.|captured stderr is returned in result stderr|covered||
64
+ test_command_line.rb|251|macro|run_with_capture should raise a Git::ProcessIOError if there was an error raised writing stderr|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered at the unit layer by capturing_spec.rb ProcessIOError translation and cause preservation; no real writer failure needed.|stderr writer IOError becomes Git::ProcessIOError with cause|covered||
65
+ test_command_line.rb|269|macro|run_with_capture should be able to redirect stdout and stderr to the same file|PORT|PORT|integration|none|Unit specs only verify merge and out options are forwarded independently. Real merged stdout/stderr file redirection needs thin integration with bin/command_line_test.|out writer file receives merged stdout and stderr from real process|port|spec/integration/git/command_line_spec.rb|ported
66
+ test_command_line_env_overrides.rb|6|macro|it should set the GIT_SSH environment variable from Git.config.git_ssh|PORT|PORT|unit|none|GIT_SSH from Git.config into command environment is not directly asserted; port via public command_capturing/open path with CommandLine stubbed.|Git.config.git_ssh appears as GIT_SSH in command environment|port|spec/unit/git/execution_context_spec.rb|ported
67
+ test_command_line_env_overrides.rb|32|macro|env_overrides should return default environment variables|PORT|PORT|unit|none|Default env construction is only partially covered; add unit coverage for GIT_DIR, GIT_WORK_TREE, GIT_INDEX_FILE, GIT_SSH, GIT_EDITOR, and LC_ALL.|env_overrides returns default GIT_DIR worktree index LC_ALL GIT_SSH|port|spec/unit/git/execution_context_spec.rb|ported
68
+ test_command_line_env_overrides.rb|46|macro|env_overrides should allow adding additional environment variables|PORT|PORT|unit|none|Additional per-command env variables are not explicitly covered through ExecutionContext; port as unit with CommandLine/ProcessExecuter stubbed.|env_overrides adds additional environment variables|port|spec/unit/git/execution_context_spec.rb|ported
69
+ test_command_line_env_overrides.rb|63|macro|env_overrides should allow overriding existing environment variables|PORT|PORT|unit|none|Overriding existing env variables needs unit coverage for env merge semantics, especially LC_ALL/GIT_SSH.|env_overrides overrides existing environment variables|port|spec/unit/git/execution_context_spec.rb|ported
70
+ test_command_line_env_overrides.rb|79|macro|env_overrides should allow excluding environment variables by setting to nil|PORT|PORT|unit|none|Nil env values intentionally unset variables and are not explicitly covered; port as unit without real subprocess.|env_overrides can exclude variables by setting nil|port|spec/unit/git/execution_context_spec.rb|ported
71
+ test_command_line_env_overrides.rb|96|macro|env_overrides should allow both adding and excluding variables simultaneously|PORT|PORT|unit|none|Combined add, override, and nil-unset env behavior is not covered as a single unit scenario.|env_overrides can add exclude and override simultaneously|port|spec/unit/git/execution_context_spec.rb|ported
72
+ test_command_line_env_overrides.rb|120|macro|instance git_ssh option should override global config in Git.bare|PORT|PORT|unit|none|Git.bare git_ssh option reaching the repository execution context/env is not directly covered; port in Repository::Factories/ExecutionContext unit specs.|Git.bare git_ssh option overrides global config in env|port|spec/unit/git/execution_context_spec.rb|ported
73
+ test_command_line_env_overrides.rb|138|macro|instance git_ssh option should override global config in Git.open|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/repository/path_resolver_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec/path_resolver_spec (factories forward git_ssh literal/nil/default into the execution context) and execution_context_spec (#git_ssh resolution and #env_overrides GIT_SSH wiring); the factory method is invisible at the ExecutionContext layer.|Git.open git_ssh option overrides global config in env|covered||
74
+ test_command_line_env_overrides.rb|155|macro|instance git_ssh option should override global config in Git.init|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/repository/path_resolver_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec/path_resolver_spec (factories forward git_ssh literal/nil/default into the execution context) and execution_context_spec (#git_ssh resolution and #env_overrides GIT_SSH wiring); the factory method is invisible at the ExecutionContext layer.|Git.init git_ssh option overrides global config in env|covered||
75
+ test_command_line_env_overrides.rb|171|macro|instance git_ssh option should override global config in Git.clone|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/repository/path_resolver_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec/path_resolver_spec (factories forward git_ssh literal/nil/default into the execution context) and execution_context_spec (#git_ssh resolution and #env_overrides GIT_SSH wiring); the factory method is invisible at the ExecutionContext layer.|Git.clone git_ssh option overrides global config in env|covered||
76
+ test_command_line_env_overrides.rb|196|macro|instance git_ssh: nil should disable SSH (not use global config)|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/repository/path_resolver_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec/path_resolver_spec (factories forward git_ssh literal/nil/default into the execution context) and execution_context_spec (#git_ssh resolution and #env_overrides GIT_SSH wiring); the factory method is invisible at the ExecutionContext layer.|Git.open git_ssh nil disables global GIT_SSH|covered||
77
+ test_command_line_env_overrides.rb|213|macro|no instance git_ssh option should use global config|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/repository/path_resolver_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec/path_resolver_spec (factories forward git_ssh literal/nil/default into the execution context) and execution_context_spec (#git_ssh resolution and #env_overrides GIT_SSH wiring); the factory method is invisible at the ExecutionContext layer.|Git.open without git_ssh uses global GIT_SSH|covered||
78
+ test_command_line_env_overrides.rb|230|macro|instance git_ssh: nil should disable SSH in Git.clone|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/repository/path_resolver_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec/path_resolver_spec (factories forward git_ssh literal/nil/default into the execution context) and execution_context_spec (#git_ssh resolution and #env_overrides GIT_SSH wiring); the factory method is invisible at the ExecutionContext layer.|Git.clone git_ssh nil disables global GIT_SSH|covered||
79
+ test_command_line_env_overrides.rb|249|macro|Git.clone without git_ssh option should use global config|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/repository/path_resolver_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec/path_resolver_spec (factories forward git_ssh literal/nil/default into the execution context) and execution_context_spec (#git_ssh resolution and #env_overrides GIT_SSH wiring); the factory method is invisible at the ExecutionContext layer.|Git.clone without git_ssh uses global GIT_SSH|covered||
80
+ test_command_line_error.rb|6|def|test_initializer|PORT|PORT|unit|none|W2-U1 partial: ported the result-storage assertion; the parent-class is_a? assertion was dropped per rspec-unit-testing-standards Rule 24 (structural-identity anti-pattern). No dedicated unit spec for Git::CommandLineError constructor storing result and inheriting from Git::Error.|CommandLineError stores result and is a Git::Error|port|spec/unit/git/command_line_error_spec.rb|ported
81
+ test_command_line_error.rb|15|def|test_to_s|PORT|PORT|unit|none|No dedicated unit spec for CommandLineError message formatting with command, status, and stderr.|CommandLineError to_s includes command status and stderr|port|spec/unit/git/command_line_error_spec.rb|ported
82
+ test_command_line_result.rb|6|def|test_initialization|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/result_spec.rb|Covered by spec/unit/git/command_line/result_spec.rb #initialize and command_line_result_spec.rb alias compatibility.|CommandLineResult stores command status stdout and stderr|covered||
83
+ test_command_raises_on_failure.rb|11|macro|command raises Git::FailedError on non-zero exit status by default|REDUNDANT|REDUNDANT|none|spec/integration/git/command_line_spec.rb|Logic covered by capturing_spec.rb default raise_on_failure true and wiring covered by spec/integration/git/command_line_spec.rb.|command_capturing raises FailedError by default on nonzero status|covered||
84
+ test_command_raises_on_failure.rb|24|macro|command includes exit status in the error|REDUNDANT|REDUNDANT|none|spec/unit/git/command_line/capturing_spec.rb|Covered by capturing_spec.rb asserting FailedError attaches result with unsuccessful status and exitstatus.|FailedError result includes unsuccessful status|covered||
85
+ test_command_raises_on_failure.rb|39|macro|command with raise_on_failure: false does not raise on non-zero exit status|REDUNDANT|REDUNDANT|none|spec/integration/git/command_line_spec.rb|Covered by capturing_spec.rb raise_on_failure: false returning failed CommandLineResult plus command_line integration spec.|raise_on_failure false returns failed CommandLineResult|covered||
86
+ test_command_raises_on_failure.rb|53|macro|config_get raises Git::FailedError for non-existent config key|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/configuring_spec.rb|Covered by spec/integration/git/repository/configuring_spec.rb asserting missing config key raises Git::FailedError.|config get missing key raises Git::FailedError|covered||
87
+ test_commit_with_empty_message.rb|10|def|test_without_allow_empty_message_option|PORT|PORT|integration|none|Unit specs cover option building/forwarding; no integration asserts git rejects empty message without allow_empty_message.|empty commit message fails without allow_empty_message|port|spec/integration/git/repository/committing_spec.rb|ported
88
+ test_commit_with_empty_message.rb|19|def|test_with_allow_empty_message_option|PORT|PORT|integration|none|Unit specs cover --allow-empty-message forwarding; no integration asserts empty-message commit succeeds with it.|empty commit message succeeds with allow_empty_message|port|spec/integration/git/repository/committing_spec.rb|ported
89
+ test_commit_with_gpg.rb|10|def|test_with_configured_gpg_keyid|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/commit_spec.rb|Covered by spec/unit/git/commands/commit_spec.rb gpg_sign true emits --gpg-sign.|gpg_sign true emits --gpg-sign|covered||
90
+ test_commit_with_gpg.rb|16|def|test_with_specific_gpg_keyid|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/commit_spec.rb|Covered by spec/unit/git/commands/commit_spec.rb gpg_sign string emits --gpg-sign=KEYID.|gpg_sign key emits --gpg-sign key|covered||
91
+ test_commit_with_gpg.rb|23|def|test_disabling_gpg_sign|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/commit_spec.rb|Covered by spec/unit/git/commands/commit_spec.rb no_gpg_sign true emits --no-gpg-sign.|no_gpg_sign true emits --no-gpg-sign|covered||
92
+ test_commit_with_gpg.rb|29|def|test_conflicting_gpg_sign_options|PORT|PORT|unit|none|Commit-specific gpg_sign/no_gpg_sign conflict should be unit-covered; current specs cover individual flags only.|conflicting gpg_sign and no_gpg_sign raise ArgumentError|port|spec/unit/git/repository/committing_spec.rb|ported
93
+ test_config.rb|15|def|test_config|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/configuring_spec.rb|Covered by spec/integration/git/repository/configuring_spec.rb no-arg deprecated config returns a Hash with expected keys.|deprecated config with no args returns config hash|covered||
94
+ test_config.rb|21|def|test_read_config|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/configuring_spec.rb|Covered by spec/integration/git/repository/configuring_spec.rb config(name) returns a String value.|deprecated config get returns named values|covered||
95
+ test_config.rb|26|def|test_set_config|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/configuring_spec.rb|Covered by spec/integration/git/repository/configuring_spec.rb set then get persists value.|deprecated config set persists value|covered||
96
+ test_config.rb|32|def|test_set_config_with_custom_file|PORT|PORT|integration|none|Custom config file include.path behavior is not covered; requires real git config include handling.|deprecated config writes custom file and include.path is honored|port|spec/integration/git/repository/configuring_spec.rb|ported
97
+ test_config.rb|44|def|test_env_config|REDUNDANT|REDUNDANT|none|spec/unit/git/config_spec.rb|Covered by spec/unit/git/config_spec.rb environment fallback and Git.configure runtime override behavior.|Git config honors environment and configure overrides|covered||
98
+ test_deprecations.rb|19|def|test_base_is_local_branch_deprecation|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb|Covered by spec/unit/git/repository/branching_spec.rb is_local_branch? warning and delegation.|is_local_branch warns and delegates to local_branch behavior|covered||
99
+ test_deprecations.rb|28|def|test_base_is_remote_branch_deprecation|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb|Covered by spec/unit/git/repository/branching_spec.rb is_remote_branch? warning and delegation.|is_remote_branch warns and delegates to remote_branch behavior|covered||
100
+ test_deprecations.rb|38|def|test_base_is_branch_deprecation|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/branching_spec.rb|Covered by spec/unit/git/repository/branching_spec.rb is_branch? warning and local/remote behavior.|is_branch warns and checks local or remote branch|covered||
101
+ test_deprecations.rb|47|def|test_base_set_index_check_arg_deprecation|PORT|PORT|unit|none|set_index positional check deprecation warning and must_exist mapping lack unit coverage.; U12: retargeted to context_helpers_spec.rb (set_index lives in ContextHelpers); ported exact check-arg deprecation message|set_index positional check warns with exact message and sets index|port|spec/unit/git/repository/context_helpers_spec.rb|ported
102
+ test_deprecations.rb|64|def|test_base_set_working_check_arg_deprecation|PORT|PORT|unit|none|set_working positional check deprecation warning and must_exist mapping lack unit coverage.; U12: retargeted to context_helpers_spec.rb (set_working lives in ContextHelpers); ported exact check-arg deprecation message|set_working positional check warns with exact message and sets working dir|port|spec/unit/git/repository/context_helpers_spec.rb|ported
103
+ test_deprecations.rb|76|def|test_base_reset_hard_deprecation|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Covered by spec/unit/git/repository/staging_spec.rb reset_hard warning and reset(hard: true) delegation.|reset_hard warns and delegates to reset hard true|covered||
104
+ test_deprecations.rb|88|def|test_log_each_deprecation|PORT|PORT|unit|none|Git::Log#each deprecation warning and delegated enumeration are not unit-covered.|Log each warns and still enumerates commits|port|spec/unit/git/log_spec.rb|ported
105
+ test_deprecations.rb|100|def|test_log_size_deprecation|PORT|PORT|unit|none|Git::Log#size deprecation warning and result size behavior are not unit-covered.|Log size warns and returns commit count|port|spec/unit/git/log_spec.rb|ported
106
+ test_deprecations.rb|108|def|test_log_to_s_deprecation|PORT|PORT|unit|none|Git::Log#to_s deprecation warning and string behavior are not unit-covered.|Log to_s warns and includes commit sha|port|spec/unit/git/log_spec.rb|ported
107
+ test_deprecations.rb|118|def|test_log_first_deprecation|PORT|PORT|unit|none|Git::Log#first deprecation warning and first-result behavior are not unit-covered.|Log first warns and returns first commit|port|spec/unit/git/log_spec.rb|ported
108
+ test_deprecations.rb|128|def|test_log_last_deprecation|PORT|PORT|unit|none|Git::Log#last deprecation warning and last-result behavior are not unit-covered.|Log last warns and returns last commit|port|spec/unit/git/log_spec.rb|ported
109
+ test_deprecations.rb|139|def|test_log_indexer_deprecation|PORT|PORT|unit|none|Git::Log#[] deprecation warning and indexed-result behavior are not unit-covered.|Log indexer warns and returns indexed commit|port|spec/unit/git/log_spec.rb|ported
110
+ test_deprecations.rb|151|def|test_object_new_is_tag_deprecation|REDUNDANT|REDUNDANT|none|spec/unit/git/object_spec.rb|Covered by spec/unit/git/object_spec.rb deprecated is_tag construction warns and returns a Tag.|Object new is_tag warns and returns tag object|covered||
111
+ test_deprecations.rb|164|def|test_commit_set_commit_deprecation_warns_and_delegates|PORT|REDUNDANT|none|none|Covered by spec/unit/git/object_spec.rb set_commit warns and populates attributes from data via public behavior.|Commit set_commit warns exact message and delegates to from_data|covered||
112
+ test_deprecations.rb|185|def|test_clean_ff_deprecation|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Covered by spec/unit/git/repository/staging_spec.rb clean(ff: true) warns and maps to force: 2.|clean ff true warns and maps to force two|covered||
113
+ test_deprecations.rb|200|def|test_clean_ff_false_deprecation_preserves_non_force_behavior|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Covered by spec/unit/git/repository/staging_spec.rb clean(ff: false) warns and omits force.|clean ff false warns and preserves non-force behavior|covered||
114
+ test_deprecations.rb|211|def|test_clean_ff_rejects_non_boolean_values|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Covered by spec/unit/git/repository/staging_spec.rb clean(ff: non-boolean) raises ArgumentError.|clean ff rejects non-boolean values|covered||
115
+ test_deprecations.rb|219|def|test_clean_ff_does_not_mask_invalid_force_value|PORT|PORT|unit|none|clean(ff: true, force: 0) command validation/error mapping is not covered; current facade unit only forwards force: 0.|clean ff true does not mask invalid force value|port|spec/unit/git/repository/staging_spec.rb|ported
116
+ test_deprecations.rb|231|def|test_clean_ff_true_treats_force_nil_as_unspecified|PORT|PORT|unit|none|clean(ff: true, force: nil) nil-as-unspecified mapping to force: 2 is not unit-covered.|clean ff true with force nil maps to force two|port|spec/unit/git/repository/staging_spec.rb|ported
117
+ test_describe.rb|11|def|test_describe|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/inspecting_spec.rb|Unit inspecting spec verifies describe forwards tags option and returns stdout; command integration covers git describe wiring.|describe returns command stdout and forwards tags option|covered||
118
+ test_describe.rb|15|def|test_describe_with_invalid_commitish|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/inspecting_spec.rb|Unit inspecting spec rejects flag-like commitish before command execution.|describe rejects commit-ish values that look like options|covered||
119
+ test_diff.rb|17|def|test_diff_current_vs_head|PORT|PORT|integration|none|Thin real-git coverage gap for Git::Diff default working-tree patch; unit specs cover default argument wiring but no integration exercises repo.diff.patch on unstaged changes.|default git.diff patch shows unstaged working tree changes|port|spec/integration/git/repository/diffing_spec.rb|ported
120
+ test_diff.rb|25|def|test_diff_tags|PORT|PORT|unit|none|Git::Diff size/lines/deletions/insertions delegate through DiffStats and are not covered in spec/unit/git/diff_spec.rb; exact tag fixture should be replaced with stubbed stats.|Git::Diff between tags reports changed file and line totals|port|spec/unit/git/diff_spec.rb|ported
121
+ test_diff.rb|36|def|test_diff_patch|PORT|PORT|unit|none|Git::Diff::FullDiffParser must ignore patch-like file contents as new diff entries; no unit spec covers this parser edge case.|patch-like file contents do not create extra diff entries|port|spec/unit/git/diff_spec.rb|ported
122
+ test_diff.rb|41|def|test_diff_path|PORT|PORT|unit|none|Git::Diff#path plus stats accessors with a single path are not covered; repository diffing specs cover lower-level path_limiter only.|Git::Diff#path limits stats to a single path and preserves refs|port|spec/unit/git/diff_spec.rb|ported
123
+ test_diff.rb|51|def|test_diff_path_multiple_paths|PORT|PORT|unit|none|Git::Diff#path with multiple path arguments forwarding to stats/name-status providers is not covered at the Git::Diff layer.|Git::Diff#path supports multiple path limiters for stats|port|spec/unit/git/diff_spec.rb|ported
124
+ test_diff.rb|63|def|test_diff_path_empty_array|REDUNDANT|REDUNDANT|none|spec/unit/git/diff_spec.rb;spec/unit/git/repository/diffing_spec.rb|Covered by spec/unit/git/diff_spec.rb #path no args and #patch path_limiter nil plus spec/unit/git/repository/diffing_spec.rb #diff_full path nil.|Git::Diff#path with no args clears path limiter and sends path nil|covered||
125
+ test_diff.rb|77|def|test_diff_path_rejects_nested_arrays|REDUNDANT|REDUNDANT|none|spec/unit/git/diff_spec.rb|Covered by spec/unit/git/diff_spec.rb #path raises ArgumentError when an Array argument is passed.|Git::Diff#path rejects nested array arguments|covered||
126
+ test_diff.rb|85|def|test_diff_objects|PORT|PORT|unit|none|Git::Diff initializer object-ref to_s conversion and subsequent stats access are not covered; add stubbed unit coverage rather than real tag fixture.|Git::Diff accepts Git object refs and reports diff size|port|spec/unit/git/diff_spec.rb|ported
127
+ test_diff.rb|90|def|test_object_diff|REDUNDANT|REDUNDANT|none|spec/unit/git/object_spec.rb|Git::Object#diff is covered by spec/unit/git/object_spec.rb #diff (constructs Git::Diff with correct from/to); object-ref to_s conversion and Git::Diff stats access are covered by spec/unit/git/diff_spec.rb #initialize and #stats.|Git::Object#diff returns stats for string and object refs|covered||
128
+ test_diff.rb|102|def|test_diff_stats|PORT|PORT|unit|none|Git::Diff#stats assembling total and files from DiffStats is not covered in spec/unit/git/diff_spec.rb.|Git::Diff#stats returns total and per-file stats hash|port|spec/unit/git/diff_spec.rb|ported
129
+ test_diff.rb|113|def|test_diff_hashkey_default|PORT|PORT|unit|none|Git::Diff#[] and DiffFile#blob behavior for default abbreviated source SHA/null dst is not covered by existing unit specs.|Git::Diff file lookup uses default abbreviated source SHA and blob lookup|port|spec/unit/git/diff_spec.rb|ported
130
+ test_diff.rb|119|def|test_diff_hashkey_min|REDUNDANT|PORT|unit|none|FullDiffParser#parse_index_line minimum-length (4-character) abbreviated SHA handling has no unit coverage; parser logic can be exercised with stubbed patch text.|Git::Diff file lookup respects core.abbrev minimum SHA length|port|spec/unit/git/diff_spec.rb|ported
131
+ test_diff.rb|128|def|test_diff_hashkey_max|REDUNDANT|PORT|unit|none|FullDiffParser#parse_index_line full-length (40-character) SHA handling has no unit coverage; parser logic can be exercised with stubbed patch text.|Git::Diff file lookup respects full 40-character core.abbrev|port|spec/unit/git/diff_spec.rb|ported
132
+ test_diff.rb|137|def|test_patch|PORT|REDUNDANT|none|none|Git::Diff#patch returning exact patch text is covered by spec/unit/git/diff_spec.rb #patch and real-git diff_full wiring by spec/integration/git/repository/diffing_spec.rb.|Git::Diff#patch returns exact unified patch text for tag range|covered||
133
+ test_diff.rb|143|def|test_diff_each|PORT|PORT|unit|none|Git::Diff#each and FullDiffParser creation of DiffFile path/mode/type/patch are not covered by existing unit specs.|Git::Diff#each yields DiffFile objects with path mode type and patch|port|spec/unit/git/diff_spec.rb|ported
134
+ test_diff.rb|155|def|test_diff_patch_with_bad_commit|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/arguments_spec.rb|Covered by spec/unit/git/commands/arguments_spec.rb operand validation for refs starting with dash; no integration needed.|Git::Diff#patch rejects commit operands that look like options|covered||
135
+ test_diff.rb|165|def|test_diff_path_status_with_bad_commit|REDUNDANT|REDUNDANT|none|spec/unit/git/diff_path_status_spec.rb|Covered by spec/unit/git/diff_path_status_spec.rb initialize rejects refs starting with dash.|Git::Diff#name_status rejects commit operands that look like options|covered||
136
+ test_diff.rb|171|def|test_diff_stats_with_bad_commit|REDUNDANT|REDUNDANT|none|spec/unit/git/diff_stats_spec.rb|Covered by spec/unit/git/diff_stats_spec.rb initialize rejects refs starting with dash.|Git::Diff#stats rejects commit operands that look like options|covered||
137
+ test_diff_non_default_encoding.rb|14|def|test_diff_with_greek_encoding|PORT|PORT|integration|none|UTF-8 patch content preservation depends on real git/process encoding; no existing integration spec exercises non-ASCII diff body text.|diff patch preserves Greek UTF-8 content|port|spec/integration/git/repository/diffing_spec.rb|ported
138
+ test_diff_non_default_encoding.rb|28|def|test_diff_with_japanese_and_korean_encoding|PORT|PORT|integration|none|Path-limited UTF-8 patch body preservation is a real-git encoding/wiring gap; existing unit unescape specs do not cover patch body bytes.|path-limited diff patch preserves Japanese and Korean UTF-8 content|port|spec/integration/git/repository/diffing_spec.rb|ported
139
+ test_diff_path_status.rb|11|def|test_path_status|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/diffing_spec.rb|Covered by spec/unit/git/repository/diffing_spec.rb #diff_path_status parsing raw name-status data into Git::DiffPathStatus.|diff_name_status returns status hash for changed and deleted paths|covered||
140
+ test_diff_path_status.rb|22|def|test_path_status_with_path_limiter|REDUNDANT|REDUNDANT|none|spec/unit/git/diff_path_status_spec.rb|Covered by spec/unit/git/diff_path_status_spec.rb forwarding path_limiter to diff_name_status.|DiffPathStatus limits name-status to one path|covered||
141
+ test_diff_path_status.rb|33|def|test_path_status_with_multiple_paths|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/diffing_spec.rb|Covered by spec/unit/git/repository/diffing_spec.rb path_limiter Array forwarding; DiffPathStatus has no array-specific branch.|DiffPathStatus supports multiple path limiters|covered||
142
+ test_diff_path_status.rb|43|def|test_path_status_path_option_deprecated|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/diffing_spec.rb|Covered by spec/unit/git/repository/diffing_spec.rb deprecated :path emits warning and uses it as limiter.|diff_path_status deprecated path option warns and filters|covered||
143
+ test_diff_path_status.rb|50|def|test_path_status_path_limiter_takes_precedence|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/diffing_spec.rb|Covered by spec/unit/git/repository/diffing_spec.rb when both :path_limiter and :path are provided, path_limiter wins and no warning emits.|path_limiter takes precedence over deprecated path|covered||
144
+ test_diff_path_status.rb|59|def|test_repository_diff_path_status_path_option_deprecated|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/diffing_spec.rb|Covered by spec/unit/git/repository/diffing_spec.rb deprecated :path warning on Repository#diff_path_status.|repository diff_path_status path option warns|covered||
145
+ test_diff_path_status.rb|66|def|test_path_status_with_empty_path_array|PORT|PORT|unit|none|Repository::Diffing normalize_pathspecs([]) to command path nil is not covered for diff_path_status; add unit coverage.|DiffPathStatus empty path array normalizes to no path limiter|port|spec/unit/git/repository/diffing_spec.rb|ported
146
+ test_diff_path_status.rb|80|def|test_path_status_with_bad_commit|REDUNDANT|REDUNDANT|none|spec/unit/git/diff_path_status_spec.rb|Covered by spec/unit/git/diff_path_status_spec.rb initialize rejects from/to refs starting with dash.|diff_name_status rejects commit operands that look like options|covered||
147
+ test_diff_stats.rb|11|def|test_total_stats|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/diffing_spec.rb;spec/unit/git/repository/diffing_spec.rb;spec/unit/git/diff_stats_spec.rb|Covered at unit layer by spec/unit/git/repository/diffing_spec.rb #diff_numstat totals and spec/unit/git/diff_stats_spec.rb #total.|diff_stats returns aggregate totals|covered||
148
+ test_diff_stats.rb|20|def|test_file_stats|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/diffing_spec.rb;spec/unit/git/repository/diffing_spec.rb;spec/unit/git/diff_stats_spec.rb|Covered at unit layer by spec/unit/git/repository/diffing_spec.rb #diff_numstat per-file parsing and spec/unit/git/diff_stats_spec.rb #files.|diff_stats returns per-file deletions and insertions|covered||
149
+ test_diff_stats.rb|27|def|test_diff_stats_with_path|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/diffing_spec.rb|Covered by spec/integration/git/repository/diffing_spec.rb #diff_numstat path_limiter filters and unit forwarding specs.|DiffStats path limiter filters aggregate totals|covered||
150
+ test_diff_stats.rb|36|def|test_diff_stats_with_multiple_paths|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/diffing_spec.rb|Covered by spec/unit/git/repository/diffing_spec.rb #diff_numstat path_limiter Array forwards paths.|diff_stats supports multiple path limiters|covered||
151
+ test_diff_stats.rb|46|def|test_diff_stats_with_empty_path_array|PORT|PORT|unit|none|Empty path_limiter Array normalization to nil is not covered for diff_stats/diff_numstat; add stubbed unit coverage.|diff_stats empty path array normalizes to no path limiter|port|spec/unit/git/diff_stats_spec.rb|ported
152
+ test_diff_stats.rb|60|def|test_diff_stats_on_object|PORT|REDUNDANT|none|none|Ref order is unit-covered by spec/unit/git/repository/diffing_spec.rb #diff_numstat explicit obj1/obj2, and totals parsing is unit-covered; reverse real-git fixture is redundant.|diff_stats direction controls insertion and deletion totals|covered||
153
+ test_diff_stats.rb|66|def|test_diff_stats_with_bad_commit|REDUNDANT|REDUNDANT|none|spec/unit/git/diff_stats_spec.rb|Covered by spec/unit/git/diff_stats_spec.rb initialize rejects refs starting with dash.|diff_stats rejects commit operands that look like options|covered||
154
+ test_diff_with_escaped_path.rb|9|def|test_diff_with_non_ascii_filename|PORT|PORT|unit|none|Git::Diff::FullDiffParser unescaping of git-quoted diff header paths is not covered; newer parser specs do not cover this legacy parser.|Git::Diff#each unescapes non-ASCII filename from real git diff output|port|spec/unit/git/diff_spec.rb|ported
155
+ test_each_conflict.rb|6|def|test_unmerged_returns_empty_when_no_conflicts|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/merging_spec.rb;spec/integration/git/repository/merging_spec.rb|Merging unit and integration specs cover unmerged returning [] without conflicts.|unmerged returns empty array without conflicts|covered||
156
+ test_each_conflict.rb|13|def|test_conflicts|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Merging integration covers conflict paths and stage-2/stage-3 file contents yielded by each_conflict.|unmerged and each_conflict expose conflict paths and stage contents|covered||
157
+ test_each_conflict.rb|50|def|test_unmerged_returns_all_conflicting_files|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/merging_spec.rb|Merging unit spec covers multiple unmerged files returned and yielded in order.|unmerged returns all conflicting files|covered||
158
+ test_escaped_path.rb|11|def|test_simple_path|PORT|PORT|unit|none|Pure EscapedPath logic; diff parser unit bypasses EscapedPath for unquoted paths, so direct unescape coverage is still needed.|EscapedPath leaves simple path unchanged|port|spec/unit/git/escaped_path_spec.rb|ported
159
+ test_escaped_path.rb|17|def|test_unicode_path|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/diff_spec.rb|UTF-8 octal decoding is already exercised at unit level by spec/unit/git/parsers/diff_spec.rb through EscapedPath.|EscapedPath unescapes UTF-8 octal skull|covered||
160
+ test_escaped_path.rb|23|def|test_unicode_path2|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/diff_spec.rb|Cyrillic uses the same UTF-8 octal decoding path already covered by unit diff parser specs; exact codepoint adds no branch.|EscapedPath unescapes UTF-8 octal Cyrillic|covered||
161
+ test_escaped_path.rb|29|def|test_single_char_escapes|PORT|PORT|unit|none|Pure EscapedPath table-driven single-character escape logic is only partially covered; port as direct unit coverage.|EscapedPath unescapes every single char escape|port|spec/unit/git/escaped_path_spec.rb|ported
162
+ test_escaped_path.rb|36|def|test_compound_escape|PORT|PORT|unit|none|Compound EscapedPath behavior combines quote, UTF-8 octal, and newline escapes; direct pure-logic unit coverage is warranted.|EscapedPath handles compound quote unicode newline escape|port|spec/unit/git/escaped_path_spec.rb|ported
163
+ test_failed_error.rb|6|def|test_initializer|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U2: FailedError parent-class relationship is structural identity (Rule 24); class FailedError < Git::CommandLineError has no overridden code path to exercise. FailedError class behavior/inheritance lacks a dedicated unit spec under spec/unit/git/errors_spec.rb or equivalent.|FailedError is a CommandLineError|covered|spec/unit/git/command_line_error_spec.rb|
164
+ test_failed_error.rb|15|def|test_to_s|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U2: FailedError#to_s is inherited verbatim from CommandLineError (no override). The format is exercised by spec/unit/git/command_line_error_spec.rb #to_s; constructing via FailedError.new adds no new code path (Rule 24 structural). FailedError inherits CommandLineError formatting, but exact to_s/message behavior is not directly covered for the class.|FailedError to_s includes command status and stderr|covered|spec/unit/git/command_line_error_spec.rb|
165
+ test_fsck.rb|12|macro|fsck with no options|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/inspecting_spec.rb|Repository Inspecting unit spec verifies facade forces no_progress, and command specs cover the fsck command itself.|fsck defaults to no progress|covered||
166
+ test_fsck.rb|17|macro|fsck with unreachable option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --unreachable argument construction; no real git needed.|fsck adds unreachable flag|covered||
167
+ test_fsck.rb|22|macro|fsck with strict option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --strict argument construction; no real git needed.|fsck adds strict flag|covered||
168
+ test_fsck.rb|27|macro|fsck with connectivity_only option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --connectivity-only argument construction; no real git needed.|fsck adds connectivity only flag|covered||
169
+ test_fsck.rb|32|macro|fsck with dangling: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --dangling argument construction; no real git needed.|fsck adds dangling flag|covered||
170
+ test_fsck.rb|37|macro|fsck with no_dangling: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --no-dangling argument construction; no real git needed.|fsck adds no dangling flag|covered||
171
+ test_fsck.rb|42|macro|fsck with full: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --full argument construction; no real git needed.|fsck adds full flag|covered||
172
+ test_fsck.rb|47|macro|fsck with no_full: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --no-full argument construction; no real git needed.|fsck adds no full flag|covered||
173
+ test_fsck.rb|52|macro|fsck with multiple options|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Combined option ordering is covered by Fsck command unit examples plus individual flag specs.|fsck combines multiple options|covered||
174
+ test_fsck.rb|59|macro|fsck with name_objects: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --name-objects argument construction; no real git needed.|fsck adds name objects flag|covered||
175
+ test_fsck.rb|64|macro|fsck with no_name_objects: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --no-name-objects argument construction; no real git needed.|fsck adds no name objects flag|covered||
176
+ test_fsck.rb|69|macro|fsck with references: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --references argument construction; no real git needed.|fsck adds references flag|covered||
177
+ test_fsck.rb|74|macro|fsck with no_references: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers --no-references argument construction; no real git needed.|fsck adds no references flag|covered||
178
+ test_fsck.rb|79|macro|fsck with single object argument|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers object operands.|fsck accepts one object argument|covered||
179
+ test_fsck.rb|84|macro|fsck with multiple object arguments|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers multiple object operands.|fsck accepts multiple object arguments|covered||
180
+ test_fsck.rb|89|macro|fsck with object arguments and options|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fsck_spec.rb|Fsck command unit spec covers operands with options; exhaustive option-object matrices are unnecessary.|fsck combines objects and options|covered||
181
+ test_fsck.rb|96|macro|fsck returns a FsckResult|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/inspecting_spec.rb|Repository Inspecting integration verifies real fsck returns Git::FsckResult; unit spec verifies parser wiring.|fsck returns FsckResult|covered||
182
+ test_fsck.rb|111|macro|fsck result attributes are arrays|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/fsck_spec.rb|Parser unit spec verifies parsed FsckResult collections are arrays for all categories.|fsck result collections are arrays|covered||
183
+ test_fsck.rb|125|macro|fsck result has helper methods|PORT|PORT|unit|none|FsckResult helper method contract is pure value-object logic and lacks direct unit coverage.|fsck result exposes helper methods|port|spec/unit/git/fsck_result_spec.rb|ported
184
+ test_fsck.rb|138|macro|fsck result empty? returns true for clean repository|PORT|PORT|unit|none|Clean FsckResult empty?/any_issues?/count behavior is pure helper logic and needs direct unit coverage.|clean fsck result empty and count zero|port|spec/unit/git/fsck_result_spec.rb|ported
185
+ test_fsck.rb|153|macro|fsck result to_h returns hash representation|PORT|PORT|unit|none|FsckResult#to_h contract is pure value-object logic and needs direct unit coverage.|fsck result converts to hash|port|spec/unit/git/fsck_result_spec.rb|ported
186
+ test_fsck.rb|167|macro|fsck objects are FsckObject instances|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/fsck_spec.rb|Fsck parser unit spec verifies parsed entries are Git::FsckObject instances with typed object data.|fsck objects are typed FsckObject entries|covered||
187
+ test_fsck.rb|183|macro|fsck detects dangling commits after reset and reflog expire|PORT|REDUNDANT|none|none|Dangling commit parsing is unit-covered and dangling-object real git wiring is already covered; no extra integration matrix needed.|fsck detects dangling commits after reset|covered||
188
+ test_fsck.rb|210|macro|fsck detects dangling blobs|REDUNDANT|REDUNDANT|none|spec/integration/git/parsers/fsck_spec.rb|Dangling blob real-output wiring is already covered by spec/integration/git/parsers/fsck_spec.rb.|fsck detects dangling blobs|covered||
189
+ test_fsck.rb|233|macro|fsck detects unreachable objects with unreachable option|PORT|REDUNDANT|none|none|Unreachable object option and parser behavior are unit-covered; real git integration would be an exhaustive matrix case.|fsck detects real unreachable objects|covered||
190
+ test_fsck.rb|258|macro|fsck reports root commits with root option|PORT|REDUNDANT|none|none|Root-line parsing is unit-covered and parser integration validates real --root output.|fsck reports single root commit as informational|covered||
191
+ test_fsck.rb|279|macro|fsck reports multiple root commits|PORT|REDUNDANT|none|none|Multiple root commits add no parser branch beyond root-line unit coverage and existing --root integration.|fsck reports multiple root commits|covered||
192
+ test_fsck.rb|306|macro|fsck reports tagged objects with tags option|REDUNDANT|REDUNDANT|none|spec/integration/git/parsers/fsck_spec.rb|Tagged object parsing and real --tags output are covered by unit and parser integration specs.|fsck reports tagged objects with names|covered||
193
+ test_fsck.rb|329|macro|fsck detects missing objects|PORT|REDUNDANT|none|none|Missing-object parsing is unit-covered; corrupt-repository integration is not needed under minimal integration philosophy.|fsck detects missing objects in corrupt repo|covered||
194
+ test_fsck.rb|360|macro|fsck with name_objects includes ref names|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/fsck_spec.rb|Name-object parsing is covered by Fsck parser unit specs for object names.|fsck name objects output parses named commits|covered||
195
+ test_fsck_object.rb|6|def|test_attributes|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/fsck_spec.rb|Fsck parser unit specs verify FsckObject type, oid, message, and name attributes from parsed output.|FsckObject stores parsed attributes|covered||
196
+ test_fsck_object.rb|15|def|test_message_defaults_to_nil|PORT|PORT|unit|none|FsckObject default message nil is pure value-object constructor behavior lacking direct unit coverage.|FsckObject message defaults to nil|port|spec/unit/git/fsck_object_spec.rb|ported
197
+ test_fsck_object.rb|21|def|test_name_defaults_to_nil|PORT|PORT|unit|none|FsckObject default name nil is pure value-object constructor behavior lacking direct unit coverage.|FsckObject name defaults to nil|port|spec/unit/git/fsck_object_spec.rb|ported
198
+ test_fsck_object.rb|27|def|test_to_s_returns_oid|PORT|PORT|unit|none|FsckObject#to_s is pure value-object logic and lacks unit coverage.|FsckObject stringifies to oid|port|spec/unit/git/fsck_object_spec.rb|ported
199
+ test_fsck_result.rb|6|macro|initialize with default empty arrays|REDUNDANT|PORT|unit|spec/unit/git/parsers/fsck_spec.rb|FsckResult default constructor arrays are pure value-object logic; parser specs do not exercise omitted defaults directly.|FsckResult defaults to empty arrays|port|spec/unit/git/fsck_result_spec.rb|ported
200
+ test_fsck_result.rb|17|macro|initialize with provided arrays|PORT|PORT|unit|none|FsckResult storing provided arrays is pure value-object constructor behavior lacking direct unit coverage.|FsckResult stores provided arrays|port|spec/unit/git/fsck_result_spec.rb|ported
201
+ test_fsck_result.rb|36|macro|empty? returns true when all arrays are empty|REDUNDANT|PORT|unit|spec/integration/git/parsers/fsck_spec.rb|FsckResult#empty? clean-state behavior is pure helper logic; integration coverage is the wrong layer.|FsckResult empty when no issues|port|spec/unit/git/fsck_result_spec.rb|ported
202
+ test_fsck_result.rb|42|macro|empty? returns false when dangling is not empty|PORT|PORT|unit|none|FsckResult#empty? false for issue collections is pure helper logic and needs unit coverage.|FsckResult not empty with dangling entries|port|spec/unit/git/fsck_result_spec.rb|ported
203
+ test_fsck_result.rb|49|macro|any_issues? returns false when all arrays are empty|REDUNDANT|PORT|unit|spec/integration/git/parsers/fsck_spec.rb|FsckResult#any_issues? false is pure helper logic; integration coverage is the wrong layer.|FsckResult any issues false when clean|port|spec/unit/git/fsck_result_spec.rb|ported
204
+ test_fsck_result.rb|55|macro|any_issues? returns true when missing is not empty|PORT|PORT|unit|none|FsckResult#any_issues? true for missing entries is pure helper logic and needs unit coverage.|FsckResult any issues true with missing entries|port|spec/unit/git/fsck_result_spec.rb|ported
205
+ test_fsck_result.rb|62|macro|all_objects returns combined array|PORT|PORT|unit|none|FsckResult#all_objects combination contract is pure helper logic and must be unit-covered.|FsckResult all_objects combines issue arrays|port|spec/unit/git/fsck_result_spec.rb|ported
206
+ test_fsck_result.rb|83|macro|count returns total number of objects|PORT|PORT|unit|none|FsckResult#count contract is pure helper logic and must be unit-covered.|FsckResult count totals issue objects|port|spec/unit/git/fsck_result_spec.rb|ported
207
+ test_fsck_result.rb|97|macro|to_h returns hash representation|PORT|PORT|unit|none|FsckResult#to_h full collection contract is pure helper logic and must be unit-covered.|FsckResult to_h includes all collections|port|spec/unit/git/fsck_result_spec.rb|ported
208
+ test_fsck_result.rb|113|macro|empty? returns true even when root and tagged have items|PORT|PORT|unit|none|Root/tagged informational semantics for empty?/any_issues? are pure FsckResult logic and need unit coverage.|FsckResult root and tagged are informational|port|spec/unit/git/fsck_result_spec.rb|ported
209
+ test_git_alt_uri.rb|8|def|test_new|PORT|PORT|unit|none|Git::GitAltURI construction/to_hash normalization is pure URL logic and no spec/unit coverage exists.|Git::GitAltURI normalizes scp-style user host and path attributes|port|spec/unit/git/url_spec.rb|ported
210
+ test_git_alt_uri.rb|20|def|test_to_s|PORT|PORT|unit|none|Git::GitAltURI#to_s with user is pure formatting logic and no spec/unit coverage exists.|Git::GitAltURI#to_s includes user at host prefix|port|spec/unit/git/url_spec.rb|ported
211
+ test_git_alt_uri.rb|25|def|test_to_s_with_nil_user|PORT|PORT|unit|none|Git::GitAltURI#to_s without user is pure formatting logic and no spec/unit coverage exists.|Git::GitAltURI#to_s omits nil user prefix|port|spec/unit/git/url_spec.rb|ported
212
+ test_git_binary_version.rb|38|def|test_binary_version|REDUNDANT|REDUNDANT|none|spec/unit/git/git_version_spec.rb|Git.binary_version array shape and deprecation behavior are covered by spec/unit/git/git_version_spec.rb.|binary_version returns version array|covered||
213
+ test_git_binary_version.rb|47|def|test_binary_version_with_spaces|PORT|REDUNDANT|none|none|Explicit binary_path forwarding is unit-covered; argv execution means paths with spaces do not need separate real-git integration.|binary_version handles binary path with spaces|covered||
214
+ test_git_binary_version.rb|57|def|test_binary_version_bad_binary_path|REDUNDANT|REDUNDANT|none|spec/unit/git/git_version_spec.rb|Missing binary error handling is covered by Git.git_version unit specs with ProcessExecuter spawn errors.|binary_version raises Git error for missing binary|covered||
215
+ test_git_clone.rb|15|macro|global timeout|PORT|REDUNDANT|none|none|Flaky real-clone timeout should not be ported; timeout plumbing is unit-covered by ExecutionContext and CommandLine timeout/error specs.|Git.clone honors global timeout and raises timeout-related error|intentional_drop||
216
+ test_git_clone.rb|41|macro|override global timeout|PORT|REDUNDANT|none|none|Per-call timeout override is command/execution logic covered by clone timeout option and CommandLine timeout forwarding specs; no real clone needed.|per-call clone timeout overrides tiny global timeout|covered||
217
+ test_git_clone.rb|61|macro|per command timeout|PORT|REDUNDANT|none|none|Per-command timeout behavior is unit-covered by spec/unit/git/commands/clone_spec.rb and CommandLine TimeoutError specs.|Git.clone per-command timeout raises timeout-related error|covered||
218
+ test_git_clone.rb|93|def|test_git_clone_with_name|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Explicit clone directory wiring is covered by spec/integration/git/repository_spec.rb .clone and unit factories path resolution.|Git.clone with explicit directory creates clone and sets dir|covered||
219
+ test_git_clone.rb|104|def|test_git_clone_with_no_name|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb|Nil clone directory derived from git stderr is covered by spec/unit/git/repository/factories_spec.rb path parsing.|Git.clone with nil directory derives clone directory from git output|covered||
220
+ test_git_clone.rb|114|macro|shallow clone with single_branch false uses wide refspec|PORT|REDUNDANT|none|none|no_single_branch option building is covered by spec/unit/git/commands/clone_spec.rb; heavy shallow-clone matrix should not be ported.|shallow clone with no_single_branch true uses wide fetch refspec|covered||
221
+ test_git_clone.rb|141|macro|clone with negative depth|PORT|REDUNDANT|none|none|Clone failure wiring is covered by integration clone failure and depth flag by unit command spec; negative-depth git validation need not be ported.|clone with negative depth raises Git::FailedError mentioning depth|covered||
222
+ test_git_default_branch.rb|11|def|test_default_branch|REDUNDANT|REDUNDANT|none|spec/unit/git/git_remote_utilities_spec.rb|Parsed default branch behavior is covered by spec/unit/git/git_remote_utilities_spec.rb .default_branch.|Git.default_branch returns parsed default branch name|covered||
223
+ test_git_default_branch.rb|19|def|test_default_branch_with_logging|REDUNDANT|REDUNDANT|none|spec/unit/git/git_remote_utilities_spec.rb|Logger forwarding for default_branch is covered by spec/unit/git/git_remote_utilities_spec.rb.|Git.default_branch passes logger to ls-remote execution path|covered||
224
+ test_git_dir.rb|6|def|test_index_calculated_from_git_dir|PORT|PORT|unit|none|PathResolver derives the index from an explicit external repository path; ported to path_resolver_spec asserting index resolves to <repository>/index when no index is given.|Git.open derives index from external git dir|port|spec/unit/git/repository/path_resolver_spec.rb|ported
225
+ test_git_dir.rb|25|def|test_git_dir_outside_work_tree|PORT|REDUNDANT|none|none|Separate git-dir wiring is covered by path resolution/execution-context units and repository integration for separate git dirs; broad checkout/status flow is redundant.|Git.open works with git dir outside work tree|covered||
226
+ test_git_dir.rb|93|def|test_git_diff_to_a|PORT|PORT|integration|none|Linked worktree .git-file plus diff.to_a is a real-repo path-resolution edge not fully covered elsewhere.|Diff to_a works from linked worktree gitfile|port|spec/integration/git/repository/diffing_spec.rb|ported
227
+ test_git_path.rb|12|def|test_dir_returns_pathname|REDUNDANT|REDUNDANT|none|spec/unit/git/repository_spec.rb|Git::Repository#dir Pathname behavior is covered by spec/unit/git/repository_spec.rb.|dir returns Pathname for worktree|covered||
228
+ test_git_path.rb|17|def|test_repo_returns_pathname|REDUNDANT|REDUNDANT|none|spec/unit/git/repository_spec.rb|Git::Repository#repo Pathname behavior is covered by spec/unit/git/repository_spec.rb.|repo returns Pathname for git directory|covered||
229
+ test_git_path.rb|22|def|test_index_returns_pathname|REDUNDANT|REDUNDANT|none|spec/unit/git/repository_spec.rb|Git::Repository#index Pathname behavior is covered by spec/unit/git/repository_spec.rb.|index returns Pathname for index file|covered||
230
+ test_git_path.rb|27|def|test_readables|PORT|REDUNDANT|none|none|Readable path assertions add no ruby-git logic beyond path correctness already covered by unit and repository integration specs.|git paths are readable|covered||
231
+ test_git_path.rb|33|def|test_writables_in_temp_dir|PORT|REDUNDANT|none|none|Writable path assertions add no ruby-git logic beyond path correctness already covered by unit and repository integration specs.|git paths are writable in temp clone|covered||
232
+ test_ignored_files_with_escaped_path.rb|9|def|test_ignored_files_with_non_ascii_filename|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Covered by spec/unit/git/repository/staging_spec.rb #ignored_files unescapes git-quoted paths.|ignored_files unescapes non-ASCII ignored filename|covered||
233
+ test_index_ops.rb|6|def|test_add|PORT|REDUNDANT|none|none|Repository add is unit-covered and Add command integration provides minimal real-git wiring; workflow matrix is too broad.|add stages untracked and modified files then commit clears status|covered||
234
+ test_index_ops.rb|32|def|test_clean|PORT|REDUNDANT|none|none|Clean option logic is unit-covered and command integration minimally wires real git; exhaustive clean matrix should not be ported.|clean removes untracked files dirs ignored files and nested repos by options|covered||
235
+ test_index_ops.rb|83|def|test_revert|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Merging integration covers revert creating an extra commit and removing the reverted file.|revert creates an extra commit and removes reverted file|covered||
236
+ test_index_ops.rb|105|def|test_add_array|PORT|REDUNDANT|none|none|Add array splatting is facade unit-covered; command integration covers add wiring.|add array stages multiple files and commit records contents|covered||
237
+ test_index_ops.rb|125|def|test_remove|PORT|REDUNDANT|none|none|remove is an alias for rm in unit specs; rm command/facade coverage handles deletion wiring.|remove stages deletion and commit removes file from status|covered||
238
+ test_index_ops.rb|137|def|test_add_force|PORT|REDUNDANT|none|none|Add --force is command and facade unit-covered; command integration supplies minimal add wiring.|add force stages ignored file|covered||
239
+ test_index_ops.rb|154|def|test_reset|PORT|REDUNDANT|none|none|Reset command/facade unit specs and command integration cover unstaging/reset wiring sufficiently.|reset unstages added files back to untracked|covered||
240
+ test_init.rb|8|def|test_open_simple|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Git.open path accessors are covered by spec/integration/git/repository_spec.rb .open.|Git.open exposes dir repo and index paths|covered||
241
+ test_init.rb|16|def|test_open_from_non_root_dir|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb|Opening from a subdirectory is covered by spec/unit/git/repository/factories_spec.rb root_of_worktree delegation.|Git.open from subdirectory resolves worktree root|covered||
242
+ test_init.rb|30|def|test_open_opts|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb|Explicit repository and index options are covered by spec/unit/git/repository/factories_spec.rb .open.|Git.open honors explicit repository and index options|covered||
243
+ test_init.rb|38|def|test_git_bare|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Git.bare path wiring is covered by spec/integration/git/repository_spec.rb .bare and unit factories.|Git.bare opens bare repository path|covered||
244
+ test_init.rb|48|def|test_git_init|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Non-bare init path accessors are covered by spec/integration/git/repository_spec.rb .init.|Git.init creates non-bare repository with dir repo and index|covered||
245
+ test_init.rb|61|def|test_git_init_bare|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Bare init behavior is covered by spec/integration/git/repository_spec.rb .init with bare.|Git.init bare creates bare repository without working directory|covered||
246
+ test_init.rb|69|def|test_git_init_remote_git|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb|Init repository option mapping is covered by spec/unit/git/repository/factories_spec.rb.|Git.init repository option maps to separate git dir|covered||
247
+ test_init.rb|80|def|test_git_init_separate_git_dir|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Separate git dir side effects are covered by spec/integration/git/repository_spec.rb .init with separate_git_dir.|Git.init separate_git_dir stores git data in separate directory|covered||
248
+ test_init.rb|91|def|test_git_init_initial_branch|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Initial branch side effect is covered by spec/integration/git/repository_spec.rb .init with initial_branch.|Git.init initial_branch writes requested branch to HEAD|covered||
249
+ test_init.rb|101|def|test_git_clone|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Clone returning a configured repository with worktree is covered by spec/integration/git/repository_spec.rb .clone.|Git.clone returns repository with config and working directory|covered||
250
+ test_init.rb|109|def|test_git_clone_with_branch|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/clone_spec.rb|Branch option command construction is covered by spec/unit/git/commands/clone_spec.rb; clone wiring is already integration-covered.|Git.clone branch option passes branch flag|covered||
251
+ test_init.rb|116|def|test_git_clone_bare|REDUNDANT|REDUNDANT|none|spec/integration/git/repository_spec.rb|Bare clone repository shape is covered by spec/integration/git/repository_spec.rb .clone with bare.|Git.clone bare returns repository without working directory|covered||
252
+ test_init.rb|124|def|test_git_clone_mirror|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb|Mirror clone path resolution as bare is covered by spec/unit/git/repository/factories_spec.rb.|Git.clone mirror is resolved as bare repository|covered||
253
+ test_init.rb|132|def|test_git_clone_config|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/clone_spec.rb|Clone config option rendering is covered by spec/unit/git/commands/clone_spec.rb; no extra git config integration needed.|Git.clone config option passes --config to clone|covered||
254
+ test_init.rb|143|def|test_git_clone_without_log|REDUNDANT|REDUNDANT|none|spec/unit/git/execution_context_spec.rb|Default logger creation is covered by spec/unit/git/execution_context_spec.rb and factory logger defaults.|Git.clone without log uses default Logger instance|covered||
255
+ test_init.rb|154|def|test_git_clone_log|PORT|PORT|integration|none|Logger forwarding is covered by factories_spec and generic command logging by command_line/capturing_spec (shared base#log_result); ported a minimal integration check that Git::Commands::Clone logs the clone command through a logger-configured execution context.|Git.clone with custom logger records clone output|port|spec/integration/git/commands/clone_spec.rb|ported
256
+ test_init.rb|170|def|test_git_open_error|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/path_resolver_spec.rb|Opening a bare path as worktree raises via PathResolver coverage cited by spec/unit/git/repository/path_resolver_spec.rb.|Git.open on bare repository path raises ArgumentError|covered||
257
+ test_log.rb|13|def|test_log_max_count_default|REDUNDANT|REDUNDANT|none|spec/unit/git/log_spec.rb|Git::Log unit spec verifies default count 30 is forwarded to full_log_commits.|default Git::Log max_count is 30|covered||
258
+ test_log.rb|20|def|test_log_max_count_twenty|PORT|PORT|unit|none|Git::Log max_count setter and non-default constructor count behavior are query-builder logic not fully covered in unit specs.|Git::Log#max_count setter and log(n) both limit results to explicit count|port|spec/unit/git/log_spec.rb|ported
259
+ test_log.rb|28|def|test_log_max_count_nil|PORT|PORT|unit|none|Git::Log nil max_count maps to an unbounded count; this builder branch lacks direct unit coverage.|nil max_count returns all matching commits through constructor and setter|port|spec/unit/git/log_spec.rb|ported
260
+ test_log.rb|37|def|test_log_max_count_all|PORT|PORT|unit|none|Git::Log :all max_count maps to nil; this builder branch lacks direct unit coverage.|:all max_count returns all matching commits through constructor and setter|port|spec/unit/git/log_spec.rb|ported
261
+ test_log.rb|47|def|test_log_all|PORT|PORT|unit|none|Git::Log#all setting all while preserving count is builder logic; lower facade option mapping alone is insufficient.|Git::Log#all includes all refs without changing max_count semantics|port|spec/unit/git/log_spec.rb|ported
262
+ test_log.rb|54|def|test_log_non_integer_count|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/logging_spec.rb|Repository logging unit spec covers non-integer count validation and ArgumentError.|non-integer log count raises ArgumentError|covered||
263
+ test_log.rb|61|def|test_get_first_and_last_entries|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/logging_spec.rb|Integration logging spec verifies log.execute returns a Git::Log::Result with Commit entries in reverse chronological order.|log result entries are commit objects in reverse chronological order|covered||
264
+ test_log.rb|71|def|test_get_log_entries|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/logging_spec.rb|Integration logging spec verifies the log count argument limits returned commits.|log count argument limits number of returned commits|covered||
265
+ test_log.rb|77|def|test_get_log_to_s|PORT|PORT|unit|none|Git::Log::Result#to_s value-object behavior is not directly covered by unit specs.|Git::Log::Result#to_s joins commit SHAs with first line matching first SHA|port|spec/unit/git/log_spec.rb|ported
266
+ test_log.rb|84|def|test_log_skip|PORT|PORT|unit|none|Git::Log#skip fluent option is query-builder logic; command and facade specs cover only lower-layer mapping.|Git::Log#skip offsets returned commits consistently|port|spec/unit/git/log_spec.rb|ported
267
+ test_log.rb|92|def|test_get_log_since|PORT|PORT|unit|none|Git::Log#since fluent option is query-builder logic; command and facade specs cover only lower-layer mapping.|Git::Log#since filters commits by relative date|port|spec/unit/git/log_spec.rb|ported
268
+ test_log.rb|100|def|test_get_log_grep|PORT|PORT|unit|none|Git::Log#grep fluent option is query-builder logic; command and facade specs cover only lower-layer mapping.|Git::Log#grep filters commits by message text|port|spec/unit/git/log_spec.rb|ported
269
+ test_log.rb|105|def|test_get_log_author|PORT|PORT|unit|none|Git::Log#author fluent option is query-builder logic; command and facade specs cover only lower-layer mapping.|Git::Log#author filters commits by author regex|port|spec/unit/git/log_spec.rb|ported
270
+ test_log.rb|112|def|test_get_log_since_file|PORT|PORT|unit|none|Git::Log#between chained with #path is builder logic not directly covered at the Git::Log layer.|Git::Log#between chained with path limits commits to file in revision range|port|spec/unit/git/log_spec.rb|ported
271
+ test_log.rb|120|def|test_get_log_path|PORT|PORT|unit|none|Git::Log#path string and array limiter behavior is builder logic not directly covered at the Git::Log layer.|Git::Log#path accepts string wildcard and array path limiters|port|spec/unit/git/log_spec.rb|ported
272
+ test_log.rb|129|def|test_log_file_noexist|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/log_spec.rb|Command log integration spec already verifies invalid revision/object errors are surfaced as Git::FailedError.|invalid log object raises Git::FailedError|covered||
273
+ test_log.rb|135|def|test_log_with_empty_commit_message|PORT|PORT|unit|none|Raw log parsing for an empty commit message lacks direct unit coverage.|log parsing preserves empty commit messages as empty strings|port|spec/unit/git/repository/logging_spec.rb|ported
274
+ test_log.rb|148|def|test_log_cherry|PORT|PORT|unit|none|Git::Log#cherry fluent option is query-builder logic; command and facade specs cover only lower-layer mapping.|Git::Log#cherry filters symmetric-difference commits|port|spec/unit/git/log_spec.rb|ported
275
+ test_log.rb|153|def|test_log_merges|REDUNDANT|PORT|unit|spec/unit/git/repository/logging_spec.rb|Git::Log#merges itself lacks direct unit coverage; repository logging only proves lower-layer option mapping.|Git::Log#merges maps to --merges in full_log_commits|port|spec/unit/git/log_spec.rb|ported
276
+ test_log_execute.rb|14|def|test_log_max_count_default|REDUNDANT|REDUNDANT|none|spec/unit/git/log_spec.rb|Git::Log unit spec verifies default count 30 is forwarded to full_log_commits.|default Git::Log max_count is 30|covered||
277
+ test_log_execute.rb|19|def|test_log_max_count_twenty|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#max_count setter and log(n) both limit results to explicit count|covered||
278
+ test_log_execute.rb|24|def|test_log_max_count_nil|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|nil max_count returns all matching commits through constructor and setter|covered||
279
+ test_log_execute.rb|29|def|test_log_max_count_all|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|:all max_count returns all matching commits through constructor and setter|covered||
280
+ test_log_execute.rb|36|def|test_log_all|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#all includes all refs without changing max_count semantics|covered||
281
+ test_log_execute.rb|41|def|test_log_non_integer_count|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/logging_spec.rb|Repository logging unit spec covers non-integer count validation and ArgumentError.|non-integer log count raises ArgumentError|covered||
282
+ test_log_execute.rb|45|def|test_get_first_and_last_entries|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/logging_spec.rb|Integration logging spec verifies log.execute returns a Git::Log::Result with Commit entries in reverse chronological order.|log result entries are commit objects in reverse chronological order|covered||
283
+ test_log_execute.rb|54|def|test_get_log_entries|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/logging_spec.rb|Integration logging spec verifies the log count argument limits returned commits.|log count argument limits number of returned commits|covered||
284
+ test_log_execute.rb|60|def|test_get_log_to_s|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log::Result#to_s joins commit SHAs with first line matching first SHA|covered||
285
+ test_log_execute.rb|65|def|test_log_skip|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#skip offsets returned commits consistently|covered||
286
+ test_log_execute.rb|73|def|test_get_log_since|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#since filters commits by relative date|covered||
287
+ test_log_execute.rb|81|def|test_get_log_grep|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#grep filters commits by message text|covered||
288
+ test_log_execute.rb|86|def|test_get_log_author|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#author filters commits by author regex|covered||
289
+ test_log_execute.rb|93|def|test_get_log_since_file|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#between chained with path limits commits to file in revision range|covered||
290
+ test_log_execute.rb|101|def|test_get_log_path|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#path accepts string wildcard and array path limiters|covered||
291
+ test_log_execute.rb|110|def|test_log_file_noexist|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/log_spec.rb|Command log integration spec already verifies invalid revision/object errors are surfaced as Git::FailedError.|invalid log object raises Git::FailedError|covered||
292
+ test_log_execute.rb|116|def|test_log_with_empty_commit_message|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|log parsing preserves empty commit messages as empty strings|covered||
293
+ test_log_execute.rb|129|def|test_log_cherry|PORT|REDUNDANT|none|none|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#cherry filters symmetric-difference commits|covered||
294
+ test_log_execute.rb|134|def|test_log_merges|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/logging_spec.rb|Duplicate of the identically named test_log.rb test (same unit boundary); ported in W2-U8/U9. Execute-style phrasing adds no new behavior.|Git::Log#merges maps to --merges in full_log_commits|covered||
295
+ test_log_execute.rb|139|def|test_execute_returns_immutable_results|PORT|PORT|unit|none|Git::Log#execute immutable snapshot behavior is Git::Log value-object logic and lacks unit coverage.|Git::Log#execute returns immutable result snapshots after query mutation|port|spec/unit/git/log_spec.rb|ported
296
+ test_log_execute.rb|155|def|test_log_execute_on_empty_repo|PORT|PORT|unit|none|Git::Log#execute wrapping an empty commit list in Git::Log::Result lacks direct unit coverage.|Git::Log#execute on an empty repository returns an empty Git::Log::Result|port|spec/unit/git/log_spec.rb|ported
297
+ test_logger.rb|19|def|test_logger|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U1: subsumed by test_command_line.rb:198 port (logger INFO+DEBUG output). Level-filtering is Ruby Logger behavior, not ruby-git logic. Logger command/status and debug stdout formatting is command-line logging logic; current specs do not assert it directly.|debug logger file includes branch command and stdout entry|covered|spec/unit/git/command_line/base_spec.rb|
298
+ test_logger.rb|38|def|test_logging_at_info_level_should_not_show_debug_messages|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U1: subsumed by test_command_line.rb:198 port plus Ruby Logger standard level-filtering. Logger level behavior omitting DEBUG output is not directly covered; port as unit with StringIO logger and stubbed process result.|info logger file omits debug stdout entry|covered|spec/unit/git/command_line/base_spec.rb|
299
+ test_ls_files_with_escaped_path.rb|9|def|test_diff_with_non_ascii_filename|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/status_operations_spec.rb|Covered by spec/unit/git/repository/status_operations_spec.rb #ls_files git-quoted file path unescaping.|ls_files unescapes non-ASCII tracked filename|covered||
300
+ test_ls_tree.rb|6|def|test_ls_tree_with_submodules|REDUNDANT|REDUNDANT|none|spec/unit/git/parsers/ls_tree_spec.rb|LsTree parser unit spec covers commit submodule entries; repository object integration covers recursive ls_tree wiring.|ls_tree parses submodule commit entries and recursive tree listings|covered||
301
+ test_merge.rb|6|def|test_branch_and_merge|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Merging integration covers merging a feature branch and merged file visibility.|branch merge brings feature file into current branch|covered||
302
+ test_merge.rb|28|def|test_branch_and_merge_two|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Merging unit covers Branch coercion and integration covers merge with a Git::Branch object.|merge accepts branch object and merged branch content appears|covered||
303
+ test_merge.rb|58|def|test_branch_and_merge_multiple|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Merging unit and integration specs cover array branch octopus merge.|merge accepts array of branches and merges all files|covered||
304
+ test_merge.rb|86|def|test_no_ff_merge|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Merging integration covers fast-forward message ignored and no_ff merge commit message.|fast-forward ignores message and no_ff creates merge commit message|covered||
305
+ test_merge.rb|114|def|test_merge_no_commit|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Merging integration covers no_commit leaving HEAD unchanged and staging result.|merge no_commit leaves HEAD unchanged and stages result|covered||
306
+ test_merge_base.rb|6|def|test_branch_and_master_merge_base|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/merging_spec.rb|Repository merge_base integration verifies a basic common ancestor and unit specs cover stdout parsing.|merge_base returns the correct common ancestor SHA for two divergent branches|covered||
307
+ test_merge_base.rb|19|def|test_branch_and_master_independent_merge_base|PORT|REDUNDANT|none|none|Independent option wiring is covered by command and repository unit specs; exhaustive git graph semantics should not be ported.|merge_base independent returns both mutually unreachable branch tips|covered||
308
+ test_merge_base.rb|33|def|test_branch_and_master_fork_point_merge_base|PORT|REDUNDANT|none|none|Fork-point option wiring is covered by command and repository unit specs; reflog graph semantics are heavy git behavior.|merge_base fork_point returns reflog fork point after branch reset|covered||
309
+ test_merge_base.rb|51|def|test_branch_and_master_all_merge_base|PORT|REDUNDANT|none|none|All-option wiring is unit-covered and integration has minimal multiple-base coverage; exact criss-cross matrix is heavy git behavior.|merge_base default returns one criss-cross base while all true returns both best bases exactly|covered||
310
+ test_merge_base.rb|79|def|test_branches_and_master_merge_base|PORT|REDUNDANT|none|none|Three-commit operand forwarding is covered by command and repository unit specs; non-octopus graph semantics need not be ported.|merge_base with three commits returns non-octopus common ancestor|covered||
311
+ test_merge_base.rb|95|def|test_branches_and_master_octopus_merge_base|PORT|REDUNDANT|none|none|Octopus option wiring is covered by command and repository unit specs; exhaustive real-git graph semantics should not be ported.|merge_base octopus option returns common ancestor across multiple branches|covered||
312
+ test_object.rb|15|def|test_sha_state|PORT|PORT|unit|none|Commit#sha stability after lazy commit data loading is value-object logic and is not directly unit-covered.|object SHA remains stable after lazy date load|port|spec/unit/git/object_spec.rb|ported
313
+ test_object.rb|22|def|test_commit|PORT|REDUNDANT|none|none|Git::Object::Commit unit specs cover tree, parent, author, committer, dates, message, and predicate behavior with stubbed data.|real commit objects expose tree parent author committer dates names and message|covered||
314
+ test_object.rb|53|def|test_commit_contents|PORT|REDUNDANT|none|none|AbstractObject#contents_array splitting is unit-covered, and cat-file commit parsing covers raw tree and parent headers.|commit contents_array exposes raw tree and parent header lines|covered||
315
+ test_object.rb|59|def|test_object_to_s|PORT|REDUNDANT|none|none|AbstractObject#sha resolution is unit-covered and gcommit, gtree, and gblob factory delegation is covered in repository object specs.|commit tree and blob objectish values resolve to full SHAs|covered||
316
+ test_object.rb|65|def|test_cat_file_size|PORT|REDUNDANT|none|none|cat_file_size unit and integration specs cover commit, tree, and blob size behavior; fixture byte constants need not be ported.|cat-file size returns exact byte sizes for commit tree and blob objects|covered||
317
+ test_object.rb|71|def|test_tree|PORT|REDUNDANT|none|none|Tree value-object methods are unit-covered and object operation integration covers ls_tree, full_tree, and depth wiring.|tree objects expose children blobs subtrees full_tree depth and tree? from real git|covered||
318
+ test_object.rb|93|def|test_tree_contents|PORT|REDUNDANT|none|none|contents_array splitting and ls-tree output formatting are covered by unit parser and object specs.|tree contents_array exposes raw ls-tree entries|covered||
319
+ test_object.rb|98|def|test_blob|PORT|REDUNDANT|none|none|gblob delegation and Blob factory behavior are unit-covered; real-git blob path syntax is already covered at lower layers.|gblob returns Blob objects for abbreviated SHA and treeish path|covered||
320
+ test_object.rb|108|def|test_blob_contents|REDUNDANT|REDUNDANT|none|spec/unit/git/object_spec.rb|Blob#contents caching and block streaming are directly covered in unit object specs.|Blob#contents returns cached content and yields streamed content to a block|covered||
321
+ test_object.rb|123|def|test_rev_parse|PORT|REDUNDANT|none|none|rev_parse forwarding is unit-covered and integration covers representative revision syntax; blob-path syntax is a git matrix case.|rev_parse resolves treeish blob path syntax to full SHA|covered||
322
+ test_object.rb|128|def|test_grep|PORT|REDUNDANT|none|none|Object#grep and repository grep specs cover object scoping and path limiter behavior at the unit layer.|Git::Object#grep searches tree and commit objects with optional path limiter|covered||
323
+ test_object_new.rb|34|def|test_new_creates_commit_object|REDUNDANT|REDUNDANT|none|spec/unit/git/object_spec.rb|Git::Object.new without a type creating a Commit is directly covered in unit object specs.|Git::Object.new without type creates Commit based on cat_file_type|covered||
324
+ test_object_new.rb|41|def|test_new_creates_tree_object|PORT|PORT|unit|none|Git::Object.new without a type creating a Tree is factory logic not directly covered by unit specs.|Git::Object.new without type creates Tree for a tree SHA|port|spec/unit/git/object_spec.rb|ported
325
+ test_object_new.rb|48|def|test_new_creates_blob_object|PORT|PORT|unit|none|Git::Object.new without a type creating a Blob is factory logic not directly covered by unit specs.|Git::Object.new without type creates Blob for a blob SHA|port|spec/unit/git/object_spec.rb|ported
326
+ test_per_instance_config.rb|6|macro|Git.clone passes git_ssh through execution context|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb|Covered by spec/unit/git/repository/factories_spec.rb Git.clone git_ssh execution-context forwarding.|Git.clone passes git_ssh into clone execution context|covered||
327
+ test_per_instance_config.rb|23|macro|per-instance git_ssh: nil overrides global SSH key|PORT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb; spec/unit/git/execution_context_spec.rb|Covered by factories_spec (Git.init forwards git_ssh: nil to the execution context) and execution_context_spec #git_ssh (explicit nil returns nil) and #env_overrides (GIT_SSH => nil when built with git_ssh: nil).|Git.init git_ssh nil overrides global SSH config|covered||
328
+ test_per_instance_config.rb|38|macro|Git.init passes git_ssh through execution context|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/factories_spec.rb|Covered by spec/unit/git/repository/factories_spec.rb Git.init custom git_ssh execution-context forwarding.|Git.init passes git_ssh into execution context|covered||
329
+ test_pull.rb|6|macro|pull with branch only should raise an ArgumentError|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Branch-without-remote ArgumentError is covered by spec/unit/git/repository/remote_operations_spec.rb.|pull branch without remote raises ArgumentError|covered||
330
+ test_pull.rb|26|macro|pull with no args should use the default remote and current branch name|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Pull default-argument delegation and policy options are covered by spec/unit/git/repository/remote_operations_spec.rb.|pull with no args delegates using default policy options|covered||
331
+ test_pull.rb|56|macro|pull with one arg should use arg as remote and the current branch name|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Pull one-arg remote delegation is covered by spec/unit/git/repository/remote_operations_spec.rb.|pull with one arg uses it as remote|covered||
332
+ test_pull.rb|86|macro|pull with both remote and branch should use both|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/pull_spec.rb|Pull remote+branch succeeds against real git in spec/integration/git/commands/pull_spec.rb and repository integration.|pull with remote and branch succeeds and updates commits|covered||
333
+ test_pull.rb|120|macro|when pull fails a Git::FailedError should be raised|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/remote_operations_spec.rb|Pull failure raises Git::FailedError in spec/integration/git/repository/remote_operations_spec.rb and command integration.|pull failure raises Git::FailedError|covered||
334
+ test_pull.rb|140|macro|pull with allow_unrelated_histories: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/pull_spec.rb|allow_unrelated_histories flag rendering is covered by spec/unit/git/commands/pull_spec.rb and facade unit spec.|pull allow_unrelated_histories renders flag with remote and branch|covered||
335
+ test_push.rb|6|macro|push with no args|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|No-arg push command rendering is covered by spec/unit/git/commands/push_spec.rb.|push with no args renders git push|covered||
336
+ test_push.rb|11|macro|push with no args and options|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Push options-only facade form is covered by spec/unit/git/repository/remote_operations_spec.rb.|push with only options omits remote positional argument|covered||
337
+ test_push.rb|16|macro|push with only a remote name|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|Push remote operand rendering is covered by spec/unit/git/commands/push_spec.rb.|push with remote name renders operand after --|covered||
338
+ test_push.rb|21|macro|push with a single push option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|Single push_option rendering is covered by spec/unit/git/commands/push_spec.rb.|push single push_option renders --push-option|covered||
339
+ test_push.rb|26|macro|push with an array of push options|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|Repeated push_option rendering is covered by spec/unit/git/commands/push_spec.rb.|push array push_option repeats --push-option|covered||
340
+ test_push.rb|31|macro|push with only a remote name and options|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Remote plus force option facade delegation is covered by spec/unit/git/repository/remote_operations_spec.rb.|push remote with force forwards option|covered||
341
+ test_push.rb|36|macro|push with only a branch name|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Branch without remote ArgumentError is covered by spec/unit/git/repository/remote_operations_spec.rb.|push branch without remote raises ArgumentError|covered||
342
+ test_push.rb|43|macro|push with both remote and branch name|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|Remote and branch operand rendering is covered by spec/unit/git/commands/push_spec.rb.|push remote and branch renders both operands|covered||
343
+ test_push.rb|48|macro|push with force: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|force option rendering is covered by spec/unit/git/commands/push_spec.rb.|push force true renders --force|covered||
344
+ test_push.rb|53|macro|push with f: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|f alias rendering is covered by spec/unit/git/commands/push_spec.rb.|push f alias renders --force|covered||
345
+ test_push.rb|58|macro|push with mirror: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|mirror option rendering is covered by spec/unit/git/commands/push_spec.rb.|push mirror true renders --mirror|covered||
346
+ test_push.rb|63|macro|push with delete: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|delete option rendering is covered by spec/unit/git/commands/push_spec.rb.|push delete true renders --delete|covered||
347
+ test_push.rb|68|macro|push with tags: true does a second tags push and returns its stdout|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|tags true two-push facade behavior is covered by spec/unit/git/repository/remote_operations_spec.rb.|push tags true issues second tags push and returns its stdout|covered||
348
+ test_push.rb|86|macro|push with mirror: true and tags: true silently drops tags push|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|mirror plus tags suppression is covered by spec/unit/git/repository/remote_operations_spec.rb.|push mirror and tags performs only mirror push|covered||
349
+ test_push.rb|102|macro|push with all: true and tags: true allows the mutually exclusive combination|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|all plus tags two-push behavior is covered by spec/unit/git/repository/remote_operations_spec.rb.|push all and tags performs second all-tags push|covered||
350
+ test_push.rb|120|macro|push with all: true|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/push_spec.rb|all option rendering is covered by spec/unit/git/commands/push_spec.rb.|push all true renders --all|covered||
351
+ test_push.rb|125|macro|push rejects branches option because it was not supported by the legacy interface|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Legacy rejection of branches option is covered by spec/unit/git/repository/remote_operations_spec.rb.|legacy push rejects branches option|covered||
352
+ test_push.rb|134|macro|push rejects timeout option because it was not supported by the legacy interface|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Legacy rejection of timeout option is covered by spec/unit/git/repository/remote_operations_spec.rb.|legacy push rejects timeout option|covered||
353
+ test_push.rb|143|macro|when push succeeds an error should not be raised|PORT|PORT|integration|none|Repository-level push with no args succeeding via default upstream is not covered by current integration specs.|Git#push with no args succeeds after new commit in cloned repo|port|spec/integration/git/repository/remote_operations_spec.rb|ported
354
+ test_push.rb|157|macro|when push fails a Git::FailedError should be raised|PORT|PORT|integration|none|Repository-level push with no args failing is not covered by current integration specs; existing failures use explicit remote.|Git#push with no args raises Git::FailedError when nothing can be pushed|port|spec/integration/git/repository/remote_operations_spec.rb|ported
355
+ test_remotes.rb|6|def|test_remote_add|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/remote_operations_spec.rb|remote_add registration and fetch/track smoke coverage exists in spec/integration/git/repository/remote_operations_spec.rb.|remote_add registers remotes with fetch and track options|covered||
356
+ test_remotes.rb|30|def|test_remote_remove|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/remote_operations_spec.rb|remote_remove integration plus Remote#remove unit delegation cover both removal paths.|remote_remove and Remote#remove remove configured remote|covered||
357
+ test_remotes.rb|47|def|test_remote_set_url|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/remote_operations_spec.rb|remote_set_url integration verifies configured URL update.|remote_set_url updates configured remote URL|covered||
358
+ test_remotes.rb|62|def|test_remote_set_branches_command|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/remote/set_branches_spec.rb|remote set-branches --add ordering is covered by spec/unit/git/commands/remote/set_branches_spec.rb.|remote set-branches includes --add before origin and branch|covered||
359
+ test_remotes.rb|70|def|test_remote_set_branches_command_without_add|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/remote/set_branches_spec.rb|remote set-branches without add is covered by spec/unit/git/commands/remote/set_branches_spec.rb.|remote set-branches without add omits --add|covered||
360
+ test_remotes.rb|78|def|test_remote_set_branches_command_with_add_false|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|add false replacement delegation is covered by spec/unit/git/repository/remote_operations_spec.rb and command unit specs.|remote_set_branches add false delegates as replacement|covered||
361
+ test_remotes.rb|86|def|test_remote_set_branches_command_with_multiple_branches|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/remote/set_branches_spec.rb|Multiple branch operands are covered by spec/unit/git/commands/remote/set_branches_spec.rb.|remote set-branches passes multiple branches|covered||
362
+ test_remotes.rb|94|def|test_remote_set_branches_requires_branch_arguments|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Required branch argument validation is covered by spec/unit/git/repository/remote_operations_spec.rb or command validation.|remote_set_branches requires at least one branch|covered||
363
+ test_remotes.rb|102|def|test_remote_set_branches_fetches_additional_branch|PORT|REDUNDANT|none|none|Current integration covers add: true appending tracked branches; unit command covers --add, so no heavier fetch matrix needed.|remote_set_branches add true enables fetching an additional branch|covered||
364
+ test_remotes.rb|130|def|test_remote_set_branches_replaces_fetch_refspecs|PORT|REDUNDANT|none|none|Current integration covers replacement tracking config; additional multi-refspec replacement matrix is not needed.|remote_set_branches replacement removes prior multiple fetch refspecs|covered||
365
+ test_remotes.rb|162|def|test_remote_fun|PORT|REDUNDANT|none|none|Remote#fetch and #merge delegate in spec/unit/git/remote_spec.rb; repository fetch/merge have integration wiring.|Remote#fetch and Remote#merge update local files from remote branches|covered||
366
+ test_remotes.rb|197|def|test_fetch|PORT|REDUNDANT|none|none|Fetch tags option rendering/delegation is unit-covered and fetch has minimal integration; deleted-branch tag matrix is excessive.|Remote#fetch only fetches deleted-branch tags when tags true|covered||
367
+ test_remotes.rb|224|def|test_fetch_cmd_with_no_args|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Fetch default remote and merge true are covered by spec/unit/git/repository/remote_operations_spec.rb.|fetch with no args uses origin and merge true|covered||
368
+ test_remotes.rb|229|def|test_fetch_cmd_with_origin_and_branch|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fetch_spec.rb|Fetch depth/refspec option ordering is covered by spec/unit/git/commands/fetch_spec.rb.|fetch remote branch with depth renders options before operands|covered||
369
+ test_remotes.rb|234|def|test_fetch_cmd_with_all|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fetch_spec.rb|Fetch all rendering is covered by spec/unit/git/commands/fetch_spec.rb.|fetch all renders --all without repository operand|covered||
370
+ test_remotes.rb|239|def|test_fetch_cmd_with_all_with_other_args|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fetch_spec.rb|Fetch all with depth and force DSL order is covered by spec/unit/git/commands/fetch_spec.rb.|fetch all with depth and force renders options in DSL order|covered||
371
+ test_remotes.rb|245|def|test_fetch_cmd_with_update_head_ok|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/fetch_spec.rb|Fetch update-head-ok option is covered by spec/unit/git/commands/fetch_spec.rb.|fetch supports update-head-ok option|covered||
372
+ test_remotes.rb|250|def|test_fetch_command_injection|PORT|PORT|unit|none|No unit spec explicitly asserts a malicious remote-looking string is passed as one operand after --; port as command/facade argument-building logic.; U12: retargeted to remote_operations_spec.rb (fetch builds the command line); ported as malicious remote forwarded verbatim as one positional|fetch treats malicious remote name as data not shell command|port|spec/unit/git/repository/remote_operations_spec.rb|ported
373
+ test_remotes.rb|269|def|test_fetch_ref_adds_ref_option|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Fetch ref option appended as positional refspec is covered by spec/unit/git/repository/remote_operations_spec.rb.|fetch ref option is appended as a positional refspec|covered||
374
+ test_remotes.rb|303|def|test_push|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/remote_operations_spec.rb|Branch push and legacy true-tags shorthand are covered by spec/unit/git/repository/remote_operations_spec.rb.|push supports branch push and legacy true tags shorthand|covered||
375
+ test_remotes.rb|344|macro|Remote#branch with no args|REDUNDANT|REDUNDANT|none|spec/unit/git/remote_spec.rb|Remote#branch default current-branch behavior is covered by spec/unit/git/remote_spec.rb.|Remote#branch defaults to current branch and returns remote branch|covered||
376
+ test_remotes.rb|367|macro|Remote#merge with no args|REDUNDANT|REDUNDANT|none|spec/unit/git/remote_spec.rb|Remote#merge default current-branch behavior is covered by spec/unit/git/remote_spec.rb.|Remote#merge with no branch merges current remote tracking branch|covered||
377
+ test_repack.rb|6|macro|should be able to call repack with the right args|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/maintenance_spec.rb|Repository Maintenance unit spec verifies repack delegates with a: true and d: true.|repack facade passes a and d options|covered||
378
+ test_rm.rb|12|macro|"rm with no options should specify ""."" for the pathspec"|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Repository Staging unit spec covers default rm pathspec of dot.|rm defaults pathspec to dot|covered||
379
+ test_rm.rb|17|macro|rm with one pathspec|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/rm_spec.rb|Rm command unit spec covers a single pathspec.|rm accepts one pathspec|covered||
380
+ test_rm.rb|22|macro|rm with multiple pathspecs|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Repository Staging unit spec covers array pathspec splatting.|rm accepts array of pathspecs|covered||
381
+ test_rm.rb|27|macro|rm with the force option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/rm_spec.rb|Rm command unit spec covers --force argument construction.|rm adds force flag|covered||
382
+ test_rm.rb|32|macro|rm with the recursive option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/rm_spec.rb|Rm command unit spec covers -r argument construction.|rm adds recursive flag|covered||
383
+ test_rm.rb|37|macro|rm with the cached option|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/rm_spec.rb|Rm command unit spec covers --cached argument construction.|rm adds cached flag|covered||
384
+ test_rm.rb|42|macro|when rm succeeds an error should not be raised|PORT|PORT|integration|none|Real git rm side effect removing a tracked file from the working tree is not asserted by current thin command integration.|rm removes tracked file from working tree|port|spec/integration/git/repository/staging_spec.rb|ported
385
+ test_rm.rb|59|macro|#rm should be aliased to #remove|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Repository Staging unit spec verifies remove is an alias for rm.|remove is alias for rm|covered||
386
+ test_rm.rb|76|macro|when rm fails a Git::FailedError error should be raised|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/rm_spec.rb|Rm command integration already verifies nonexistent paths raise Git::FailedError.|rm raises FailedError for nonexistent file|covered||
387
+ test_set_index.rb|41|def|test_set_index_with_must_exist_false_for_new_path|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/context_helpers_spec.rb|ContextHelpers unit spec covers set_index with must_exist: false for missing paths.|set_index accepts missing path when must_exist false|covered||
388
+ test_set_index.rb|54|def|test_set_index_with_must_exist_true_for_existing_path|PORT|PORT|unit|none|set_index success with must_exist: true and an existing path is pure path validation logic not explicitly covered.; U12: retargeted to context_helpers_spec.rb; ported must_exist:true existing-path happy path|set_index accepts existing path when must_exist true|port|spec/unit/git/repository/context_helpers_spec.rb|ported
389
+ test_set_index.rb|67|def|test_set_index_with_must_exist_true_raises_error_for_new_path|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/context_helpers_spec.rb|ContextHelpers unit spec covers default/must_exist true missing path ArgumentError.|set_index raises ArgumentError for missing path by default|covered||
390
+ test_set_index.rb|78|def|test_set_index_with_deprecated_check_argument|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/context_helpers_spec.rb|ContextHelpers unit spec covers deprecated positional check warning and update behavior.|set_index deprecated check argument warns and still updates|covered||
391
+ test_set_index.rb|101|def|test_programmatic_commit_with_set_index|PORT|PORT|integration|none|Custom index programmatic tree/commit isolation depends on real git index/object behavior and is not covered.|custom index supports programmatic tree commit without changing main branch|port|spec/integration/git/repository/committing_spec.rb|ported
392
+ test_set_working.rb|28|def|test_set_working_with_must_exist_false_for_new_path|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/context_helpers_spec.rb|ContextHelpers unit spec covers set_working with must_exist: false for missing paths.|set_working accepts missing path when must_exist false|covered||
393
+ test_set_working.rb|41|def|test_set_working_with_must_exist_true_for_existing_path|PORT|PORT|unit|none|set_working success with must_exist: true and an existing directory is pure path validation logic not explicitly covered.; U12: retargeted to context_helpers_spec.rb; ported must_exist:true existing-dir happy path|set_working accepts existing directory when must_exist true|port|spec/unit/git/repository/context_helpers_spec.rb|ported
394
+ test_set_working.rb|54|def|test_set_working_with_must_exist_true_raises_error_for_new_path|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/context_helpers_spec.rb|ContextHelpers unit spec covers default/must_exist true missing directory ArgumentError.|set_working raises ArgumentError for missing directory by default|covered||
395
+ test_set_working.rb|65|def|test_set_working_with_deprecated_check_argument|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/context_helpers_spec.rb|ContextHelpers unit spec covers deprecated positional check warning and update behavior.|set_working deprecated check argument warns and still updates|covered||
396
+ test_show.rb|6|def|test_do_not_chomp_contents|PORT|REDUNDANT|none|none|Show command unit spec verifies chomp:false and repository show unit spec returns stdout unchanged, preserving trailing blank lines.|repository show preserves trailing newlines and blank lines when reading index blob|covered||
397
+ test_signaled_error.rb|6|def|test_initializer|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U2: SignaledError parent-class relationship is structural identity (Rule 24); class SignaledError < Git::CommandLineError has no overridden code path to exercise. SignaledError inheritance/error class behavior lacks dedicated unit coverage.|SignaledError is a Git::Error|covered|spec/unit/git/command_line_error_spec.rb|
398
+ test_signaled_error.rb|16|def|test_to_s|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U2: SignaledError#to_s is inherited verbatim from CommandLineError (no override). The format is exercised by command_line_error_spec.rb #to_s (Rule 24 structural). SignaledError message formatting with signal status and stderr lacks dedicated unit coverage.|SignaledError to_s includes signal status and stderr|covered|spec/unit/git/command_line_error_spec.rb|
399
+ test_signed_commits.rb|27|def|test_cat_file_commit|PORT|PORT|integration|none|Parser unit covers multiline gpgsig; real SSH signed commit generation/parsing needs git plus ssh signing tooling.|cat_file_commit parses real SSH signed commit gpgsig and message|port|spec/integration/git/repository/object_operations_spec.rb|ported
400
+ test_stash_list.rb|6|macro|stashes_all returns a single-element array for one stash|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/stashing_spec.rb|Covered by spec/integration/git/repository/stashing_spec.rb one stash entry and stripped message.|stashes_all returns one index message pair|covered||
401
+ test_stash_list.rb|19|macro|stashes_all returns a multi-element array for multiple stashes|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/stashing_spec.rb|Covered by spec/integration/git/repository/stashing_spec.rb multiple stashes oldest-first.|stashes_all returns multiple stashes oldest first|covered||
402
+ test_stash_list.rb|37|macro|stashes_all returns empty array when no stashes exist|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/stashing_spec.rb|Covered by spec/integration/git/repository/stashing_spec.rb no stashes returns empty array.|stashes_all returns empty array with no stashes|covered||
403
+ test_stash_list.rb|45|macro|stashes_all returns [index, message] pair for stash from detached HEAD|PORT|PORT|integration|none|Detached HEAD stash output is not covered; requires real git detached-HEAD state.|stashes_all handles detached HEAD stash message|port|spec/integration/git/repository/stashing_spec.rb|ported
404
+ test_stash_list.rb|69|macro|stashes_all handles a stash message containing a colon|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/stashing_spec.rb|Covered by spec/integration/git/repository/stashing_spec.rb branch-prefixed message preserving internal colon.|stashes_all preserves colon inside branch-prefixed message|covered||
405
+ test_stash_list.rb|82|macro|stashes_all handles a stash created with a custom message via git stash store|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/stashing_spec.rb|Covered by spec/unit/git/repository/stashing_spec.rb custom stash message without branch prefix remains unchanged.|stashes_all keeps custom stash store message without branch prefix|covered||
406
+ test_stash_list.rb|101|macro|stashes_all handles a stash store message that itself contains a colon|REDUNDANT|REDUNDANT|none|spec/integration/git/parsers/stash_spec.rb|Covered by spec/integration/git/parsers/stash_spec.rb real custom store message containing a colon.|stashes_all keeps custom stash store message containing colon|covered||
407
+ test_stash_save.rb|6|macro|stash_save returns true when changes are stashed|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/stashing_spec.rb|Covered by spec/unit/git/repository/stashing_spec.rb stash_save returns true when push output indicates saved changes.|stash_save returns true when changes are stashed|covered||
408
+ test_stash_save.rb|17|macro|stash_save returns false when there are no local changes to save|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/stashing_spec.rb|Covered by spec/unit/git/repository/stashing_spec.rb stash_save returns false for no local changes output.|stash_save returns false when no local changes exist|covered||
409
+ test_stash_save.rb|25|macro|stash_save raises an error on an unborn branch|PORT|PORT|integration|none|Unborn-branch stash failure is not covered and depends on real git repository state.|stash_save raises FailedError on unborn branch|port|spec/integration/git/repository/stashing_spec.rb|ported
410
+ test_stashes.rb|6|def|test_stash_unstash|PORT|PORT|integration|none|Branch stashes save/reset/apply staged-file restoration is a real multi-command git workflow not covered end-to-end.|branch stashes save reset and apply restores staged file|port|spec/integration/git/repository/stashing_spec.rb|ported
411
+ test_stashes.rb|29|macro|stashes_all|PORT|REDUNDANT|none|none|Covered by spec/integration/git/repository/stashing_spec.rb single saved stash message via stashes_all.|legacy stashes_all returns saved stash message|covered||
412
+ test_stashes.rb|55|macro|stashes_all - stash message has colon|PORT|REDUNDANT|none|none|Covered by spec/integration/git/repository/stashing_spec.rb stashes_all preserves colon after branch prefix.|legacy stashes_all preserves colon in saved stash message|covered||
413
+ test_stashes.rb|81|macro|stashes_all -- git stash message with no branch and no colon|PORT|REDUNDANT|none|none|Covered by spec/unit/git/repository/stashing_spec.rb custom no-branch stash message remains unchanged.|legacy stashes_all handles custom store message without branch prefix|covered||
414
+ test_stashes.rb|107|macro|stashes_all -- git stash message with no branch and explicit colon|PORT|REDUNDANT|none|none|Covered by parser integration plus repository unit coverage for no-branch/custom colon messages.|legacy stashes_all preserves nonstandard colon custom store message|covered||
415
+ test_status.rb|10|def|test_status_pretty|PORT|PORT|unit|none|Git::Status#pretty formatting of StatusFile metadata has no unit coverage.|status.pretty formats tracked file metadata|port|spec/unit/git/status_spec.rb|ported
416
+ test_status.rb|26|def|test_on_empty_repo|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/status_operations_spec.rb|Covered by spec/integration/git/repository/status_operations_spec.rb #status no commits returns Git::Status and unit StatusFileFactory no_commits? true skips diff_index.|status works in repository with no commits|covered||
417
+ test_status.rb|36|def|test_added|PORT|PORT|unit|none|Git::Status#added collection and factory merge of diff_index added files are only partially covered; add unit coverage for observable collection result.|status.added returns newly staged file after prior commit|port|spec/unit/git/status_spec.rb|ported
418
+ test_status.rb|59|def|test_added_on_empty_repo|PORT|PORT|unit|none|No-commit staged files should not appear in #added; existing unit spec skips diff_index only for empty data, not staged ls_files entries.|status.added is empty in no-commit repository with staged files|port|spec/unit/git/status_spec.rb|ported
419
+ test_status.rb|75|def|test_dot_files_status|PORT|PORT|unit|none|Git::Status#added should preserve dotfile paths; no unit spec covers added collection keys.|status.added includes dotfiles|port|spec/unit/git/status_spec.rb|ported
420
+ test_status.rb|90|def|test_added_boolean|PORT|PORT|unit|none|Status ignoreCase behavior is only unit-covered for #changed?; #added? exact/case-insensitive lookup is a unit gap.|status.added? honors core.ignoreCase and exact path matching|port|spec/unit/git/status_ignore_case_spec.rb|ported
421
+ test_status.rb|109|def|test_changed_boolean|REDUNDANT|REDUNDANT|none|spec/unit/git/status_ignore_case_spec.rb|Covered by spec/unit/git/status_ignore_case_spec.rb #changed? exact path, case mismatch, and core.ignoreCase true behavior.|status.changed? honors core.ignoreCase and exact path matching|covered||
422
+ test_status.rb|134|def|test_deleted_boolean|PORT|PORT|unit|none|Status ignoreCase behavior is not unit-covered for #deleted?; add collection lookup coverage with stubs.|status.deleted? honors core.ignoreCase and exact path matching|port|spec/unit/git/status_ignore_case_spec.rb|ported
423
+ test_status.rb|155|def|test_untracked|REDUNDANT|PORT|unit|spec/integration/git/repository/status_operations_spec.rb|Existing coverage is integration-only for status.untracked; Git::Status#untracked collection logic has no unit spec.|status.untracked lists untracked root and subdir files|port|spec/unit/git/status_spec.rb|ported
424
+ test_status.rb|172|def|test_untracked_no_untracked_files|REDUNDANT|PORT|unit|spec/integration/git/repository/status_operations_spec.rb|Existing empty-untracked coverage is on Repository#untracked_files integration/unit, not Git::Status#untracked collection; add unit coverage.|status.untracked is empty when no untracked files exist|port|spec/unit/git/status_spec.rb|ported
425
+ test_status.rb|186|def|test_untracked_from_subdir|PORT|PORT|integration|none|Subdirectory invocation/root-relative untracked paths depend on real working-directory wiring; no current integration covers opening from a subdir.|status.untracked from Git.open in subdir returns repo-root relative paths|port|spec/integration/git/repository/status_operations_spec.rb|ported
426
+ test_status.rb|205|def|test_untracked_boolean|PORT|PORT|unit|none|Status ignoreCase behavior is not unit-covered for #untracked?; add collection lookup coverage with stubs.|status.untracked? honors core.ignoreCase and exact path matching|port|spec/unit/git/status_ignore_case_spec.rb|ported
427
+ test_status.rb|223|def|test_changed_cache|PORT|PORT|integration|none|False changed? after delete/recreate same content depends on real git index refresh/stat cache; existing unit only checks Status command runs before diff_files.|status.changed? is false when deleted file is recreated with same content|port|spec/integration/git/repository/status_operations_spec.rb|ported
428
+ test_status.rb|239|def|test_multibyte_path|PORT|PORT|unit|none|Command path unescaping has unit coverage, but Status added/untracked/changed/deleted collection aggregation with multibyte keys remains uncovered.|status collections handle multibyte paths for added untracked changed deleted|port|spec/unit/git/status_spec.rb|ported
429
+ test_status_object.rb|42|def|test_no_changes|PORT|PORT|unit|none|StatusFileFactory clean tracked-file metadata from ls_files is not fully asserted; add unit coverage with stubbed provider hashes.|clean committed repo status files include tracked file metadata|port|spec/unit/git/status_spec.rb|ported
430
+ test_status_object.rb|80|def|test_delete_file1_from_worktree|PORT|PORT|unit|none|Deleted worktree metadata from diff_files into StatusFile is not covered; repository parser/factory matrix gap.|deleting tracked file in worktree records deleted type and repo metadata|port|spec/unit/git/status_spec.rb|ported
431
+ test_status_object.rb|120|def|test_delete_file1_from_index|PORT|PORT|unit|none|Staged deletion metadata from diff_index into StatusFile is not covered by existing unit specs.|git rm staged deletion records deleted type and zero index metadata|port|spec/unit/git/status_spec.rb|ported
432
+ test_status_object.rb|158|def|test_delete_file1_from_index_and_recreate_in_worktree|PORT|PORT|unit|none|Mixed staged deletion plus recreated untracked file merge behavior is not covered; unit-test factory merge order with stubs.|staged deletion plus recreated worktree file records deleted and untracked states|port|spec/unit/git/status_spec.rb|ported
433
+ test_status_object.rb|198|def|test_modify_file1_in_worktree|PORT|PORT|unit|none|Unstaged modification repo/index metadata in StatusFile is not covered beyond a generic diff_files parser example.|unstaged modification records modified type and repo/index metadata|port|spec/unit/git/status_spec.rb|ported
434
+ test_status_object.rb|238|def|test_modify_file1_in_worktree_and_add_to_index|PORT|PORT|unit|none|Staged modification metadata from diff_index is not covered by StatusFileFactory unit specs.|staged modification records modified type and staged SHA|port|spec/unit/git/status_spec.rb|ported
435
+ test_status_object.rb|277|def|test_modify_file1_in_worktree_and_add_to_index_and_modify_in_worktree|PORT|PORT|unit|none|Staged then further modified mixed state merge behavior is not covered; add unit factory/parser coverage.|staged then further modified file records modified type for mixed state|port|spec/unit/git/status_spec.rb|ported
436
+ test_status_object.rb|319|def|test_modify_file1_in_worktree_and_add_to_index_and_delete_in_worktree|PORT|PORT|unit|none|Staged modification followed by worktree deletion metadata merge is not covered by existing unit specs.|staged modification then worktree deletion records deleted state|port|spec/unit/git/status_spec.rb|ported
437
+ test_status_object.rb|361|def|test_add_file3_to_worktree|PORT|PORT|unit|none|Untracked file alongside clean tracked files is only partially covered; StatusFileFactory should be unit-tested for preserving both.|untracked file appears alongside clean tracked files|port|spec/unit/git/status_spec.rb|ported
438
+ test_status_object.rb|404|def|test_add_file3_to_worktree_and_index|PORT|PORT|unit|none|Newly added index file metadata and zero repo fields are not covered by StatusFileFactory unit specs.|newly added file in index records added type and zero repo metadata|port|spec/unit/git/status_spec.rb|ported
439
+ test_status_object.rb|448|def|test_add_file3_to_worktree_and_index_and_modify_in_worktree|PORT|PORT|unit|none|Added-then-modified worktree state merge behavior is not covered; unit-test with stubbed ls_files/diff_files/diff_index data.|added then modified worktree file records modified added-file state|port|spec/unit/git/status_spec.rb|ported
440
+ test_status_object.rb|499|def|test_add_file3_to_worktree_and_index_and_delete_in_worktree|PORT|PORT|unit|none|Added-then-deleted worktree state merge behavior is not covered by existing unit specs.|added then deleted worktree file records deleted added-file state|port|spec/unit/git/status_spec.rb|ported
441
+ test_status_object_empty_repo.rb|30|def|test_no_changes|PORT|PORT|unit|none|No-commit staged tracked metadata is not fully covered; existing no_commits? unit case uses empty provider data.|no-commit repo with staged files exposes tracked metadata|port|spec/unit/git/status_spec.rb|ported
442
+ test_status_object_empty_repo.rb|66|def|test_delete_file1_from_worktree|PORT|PORT|unit|none|No-commit staged file deleted from worktree metadata is not covered; add unit factory/parser coverage.|deleting staged file in no-commit repo records deleted added-file state|port|spec/unit/git/status_spec.rb|ported
443
+ test_status_object_empty_repo.rb|107|def|test_delete_file1_from_index|PORT|PORT|unit|none|No-commit git rm leaves remaining staged metadata; existing unit specs do not cover this status matrix case.|removing staged file in no-commit repo leaves remaining staged metadata|port|spec/unit/git/status_spec.rb|ported
444
+ test_status_object_empty_repo.rb|142|def|test_delete_file1_from_index_and_recreate_in_worktree|PORT|PORT|unit|none|No-commit removed staged file recreated as untracked mixed state is not covered.|removing staged file and recreating as untracked records mixed state|port|spec/unit/git/status_spec.rb|ported
445
+ test_status_object_empty_repo.rb|184|def|test_modify_file1_in_worktree|PORT|PORT|unit|none|No-commit staged then modified worktree state is not covered by StatusFileFactory specs.|modifying staged file in no-commit repo records modified state|port|spec/unit/git/status_spec.rb|ported
446
+ test_status_object_empty_repo.rb|226|def|test_modify_file1_in_worktree_and_add_to_index|PORT|PORT|unit|none|No-commit modified and staged file updated SHA metadata is not covered.|modifying and staging file in no-commit repo updates staged SHA|port|spec/unit/git/status_spec.rb|ported
447
+ test_status_object_empty_repo.rb|270|def|test_modify_file1_in_worktree_and_add_to_index_and_modify_in_worktree|PORT|PORT|unit|none|No-commit staged then further modified mixed state is not covered.|staged then further modified file in no-commit repo records mixed modified state|port|spec/unit/git/status_spec.rb|ported
448
+ test_status_object_empty_repo.rb|316|def|test_modify_file1_in_worktree_and_add_to_index_and_delete_in_worktree|PORT|PORT|unit|none|No-commit staged then deleted file state is not covered.|staged then deleted file in no-commit repo records deleted state|port|spec/unit/git/status_spec.rb|ported
449
+ test_status_object_empty_repo.rb|363|def|test_add_file3_to_worktree|PORT|PORT|unit|none|No-commit extra untracked file preserving staged files is not covered by StatusFileFactory specs.|no-commit repo with extra untracked file preserves staged files and untracked|port|spec/unit/git/status_spec.rb|ported
450
+ test_status_object_empty_repo.rb|410|def|test_add_file3_to_worktree_and_index|PORT|PORT|unit|none|No-commit multiple staged files returned together is not covered.|no-commit repo with third staged file returns all staged files|port|spec/unit/git/status_spec.rb|ported
451
+ test_status_object_empty_repo.rb|458|def|test_add_file3_to_worktree_and_index_and_modify_in_worktree|PORT|PORT|unit|none|No-commit added then modified third file mixed state is not covered.|no-commit repo added then modified third file records mixed modified state|port|spec/unit/git/status_spec.rb|ported
452
+ test_status_object_empty_repo.rb|509|def|test_add_file3_to_worktree_and_index_and_delete_in_worktree|PORT|PORT|unit|none|No-commit added then deleted third file state is not covered.|no-commit repo added then deleted third file records deleted state|port|spec/unit/git/status_spec.rb|ported
453
+ test_submodule.rb|6|macro|Git.open should be able to open a submodule|PORT|PORT|integration|none|Git.open against an actual submodule checkout is real-git path resolution and has no RSpec integration coverage.|Git.open opens a submodule checkout and reads its HEAD|port|spec/integration/git/repository_spec.rb|ported
454
+ test_submodule.rb|29|macro|Git.open should be able to open a submodule from a subdirectory within the submodule|PORT|PORT|integration|none|Git.open from inside a submodule subdirectory is real-git root resolution and has no RSpec integration coverage.|Git.open from a submodule subdirectory resolves submodule repository|port|spec/integration/git/repository_spec.rb|ported
455
+ test_tags.rb|6|def|test_tags|PORT|REDUNDANT|none|none|Tag facade, value-object, parser, and command behaviors are covered by unit and command integration specs; clone lifecycle is too heavy.|end-to-end tag lifecycle across clones including missing tag errors annotated metadata lightweight tags force and delete|covered||
456
+ test_tags.rb|77|def|test_tag_message_not_prefixed_with_space|REDUNDANT|REDUNDANT|none|spec/integration/git/repository/object_operations_spec.rb|cat_file_tag integration and tag value-object unit specs cover annotated tag message parsing without an extra leading space.|annotated tag messages are returned without a leading space|covered||
457
+ test_thread_safety.rb|22|def|test_git_init_bare|PORT|PORT|integration|none|Concurrent Git.init bare repositories requires real git/repository wiring; no existing RSpec coverage. Port as minimal integration if still desired.|concurrent Git.init bare repositories are usable|port|spec/integration/git/thread_safety_spec.rb|ported
458
+ test_timeout_error.rb|6|def|test_initializer|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U2: TimeoutError parent-class relationship is structural identity (Rule 24). The TimeoutError-specific behavior (storing timeout_duration) is covered by the test_timeout_error.rb:17 port via have_attributes. TimeoutError inheritance from SignaledError lacks dedicated unit coverage.|TimeoutError is a SignaledError|covered|spec/unit/git/timeout_error_spec.rb|
459
+ test_timeout_error.rb|17|def|test_to_s|PORT|PORT|unit|none|TimeoutError exact message appending timeout duration lacks dedicated unit coverage, beyond loose raise_error matching.|TimeoutError to_s appends timeout duration|port|spec/unit/git/timeout_error_spec.rb|ported
460
+ test_tree_ops.rb|6|def|test_read_tree|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Repository staging unit spec covers read_tree treeish separator delegation and returned stdout.|read_tree delegates treeish with -- separator and returns command output|covered||
461
+ test_tree_ops.rb|12|def|test_read_tree_with_prefix|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/staging_spec.rb|Repository staging unit spec covers read_tree prefix option forwarding.|read_tree forwards prefix option to git read-tree|covered||
462
+ test_tree_ops.rb|19|def|test_write_tree|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/committing_spec.rb|Repository committing unit spec covers write_tree returning command stdout.|write_tree returns git write-tree stdout|covered||
463
+ test_tree_ops.rb|31|def|test_commit_tree_with_default_message|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/committing_spec.rb|Repository committing unit spec covers commit_tree default message normalization.|commit_tree uses default message derived from tree ref|covered||
464
+ test_tree_ops.rb|40|def|test_commit_tree_with_message|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/committing_spec.rb|Repository committing unit spec covers commit_tree custom message normalization to -m.|commit_tree normalizes custom message option to -m|covered||
465
+ test_tree_ops.rb|49|def|test_commit_tree_with_parent|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/committing_spec.rb|Repository committing unit spec covers commit_tree parent option normalization to -p.|commit_tree normalizes parent option to -p|covered||
466
+ test_tree_ops.rb|59|def|test_commit_tree_with_parents|REDUNDANT|REDUNDANT|none|spec/unit/git/repository/committing_spec.rb|Repository committing unit spec covers commit_tree parents option for a single parent operand.|commit_tree accepts parents option for parent operands|covered||
467
+ test_tree_ops.rb|69|def|test_commit_tree_with_multiple_parents|REDUNDANT|REDUNDANT|none|spec/unit/git/commands/commit_tree_spec.rb|Command commit_tree unit spec covers emitting multiple -p flags for multiple parents.|commit_tree emits multiple -p flags for multiple parents|covered||
468
+ test_url_clone_to.rb|9|def|test_clone_to_full_repo|PORT|PORT|unit|none|Git::URL.clone_to worktree naming is pure logic and no RSpec unit coverage exists.|Git::URL.clone_to derives worktree directory for repository URLs|port|spec/unit/git/url_spec.rb|ported
469
+ test_url_clone_to.rb|21|def|test_clone_to_bare_repo|PORT|PORT|unit|none|Git::URL.clone_to bare naming is pure logic and no RSpec unit coverage exists.|Git::URL.clone_to derives bare repository directory|port|spec/unit/git/url_spec.rb|ported
470
+ test_url_clone_to.rb|33|def|test_clone_to_mirror_repo|PORT|PORT|unit|none|Git::URL.clone_to mirror naming is pure logic and no RSpec unit coverage exists.|Git::URL.clone_to derives mirror repository directory|port|spec/unit/git/url_spec.rb|ported
471
+ test_url_clone_to.rb|68|def|test_git_clone_naming_assumptions|PORT|PORT|integration|none|Raw git naming assumptions should become deterministic Git::URL.clone_to unit cases rather than real git integration.|raw git clone naming assumptions match Git::URL.clone_to|port|spec/integration/git/url_spec.rb|ported
472
+ test_url_parse.rb|8|def|test_parse_with_invalid_url|PORT|PORT|unit|none|Git::URL.parse malformed scp-like URL handling is pure parsing logic and no spec/unit coverage exists.|Git::URL.parse rejects malformed scp-like URL with trailing slash|port|spec/unit/git/url_spec.rb|ported
473
+ test_url_parse.rb|15|def|test_parse|PORT|PORT|unit|none|Git::URL.parse supported URL forms are pure parsing logic and no spec/unit coverage exists.|Git::URL.parse handles ssh git https ftps file and local paths|port|spec/unit/git/url_spec.rb|ported
474
+ test_url_parse.rb|25|def|test_to_s|PORT|PORT|unit|none|Git::URL.parse result to_s round-trip is pure parsing/formatting logic and no spec/unit coverage exists.|Git::URL.parse result to_s preserves original URL|port|spec/unit/git/url_spec.rb|ported
475
+ test_windows_cmd_escaping.rb|9|def|test_commit_with_double_quote_in_commit_message|PORT|REDUNDANT|unit|none|Flipped PORT->covered during W2-U1: no shell escaping in ruby-git (ProcessExecuter uses spawn, not shell). Verbatim arg forwarding to PE is implicitly covered by every capturing_spec example asserting the command array. Commit message quote preservation is command argument-building logic; existing commit specs do not cover quoted messages.|commit preserves double quotes in message|covered|spec/unit/git/command_line/base_spec.rb|
476
+ test_worktree.rb|15|macro|listing worktrees when there are no commits should return only the main worktree|PORT|PORT|integration|none|Listing worktrees in a no-commit repository is real-git porcelain behavior not covered by committed-repo specs.|worktrees in repository with no commits lists only main worktree|port|spec/integration/git/repository/worktree_operations_spec.rb|ported
477
+ test_worktree.rb|33|macro|adding a worktree when there are no commits should fail|PORT|PORT|integration|none|Version-specific worktree add failure before git 2.42 for unborn repositories needs thin integration if retained.|worktree add with no commits fails on older git versions|port|spec/integration/git/repository/worktree_operations_spec.rb|ported
478
+ test_worktree.rb|52|macro|adding a worktree when there are no commits should succeed|PORT|PORT|integration|none|Version-specific worktree add success on git 2.42+ for unborn repositories needs thin integration if retained.|worktree add with no commits succeeds on newer git versions|port|spec/integration/git/repository/worktree_operations_spec.rb|ported
479
+ test_worktree.rb|79|macro|adding a worktree when there is at least one commit should succeed|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/worktree/add_spec.rb;spec/integration/git/repository/worktree_operations_spec.rb|Worktree add command integration and repository worktrees_all integration cover committed linked worktree creation/listing.|worktree add with commit creates linked worktree and listing shows it|covered||
480
+ test_worktree.rb|104|macro|removing a worktree by directory name should succeed|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/worktree/remove_spec.rb;spec/unit/git/worktrees_spec.rb|Worktree remove command integration plus Worktrees lookup unit spec cover removal by directory.|worktree remove by directory removes linked worktrees|covered||
481
+ test_worktree.rb|128|macro|removing a non-existant worktree should fail|REDUNDANT|REDUNDANT|none|spec/integration/git/commands/worktree/remove_spec.rb|Nonexistent worktree removal failure is already covered by Worktree::Remove integration.|removing nonexistent worktree fails|covered||
482
+ test_worktree.rb|130|macro|should be able to get the main_worktree|REDUNDANT|REDUNDANT|none|spec/unit/git/worktrees_spec.rb;spec/integration/git/repository/worktree_operations_spec.rb|Worktrees#[] unit spec covers lookup by main worktree path.|worktrees lookup returns main worktree by path|covered||
483
+ test_worktree.rb|146|macro|removing the main worktree should fail|PORT|PORT|integration|none|Removing the main worktree is a real-git failure mode not covered by current worktree integrations.|removing the main worktree raises Git::FailedError and preserves worktrees|port|spec/integration/git/repository/worktree_operations_spec.rb|ported
484
+ test_worktree.rb|168|macro|pruning should remove worktrees that were manually deleted|PORT|PORT|integration|none|Prune effect on manually deleted linked worktrees is real-git stateful behavior not covered by command smoke specs.|worktree prune removes manually deleted linked worktrees|port|spec/integration/git/repository/worktree_operations_spec.rb|ported
485
+ test_worktree.rb|191|macro|adding a worktree should not corrupt the repository index|PORT|REDUNDANT|none|none|Worktree::Add unit spec explicitly clears GIT_INDEX_FILE; add/worktrees integrations cover minimal real-git wiring.|worktree add clears GIT_INDEX_FILE and leaves both worktrees clean|covered||