Files
git/builtin
Toon Claes e6c06e87a2 last-modified: fix bug when some paths remain unhandled
The recently introduced new subcommand git-last-modified(1) runs into an
error in some scenarios. It then would exit with the message:

    BUG: paths remaining beyond boundary in last-modified

This seems to happens for example when criss-cross merges are involved.
In that scenario, the function diff_tree_combined() gets called.

The function diff_tree_combined() copies the `struct diff_options` from
the input `struct rev_info` to override some flags. One flag is
`recursive`, which is always set to 1. This has been the case since the
inception of this function in af3feefa1d (diff-tree -c: show a merge
commit a bit more sensibly., 2006-01-24).

This behavior is incompatible with git-last-modified(1), when called
non-recursive (which is the default).

The last-modified machinery uses a hashmap for all the paths it wants to
get the last-modified commit for. Through log_tree_commit() the callback
mark_path() is called. The diff machinery uses diff_tree_combined()
internally, and due to it's recursive behavior the callback receives
entries inside subtrees, but not the subtree entries themselves. So a
directory is never expelled from the hashmap, and the BUG() statement
gets hit.

Because there are many callers calling into diff_tree_combined(), both
directly and indirectly, we cannot simply change it's behavior.

Instead, add a flag `no_recursive_diff_tree_combined` which supresses
the behavior of diff_tree_combined() to override `recursive` and set
this flag in builtin/last-modified.c.

Signed-off-by: Toon Claes <toon@iotcl.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-09-18 08:00:41 -07:00
..
2025-07-01 14:46:38 -07:00
2025-08-21 13:46:59 -07:00
2024-12-13 07:33:36 -08:00
2025-07-23 08:15:18 -07:00
2025-08-21 13:47:00 -07:00
2025-07-23 08:15:18 -07:00
2025-07-23 08:15:18 -07:00
2025-07-23 08:15:18 -07:00
2025-07-23 08:15:18 -07:00
2025-07-01 14:46:38 -07:00
2025-08-22 13:13:20 -07:00
2025-08-21 13:46:58 -07:00
2025-08-21 13:46:58 -07:00
2024-12-18 10:44:31 -08:00
2025-08-21 13:47:00 -07:00
2025-07-16 22:16:15 -07:00
2025-07-23 08:15:18 -07:00
2025-07-23 08:15:18 -07:00
2025-08-21 13:47:00 -07:00
2025-07-23 08:15:18 -07:00
2025-07-23 08:15:18 -07:00
2025-09-02 09:58:35 -07:00
2025-08-21 13:46:58 -07:00
2025-09-04 11:36:40 -07:00
2025-07-23 08:15:18 -07:00
2025-08-04 08:10:33 -07:00
2025-07-23 08:15:18 -07:00
2025-07-23 08:15:18 -07:00
2025-08-21 13:46:58 -07:00
2025-07-23 08:15:18 -07:00
2024-12-18 10:44:30 -08:00
2025-08-21 13:46:59 -07:00