From: "ZheNing Hu via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Jeff King" <peff@peff.net>, "Junio C Hamano" <gitster@pobox.com>,
"Christian Couder" <chriscool@tuxfamily.org>,
"Hariom Verma" <hariom18599@gmail.com>,
"René Scharfe" <l.s.r@web.de>,
"ZheNing Hu" <adlternative@gmail.com>,
"ZheNing Hu" <adlternative@gmail.com>
Subject: [PATCH] [GSOC] ref-filter: add %(notes) format atom
Date: Thu, 29 Apr 2021 10:24:40 +0000 [thread overview]
Message-ID: <pull.944.git.1619691880696.gitgitgadget@gmail.com> (raw)
From: ZheNing Hu <adlternative@gmail.com>
Note that `--pretty="%N"` can view notes related
to the commit. So add `%(notes)` to ref-filter
seem is a good choice. This atom `%(notes)` view
the notes associated with the ref, and support
dereference.
Signed-off-by: ZheNing Hu <adlternative@gmail.com>
---
[GSOC] ref-filter: add %(notes) format atom
An important step in the GSOC project Use ref-filter formats in git
cat-file is to integrate different format atoms into the ref-filter.
Olga and Hariom have also made a lot of efforts in this area.
Currently, I noticed that there may be some format atoms in "pretty.c"
that have not been migrated to ref-filter, such as --pretty="%N",
--pretty="%(describe)".
So in this patch, I tried to migrate --pretty=%N to --format=%(notes).
Hope this will be hopeful !!!
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-944%2Fadlternative%2Fformat-notes-atom-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-944/adlternative/format-notes-atom-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/944
Documentation/git-for-each-ref.txt | 4 ++++
ref-filter.c | 31 ++++++++++++++++++++++++++++--
t/t6300-for-each-ref.sh | 10 ++++++++++
3 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 2ae2478de706..07f037a16e13 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -139,6 +139,9 @@ deltabase::
given object, if it is stored as a delta. Otherwise it
expands to the null object name (all zeroes).
+notes::
+ The notes associated with the ref.
+
upstream::
The name of a local ref which can be considered ``upstream''
from the displayed ref. Respects `:short`, `:lstrip` and
@@ -302,6 +305,7 @@ git for-each-ref --count=3 --sort='-*authordate' \
Subject: %(*subject)
Date: %(*authordate)
Ref: %(*refname)
+Notes: %(*notes)
%(*body)
' 'refs/tags'
diff --git a/ref-filter.c b/ref-filter.c
index a0adb4551d87..42a5608a3056 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -23,6 +23,7 @@
#include "worktree.h"
#include "hashmap.h"
#include "strvec.h"
+#include "run-command.h"
static struct ref_msg {
const char *gone;
@@ -506,6 +507,7 @@ static struct {
{ "objectsize", SOURCE_OTHER, FIELD_ULONG, objectsize_atom_parser },
{ "objectname", SOURCE_OTHER, FIELD_STR, oid_atom_parser },
{ "deltabase", SOURCE_OTHER, FIELD_STR, deltabase_atom_parser },
+ { "notes", SOURCE_OTHER, FIELD_STR },
{ "tree", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
{ "parent", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
{ "numparent", SOURCE_OBJ, FIELD_ULONG },
@@ -953,6 +955,24 @@ static int grab_oid(const char *name, const char *field, const struct object_id
return 0;
}
+static int grab_notes(const struct object_id *oid, struct atom_value *v)
+{
+ struct child_process cmd = CHILD_PROCESS_INIT;
+ struct strbuf out = STRBUF_INIT;
+ struct strbuf err = STRBUF_INIT;
+ const char *args[] = { "notes", "show", NULL };
+ int ret;
+
+ cmd.git_cmd = 1;
+ strvec_pushv(&cmd.args, args);
+ strvec_push(&cmd.args, oid_to_hex(oid));
+ ret = pipe_command(&cmd, NULL, 0, &out, 0, &err, 0);
+ strbuf_trim_trailing_newline(&out);
+ v->s = strbuf_detach(&out, NULL);
+ strbuf_release(&err);
+ return ret;
+}
+
/* See grab_values */
static void grab_common_values(struct atom_value *val, int deref, struct expand_data *oi)
{
@@ -975,8 +995,12 @@ static void grab_common_values(struct atom_value *val, int deref, struct expand_
v->s = xstrfmt("%"PRIuMAX , (uintmax_t)oi->size);
} else if (!strcmp(name, "deltabase"))
v->s = xstrdup(oid_to_hex(&oi->delta_base_oid));
- else if (deref)
- grab_oid(name, "objectname", &oi->oid, v, &used_atom[i]);
+ else if (deref) {
+ if (!strcmp(name, "notes"))
+ grab_notes(&oi->oid, v);
+ else
+ grab_oid(name, "objectname", &oi->oid, v, &used_atom[i]);
+ }
}
}
@@ -1767,6 +1791,9 @@ static int populate_value(struct ref_array_item *ref, struct strbuf *err)
continue;
} else if (!deref && grab_oid(name, "objectname", &ref->objectname, v, atom)) {
continue;
+ } else if (!deref && !strcmp(name, "notes")) {
+ grab_notes(&ref->objectname, v);
+ continue;
} else if (!strcmp(name, "HEAD")) {
if (atom->u.head && !strcmp(ref->refname, atom->u.head))
v->s = xstrdup("*");
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index 9e0214076b4d..61cdbeb696ff 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -32,8 +32,10 @@ test_expect_success setup '
git add one &&
git commit -m "Initial" &&
git branch -M main &&
+ git notes add -m "commit-notes" HEAD &&
setdate_and_increment &&
git tag -a -m "Tagging at $datestamp" testtag &&
+ git notes add -m "tag-notes" testtag &&
git update-ref refs/remotes/origin/main main &&
git remote add origin nowhere &&
git config branch.main.remote origin &&
@@ -162,6 +164,7 @@ test_atom head contents:signature ''
test_atom head contents 'Initial
'
test_atom head HEAD '*'
+test_atom head notes $(git notes show refs/heads/main)
test_atom tag refname refs/tags/testtag
test_atom tag refname:short testtag
@@ -220,6 +223,8 @@ test_atom tag contents:signature ''
test_atom tag contents 'Tagging at 1151968727
'
test_atom tag HEAD ' '
+test_atom tag notes $(git notes show refs/tags/testtag)
+test_atom tag "*notes" $(git notes show refs/heads/main)
test_expect_success 'Check invalid atoms names are errors' '
test_must_fail git for-each-ref --format="%(INVALID)" refs/heads
@@ -380,6 +385,7 @@ test_expect_success 'exercise strftime with odd fields' '
cat >expected <<\EOF
refs/heads/main
+refs/notes/commits
refs/remotes/origin/main
refs/tags/testtag
EOF
@@ -393,6 +399,7 @@ test_expect_success 'Verify ascending sort' '
cat >expected <<\EOF
refs/tags/testtag
refs/remotes/origin/main
+refs/notes/commits
refs/heads/main
EOF
@@ -429,6 +436,7 @@ test_expect_success 'exercise glob patterns with prefixes' '
cat >expected <<\EOF
'refs/heads/main'
+'refs/notes/commits'
'refs/remotes/origin/main'
'refs/tags/testtag'
EOF
@@ -450,6 +458,7 @@ test_expect_success 'Quoting style: python' '
cat >expected <<\EOF
"refs/heads/main"
+"refs/notes/commits"
"refs/remotes/origin/main"
"refs/tags/testtag"
EOF
@@ -509,6 +518,7 @@ test_expect_success 'Check for invalid refname format' '
test_expect_success 'set up color tests' '
cat >expected.color <<-EOF &&
$(git rev-parse --short refs/heads/main) <GREEN>main<RESET>
+ $(git rev-parse --short refs/notes/commits) <GREEN>notes/commits<RESET>
$(git rev-parse --short refs/remotes/myfork/main) <GREEN>myfork/main<RESET>
$(git rev-parse --short refs/remotes/origin/main) <GREEN>origin/main<RESET>
$(git rev-parse --short refs/tags/testtag) <GREEN>testtag<RESET>
base-commit: 311531c9de557d25ac087c1637818bd2aad6eb3a
--
gitgitgadget
next reply other threads:[~2021-04-29 10:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-29 10:24 ZheNing Hu via GitGitGadget [this message]
2021-05-01 19:21 ` [PATCH] [GSOC] ref-filter: add %(notes) format atom René Scharfe
2021-05-02 6:12 ` ZheNing Hu
2021-05-03 2:56 ` Junio C Hamano
2021-05-03 13:25 ` ZheNing Hu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.944.git.1619691880696.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=adlternative@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hariom18599@gmail.com \
--cc=l.s.r@web.de \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).