This is version 4 of a small patch series to teach ref-filter about %(contents:size). This patch series is based on master at 4a0fcf9f76 (The seventh batch, 2020-07-06). Previous versions and related discussions are there: V1: https://lore.kernel.org/git/20200701132308.16691-1-chriscool@xxxxxxxxxxxxx/ V2: https://lore.kernel.org/git/20200702140845.24945-1-chriscool@xxxxxxxxxxxxx/ V3: https://lore.kernel.org/git/20200707174049.21714-1-chriscool@xxxxxxxxxxxxx/ Thanks to Junio and Peff for their reviews of this series! The changes compared to V3 are the following: - Squashed patches 1/4 and 2/4 into 1/3 as they were both about %(contents) related doc improvements. - Improved patch 1/3 as suggested by Junio. - Simplified setup test in patch 2/3 about creating a ref pointing to a blob as suggested by Junio. - Modified test_atom() in patch 3/3 to automatically test %(contents:size) after testing %(contents) as suggested by Junio. The range diff is: 1: b04b390f32 ! 1: f750832fc7 Documentation: clarify %(contents:XXXX) doc @@ Commit message Let's avoid a big dense paragraph by using an unordered list for the %(contents:XXXX) format specifiers. + While at it let's also make the following improvements: + + - Let's not describe %(contents) using "complete message" + as it's not clear what an incomplete message is. + + - Let's improve how the "subject" and "body" are + described. + + - Let's state that "signature" is only available for + tag objects. + Suggested-by: Jeff King <peff@xxxxxxxx> Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> @@ Documentation/git-for-each-ref.txt: Fields that have name-email-date tuple as it -line is `contents:body`, where body is all of the lines after the first -blank line. The optional GPG signature is `contents:signature`. The -first `N` lines of the message is obtained using `contents:lines=N`. -+The complete message of a commit or tag object is `contents`. This -+field can also be used in the following ways: ++The message in a commit or a tag object is `contents`, from which ++`contents:<part>` can be used to extract various parts out of: + +contents:subject:: -+ The "subject" of the commit or tag message. It's actually the -+ concatenation of all lines of the commit message up to the -+ first blank line. ++ The first paragraph of the message, which typically is a ++ single line, is taken as the "subject" of the commit or the ++ tag message. + +contents:body:: -+ The "body" of the commit or tag message. It's made of the -+ lines after the first blank line. ++ The remainder of the commit or the tag message that follows ++ the "subject". + +contents:signature:: -+ The optional GPG signature. ++ The optional GPG signature of the tag. + +contents:lines=N:: + The first `N` lines of the message. 2: b62cab2630 < -: ---------- Documentation: clarify 'complete message' 3: b9584472a1 ! 2: 51c72e09d2 t6300: test refs pointing to tree and blob @@ t/t6300-for-each-ref.sh: test_atom refs/tags/signed-long contents "subject line +test_expect_success 'set up refs pointing to tree and blob' ' + git update-ref refs/mytrees/first refs/heads/master^{tree} && -+ git ls-tree refs/mytrees/first one >one_info && -+ test $(cut -d" " -f2 one_info) = "blob" && -+ blob_hash=$(cut "-d " -f1 one_info | cut -d" " -f3) && -+ git update-ref refs/myblobs/first "$blob_hash" ++ git update-ref refs/myblobs/first refs/heads/master:one +' + +test_atom refs/mytrees/first subject "" 4: 23f941132e < -: ---------- ref-filter: add support for %(contents:size) -: ---------- > 3: c2ed3e228b ref-filter: add support for %(contents:size) Christian Couder (3): Documentation: clarify %(contents:XXXX) doc t6300: test refs pointing to tree and blob ref-filter: add support for %(contents:size) Documentation/git-for-each-ref.txt | 27 ++++++++++++++++----- ref-filter.c | 7 +++++- t/t6300-for-each-ref.sh | 38 ++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 7 deletions(-) -- 2.27.0.347.gb620d8b0da