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
* 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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.