mirror of
https://github.com/git/git.git
synced 2026-03-05 14:59:04 +01:00
The `struct add_p_opt` is reused both by our infra for "git add -p" and "git add -i". Users of `run_add_i()` for example are expected to pass `struct add_p_opt`. This is somewhat confusing and raises the question of which options apply to what part of the stack. But things are even more confusing than that: while callers are expected to pass in `struct add_p_opt`, these options ultimately get used to initialize a `struct add_i_state` that is used by both subsystems. So we are basically going full circle here. Refactor the code and split out a new `struct interactive_options` that hosts common options used by both. These options are then applied to a `struct interactive_config` that hosts common configuration. This refactoring doesn't yet fully detangle the two subsystems from one another, as we still end up calling `init_add_i_state()` in the "git add -p" subsystem. This will be fixed in a subsequent commit. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
60 lines
1.3 KiB
C
60 lines
1.3 KiB
C
#ifndef ADD_PATCH_H
|
|
#define ADD_PATCH_H
|
|
|
|
#include "color.h"
|
|
|
|
struct pathspec;
|
|
struct repository;
|
|
|
|
struct interactive_options {
|
|
int context;
|
|
int interhunkcontext;
|
|
int auto_advance;
|
|
};
|
|
|
|
#define INTERACTIVE_OPTIONS_INIT { \
|
|
.context = -1, \
|
|
.interhunkcontext = -1, \
|
|
.auto_advance = 1, \
|
|
}
|
|
|
|
struct interactive_config {
|
|
enum git_colorbool use_color_interactive;
|
|
enum git_colorbool use_color_diff;
|
|
char header_color[COLOR_MAXLEN];
|
|
char help_color[COLOR_MAXLEN];
|
|
char prompt_color[COLOR_MAXLEN];
|
|
char error_color[COLOR_MAXLEN];
|
|
char reset_color_interactive[COLOR_MAXLEN];
|
|
|
|
char fraginfo_color[COLOR_MAXLEN];
|
|
char context_color[COLOR_MAXLEN];
|
|
char file_old_color[COLOR_MAXLEN];
|
|
char file_new_color[COLOR_MAXLEN];
|
|
char reset_color_diff[COLOR_MAXLEN];
|
|
|
|
int use_single_key;
|
|
char *interactive_diff_filter, *interactive_diff_algorithm;
|
|
int context, interhunkcontext;
|
|
int auto_advance;
|
|
};
|
|
|
|
void interactive_config_init(struct interactive_config *cfg,
|
|
struct repository *r,
|
|
struct interactive_options *opts);
|
|
void interactive_config_clear(struct interactive_config *cfg);
|
|
|
|
enum add_p_mode {
|
|
ADD_P_ADD,
|
|
ADD_P_STASH,
|
|
ADD_P_RESET,
|
|
ADD_P_CHECKOUT,
|
|
ADD_P_WORKTREE,
|
|
};
|
|
|
|
int run_add_p(struct repository *r, enum add_p_mode mode,
|
|
struct interactive_options *opts, const char *revision,
|
|
const struct pathspec *ps);
|
|
|
|
#endif
|