All of lore.kernel.org
 help / color / mirror / Atom feed
From: Slavica Djukic <slavicadj.ip2018@gmail.com>
To: Junio C Hamano <gitster@pobox.com>,
	Slavica Djukic via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, "Phillip Wood" <phillip.wood@dunelm.org.uk>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: Re: [PATCH v5 05/10] add-interactive.c: implement status command
Date: Fri, 1 Mar 2019 12:08:56 +0100	[thread overview]
Message-ID: <22f856ad-8248-7f1b-a720-636da6286e82@gmail.com> (raw)
In-Reply-To: <xmqq4l8vpj6x.fsf@gitster-ct.c.googlers.com>


On 22-Feb-19 11:11 PM, Junio C Hamano wrote:
> "Slavica Djukic via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>> +static int parse_color_slot(const char *slot)
>> +{
>> +	if (!strcasecmp(slot, "prompt"))
>> +		return COLOR_PROMPT;
>> +	if (!strcasecmp(slot, "header"))
>> +		return COLOR_HEADER;
>> +	if (!strcasecmp(slot, "help"))
>> +		return COLOR_HELP;
>> +	if (!strcasecmp(slot, "error"))
>> +		return COLOR_ERROR;
> As these are "color.interactive.<name>", matching case-insensitively
> is the right thing to do.  Good.
>
> If we would end up increasing the number of slots, we may need to
> switch to LOOKUP_CONFIG(), but for just four of them, this will do.
>
>> @@ -313,3 +357,78 @@ static struct choices *list_and_choose(struct choices *data,
>>   		return NULL;
>>   	}
>>   }
>> +
>> +static struct choice *make_choice(const char *name )
> Excess SP before ')'?
>
>> +{
>> +	struct choice *choice;
> Style: have a blank line here to delineate decls (at the beginning
> of a function) and stmts (at all the decls).
>
>> +	FLEXPTR_ALLOC_STR(choice, name, name);
>> +	return choice;
>> +}
>> +
>> +static struct choice *add_choice(struct choices *choices, const char type,
>> +				 struct file_stat *file, struct command *command)
>> +{
>> +	struct choice *choice;
> Ditto here.
>
>> +	switch (type) {
>> +		case 'f':
> Style: in our codebase, switch and case are indented to the same
> level, with the body of each case arm indented one more level.
>
>> +			choice = make_choice(file->name);
>> +			choice->u.file.index.added = file->index.added;
>> +			choice->u.file.index.deleted = file->index.deleted;
>> +			choice->u.file.worktree.added = file->worktree.added;
>> +			choice->u.file.worktree.deleted = file->worktree.deleted;
> Would it make sense to make sure that all of file->index,
> u.file.index, file->wt, u.file.wt are exactly the same type of
> struct by introducing
>
> 	struct adddel { uintmax_t add, del; };
>
> in a very early part of the series, and embed that structure as a
> member in "struct choice" and "struct file_stat"?  That way, these
> assignments would become two structure assignments, that would be
> much easier to read.


Yes, definitely. I worked on this and it will be included in the next 
iteration.


>
>> +void add_i_status(void)
>> +{
>> +	struct collection_status *s;
>> +	struct list_and_choose_options opts = { 0 };
>> +	struct hashmap *map;
>> +	struct hashmap_iter iter;
>> +	struct choices choices = CHOICES_INIT;
>> +	struct file_stat *entry;
>> +	const char *modified_fmt = _("%12s %12s %s");
>> +	const char type = 'f';
>> +
>> +	opts.header = xmalloc(sizeof(char) * (HEADER_MAXLEN + 1));
>> +	snprintf(opts.header, HEADER_MAXLEN + 1, modified_fmt,
>> +		 _("staged"), _("unstaged"), _("path"));
> Is there aversion to use of strbuf among your mentors?
>
>
>> +	s = list_modified(the_repository, NULL);
>> +	if (s == NULL)
>> +		return;
>> +
>> +	map = &s->file_map;
>> +	hashmap_iter_init(map, &iter);
>> +	while ((entry = hashmap_iter_next(&iter))) {
>> +		add_choice(&choices, type, entry, NULL);
>> +	}
>> +
>> +	list_and_choose(&choices, &opts);
> In what order are these filenames given?  Whatever random order the
> hashmap happens to store them in?
>
> I vaguely recall in an earlier step the code used hashmap to collect
> but at the end produced a sorted list out of the final result.
> Shouldn't we be iterating over that sorted list instead?  Do we even
> need the hashmap at this point?


We actually don't need hashmap at this point, I've changed this so that
list_modified returns produced sorted list.
I've also applied all other suggestions in this message.
Thank you.

>> +	hashmap_free(&s->file_map, 1);
>> +	free(s);
>> +	free_choices(&choices);
> Did we just leak opt.header?
>
>> +}
>> diff --git a/add-interactive.h b/add-interactive.h
>> new file mode 100644
>> index 0000000000..8ef3d2e82b
>> --- /dev/null
>> +++ b/add-interactive.h
>> @@ -0,0 +1,8 @@
>> +#ifndef ADD_INTERACTIVE_H
>> +#define ADD_INTERACTIVE_H
>> +
>> +int add_i_config(const char *var, const char *value, void *cbdata);
>> +
>> +void add_i_status(void);
>> +
>> +#endif
>> diff --git a/builtin/add--helper.c b/builtin/add--helper.c
>> index 6a97f0e191..464d2245f3 100644
>> --- a/builtin/add--helper.c
>> +++ b/builtin/add--helper.c
>> @@ -1,6 +1,38 @@
>> +#include "add-interactive.h"
>>   #include "builtin.h"
>> +#include "config.h"
>> +#include "revision.h"
>> +
>> +static const char * const builtin_add_helper_usage[] = {
>> +	N_("git add-interactive--helper <command>"),
>> +	NULL
>> +};
>> +
>> +enum cmd_mode {
>> +	DEFAULT = 0,
>> +	STATUS
>> +};
>>   
>>   int cmd_add__helper(int argc, const char **argv, const char *prefix)
>>   {
>> +	enum cmd_mode mode = DEFAULT;
>> +
>> +	struct option options[] = {
>> +		OPT_CMDMODE(0, "status", &mode,
>> +			    N_("print status information with diffstat"), STATUS),
>> +		OPT_END()
>> +	};
>> +
>> +	git_config(add_i_config, NULL);
>> +	argc = parse_options(argc, argv, NULL, options,
>> +			     builtin_add_helper_usage,
>> +			     PARSE_OPT_KEEP_ARGV0);
>> +
>> +	if (mode == STATUS)
>> +		add_i_status();
>> +	else
>> +		usage_with_options(builtin_add_helper_usage,
>> +				   options);
>> +
>>   	return 0;
>>   }

  reply	other threads:[~2019-03-01 11:09 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-20 12:34 [PATCH 0/7] Turn git add-i into built-in Johannes Schindelin
2018-12-20 12:09 ` [PATCH 1/7] diff: export diffstat interface Daniel Ferreira via GitGitGadget
2018-12-20 12:09 ` [PATCH 2/7] add--helper: create builtin helper for interactive add Daniel Ferreira via GitGitGadget
2018-12-20 12:09 ` [PATCH 3/7] add-interactive.c: implement status command Daniel Ferreira via GitGitGadget
2018-12-20 12:09 ` [PATCH 4/7] add--interactive.perl: use add--helper --status for status_cmd Daniel Ferreira via GitGitGadget
2018-12-20 12:09 ` [PATCH 5/7] add-interactive.c: implement show-help command Slavica Djukic via GitGitGadget
2019-01-14 11:12   ` Phillip Wood
2018-12-20 12:09 ` [PATCH 6/7] Git.pm: introduce environment variable GIT_TEST_PRETEND_TTY Slavica Djukic via GitGitGadget
2019-01-14 11:13   ` Phillip Wood
2019-01-15 12:45     ` Slavica Djukic
2019-01-15 13:50     ` Johannes Schindelin
2019-01-15 16:09       ` Phillip Wood
2018-12-20 12:09 ` [PATCH 7/7] add--interactive.perl: use add--helper --show-help for help_cmd Slavica Djukic via GitGitGadget
2019-01-14 11:17   ` Phillip Wood
2018-12-20 12:37 ` [PATCH 0/7] Turn git add-i into built-in Johannes Schindelin
2019-01-11 14:09 ` Slavica Djukic
2019-01-18  7:47 ` [PATCH v2 " Slavica Đukić via GitGitGadget
2019-01-18  7:47   ` [PATCH v2 1/7] diff: export diffstat interface Daniel Ferreira via GitGitGadget
2019-01-18  7:47   ` [PATCH v2 2/7] add--helper: create builtin helper for interactive add Daniel Ferreira via GitGitGadget
2019-01-18  7:47   ` [PATCH v2 3/7] add-interactive.c: implement status command Daniel Ferreira via GitGitGadget
2019-01-18  7:47   ` [PATCH v2 4/7] add--interactive.perl: use add--helper --status for status_cmd Daniel Ferreira via GitGitGadget
2019-01-18  7:47   ` [PATCH v2 5/7] add-interactive.c: implement show-help command Slavica Djukic via GitGitGadget
2019-01-18 11:20     ` Phillip Wood
2019-01-18 12:19       ` Slavica Djukic
     [not found]       ` <VI1PR05MB577331CCE110D2EAE325927CA69C0@VI1PR05MB5773.eurprd05.prod.outlook.com>
2019-01-18 14:25         ` Phillip Wood
2019-01-18 20:40           ` Johannes Schindelin
2019-01-18  7:47   ` [PATCH v2 6/7] t3701-add-interactive: test add_i_show_help() Slavica Djukic via GitGitGadget
2019-01-18 11:23     ` Phillip Wood
2019-01-18  7:47   ` [PATCH v2 7/7] add--interactive.perl: use add--helper --show-help for help_cmd Slavica Djukic via GitGitGadget
2019-01-21  9:13   ` [PATCH v3 0/7] Turn git add-i into built-in Slavica Đukić via GitGitGadget
2019-01-21  9:13     ` [PATCH v3 1/7] diff: export diffstat interface Daniel Ferreira via GitGitGadget
2019-01-21  9:13     ` [PATCH v3 3/7] add-interactive.c: implement status command Daniel Ferreira via GitGitGadget
2019-01-21  9:13     ` [PATCH v3 2/7] add--helper: create builtin helper for interactive add Daniel Ferreira via GitGitGadget
2019-01-21  9:13     ` [PATCH v3 4/7] add--interactive.perl: use add--helper --status for status_cmd Daniel Ferreira via GitGitGadget
2019-01-21  9:13     ` [PATCH v3 5/7] add-interactive.c: implement show-help command Slavica Djukic via GitGitGadget
2019-01-21  9:13     ` [PATCH v3 6/7] t3701-add-interactive: test add_i_show_help() Slavica Djukic via GitGitGadget
2019-01-25 11:01       ` Phillip Wood
2019-01-25 11:36         ` Slavica Djukic
2019-01-21  9:13     ` [PATCH v3 7/7] add--interactive.perl: use add--helper --show-help for help_cmd Slavica Djukic via GitGitGadget
2019-01-21  9:59       ` Ævar Arnfjörð Bjarmason
2019-01-21 11:59         ` Slavica Djukic
2019-01-25 12:23     ` [PATCH v4 0/7] Turn git add-i into built-in Slavica Đukić via GitGitGadget
2019-01-25 12:23       ` [PATCH v4 1/7] diff: export diffstat interface Daniel Ferreira via GitGitGadget
2019-01-25 12:23       ` [PATCH v4 2/7] add--helper: create builtin helper for interactive add Daniel Ferreira via GitGitGadget
2019-01-25 12:23       ` [PATCH v4 3/7] add-interactive.c: implement status command Daniel Ferreira via GitGitGadget
2019-01-25 12:23       ` [PATCH v4 4/7] add--interactive.perl: use add--helper --status for status_cmd Daniel Ferreira via GitGitGadget
2019-01-25 12:23       ` [PATCH v4 5/7] add-interactive.c: implement show-help command Slavica Djukic via GitGitGadget
2019-01-25 12:23       ` [PATCH v4 6/7] t3701-add-interactive: test add_i_show_help() Slavica Djukic via GitGitGadget
2019-01-25 12:23       ` [PATCH v4 7/7] add--interactive.perl: use add--helper --show-help for help_cmd Slavica Djukic via GitGitGadget
2019-01-25 12:37       ` [PATCH v4 0/7] Turn git add-i into built-in Slavica Djukic
2019-02-01 14:37         ` Phillip Wood
2019-02-20 11:41       ` [PATCH v5 00/10] " Slavica Đukić via GitGitGadget
2019-02-20 11:41         ` [PATCH v5 01/10] diff: export diffstat interface Daniel Ferreira via GitGitGadget
2019-02-21 17:53           ` Junio C Hamano
2019-02-22  9:03             ` Slavica Djukic
2019-02-20 11:41         ` [PATCH v5 02/10] add--helper: create builtin helper for interactive add Daniel Ferreira via GitGitGadget
2019-02-21 17:56           ` Junio C Hamano
2019-03-08 20:48             ` Johannes Schindelin
2019-02-20 11:41         ` [PATCH v5 03/10] add-interactive.c: implement list_modified Slavica Djukic via GitGitGadget
2019-02-21 19:06           ` Junio C Hamano
2019-02-21 20:27             ` Junio C Hamano
2019-02-22 12:18               ` Slavica Djukic
2019-02-22 11:35             ` Slavica Djukic
2019-02-20 11:41         ` [PATCH v5 04/10] add-interactive.c: implement list_and_choose Slavica Djukic via GitGitGadget
2019-02-22 21:46           ` Junio C Hamano
2019-03-01 11:20             ` Slavica Djukic
2019-02-20 11:41         ` [PATCH v5 06/10] add--interactive.perl: use add--helper --status for status_cmd Daniel Ferreira via GitGitGadget
2019-02-20 11:41         ` [PATCH v5 05/10] add-interactive.c: implement status command Slavica Djukic via GitGitGadget
2019-02-22 22:11           ` Junio C Hamano
2019-03-01 11:08             ` Slavica Djukic [this message]
2019-02-20 11:41         ` [PATCH v5 07/10] add-interactive.c: add support for list_only option Slavica Djukic via GitGitGadget
2019-02-20 11:41         ` [PATCH v5 08/10] add-interactive.c: implement show-help command Slavica Djukic via GitGitGadget
2019-02-20 11:41         ` [PATCH v5 09/10] t3701-add-interactive: test add_i_show_help() Slavica Djukic via GitGitGadget
2019-02-20 11:41         ` [PATCH v5 10/10] add--interactive.perl: use add--helper --show-help for help_cmd Slavica Djukic via GitGitGadget
2019-02-22  4:53         ` [PATCH v5 00/10] Turn git add-i into built-in Junio C Hamano
2019-03-04 10:49         ` End of Outreachy internship Slavica Djukic

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=22f856ad-8248-7f1b-a720-636da6286e82@gmail.com \
    --to=slavicadj.ip2018@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.com \
    --cc=phillip.wood@dunelm.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.