From: Vikrant Varma <vikrant.varma94@gmail.com>
To: Ramkumar Ramachandra <artagnon@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/2] help: add help_unknown_ref
Date: Thu, 02 May 2013 01:25:05 +0530 [thread overview]
Message-ID: <51817319.6060201@gmail.com> (raw)
In-Reply-To: <CALkWK0nMMi-nmAMUGXCaJDCV29G3dOzYTosKqSw+bFzc0osiaA@mail.gmail.com>
On 01-05-2013 17:53, Ramkumar Ramachandra wrote:
> Vikrant Varma wrote:
>> Give better advice when trying to merge a branch that doesn't exist. If
>> the branch exists in any remotes, display a list of suggestions.
>
> Interesting. Thanks for working on this.
>
> You say advice, but you're not invoking advise() or guarding the
> advice with an advice.* -- the advice is undoubtedly helpful, but not
> everyone wants to see it.
>
I agree with Matthieu, the people who don't want to see this advice
never will, because they won't make that mistake. Maybe advice is the
wrong word, corrections might be more appropriate.
>> diff --git a/help.c b/help.c
>> index 02ba043..faf18b9 100644
>> --- a/help.c
>> +++ b/help.c
>> @@ -7,6 +7,7 @@
>> #include "string-list.h"
>> #include "column.h"
>> #include "version.h"
>> +#include "refs.h"
>>
>> void add_cmdname(struct cmdnames *cmds, const char *name, int len)
>> {
>> @@ -404,3 +405,46 @@ int cmd_version(int argc, const char **argv, const char *prefix)
>> printf("git version %s\n", git_version_string);
>> return 0;
>> }
>> +
>> +struct similar_ref_cb {
>
> I see that there are other structs in our codebase suffixing _cb, to
> indicate "callback data". I normally reserve _cb for callback
> functions.
I'm following the convention (builtin/merge.c: struct append_ref_cb). If
there's a better way to name it, I'll use that.
>> +static int append_similar_ref(const char* refname, const unsigned char *sha1, int flags, void *cb_data)
>> +{
>> + int i;
>> + struct similar_ref_cb *cb = (struct similar_ref_cb *)(cb_data);
>> + for (i = strlen(refname); refname[i] != '/'; i--)
>> + ;
>
> Er, what is this? A re-implementation of strrchr()?
>
Oh so that's what it's called. Apologies, will fix this.
>> + /* A remote branch of the same name is deemed similar */
>> + if (!prefixcmp(refname, "refs/remotes/") && !strcmp(refname + i + 1, cb->base_ref))
>> + string_list_append(&(cb->similar_refs), refname + 13);
>
> What is 13? Please use strlen("refs/remotes/") for readability.
>
Yes, will fix this too.
>> +void help_unknown_ref(const char* ref) {
>> + int i;
>> + struct similar_ref_cb ref_cb;
>> + ref_cb.similar_refs = (struct string_list)STRING_LIST_INIT_NODUP;
>
> Why are you casting STRING_LIST_INIT_NODUP?
>
>> + ref_cb.base_ref = ref;
ref_cb.similar_refs has already been defined. The compiler won't let me
assign to it unless I cast first. However, I think compound literals are
a C99/gcc feature. Is this better?
struct similar_ref_cb ref_cb = {ref, STRING_LIST_INIT_NODUP};
>> + if (ref_cb.similar_refs.nr > 0) {
>> + fprintf_ln(stderr,
>> + Q_("\nDid you mean this?",
>> + "\nDid you mean one of these?",
>> + ref_cb.similar_refs.nr));
>
> Hm, why did you use Q_?
>
Q_ is a pluralization helper that picks one of the two strings based on
ref_cb.similar_refs.nr. It's used in help.c:help_unknown_cmd for the
same reason.
>> + for (i = 0; i < ref_cb.similar_refs.nr; i++)
>> + fprintf(stderr, "\t%s\n", ref_cb.similar_refs.items[i].string);
>> + }
>> + exit(1);
>
> die() exits with 128, no? Why are you exiting with 1 now?
>
Again, because help_unknown_cmd exited with 1. I've tried to follow the
convention as laid down there. What's the significance of the error code
for die()? When is it correct to use die(), and when to use error()
followed by exit(128)?
next prev parent reply other threads:[~2013-05-01 19:55 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-01 11:22 [PATCH 0/2] Better advice on merge Vikrant Varma
2013-05-01 11:22 ` [PATCH 1/2] help: add help_unknown_ref Vikrant Varma
2013-05-01 12:23 ` Ramkumar Ramachandra
2013-05-01 14:06 ` Matthieu Moy
2013-05-01 19:55 ` Vikrant Varma [this message]
2013-05-01 20:23 ` Johannes Sixt
2013-05-01 20:32 ` Ramkumar Ramachandra
2013-05-01 21:45 ` Vikrant Varma
2013-05-01 22:12 ` Junio C Hamano
2013-05-01 18:35 ` Junio C Hamano
2013-05-01 22:26 ` Vikrant Varma
2013-05-01 23:07 ` Junio C Hamano
2013-05-01 11:22 ` [PATCH 2/2] merge: use help_unknown_ref instead of die Vikrant Varma
2013-05-01 18:36 ` Junio C Hamano
2013-05-01 18:27 ` [PATCH 0/2] Better advice on merge Jonathan Nieder
2013-05-01 23:06 ` Vikrant Varma
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=51817319.6060201@gmail.com \
--to=vikrant.varma94@gmail.com \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
/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).