return system_wide;
}
-const char *git_attr_global_file(void)
-{
- if (!git_attributes_file)
- git_attributes_file = xdg_config_home("attributes");
-
- return git_attributes_file;
-}
-
int git_attr_system_is_enabled(void)
{
return !git_env_bool("GIT_ATTR_NOSYSTEM", 0);
{
struct attr_stack *e;
unsigned flags = READ_ATTR_MACRO_OK;
+ const char *attributes_file_path;
+ struct repository *repo;
if (*stack)
return;
}
/* home directory */
- if (git_attr_global_file()) {
- e = read_attr_from_file(git_attr_global_file(), flags);
+ if (istate && istate->repo)
+ repo = istate->repo;
+ else
+ repo = the_repository;
+ attributes_file_path = repo_settings_get_attributesfile_path(repo);
+ if (attributes_file_path) {
+ e = read_attr_from_file(attributes_file_path, flags);
push_stack(stack, e, NULL, 0);
}
/* Return the system gitattributes file. */
const char *git_attr_system_file(void);
-/* Return the global gitattributes file, if any. */
-const char *git_attr_global_file(void);
-
/* Return whether the system gitattributes file is enabled and should be used. */
int git_attr_system_is_enabled(void);
static char *git_attr_val_global(int ident_flag UNUSED)
{
- char *file = xstrdup_or_null(git_attr_global_file());
+ char *file = xstrdup_or_null(repo_settings_get_attributesfile_path(the_repository));
if (file) {
normalize_path_copy(file, file);
return file;
char *git_log_output_encoding;
char *apply_default_whitespace;
char *apply_default_ignorewhitespace;
-char *git_attributes_file;
int zlib_compression_level = Z_BEST_SPEED;
int pack_compression_level = Z_DEFAULT_COMPRESSION;
int fsync_object_files = -1;
return 0;
}
- if (!strcmp(var, "core.attributesfile")) {
- FREE_AND_NULL(git_attributes_file);
- return git_config_pathname(&git_attributes_file, var, value);
- }
-
if (!strcmp(var, "core.bare")) {
is_bare_repository_cfg = git_config_bool(var, value);
return 0;
extern int warn_on_object_refname_ambiguity;
extern char *apply_default_whitespace;
extern char *apply_default_ignorewhitespace;
-extern char *git_attributes_file;
extern int zlib_compression_level;
extern int pack_compression_level;
extern unsigned long pack_size_limit_cfg;
#include "midx.h"
#include "pack-objects.h"
#include "setup.h"
+#include "path.h"
static void repo_cfg_bool(struct repository *r, const char *key, int *dest,
int def)
struct repo_settings empty = REPO_SETTINGS_INIT;
FREE_AND_NULL(r->settings.fsmonitor);
FREE_AND_NULL(r->settings.hooks_path);
+ FREE_AND_NULL(r->settings.attributes_file_path);
r->settings = empty;
}
{
repo->settings.shared_repository_initialized = 0;
}
+const char *repo_settings_get_attributesfile_path(struct repository *repo)
+{
+ if (!repo->settings.attributes_file_path) {
+ if (repo_config_get_pathname(repo, "core.attributesfile", &repo->settings.attributes_file_path))
+ repo->settings.attributes_file_path = xdg_config_home("attributes");
+ }
+ return repo->settings.attributes_file_path;
+}
unsigned long big_file_threshold;
char *hooks_path;
+ char *attributes_file_path;
};
#define REPO_SETTINGS_INIT { \
.shared_repository = -1, \
void repo_settings_set_shared_repository(struct repository *repo, int value);
void repo_settings_reset_shared_repository(struct repository *repo);
+/*
+ * Read the value for "core.attributesfile".
+ * Defaults to xdg_config_home("attributes") if the core.attributesfile
+ * which is set via repo config isn't available.
+ */
+const char *repo_settings_get_attributesfile_path(struct repository *repo);
+
#endif /* REPO_SETTINGS_H */