Re: [PATCH v2 1/2] add-menu: added add-menu to lib objects
- From
Derrick Stolee <derrickstolee@github.com>
- Date
- May 23, 2022, 20:03 UTC
- Message-ID
- <8d483e1d-1865-c475-cbe3-78fa1f7f8bfb@github.com>
- In-Reply-To
- <13bc75a2b0510f55e9a73852838b3b11683f13a2.1653286345.git.gitgitgadget@gmail.com>
On 5/23/22 2:12 AM, Nadav Goldstein via GitGitGadget wrote:
Show 6 quoted lines
> From: Nadav Goldstein <nadav.goldstein96@gmail.com> > > added to the lib objects the add menu module which is > simply extracted functions from clear.c > (which in the next commit will be removed and instead > clear will use the outsourced functions).
Please rewrite according to Git style. (Mentioned in my reply to patch 2 with more detail.)
> diff --git a/add-menu.c b/add-menu.c
I think I said something in another place that was a bit incorrect: I think of "git add -p" as interactive add, but really it's "git add -i" that is the equivalent. The "git add -i" menu is very similar to the "git clean -i" menu, as it is said in comments.
Thus, perhaps the best thing to do would be to unify the two implementations, if at all possible. The one in builtin/clean.c is from 2013 while the one in add-interactive.c is much more recent.
The biggest test of your new API is whether it can support _both_ of these existing interactive menus before adding one to 'git stash'.
Show 6 quoted lines
> new file mode 100644 > index 00000000000..6a1c125d113 > --- /dev/null > +++ b/add-menu.c > @@ -0,0 +1,339 @@ > +#include <stdio.h>
In the Git project, the first include should either be "cache.h" or "git-compat-utils.h". For this API, git-compat-utils.h should suffice, since there should not be anything from the Git data model that actually matters here.
Show 13 quoted lines
> +#include "builtin.h" > +#include "add-menu.h" > +#include "cache.h" > +#include "config.h" > +#include "dir.h" > +#include "parse-options.h" > +#include "string-list.h" > +#include "quote.h" > +#include "column.h" > +#include "color.h" > +#include "pathspec.h" > +#include "help.h" > +#include "prompt.h"
I doubt that these are all required. Please check to see what you are using from each of these includes and remove as necessary.
Show 6 quoted lines
> +static const char *clean_get_color(enum color_clean ix)
> +{
> + if (want_color(clean_use_color))
> + return clean_colors[ix];
> + return "";
> +}Please update the method names to not care about clean. This is especially true in the public API in the *.h file.
Show 5 quoted lines
> +void clean_print_color(enum color_clean ix)
> +{
> + printf("%s", clean_get_color(ix));
> +}
> \ No newline at end of filenit: please make sure the file ends with exactly one newline.
One problem with this approach of adding the code to this new *.c file and then later removing the code from clean is that we lose 'git blame' or 'git log -L' history across the move. It's much harder to detect copies than to detect moved lines of code.
I don't have a good solution in mind right now, but it's worth thinking about.
Show 6 quoted lines
> diff --git a/add-menu.h b/add-menu.h > new file mode 100644 > index 00000000000..52e5ccb1800 > --- /dev/null > +++ b/add-menu.h > @@ -0,0 +1,51 @@
Don't forget the #ifndef __ADD_MENU__/#define __ADD_MENU__ trick to avoid multiple declarations of these values.
> +int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff, void (*prompt_help_cmd)(int)); > \ No newline at end of file
nit: newline here, too.
Thanks, -Stolee