a6be5e6764
In 'git log', the --decorate-refs-exclude option appends a pattern to a string_list. This list is used to prevent showing some refs in the decoration output, or even by --simplify-by-decoration. Users may want to use their refs space to store utility refs that should not appear in the decoration output. For example, Scalar [1] runs a background fetch but places the "new" refs inside the refs/scalar/hidden/<remote>/* refspace instead of refs/<remote>/* to avoid updating remote refs when the user is not looking. However, these "hidden" refs appear during regular 'git log' queries. A similar idea to use "hidden" refs is under consideration for core Git [2]. Add the 'log.excludeDecoration' config option so users can exclude some refs from decorations by default instead of needing to use --decorate-refs-exclude manually. The config value is multi-valued much like the command-line option. The documentation is careful to point out that the config value can be overridden by the --decorate-refs option, even though --decorate-refs-exclude would always "win" over --decorate-refs. Since the 'log.excludeDecoration' takes lower precedence to --decorate-refs, and --decorate-refs-exclude takes higher precedence, the struct decoration_filter needed another field. This led also to new logic in load_ref_decorations() and ref_filter_match(). There are several tests in t4202-log.sh that test the --decorate-refs-(include|exclude) options, so these are extended. Since the expected output is already stored as a file, most tests could simply replace a "--decorate-refs-exclude" option with an in-line config setting. Other tests involve the precedence of the config option compared to command-line options and needed more modification. [1] https://github.com/microsoft/scalar [2] https://lore.kernel.org/git/77b1da5d3063a2404cd750adfe3bb8be9b6c497d.1585946894.git.gitgitgadget@gmail.com/ Helped-by: Junio C Hamano <gister@pobox.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
42 lines
1.5 KiB
C
42 lines
1.5 KiB
C
#ifndef LOG_TREE_H
|
|
#define LOG_TREE_H
|
|
|
|
#include "revision.h"
|
|
|
|
struct log_info {
|
|
struct commit *commit, *parent;
|
|
};
|
|
|
|
struct decoration_filter {
|
|
struct string_list *include_ref_pattern;
|
|
struct string_list *exclude_ref_pattern;
|
|
struct string_list *exclude_ref_config_pattern;
|
|
};
|
|
|
|
int parse_decorate_color_config(const char *var, const char *slot_name, const char *value);
|
|
void init_log_tree_opt(struct rev_info *);
|
|
int log_tree_diff_flush(struct rev_info *);
|
|
int log_tree_commit(struct rev_info *, struct commit *);
|
|
int log_tree_opt_parse(struct rev_info *, const char **, int);
|
|
void show_log(struct rev_info *opt);
|
|
void format_decorations_extended(struct strbuf *sb, const struct commit *commit,
|
|
int use_color,
|
|
const char *prefix,
|
|
const char *separator,
|
|
const char *suffix);
|
|
#define format_decorations(strbuf, commit, color) \
|
|
format_decorations_extended((strbuf), (commit), (color), " (", ", ", ")")
|
|
void show_decorations(struct rev_info *opt, struct commit *commit);
|
|
void log_write_email_headers(struct rev_info *opt, struct commit *commit,
|
|
const char **extra_headers_p,
|
|
int *need_8bit_cte_p,
|
|
int maybe_multipart);
|
|
void load_ref_decorations(struct decoration_filter *filter, int flags);
|
|
|
|
#define FORMAT_PATCH_NAME_MAX 64
|
|
void fmt_output_commit(struct strbuf *, struct commit *, struct rev_info *);
|
|
void fmt_output_subject(struct strbuf *, const char *subject, struct rev_info *);
|
|
void fmt_output_email_subject(struct strbuf *, struct rev_info *);
|
|
|
|
#endif
|