{"thread":{"id":"44194","subject":"[PATCH v3 0/5] Add --format to tag verification","startedAt":"2016-09-30T22:18:17Z","lastAt":"2016-10-03T20:59:03Z","messageCount":11,"participants":["santiago@nyu.edu","Jakub Narębski","Junio C Hamano","Santiago Torres"],"isPatch":true,"patchVersion":3,"patchTotal":5},"messages":[{"id":"303022","messageId":"20160930221806.3398-1-santiago@nyu.edu","threadId":"44194","inReplyTo":null,"subject":"[PATCH v3 0/5] Add --format to tag verification","fromName":"","fromEmail":"santiago@nyu.edu","sentAt":"2016-09-30T22:18:01Z","receivedAt":"2016-09-30T22:18:17Z","isPatch":true,"sender":{"key":"santiago@nyu.edu","avatar":"https://avatars.githubusercontent.com/u/3579933?v=4"},"body":"From: Santiago Torres <santiago@nyu.edu>\n\nThis is the third iteration of [1][2], and as a result of the discussion\nin [3].\n\nIn this re-roll we:\n\n* Fixed all the signed-off-by's\n\n[0002]\n* Renamed the function format_ref to pretty_print_ref instead, which\n  is a more descriptive name \n\n[0004] \n* Added the respective line for the new --format parameter in the\n  documentation.\n\n[0005] \n* Added mention of the --format flag in the documentation files. \n* Fixed the function signatures, now they take an opaque void *cb_data pointer\n  so it can be used in a more general way (by e.g., delete_tag).\n\nThis patch applies to 2.10.0 and master.\n\n[1] http://public-inbox.org/git/20160922185317.349-1-santiago@nyu.edu/\n[2] http://public-inbox.org/git/20160926224233.32702-1-santiago@nyu.edu/\n[3] http://public-inbox.org/git/20160607195608.16643-1-santiago@nyu.edu/\n\nLukas Puehringer (4):\n  gpg-interface, tag: add GPG_VERIFY_QUIET flag\n  ref-filter: add function to print single ref_array_item\n  tag: add format specifier to gpg_verify_tag\n  builtin/tag: add --format argument for tag -v\n\nSantiago Torres (1):\n  builtin/verify-tag: add --format to verify-tag\n\n Documentation/git-tag.txt        |  2 +-\n Documentation/git-verify-tag.txt |  2 +-\n builtin/tag.c                    | 34 +++++++++++++++++++++++-----------\n builtin/verify-tag.c             | 13 +++++++++++--\n gpg-interface.h                  |  1 +\n ref-filter.c                     | 10 ++++++++++\n ref-filter.h                     |  3 +++\n tag.c                            | 22 +++++++++++++++-------\n tag.h                            |  4 ++--\n 9 files changed, 67 insertions(+), 24 deletions(-)\n\n-- \n2.10.0\n\n"},{"id":"303023","messageId":"20160930221806.3398-2-santiago@nyu.edu","threadId":"44194","inReplyTo":"20160930221806.3398-1-santiago@nyu.edu","subject":"[PATCH v3 1/5] gpg-interface, tag: add GPG_VERIFY_QUIET flag","fromName":"","fromEmail":"santiago@nyu.edu","sentAt":"2016-09-30T22:18:02Z","receivedAt":"2016-09-30T22:18:20Z","isPatch":true,"sender":{"key":"santiago@nyu.edu","avatar":"https://avatars.githubusercontent.com/u/3579933?v=4"},"body":"From: Lukas Puehringer <luk.puehringer@gmail.com>\n\nFunctions that print git object information may require that the\ngpg-interface functions be silent. Add GPG_VERIFY_QUIET flag and prevent\nprint_signature_buffer from being called if flag is set.\n\nSigned-off-by: Lukas Puehringer <luk.puehringer@gmail.com>\n---\n gpg-interface.h | 1 +\n tag.c           | 5 ++++-\n 2 files changed, 5 insertions(+), 1 deletion(-)\n\ndiff --git a/gpg-interface.h b/gpg-interface.h\nindex ea68885..85dc982 100644\n--- a/gpg-interface.h\n+++ b/gpg-interface.h\n@@ -3,6 +3,7 @@\n \n #define GPG_VERIFY_VERBOSE\t1\n #define GPG_VERIFY_RAW\t\t2\n+#define GPG_VERIFY_QUIET\t4\n \n struct signature_check {\n \tchar *payload;\ndiff --git a/tag.c b/tag.c\nindex d1dcd18..291073f 100644\n--- a/tag.c\n+++ b/tag.c\n@@ -3,6 +3,7 @@\n #include \"commit.h\"\n #include \"tree.h\"\n #include \"blob.h\"\n+#include \"gpg-interface.h\"\n \n const char *tag_type = \"tag\";\n \n@@ -24,7 +25,9 @@ static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)\n \n \tret = check_signature(buf, payload_size, buf + payload_size,\n \t\t\t\tsize - payload_size, &sigc);\n-\tprint_signature_buffer(&sigc, flags);\n+\n+\tif (!(flags & GPG_VERIFY_QUIET))\n+\t\tprint_signature_buffer(&sigc, flags);\n \n \tsignature_check_clear(&sigc);\n \treturn ret;\n-- \n2.10.0\n\n"},{"id":"303024","messageId":"20160930221806.3398-3-santiago@nyu.edu","threadId":"44194","inReplyTo":"20160930221806.3398-1-santiago@nyu.edu","subject":"[PATCH v3 2/5] ref-filter: add function to print single ref_array_item","fromName":"","fromEmail":"santiago@nyu.edu","sentAt":"2016-09-30T22:18:03Z","receivedAt":"2016-09-30T22:18:26Z","isPatch":true,"sender":{"key":"santiago@nyu.edu","avatar":"https://avatars.githubusercontent.com/u/3579933?v=4"},"body":"From: Lukas Puehringer <luk.puehringer@gmail.com>\n\nref-filter functions are useful for printing git object information\nusing a format specifier. However, some other modules may not want to use\nthis functionality on a ref-array but only print a single item.\n\nExpose a format_ref function to create, pretty print and free individual\nref-items.\n\nSigned-off-by: Lukas Puehringer <luk.puehringer@gmail.com>\n---\n ref-filter.c | 10 ++++++++++\n ref-filter.h |  3 +++\n 2 files changed, 13 insertions(+)\n\ndiff --git a/ref-filter.c b/ref-filter.c\nindex bc551a7..ee3ed67 100644\n--- a/ref-filter.c\n+++ b/ref-filter.c\n@@ -1655,6 +1655,16 @@ void show_ref_array_item(struct ref_array_item *info, const char *format, int qu\n \tputchar('\\n');\n }\n \n+void pretty_print_ref(const char *name, const unsigned char *sha1,\n+\t\tconst char *format, unsigned kind)\n+{\n+\tstruct ref_array_item *ref_item;\n+\tref_item = new_ref_array_item(name, sha1, 0);\n+\tref_item->kind = kind;\n+\tshow_ref_array_item(ref_item, format, 0);\n+\tfree_array_item(ref_item);\n+}\n+\n /*  If no sorting option is given, use refname to sort as default */\n struct ref_sorting *ref_default_sorting(void)\n {\ndiff --git a/ref-filter.h b/ref-filter.h\nindex 14d435e..3d23090 100644\n--- a/ref-filter.h\n+++ b/ref-filter.h\n@@ -107,4 +107,7 @@ struct ref_sorting *ref_default_sorting(void);\n /*  Function to parse --merged and --no-merged options */\n int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset);\n \n+void pretty_print_ref(const char *name, const unsigned char *sha1,\n+\t\tconst char *format, unsigned kind);\n+\n #endif /*  REF_FILTER_H  */\n-- \n2.10.0\n\n"},{"id":"303025","messageId":"20160930221806.3398-4-santiago@nyu.edu","threadId":"44194","inReplyTo":"20160930221806.3398-1-santiago@nyu.edu","subject":"[PATCH v3 3/5] tag: add format specifier to gpg_verify_tag","fromName":"","fromEmail":"santiago@nyu.edu","sentAt":"2016-09-30T22:18:04Z","receivedAt":"2016-09-30T22:18:28Z","isPatch":true,"sender":{"key":"santiago@nyu.edu","avatar":"https://avatars.githubusercontent.com/u/3579933?v=4"},"body":"From: Lukas P <luk.puehringer@gmail.com>\n\nCalling functions for gpg_verify_tag() may desire to print relevant\ninformation about the header for further verification. Add an optional\nformat argument to print any desired information after GPG verification.\n\nSigned-off-by: Lukas Puehringer <luk.puehringer@gmail.com>\n---\n builtin/tag.c        |  2 +-\n builtin/verify-tag.c |  2 +-\n tag.c                | 17 +++++++++++------\n tag.h                |  4 ++--\n 4 files changed, 15 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/tag.c b/builtin/tag.c\nindex 50e4ae5..14f3b48 100644\n--- a/builtin/tag.c\n+++ b/builtin/tag.c\n@@ -105,7 +105,7 @@ static int delete_tag(const char *name, const char *ref,\n static int verify_tag(const char *name, const char *ref,\n \t\t\t\tconst unsigned char *sha1)\n {\n-\treturn gpg_verify_tag(sha1, name, GPG_VERIFY_VERBOSE);\n+\treturn verify_and_format_tag(sha1, name, NULL, GPG_VERIFY_VERBOSE);\n }\n \n static int do_sign(struct strbuf *buffer)\ndiff --git a/builtin/verify-tag.c b/builtin/verify-tag.c\nindex 99f8148..de10198 100644\n--- a/builtin/verify-tag.c\n+++ b/builtin/verify-tag.c\n@@ -51,7 +51,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)\n \t\tconst char *name = argv[i++];\n \t\tif (get_sha1(name, sha1))\n \t\t\thad_error = !!error(\"tag '%s' not found.\", name);\n-\t\telse if (gpg_verify_tag(sha1, name, flags))\n+\t\telse if (verify_and_format_tag(sha1, name, NULL, flags))\n \t\t\thad_error = 1;\n \t}\n \treturn had_error;\ndiff --git a/tag.c b/tag.c\nindex 291073f..d3512c0 100644\n--- a/tag.c\n+++ b/tag.c\n@@ -4,6 +4,7 @@\n #include \"tree.h\"\n #include \"blob.h\"\n #include \"gpg-interface.h\"\n+#include \"ref-filter.h\"\n \n const char *tag_type = \"tag\";\n \n@@ -33,8 +34,8 @@ static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)\n \treturn ret;\n }\n \n-int gpg_verify_tag(const unsigned char *sha1, const char *name_to_report,\n-\t\tunsigned flags)\n+int verify_and_format_tag(const unsigned char *sha1, const char *name,\n+\t\tconst char *fmt_pretty, unsigned flags)\n {\n \tenum object_type type;\n \tchar *buf;\n@@ -44,21 +45,25 @@ int gpg_verify_tag(const unsigned char *sha1, const char *name_to_report,\n \ttype = sha1_object_info(sha1, NULL);\n \tif (type != OBJ_TAG)\n \t\treturn error(\"%s: cannot verify a non-tag object of type %s.\",\n-\t\t\t\tname_to_report ?\n-\t\t\t\tname_to_report :\n+\t\t\t\tname ?\n+\t\t\t\tname :\n \t\t\t\tfind_unique_abbrev(sha1, DEFAULT_ABBREV),\n \t\t\t\ttypename(type));\n \n \tbuf = read_sha1_file(sha1, &type, &size);\n \tif (!buf)\n \t\treturn error(\"%s: unable to read file.\",\n-\t\t\t\tname_to_report ?\n-\t\t\t\tname_to_report :\n+\t\t\t\tname ?\n+\t\t\t\tname :\n \t\t\t\tfind_unique_abbrev(sha1, DEFAULT_ABBREV));\n \n \tret = run_gpg_verify(buf, size, flags);\n \n \tfree(buf);\n+\n+\tif (fmt_pretty)\n+\t\tpretty_print_ref(name, sha1, fmt_pretty, FILTER_REFS_TAGS);\n+\n \treturn ret;\n }\n \ndiff --git a/tag.h b/tag.h\nindex a5721b6..896b9c2 100644\n--- a/tag.h\n+++ b/tag.h\n@@ -17,7 +17,7 @@ extern int parse_tag_buffer(struct tag *item, const void *data, unsigned long si\n extern int parse_tag(struct tag *item);\n extern struct object *deref_tag(struct object *, const char *, int);\n extern struct object *deref_tag_noverify(struct object *);\n-extern int gpg_verify_tag(const unsigned char *sha1,\n-\t\tconst char *name_to_report, unsigned flags);\n+extern int verify_and_format_tag(const unsigned char *sha1, const char *name,\n+\t\tconst char *fmt_pretty, unsigned flags);\n \n #endif /* TAG_H */\n-- \n2.10.0\n\n"},{"id":"303026","messageId":"20160930221806.3398-6-santiago@nyu.edu","threadId":"44194","inReplyTo":"20160930221806.3398-1-santiago@nyu.edu","subject":"[PATCH v3 5/5] builtin/tag: add --format argument for tag -v","fromName":"","fromEmail":"santiago@nyu.edu","sentAt":"2016-09-30T22:18:06Z","receivedAt":"2016-09-30T22:18:31Z","isPatch":true,"sender":{"key":"santiago@nyu.edu","avatar":"https://avatars.githubusercontent.com/u/3579933?v=4"},"body":"From: Lukas Puehringer <luk.puehringer@gmail.com>\n\nAdding --format to git tag -v mutes the default output of the GPG\nverification and instead prints the formatted tag object.\nThis allows callers to cross-check the tagname from refs/tags with\nthe tagname from the tag object header upon GPG verification.\n\nThe callback function for for_each_tag_name() didn't allow callers to\npass custom data to their callback functions. Add a new opaque pointer\nto each_tag_name_fn's parameter to allow this.\n\nSigned-off-by: Lukas Puehringer <luk.puehringer@gmail.com>\n---\n Documentation/git-tag.txt |  2 +-\n builtin/tag.c             | 34 +++++++++++++++++++++++-----------\n 2 files changed, 24 insertions(+), 12 deletions(-)\n\ndiff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt\nindex 7ecca8e..3bb5e3c 100644\n--- a/Documentation/git-tag.txt\n+++ b/Documentation/git-tag.txt\n@@ -15,7 +15,7 @@ SYNOPSIS\n 'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>]\n \t[--column[=<options>] | --no-column] [--create-reflog] [--sort=<key>]\n \t[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]\n-'git tag' -v <tagname>...\n+'git tag' -v [--format=<format>] <tagname>...\n \n DESCRIPTION\n -----------\ndiff --git a/builtin/tag.c b/builtin/tag.c\nindex 14f3b48..7730fd0 100644\n--- a/builtin/tag.c\n+++ b/builtin/tag.c\n@@ -24,7 +24,7 @@ static const char * const git_tag_usage[] = {\n \tN_(\"git tag -d <tagname>...\"),\n \tN_(\"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>]\"\n \t\t\"\\n\\t\\t[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]\"),\n-\tN_(\"git tag -v <tagname>...\"),\n+\tN_(\"git tag -v [--format=<format>] <tagname>...\"),\n \tNULL\n };\n \n@@ -66,15 +66,17 @@ static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting, con\n }\n \n typedef int (*each_tag_name_fn)(const char *name, const char *ref,\n-\t\t\t\tconst unsigned char *sha1);\n+\t\t\t\tconst unsigned char *sha1, void *cb_data);\n \n-static int for_each_tag_name(const char **argv, each_tag_name_fn fn)\n+static int for_each_tag_name(const char **argv, each_tag_name_fn fn,\n+\t\tvoid *cb_data)\n {\n \tconst char **p;\n \tchar ref[PATH_MAX];\n \tint had_error = 0;\n \tunsigned char sha1[20];\n \n+\n \tfor (p = argv; *p; p++) {\n \t\tif (snprintf(ref, sizeof(ref), \"refs/tags/%s\", *p)\n \t\t\t\t\t>= sizeof(ref)) {\n@@ -87,14 +89,14 @@ static int for_each_tag_name(const char **argv, each_tag_name_fn fn)\n \t\t\thad_error = 1;\n \t\t\tcontinue;\n \t\t}\n-\t\tif (fn(*p, ref, sha1))\n+\t\tif (fn(*p, ref, sha1, cb_data))\n \t\t\thad_error = 1;\n \t}\n \treturn had_error;\n }\n \n static int delete_tag(const char *name, const char *ref,\n-\t\t\t\tconst unsigned char *sha1)\n+\t\t\t\tconst unsigned char *sha1, void *cb_data)\n {\n \tif (delete_ref(ref, sha1, 0))\n \t\treturn 1;\n@@ -103,9 +105,16 @@ static int delete_tag(const char *name, const char *ref,\n }\n \n static int verify_tag(const char *name, const char *ref,\n-\t\t\t\tconst unsigned char *sha1)\n+\t\t\t\tconst unsigned char *sha1, void *cb_data)\n {\n-\treturn verify_and_format_tag(sha1, name, NULL, GPG_VERIFY_VERBOSE);\n+\tint flags;\n+    char *fmt_pretty = cb_data;\n+\tflags = GPG_VERIFY_VERBOSE;\n+\n+\tif (fmt_pretty)\n+\t\tflags = GPG_VERIFY_QUIET;\n+\n+\treturn verify_and_format_tag(sha1, name, fmt_pretty, flags);\n }\n \n static int do_sign(struct strbuf *buffer)\n@@ -334,7 +343,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \tstruct strbuf err = STRBUF_INIT;\n \tstruct ref_filter filter;\n \tstatic struct ref_sorting *sorting = NULL, **sorting_tail = &sorting;\n-\tconst char *format = NULL;\n+\tchar *format = NULL;\n \tstruct option options[] = {\n \t\tOPT_CMDMODE('l', \"list\", &cmdmode, N_(\"list tag names\"), 'l'),\n \t\t{ OPTION_INTEGER, 'n', NULL, &filter.lines, N_(\"n\"),\n@@ -424,9 +433,12 @@ int cmd_tag(int argc, const char **argv, const char *prefix)\n \tif (filter.merge_commit)\n \t\tdie(_(\"--merged and --no-merged option are only allowed with -l\"));\n \tif (cmdmode == 'd')\n-\t\treturn for_each_tag_name(argv, delete_tag);\n-\tif (cmdmode == 'v')\n-\t\treturn for_each_tag_name(argv, verify_tag);\n+\t\treturn for_each_tag_name(argv, delete_tag, NULL);\n+\tif (cmdmode == 'v') {\n+\t\tif (format)\n+\t\t\tverify_ref_format(format);\n+\t\treturn for_each_tag_name(argv, verify_tag, format);\n+\t}\n \n \tif (msg.given || msgfile) {\n \t\tif (msg.given && msgfile)\n-- \n2.10.0\n\n"},{"id":"303027","messageId":"20160930221806.3398-5-santiago@nyu.edu","threadId":"44194","inReplyTo":"20160930221806.3398-1-santiago@nyu.edu","subject":"[PATCH v3 4/5] builtin/verify-tag: add --format to verify-tag","fromName":"","fromEmail":"santiago@nyu.edu","sentAt":"2016-09-30T22:18:05Z","receivedAt":"2016-09-30T22:18:32Z","isPatch":true,"sender":{"key":"santiago@nyu.edu","avatar":"https://avatars.githubusercontent.com/u/3579933?v=4"},"body":"From: Santiago Torres <santiago@nyu.edu>\n\nCallers of verify-tag may want to cross-check the tagname from refs/tags\nwith the tagname from the tag object header upon GPG verification. This\nis to avoid tag refs that point to an incorrect object.\n\nAdd a --format parameter to git verify-tag to print the formatted tag\nobject header in addition to or instead of the --verbose or --raw GPG\nverification output.\n\nSigned-off-by: Santiago Torres <santiago@nyu.edu>\n---\n Documentation/git-verify-tag.txt |  2 +-\n builtin/verify-tag.c             | 13 +++++++++++--\n 2 files changed, 12 insertions(+), 3 deletions(-)\n\ndiff --git a/Documentation/git-verify-tag.txt b/Documentation/git-verify-tag.txt\nindex d590edc..0b8075d 100644\n--- a/Documentation/git-verify-tag.txt\n+++ b/Documentation/git-verify-tag.txt\n@@ -8,7 +8,7 @@ git-verify-tag - Check the GPG signature of tags\n SYNOPSIS\n --------\n [verse]\n-'git verify-tag' <tag>...\n+'git verify-tag' [--format=<format>] <tag>...\n \n DESCRIPTION\n -----------\ndiff --git a/builtin/verify-tag.c b/builtin/verify-tag.c\nindex de10198..745b6a6 100644\n--- a/builtin/verify-tag.c\n+++ b/builtin/verify-tag.c\n@@ -12,12 +12,14 @@\n #include <signal.h>\n #include \"parse-options.h\"\n #include \"gpg-interface.h\"\n+#include \"ref-filter.h\"\n \n static const char * const verify_tag_usage[] = {\n-\t\tN_(\"git verify-tag [-v | --verbose] <tag>...\"),\n+\t\tN_(\"git verify-tag [-v | --verbose] [--format=<format>] <tag>...\"),\n \t\tNULL\n };\n \n+\n static int git_verify_tag_config(const char *var, const char *value, void *cb)\n {\n \tint status = git_gpg_config(var, value, cb);\n@@ -30,9 +32,11 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)\n {\n \tint i = 1, verbose = 0, had_error = 0;\n \tunsigned flags = 0;\n+    char *fmt_pretty;\n \tconst struct option verify_tag_options[] = {\n \t\tOPT__VERBOSE(&verbose, N_(\"print tag contents\")),\n \t\tOPT_BIT(0, \"raw\", &flags, N_(\"print raw gpg status output\"), GPG_VERIFY_RAW),\n+\t\tOPT_STRING(  0 , \"format\", &fmt_pretty, N_(\"format\"), N_(\"format to use for the output\")),\n \t\tOPT_END()\n \t};\n \n@@ -46,12 +50,17 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)\n \tif (verbose)\n \t\tflags |= GPG_VERIFY_VERBOSE;\n \n+\tif (fmt_pretty) {\n+\t\tverify_ref_format(fmt_pretty);\n+\t\tflags |= GPG_VERIFY_QUIET;\n+\t}\n+\n \twhile (i < argc) {\n \t\tunsigned char sha1[20];\n \t\tconst char *name = argv[i++];\n \t\tif (get_sha1(name, sha1))\n \t\t\thad_error = !!error(\"tag '%s' not found.\", name);\n-\t\telse if (verify_and_format_tag(sha1, name, NULL, flags))\n+\t\telse if (verify_and_format_tag(sha1, name, fmt_pretty, flags))\n \t\t\thad_error = 1;\n \t}\n \treturn had_error;\n-- \n2.10.0\n\n"},{"id":"303030","messageId":"0e3cc036-787b-d93b-dc87-47a0826ec919@gmail.com","threadId":"44194","inReplyTo":"20160930221806.3398-3-santiago@nyu.edu","subject":"Re: [PATCH v3 2/5] ref-filter: add function to print single ref_array_item","fromName":"Jakub Narębski","fromEmail":"jnareb@gmail.com","sentAt":"2016-09-30T23:12:23Z","receivedAt":"2016-09-30T23:12:41Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"W dniu 01.10.2016 o 00:18, santiago@nyu.edu pisze:\n> From: Lukas Puehringer <luk.puehringer@gmail.com>\n> \n> ref-filter functions are useful for printing git object information\n> using a format specifier. However, some other modules may not want to use\n> this functionality on a ref-array but only print a single item.\n> \n> Expose a format_ref function to create, pretty print and free individual\n> ref-items.\n\nIt's now pretty_print_ref, not format_ref (old version in commit message).\n\n[...]\n> +void pretty_print_ref(const char *name, const unsigned char *sha1,\n> +\t\tconst char *format, unsigned kind)\n\n"},{"id":"303032","messageId":"xmqqlgy97ys0.fsf@gitster.mtv.corp.google.com","threadId":"44194","inReplyTo":"20160930221806.3398-1-santiago@nyu.edu","subject":"Re: [PATCH v3 0/5] Add --format to tag verification","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-09-30T23:28:47Z","receivedAt":"2016-09-30T23:28:56Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"What is in the patch series looked more or less good to me.  Lukas's\nsirname was still P in [3/5], a patch in [4/5] added an unnecssary\nblank line before git_verify_tag_config() and also a local variable\ndeclaration for \"char *fmt_pretty\" was indented funnily, but none of\nthese were something I couldn't fix up locally.\n\nI however notice that there is no new tests to protect these two new\nfeatures from future breakages.  Perhaps you want to add some in\n[6/5]?\n\nThanks.\n\n\n\n"},{"id":"303037","messageId":"xmqqeg4097kp.fsf@gitster.mtv.corp.google.com","threadId":"44194","inReplyTo":"0e3cc036-787b-d93b-dc87-47a0826ec919@gmail.com","subject":"Re: [PATCH v3 2/5] ref-filter: add function to print single ref_array_item","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-10-01T01:33:26Z","receivedAt":"2016-10-01T01:33:38Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jakub Narębski <jnareb@gmail.com> writes:\n\n>> Expose a format_ref function to create, pretty print and free individual\n>> ref-items.\n>\n> It's now pretty_print_ref, not format_ref (old version in commit message).\n\nGood eyes.  Will tweak locally.\n\nThanks.\n"},{"id":"303089","messageId":"20161003144901.4yainza537g5bujz@LykOS.localdomain","threadId":"44194","inReplyTo":"xmqqlgy97ys0.fsf@gitster.mtv.corp.google.com","subject":"Re: [PATCH v3 0/5] Add --format to tag verification","fromName":"Santiago Torres","fromEmail":"santiago@nyu.edu","sentAt":"2016-10-03T14:49:03Z","receivedAt":"2016-10-03T14:49:12Z","isPatch":true,"sender":{"key":"santiago@nyu.edu","avatar":"https://avatars.githubusercontent.com/u/3579933?v=4"},"body":"Hi, Junio. \n> I however notice that there is no new tests to protect these two new\n> features from future breakages.  Perhaps you want to add some in\n> [6/5]?\n\nI'll be working on this. I spent some time looking around for example\ntests for format. Are there any that I should pay special attention to?\n(I'm looking at t7004 mostly right now).\n\nThanks!\n-Santiago.\n"},{"id":"303137","messageId":"xmqqshsd5euo.fsf@gitster.mtv.corp.google.com","threadId":"44194","inReplyTo":"20161003144901.4yainza537g5bujz@LykOS.localdomain","subject":"Re: [PATCH v3 0/5] Add --format to tag verification","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-10-03T20:58:55Z","receivedAt":"2016-10-03T20:59:03Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Santiago Torres <santiago@nyu.edu> writes:\n\n> Hi, Junio. \n>> I however notice that there is no new tests to protect these two new\n>> features from future breakages.  Perhaps you want to add some in\n>> [6/5]?\n>\n> I'll be working on this. I spent some time looking around for example\n> tests for format. Are there any that I should pay special attention to?\n> (I'm looking at t7004 mostly right now).\n\nBy the way, running t7030 seems to reveal a segfault introduced by\nthis 5-patch series.\n"}]}