Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -3481,11 +3481,11 @@ static GIT_PATH_FUNC(git_path_info_exclude, "info/exclude")

void setup_standard_excludes(struct dir_struct *dir)
{
const char *excludes_file;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To save a line, but still have a blank line after the declaration, maybe something like:

	/* core.excludesfile defaulting to $XDG_CONFIG_HOME/git/ignore */
	const char *excludes_file = repo_excludes_file(the_repository);

	dir->exclude_per_dir = ".gitignore";

	if (excludes_file && !access_or_warn(excludes_file, R_OK, 0))
		add_patterns_from_file_1(dir, excludes_file,
					 dir->untracked ? &dir->internal.ss_excludes_file : NULL);

dir->exclude_per_dir = ".gitignore";

/* core.excludesfile defaulting to $XDG_CONFIG_HOME/git/ignore */
if (!excludes_file)
excludes_file = xdg_config_home("ignore");
excludes_file = repo_excludes_file(the_repository);
if (excludes_file && !access_or_warn(excludes_file, R_OK, 0))
add_patterns_from_file_1(dir, excludes_file,
dir->untracked ? &dir->internal.ss_excludes_file : NULL);
Expand Down
24 changes: 21 additions & 3 deletions environment.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ enum fsync_method fsync_method = FSYNC_METHOD_DEFAULT;
enum fsync_component fsync_components = FSYNC_COMPONENTS_DEFAULT;
char *editor_program;
char *askpass_program;
char *excludes_file;
enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
enum eol core_eol = EOL_UNSET;
int global_conv_flags_eol = CONV_EOL_RNDTRP_WARN;
Expand Down Expand Up @@ -134,6 +133,17 @@ int is_bare_repository(void)
return is_bare_repository_cfg && !repo_get_work_tree(the_repository);
}

const char *repo_excludes_file(struct repository *repo)
{
if (!repo || !repo->initialized)
return NULL;

if (!repo_config_values(repo)->excludes_file)
repo_config_values(repo)->excludes_file = xdg_config_home("ignore");

return repo_config_values(repo)->excludes_file;
}

int have_git_dir(void)
{
return startup_info->have_repository
Expand Down Expand Up @@ -461,8 +471,8 @@ int git_default_core_config(const char *var, const char *value,
}

if (!strcmp(var, "core.excludesfile")) {
FREE_AND_NULL(excludes_file);
return git_config_pathname(&excludes_file, var, value);
FREE_AND_NULL(cfg->excludes_file);
return git_config_pathname(&cfg->excludes_file, var, value);
}

if (!strcmp(var, "core.whitespace")) {
Expand Down Expand Up @@ -726,3 +736,11 @@ void repo_config_values_init(struct repo_config_values *cfg)
cfg->sparse_expect_files_outside_of_patterns = 0;
cfg->warn_on_object_refname_ambiguity = 1;
}

void repo_config_values_clear(struct repository *repo)
{
struct repo_config_values *cfg = repo_config_values(repo);
if (!cfg)
return;
FREE_AND_NULL(cfg->excludes_file);
}
10 changes: 9 additions & 1 deletion environment.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ struct repo_config_values {
int precomposed_unicode;
int core_sparse_checkout_cone;
int warn_on_object_refname_ambiguity;
char *excludes_file;

/* section "sparse" config values */
int sparse_expect_files_outside_of_patterns;
Expand Down Expand Up @@ -133,8 +134,16 @@ int git_default_config(const char *, const char *,
int git_default_core_config(const char *var, const char *value,
const struct config_context *ctx, void *cb);

/*
* TODO: This still relies on the global state.
* It will be moved to repo_config_values in the subsequent commit.
*/

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I forgot to remove it in commit 2

const char *repo_excludes_file(struct repository *repo);

void repo_config_values_init(struct repo_config_values *cfg);

void repo_config_values_clear(struct repository *repo);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is clearing only excludes_file which might look strange. A short comment to explain what the function does might help explain why the name of the function is not repo_clear_excludes_file() or something like that.


/*
* TODO: All the below state either explicitly or implicitly relies on
* `the_repository`. We should eventually get rid of these and make the
Expand Down Expand Up @@ -208,7 +217,6 @@ extern char *git_log_output_encoding;

extern char *editor_program;
extern char *askpass_program;
extern char *excludes_file;

/*
* The character that begins a commented line in user-editable file
Expand Down
1 change: 1 addition & 0 deletions repository.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ void repo_clear(struct repository *repo)
FREE_AND_NULL(repo->parsed_objects);

repo_settings_clear(repo);
repo_config_values_clear(repo);

if (repo->config) {
git_configset_clear(repo->config);
Expand Down
Loading