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

Re: [PATCH/RFC] revision: Show friendlier message.

From
Leila <muhtasib@gmail.com>
Date
Jun 25, 2012, 19:14 UTC
Message-ID
<CAA3EhHJbKj+nbVsZtijsH+h7sFcyeBwT9K=BTeqAuMzSH0RGmg@mail.gmail.com>
In-Reply-To
<7vobo8hsee.fsf@alter.siamese.dyndns.org>
On Mon, Jun 25, 2012 at 1:28 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 7 quoted lines
> But setup_revisions() is a very low level routine that is used by
> many plumbing commands, and it is a horrible layering violation to
> tweak its behaviour based on argv[0] and also it is too inflexible
> hack as a solution.  For example, don't you want to give a different
> error message for "git log HEAD" with an explicit "HEAD" from the
> command line?  Would you add a similar support for a command that is
> not "log" by adding yet another strcmp() here?

I noticed that it was a very low level routine used by many commands. Initially, I also thought it was a bit hacky to check argv[0], and yes it would mean that we'd need to add more strcmps (or if the message sufficed for all commands take out the comparison of argv[0]) in the future to handle various cases. But I figured I'd use argv[0], since it was avail to us in that routine. And since that routine is where we displayed the error message, I tried to keep changes local to that area. I was trying to change as little code as possible, because I didn't want to affect the other commands. I've started implementing a patch with your suggestions below.

Show 7 quoted lines
> Wouldn't it be a more reasonable alternative solution if you do this:
>
>  1. Check if HEAD points at a commit _before_ setting opt->def to it
>    in "git log" (and other end-user facing programs in the "log"
>    family, possibly in cmd_log_init_finish() if that function is
>    not called by a program where the current message should not
>    change), and do _NOT_ set opt->def to it;

Ok. At the start of the cmd_log_init_finish, opt->def already points to HEAD. But I can unset it if HEAD doesn't point at a commit.

>  2. Make setup_revisions() expose got_rev_arg to its callers
>    (e.g. move it to struct rev_info);
Do you mean have got_rev_args be a wrapper of argc and argv?

Or is it just a mechanism to set a signal that the calling command is 'log', so that I can do something about it without checking argv[0]?

>  3. If you did not pass HEAD in opt->def and setup_revisions() said
>    it did not "got_rev_arg", give whatever error message that you
>    think is more user friendly.
>

Sure, I can do this. Note: just to confirm the message/exit will still come from inside of setup_revisions()?

Show 8 quoted lines
> That way, if HEAD points at a commit, or if HEAD doesn't point at a
> commit but the user gave some existing commit from the command line,
> you wouldn't see "bad default revision" at all.
>
> And the most important part of this alternative is that the lower
> level machinery does not have to _care_ about the reason why the
> higher level passed a bad HEAD to it.
>

I'll wait to comment on this until I understand what get_rev_arg is supposed to do/signify, as things will be clearer then.

Show 6 quoted lines
> Personally, I tend to think that not saying anything and reporting
> success, instead of any error message, would be the right thing to
> do if you are changing the behaviour of this case anyway.
>
> Hrm?
>

Yes, I think reporting success would be right in this case. I think the message "No commit(s) to display." is helpful, but I don't feel strongly about this.

Thanks!
Previous: Junio C HamanoNext: Junio C Hamano
Message 4 of 8 in “revision: Show friendlier message.”
  1. revision: Show friendlier message.Leila Muhtasib, Jun 23, 2012
  2. Junio C HamanoJun 25, 2012
  3. Junio C HamanoJun 25, 2012
  4. LeilaJun 25, 2012
  5. Junio C HamanoJun 25, 2012
  6. LeilaJun 25, 2012
  7. Junio C HamanoJun 25, 2012
  8. LeilaJun 26, 2012

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.