mbox series

[v6,0/2] name-rev: deprecate --stdin in favor of --annotate-stdin

Message ID pull.1171.v6.git.git.1641423600.gitgitgadget@gmail.com (mailing list archive)
Headers show
Series name-rev: deprecate --stdin in favor of --annotate-stdin | expand

Message

Koji Nakamaru via GitGitGadget Jan. 5, 2022, 10:59 p.m. UTC
Introduce a --annotate-stdin that is functionally equivalent of --stdin.
--stdin does not behave as --stdin in other subcommands, such as
pack-objects whereby it takes one argument per line. Since --stdin can be a
confusing and misleading name, the goal is to rename it to --annotate-stdin.

This is the first step in a process of eventually fully deprecating --stdin.
This change also adds a warning to --stdin warning that it will be removed
in the future.

See https://lore.kernel.org/git/xmqqsfuh1pxz.fsf@gitster.g/ for discussion.

changes since v5:

 * fixed documentation example indentation (again)
 * moved initialization of strbuf from 1/2 to 2/2

changes since v4:

 * fixed documentation example indentation

changes since v3:

 * use strbuf_getline instead of strbuf_getwholeline (based on Junio's
   feedback)
 * fixed commit message s/annotate-text/annotate-stdin (based on Junio's
   feedback)
 * since strbuf_getline does not keep the trailing terminator, add back '\n'
   with strbuf_addchr
 * reordered documentation blocks based on (Philip Oakley's feedback)
 * fixed doc typos in example block

John Cai (2):
  name-rev: deprecate --stdin in favor of --annotate-stdin
  name-rev.c: use strbuf_getline instead of limited size buffer

 Documentation/git-name-rev.txt       | 30 ++++++++++++++++++++++++++--
 builtin/name-rev.c                   | 30 ++++++++++++++++++----------
 t/t3412-rebase-root.sh               |  2 +-
 t/t4202-log.sh                       |  2 +-
 t/t6007-rev-list-cherry-pick-file.sh | 26 ++++++++++++------------
 t/t6012-rev-list-simplify.sh         |  2 +-
 t/t6111-rev-list-treesame.sh         |  3 ++-
 t/t6120-describe.sh                  |  9 +++++++--
 8 files changed, 72 insertions(+), 32 deletions(-)


base-commit: c8b2ade48c204690119936ada89cd938c476c5c2
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1171%2Fjohn-cai%2Fjc%2Fdeprecate-name-rev-stdin-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1171/john-cai/jc/deprecate-name-rev-stdin-v6
Pull-Request: https://github.com/git/git/pull/1171

Range-diff vs v5:

 1:  7c5fb10d87c ! 1:  3caf254a73e name-rev: deprecate --stdin in favor of --annotate-stdin
     @@ Documentation/git-name-rev.txt: OPTIONS
      ++
      +For example:
      ++
     -+--
     -+	$ cat sample.txt
     ++-----------
     ++$ cat sample.txt
      +
     -+	An abbreviated revision 2ae0a9cb82 will not be substituted.
     -+	The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907,
     -+	while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
     ++An abbreviated revision 2ae0a9cb82 will not be substituted.
     ++The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907,
     ++while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
      +
     -+	$ git name-rev --annotate-stdin <sample.txt
     ++$ git name-rev --annotate-stdin <sample.txt
      +
     -+	An abbreviated revision 2ae0a9cb82 will not be substituted.
     -+	The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907 (master),
     -+	while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
     ++An abbreviated revision 2ae0a9cb82 will not be substituted.
     ++The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907 (master),
     ++while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
      +
     -+	$ git name-rev --name-only --annotate-stdin <sample.txt
     ++$ git name-rev --name-only --annotate-stdin <sample.txt
      +
     -+	An abbreviated revision 2ae0a9cb82 will not be substituted.
     -+	The full name after substitution is master,
     -+	while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
     -+--
     ++An abbreviated revision 2ae0a9cb82 will not be substituted.
     ++The full name after substitution is master,
     ++while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
     ++-----------
      +
      +--stdin::
      +	This option is deprecated in favor of 'git name-rev --annotate-stdin'.
     @@ builtin/name-rev.c: static void name_rev_line(char *p, struct name_ref_data *dat
       	struct option opts[] = {
       		OPT_BOOL(0, "name-only", &data.name_only, N_("print only ref-based names (no object names)")),
      @@ builtin/name-rev.c: int cmd_name_rev(int argc, const char **argv, const char *prefix)
     + 				   N_("ignore refs matching <pattern>")),
       		OPT_GROUP(""),
       		OPT_BOOL(0, "all", &all, N_("list all commits reachable from all refs")),
     - 		OPT_BOOL(0, "stdin", &transform_stdin, N_("read from stdin")),
     +-		OPT_BOOL(0, "stdin", &transform_stdin, N_("read from stdin")),
     ++		OPT_BOOL_F(0, "stdin", &transform_stdin, N_("deprecated: use annotate-stdin instead"), PARSE_OPT_HIDDEN),
      +		OPT_BOOL(0, "annotate-stdin", &annotate_stdin, N_("annotate text from stdin")),
       		OPT_BOOL(0, "undefined", &allow_undefined, N_("allow to print `undefined` names (default)")),
       		OPT_BOOL(0, "always",     &always,
     @@ builtin/name-rev.c: int cmd_name_rev(int argc, const char **argv, const char *pr
       	name_tips();
       
      -	if (transform_stdin) {
     --		char buffer[2048];
      +	if (annotate_stdin) {
     -+		struct strbuf sb = STRBUF_INIT;
     + 		char buffer[2048];
       
       		while (!feof(stdin)) {
     - 			char *p = fgets(buffer, sizeof(buffer), stdin);
      
       ## t/t3412-rebase-root.sh ##
      @@ t/t3412-rebase-root.sh: export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 2:  2acd70f36e7 ! 2:  32ad96530b9 name-rev.c: use strbuf_getline instead of limited size buffer
     @@ Commit message
      
       ## builtin/name-rev.c ##
      @@ builtin/name-rev.c: int cmd_name_rev(int argc, const char **argv, const char *prefix)
     + 	name_tips();
     + 
       	if (annotate_stdin) {
     - 		struct strbuf sb = STRBUF_INIT;
     +-		char buffer[2048];
     ++		struct strbuf sb = STRBUF_INIT;
       
      -		while (!feof(stdin)) {
      -			char *p = fgets(buffer, sizeof(buffer), stdin);

Comments

Junio C Hamano Jan. 5, 2022, 11:12 p.m. UTC | #1
"John Cai via GitGitGadget" <gitgitgadget@gmail.com> writes:

> Introduce a --annotate-stdin that is functionally equivalent of --stdin.
> --stdin does not behave as --stdin in other subcommands, such as
> pack-objects whereby it takes one argument per line. Since --stdin can be a
> confusing and misleading name, the goal is to rename it to --annotate-stdin.
>
> This is the first step in a process of eventually fully deprecating --stdin.
> This change also adds a warning to --stdin warning that it will be removed
> in the future.
>
> See https://lore.kernel.org/git/xmqqsfuh1pxz.fsf@gitster.g/ for discussion.
>
> changes since v5:
>
>  * fixed documentation example indentation (again)
>  * moved initialization of strbuf from 1/2 to 2/2

This round looks almost perfect.

One I can think of that _may_ be a good idea to change from this
version is to undo the HIDDEN thing, so that "git name-rev -h",
without "git name-rev --help-all", will prominently say that
"--stdin" is deprecated, and make it an hidden option sometime
later, but that is not even "I think we should do so", but more like
"if other people think it is a good idea, I would be supportive".

Thanks.