git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC PATCH] notes: add prepend command

From
Bence Ferdinandy <bence@ferdinandy.com>
Date
Oct 23, 2024, 20:14 UTC
Message-ID
<20241023201430.986389-1-bence@ferdinandy.com>

When a note is detailing commit history, it makes sense to keep the latest change on top, but unlike adding things at the bottom with "git notes append" this can only be done manually. Add a

    git notes prepend

command, which works exactly like the append command, except that it inserts the text before the current contents of the note instead of after.

Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com>
---
Notes:
    RFC v1: Cf.
        https://lore.kernel.org/git/20241023153736.257733-1-bence@ferdinandy.com/T/#m5b6644827590c2518089ab84f936a970c4e9be0f
    
        For that particular series I've used
        git rev-list HEAD~8..HEAD | xargs -i git notes append {} -m "v12: no change"
        for a quick-start on updating notes, when only 1 note needed to be
        really edited with meaningful content, and for some of the patches
        you now need to scroll a bit to actually find that "no change" text,
        instead of seeing it right at the top.
 builtin/notes.c | 32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/builtin/notes.c b/builtin/notes.c
index 8c26e45526..cf158cab1c 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -35,6 +35,7 @@ static const char * const git_notes_usage[] = {
 	N_("git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"),
 	N_("git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"),
 	N_("git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"),
+	N_("git notes [--ref <notes-ref>] prepend [--allow-empty] [--[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"),
 	N_("git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"),
 	N_("git notes [--ref <notes-ref>] show [<object>]"),
 	N_("git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"),
@@ -644,7 +645,8 @@ static int copy(int argc, const char **argv, const char *prefix)
 	return retval;
 }
 
-static int append_edit(int argc, const char **argv, const char *prefix)
+
+static int append_prepend_edit(int argc, const char **argv, const char *prefix, int prepend)
 {
 	int allow_empty = 0;
 	const char *object_ref;
@@ -716,11 +718,18 @@ static int append_edit(int argc, const char **argv, const char *prefix)
 
 		if (!prev_buf)
 			die(_("unable to read %s"), oid_to_hex(note));
-		if (size)
-			strbuf_add(&buf, prev_buf, size);
-		if (d.buf.len && size)
-			append_separator(&buf);
-		strbuf_insert(&d.buf, 0, buf.buf, buf.len);
+		if (prepend) {
+			if (d.buf.len && size)
+				append_separator(&buf);
+			if (size)
+				strbuf_add(&buf, prev_buf, size);
+		} else {
+			if (size)
+				strbuf_add(&buf, prev_buf, size);
+			if (d.buf.len && size)
+				append_separator(&buf);
+		}
+		strbuf_insert(&d.buf, prepend ? d.buf.len : 0, buf.buf, buf.len);
 
 		free(prev_buf);
 		strbuf_release(&buf);
@@ -745,6 +754,16 @@ static int append_edit(int argc, const char **argv, const char *prefix)
 	return 0;
 }
 
+static int prepend_edit(int argc, const char **argv, const char *prefix)
+{
+	return append_prepend_edit(argc, argv, prefix, 1);
+}
+
+static int append_edit(int argc, const char **argv, const char *prefix)
+{
+	return append_prepend_edit(argc, argv, prefix, 0);
+}
+
 static int show(int argc, const char **argv, const char *prefix)
 {
 	const char *object_ref;
@@ -1116,6 +1135,7 @@ int cmd_notes(int argc,
 		OPT_SUBCOMMAND("add", &fn, add),
 		OPT_SUBCOMMAND("copy", &fn, copy),
 		OPT_SUBCOMMAND("append", &fn, append_edit),
+		OPT_SUBCOMMAND("prepend", &fn, prepend_edit),
 		OPT_SUBCOMMAND("edit", &fn, append_edit),
 		OPT_SUBCOMMAND("show", &fn, show),
 		OPT_SUBCOMMAND("merge", &fn, merge),
-- 
2.47.0.119.g5b706304f7.dirty
Next: Taylor Blau
Message 1 of 5 in “notes: add prepend command”
  1. notes: add prepend commandBence Ferdinandy, Oct 23, 2024
  2. Taylor BlauOct 23, 2024
  3. Bence FerdinandyOct 23, 2024
  4. Đoàn Trần Công DanhOct 24, 2024
  5. Bence FerdinandyOct 26, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.