From: Johan Herland <johan@herland.net>
To: Thomas Rast <trast@student.ethz.ch>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] WIP: git notes copy --stdin
Date: Mon, 15 Feb 2010 02:25:52 +0100 [thread overview]
Message-ID: <201002150225.52953.johan@herland.net> (raw)
In-Reply-To: <0b241a335d71bdf56a07a712cb5506e1b1e1db6f.1266183704.git.trast@student.ethz.ch>
On Sunday 14 February 2010, Thomas Rast wrote:
> This implements a 'git notes copy --stdin' mode suitable to read the
> data fed to the post-rewrite hook.
> ---
>
> Ok, so I changed my mind and decided to implement the "make it
> built-in and configurable" way. This helper should work. I spent
> some time trying to refactor cmd_notes() into something that can
> nicely handle commands that do not fit the normal scheme, but
> eventually was too tired to continue and just crafted it in the
> existing code in the right place.
>
> If nobody beats me to it I'll pick this up later this week, but
> tomorrow will be too busy to even think about it.
>
>
> builtin-notes.c | 56
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed,
> 56 insertions(+), 0 deletions(-)
>
> diff --git a/builtin-notes.c b/builtin-notes.c
> index 123ecad..3cd9e45 100644
> --- a/builtin-notes.c
> +++ b/builtin-notes.c
> @@ -278,6 +278,52 @@ int commit_notes(struct notes_tree *t, const char
> *msg) return 0;
> }
>
> +int notes_copy_from_stdin(int force)
> +{
> + struct strbuf buf = STRBUF_INIT;
> + struct notes_tree *t;
> +
> + init_notes(NULL, NULL, NULL, 0);
> + t = &default_notes_tree;
As you say, cmd_notes() should be refactored, so that you don't have to
duplicate all of this (and some of the below stuff).
> + while (strbuf_getline(&buf, stdin, '\n') != EOF) {
> + unsigned char from_obj[20], to_obj[20];
> + struct strbuf **split;
> + const unsigned char *note;
> +
> + split = strbuf_split(&buf, ' ');
> + if (!split[0] || !split[1])
> + die("Malformed input line: '%s'.", buf.buf);
> + strbuf_rtrim(split[0]);
> + strbuf_rtrim(split[1]);
> + if (get_sha1(split[0]->buf, from_obj))
> + die("Failed to resolve '%s' as a valid ref.", split[0]->buf);
> + if (get_sha1(split[1]->buf, to_obj))
> + die("Failed to resolve '%s' as a valid ref.", split[1]->buf);
> +
> + note = get_note(t, from_obj);
> + if (!force) {
> + const unsigned char *existing_note = get_note(t, to_obj);
> + if (existing_note) {
> + error("Cannot copy notes. Found existing notes for object"
> + " %s. Use '-f' to overwrite existing notes",
> + sha1_to_hex(to_obj));
> + return 1;
> + }
> + }
> +
> + if (note)
> + add_note(t, to_obj, note, combine_notes_overwrite);
> + else
> + remove_note(t, to_obj);
> +
> + strbuf_list_free(split);
> + }
> +
> + commit_notes(t, "Notes added by 'git notes copy'");
We (this goes for the existing commit_notes() call in cmd_notes() as well)
should either check the return value for commit_notes(), or (since it
currently only returns 0) we should change commit_notes() to void instead of
int. Actually, the correct solution is probably to "return error()" instead
of "die()" inside commit_notes(), and then check the return value.
> + return 0;
> +}
> +
> int cmd_notes(int argc, const char **argv, const char *prefix)
> {
> struct notes_tree *t;
> @@ -301,6 +347,7 @@ int cmd_notes(int argc, const char **argv, const char
> *prefix) OPT_CALLBACK('C', "reuse-message", &msg, "OBJECT",
> "reuse specified note object", parse_reuse_arg),
> OPT_BOOLEAN('f', "force", &force, "replace existing notes"),
> + OPT_BOOLEAN(0, "stdin", &force, "read objects from stdin"),
Why are you setting &force from "--stdin"?
> @@ -351,6 +398,15 @@ int cmd_notes(int argc, const char **argv, const
> char *prefix)
>
> if (copy) {
> const char *from_ref;
> + if (stdin) {
I don't think this is intended. Isn't stdin (the standard input FILE *)
_always_ true?
> + if (argc > 2) {
> + error("too few parameters");
> + usage_with_options(git_notes_usage, options);
> + } else {
> + retval = notes_copy_from_stdin(force);
> + goto end;
> + }
> + }
> if (argc < 3) {
> error("too few parameters");
> usage_with_options(git_notes_usage, options);
The patch needs to add code that barfs if "--stdin" is used with any
subcommand other than "copy".
Of course, the patch also needs documentation and tests, but I guess you
knew that... ;)
I like the intent of this patch, although it needs more work before it's
finished.
...Johan
--
Johan Herland, <johan@herland.net>
www.herland.net
next prev parent reply other threads:[~2010-02-15 1:26 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-14 16:17 [RFC PATCH 0/6] post-rewrite hook and copying notes Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 1/6] Documentation: document post-rewrite hook Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 2/6] commit --amend: invoke " Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 3/6] filter-branch: " Thomas Rast
2010-02-15 20:36 ` Johannes Sixt
2010-02-14 16:17 ` [RFC PATCH 4/6] rebase: " Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 5/6] rebase -i: " Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 6/6] contrib: add a hook that copies notes over rewrites Thomas Rast
2010-02-14 16:21 ` Thomas Rast
2010-02-14 21:46 ` [PATCH] WIP: git notes copy --stdin Thomas Rast
2010-02-15 1:25 ` Johan Herland [this message]
2010-02-16 23:25 ` [RFC PATCH v2 00/11] post-rewrite / automatic notes copying Thomas Rast
2010-02-16 23:25 ` [RFC PATCH v2 01/11] Documentation: document post-rewrite hook Thomas Rast
2010-02-16 23:59 ` Junio C Hamano
2010-02-17 0:18 ` Thomas Rast
2010-02-17 0:29 ` Junio C Hamano
2010-02-16 23:25 ` [RFC PATCH v2 02/11] commit --amend: invoke " Thomas Rast
2010-02-16 23:25 ` [RFC PATCH v2 03/11] rebase: " Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 04/11] rebase -i: " Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 05/11] notes: clean up t3301 Thomas Rast
2010-02-16 23:52 ` Junio C Hamano
2010-02-16 23:26 ` [RFC PATCH v2 06/11] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 07/11] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-16 23:58 ` Junio C Hamano
2010-02-17 0:09 ` Thomas Rast
2010-02-17 0:18 ` Junio C Hamano
2010-02-20 14:58 ` [WIP/RFC PATCH] Support showing notes from more than one notes tree Thomas Rast
2010-02-20 15:23 ` Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 08/11] rebase: support automatic notes copying Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 09/11] commit --amend: copy notes to the new commit Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 10/11] filter-branch: invoke post-rewrite hook Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 11/11] filter-branch: learn how to filter notes Thomas Rast
2010-02-17 19:59 ` Johannes Sixt
2010-02-17 23:06 ` Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 00/12] several notes refs, post-rewrite, notes rewriting Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 01/12] Support showing notes from more than one notes tree Thomas Rast
2010-02-21 3:06 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 02/12] Documentation: document post-rewrite hook Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 03/12] commit --amend: invoke " Thomas Rast
2010-02-21 3:12 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 04/12] rebase: " Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 05/12] rebase -i: " Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 06/12] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-21 3:31 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 07/12] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-21 3:34 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 08/12] rebase: support automatic notes copying Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 09/12] commit --amend: copy notes to the new commit Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 10/12] filter-branch: invoke post-rewrite hook Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 11/12] filter-branch: learn how to filter notes Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 12/12] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-02-21 3:47 ` [RFC PATCH v3 00/12] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-21 6:14 ` Thomas Rast
2010-02-22 0:18 ` Junio C Hamano
2010-02-22 0:10 ` [PATCH v4 00/11] " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 01/11] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-02-22 0:10 ` [PATCH v4 02/11] Support showing notes from more than one notes tree Thomas Rast
2010-02-22 23:20 ` Junio C Hamano
2010-02-22 23:25 ` Thomas Rast
2010-02-23 0:21 ` Junio C Hamano
2010-02-22 0:10 ` [PATCH v4 03/11] Documentation: document post-rewrite hook Thomas Rast
2010-02-22 0:10 ` [PATCH v4 04/11] commit --amend: invoke " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 05/11] rebase: " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 06/11] rebase -i: " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 07/11] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-22 0:10 ` [PATCH v4 08/11] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-22 0:10 ` [PATCH v4 09/11] rebase: support automatic notes copying Thomas Rast
2010-02-22 0:10 ` [PATCH v4 10/11] commit --amend: copy notes to the new commit Thomas Rast
2010-02-22 0:10 ` [PATCH v4 11/11] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-02-22 0:25 ` [PATCH v4 00/11] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-22 0:32 ` Thomas Rast
2010-02-23 0:42 ` [PATCH v5 " Thomas Rast
2010-02-23 0:42 ` [PATCH v5 01/11] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-02-23 0:42 ` [PATCH v5 02/11] Support showing notes from more than one notes tree Thomas Rast
2010-02-23 1:47 ` Junio C Hamano
2010-02-23 17:10 ` Thomas Rast
2010-02-23 17:34 ` [PATCH] format-patch: learn to fill comment section of email from notes Thomas Rast
2010-02-23 17:34 ` [PATCH] BROKEN -- " Thomas Rast
2010-02-23 17:37 ` Thomas Rast
2010-02-24 7:45 ` Stephen Boyd
2010-02-23 21:56 ` [PATCH] " Junio C Hamano
2010-03-10 14:08 ` Thomas Rast
2010-02-23 0:42 ` [PATCH v5 03/11] Documentation: document post-rewrite hook Thomas Rast
2010-02-23 0:42 ` [PATCH v5 04/11] commit --amend: invoke " Thomas Rast
2010-02-23 0:42 ` [PATCH v5 05/11] rebase: " Thomas Rast
2010-02-23 0:42 ` [PATCH v5 06/11] rebase -i: " Thomas Rast
2010-02-24 6:15 ` Junio C Hamano
2010-02-23 0:42 ` [PATCH v5 07/11] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-23 0:42 ` [PATCH v5 08/11] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-23 0:42 ` [PATCH v5 09/11] rebase: support automatic notes copying Thomas Rast
2010-02-25 3:58 ` Junio C Hamano
2010-03-10 14:03 ` [PATCH v6 00/13] several notes refs, post-rewrite, notes rewriting Thomas Rast
2010-03-10 14:03 ` [PATCH v6 01/13] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-03-11 8:55 ` Johan Herland
2010-03-10 14:03 ` [PATCH v6 02/13] Support showing notes from more than one notes tree Thomas Rast
2010-03-11 10:03 ` Johan Herland
2010-03-12 17:04 ` [PATCH v7 00/13] tr/display-notes Thomas Rast
2010-03-12 17:04 ` [PATCH v7 01/13] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-03-12 17:04 ` [PATCH v7 02/13] Support showing notes from more than one notes tree Thomas Rast
2010-03-12 17:04 ` [PATCH v7 03/13] Documentation: document post-rewrite hook Thomas Rast
2010-03-12 17:04 ` [PATCH v7 04/13] commit --amend: invoke " Thomas Rast
2010-03-12 17:04 ` [PATCH v7 05/13] rebase: " Thomas Rast
2010-03-12 17:04 ` [PATCH v7 06/13] rebase -i: " Thomas Rast
2010-03-12 17:04 ` [PATCH v7 07/13] notes: implement 'git notes copy --stdin' Thomas Rast
2010-06-14 23:40 ` [PATCH] notes: Initialize variable to appease Sun Studio Ævar Arnfjörð Bjarmason
2010-06-19 4:52 ` Junio C Hamano
2010-06-19 11:58 ` Ævar Arnfjörð Bjarmason
2010-06-21 20:53 ` Ramsay Jones
2010-03-12 17:04 ` [PATCH v7 08/13] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-03-12 17:04 ` [PATCH v7 09/13] rebase: support automatic notes copying Thomas Rast
2010-03-12 17:04 ` [PATCH v7 10/13] commit --amend: copy notes to the new commit Thomas Rast
2010-03-12 17:04 ` [PATCH v7 11/13] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-03-12 17:04 ` [PATCH v7 12/13] notes: track whether notes_trees were changed at all Thomas Rast
2010-03-12 17:04 ` [PATCH v7 13/13] git-notes(1): add a section about the meaning of history Thomas Rast
2010-03-10 14:03 ` [PATCH v6 03/13] Documentation: document post-rewrite hook Thomas Rast
2010-03-10 14:05 ` [PATCH v6 04/13] commit --amend: invoke " Thomas Rast
2010-03-10 14:05 ` [PATCH v6 05/13] rebase: " Thomas Rast
2010-03-10 14:05 ` [PATCH v6 06/13] rebase -i: " Thomas Rast
2010-03-10 14:05 ` [PATCH v6 07/13] notes: implement 'git notes copy --stdin' Thomas Rast
2010-03-11 10:30 ` Johan Herland
2010-03-10 14:05 ` [PATCH v6 08/13] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-03-11 10:50 ` Johan Herland
2010-03-10 14:05 ` [PATCH v6 09/13] rebase: support automatic notes copying Thomas Rast
2010-03-10 14:05 ` [PATCH v6 10/13] commit --amend: copy notes to the new commit Thomas Rast
2010-03-10 14:05 ` [PATCH v6 11/13] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-03-11 10:56 ` Johan Herland
2010-03-10 14:05 ` [PATCH v6 12/13] notes: track whether notes_trees were changed at all Thomas Rast
2010-03-11 10:58 ` Johan Herland
2010-03-10 14:06 ` [PATCH v6 13/13] git-notes(1): add a section about the meaning of history Thomas Rast
2010-03-11 10:59 ` Johan Herland
2010-03-10 21:23 ` [PATCH v6 00/13] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-23 0:42 ` [PATCH v5 10/11] commit --amend: copy notes to the new commit Thomas Rast
2010-02-23 0:42 ` [PATCH v5 11/11] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-02-23 0:49 ` [PATCH v5 00/11] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-23 0:49 ` Thomas Rast
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=201002150225.52953.johan@herland.net \
--to=johan@herland.net \
--cc=git@vger.kernel.org \
--cc=trast@student.ethz.ch \
/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 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 NNTP newsgroup(s).