On Sat, Mar 17, 2018 at 11:22 PM, Thomas Gummerer <t.gummerer@xxxxxxxxx> wrote: > Currently 'git worktree add' produces output like the following, when > '--no-checkout' is not given: > > Preparing foo (identifier foo) > HEAD is now at 26da330922 <title> > > where the first line is written to stderr, and the second line coming > from 'git reset --hard' is written to stdout, even though both lines are > supposed to tell the user what has happened. In addition to someone not > familiar with 'git worktree', this might seem as if the current HEAD was > modified, not the HEAD in the new working tree. > > If the '--no-checkout' flag is given, the output of 'git worktree add' > is just: > > Preparing foo (identifier foo) > > even though the HEAD is set to a commit, which is just not checked out. > > The identifier is also not particularly relevant for the user at the > moment, as it's only used internally to distinguish between different > worktrees that have the same $(basename <path>). > > Fix these inconsistencies, and no longer show the identifier by making > the 'git reset --hard' call quiet, and printing the message directly > from the builtin command instead. > > Signed-off-by: Thomas Gummerer <t.gummerer@xxxxxxxxx> > --- > builtin/worktree.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/builtin/worktree.c b/builtin/worktree.c > index 7cef5b120b..e5d04f0b4b 100644 > --- a/builtin/worktree.c > +++ b/builtin/worktree.c > @@ -303,8 +303,6 @@ static int add_worktree(const char *path, const char *refname, > strbuf_addf(&sb, "%s/commondir", sb_repo.buf); > write_file(sb.buf, "../.."); > > - fprintf_ln(stderr, _("Preparing %s (identifier %s)"), path, name); > - > argv_array_pushf(&child_env, "%s=%s", GIT_DIR_ENVIRONMENT, sb_git.buf); > argv_array_pushf(&child_env, "%s=%s", GIT_WORK_TREE_ENVIRONMENT, path); > cp.git_cmd = 1; > @@ -320,10 +318,19 @@ static int add_worktree(const char *path, const char *refname, > if (ret) > goto done; > > + fprintf(stderr, _("worktree HEAD is now at %s"), We use the term "working tree" for UI and documents. "worktree" is only used in code comments and stuff. > + find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV)); > + > + strbuf_reset(&sb); > + pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb); > + if (sb.len > 0) > + fprintf(stderr, " %s", sb.buf); > + fputc('\n', stderr); > + > if (opts->checkout) { > cp.argv = NULL; > argv_array_clear(&cp.args); > - argv_array_pushl(&cp.args, "reset", "--hard", NULL); > + argv_array_pushl(&cp.args, "reset", "--hard", "--quiet", NULL); > cp.env = child_env.argv; > ret = run_command(&cp); > if (ret) > -- > 2.17.0.rc0.231.g781580f06 > -- Duy