The patch-id command loops over a series of patches, picking up the origin commit object name (which is on the "patch header" line) and then computing the patch identifier out of the "patch" (series of "diff") that follows the "patch header". The parser is structured in a bit "strange" way. It repeatedly calls a single helper function get_one_patchid() that returns when a patch header is recognised, or skips until the "patch" part begins and then computes the "patch id" over the "patch" part, until it sees a patch header. The caller knows that it gets just the "patch header" for the first patch with its first call, and the second call is about computing the patch id for the first patch, whose originating commit was obtained from the first call, etc. During the second and subsequent call (i.e. after finding a patch header which caused the get_one_patchid() to return, calling the helper again, expecting it to skip the commit log and find the patch for which we are asked to compute the patch id), we shouldn't look for the patch header at all. Otherwise, a line that looks like a patch header in the log message can easily be mistaken to be the beginning of a new patch header, as if the current message did not have any patch text. This 5-patch series is organized as follows: - patch 1 is about setting the baseline. We need to recognise the patch header produced by format-patch, log, and diff-tree --stdin. - patch 2 to patch 4 are bit of code restructuring without changing the behaviour. - patch 5 stops looking for a patch header when we shouldn't, and adds tests. Junio C Hamano (5): t4204: patch-id supports various input format patch-id: call flush_current_id() only when needed patch-id: make get_one_patchid() more extensible patch-id: rewrite code that detects the beginning of a patch patch-id: tighten code to detect the patch header builtin/patch-id.c | 82 +++++++++++++++++++++++++++++++++------------ t/t4204-patch-id.sh | 40 ++++++++++++++++++++++ 2 files changed, 101 insertions(+), 21 deletions(-) -- 2.45.2-786-g49444cbe9a