On 5/23/22 2:12 AM, Nadav Goldstein via GitGitGadget wrote: > From: Nadav Goldstein <nadav.goldstein96@xxxxxxxxx> > > 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'. > 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. > +#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. > +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. > +void clean_print_color(enum color_clean ix) > +{ > + printf("%s", clean_get_color(ix)); > +} > \ No newline at end of file nit: 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. > 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