mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-13 19:30:37 +00:00
filter: Precache the filter config options on load
This commit is contained in:
parent
c5e944820a
commit
c5266ebac5
41
src/filter.c
41
src/filter.c
@ -9,6 +9,8 @@
|
|||||||
#include "fileops.h"
|
#include "fileops.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
|
#include "repository.h"
|
||||||
|
#include "git2/config.h"
|
||||||
|
|
||||||
/* Fresh from Core Git. I wonder what we could use this for... */
|
/* Fresh from Core Git. I wonder what we could use this for... */
|
||||||
void git_text__stat(git_text_stats *stats, const git_buf *text)
|
void git_text__stat(git_text_stats *stats, const git_buf *text)
|
||||||
@ -163,3 +165,42 @@ int git_filter__apply(git_buf *dest, git_buf *source, git_vector *filters)
|
|||||||
return GIT_SUCCESS;
|
return GIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int git_filter__load_settings(git_repository *repo)
|
||||||
|
{
|
||||||
|
static git_cvar_map map_eol[] = {
|
||||||
|
{GIT_CVAR_FALSE, NULL, GIT_EOL_UNSET},
|
||||||
|
{GIT_CVAR_STRING, "lf", GIT_EOL_LF},
|
||||||
|
{GIT_CVAR_STRING, "crlf", GIT_EOL_CRLF},
|
||||||
|
{GIT_CVAR_STRING, "native", GIT_EOL_NATIVE}
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_cvar_map map_crlf[] = {
|
||||||
|
{GIT_CVAR_FALSE, NULL, GIT_AUTO_CRLF_FALSE},
|
||||||
|
{GIT_CVAR_TRUE, NULL, GIT_AUTO_CRLF_TRUE},
|
||||||
|
{GIT_CVAR_STRING, "input", GIT_AUTO_CRLF_INPUT}
|
||||||
|
};
|
||||||
|
|
||||||
|
git_config *config;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
repo->filter_options.eol = GIT_EOL_DEFAULT;
|
||||||
|
repo->filter_options.auto_crlf = GIT_AUTO_CRLF_DEFAULT;
|
||||||
|
|
||||||
|
error = git_repository_config__weakptr(&config, repo);
|
||||||
|
if (error < GIT_SUCCESS)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = git_config_get_mapped(
|
||||||
|
config, "core.eol", map_eol, ARRAY_SIZE(map_eol), &repo->filter_options.eol);
|
||||||
|
|
||||||
|
if (error < GIT_SUCCESS && error != GIT_ENOTFOUND)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = git_config_get_mapped(
|
||||||
|
config, "core.auto_crlf", map_crlf, ARRAY_SIZE(map_crlf), &repo->filter_options.auto_crlf);
|
||||||
|
|
||||||
|
if (error < GIT_SUCCESS && error != GIT_ENOTFOUND)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -37,6 +37,7 @@ typedef enum {
|
|||||||
GIT_AUTO_CRLF_FALSE = 0,
|
GIT_AUTO_CRLF_FALSE = 0,
|
||||||
GIT_AUTO_CRLF_TRUE = 1,
|
GIT_AUTO_CRLF_TRUE = 1,
|
||||||
GIT_AUTO_CRLF_INPUT = -1,
|
GIT_AUTO_CRLF_INPUT = -1,
|
||||||
|
GIT_AUTO_CRLF_DEFAULT = GIT_AUTO_CRLF_FALSE,
|
||||||
} git_crlf_t;
|
} git_crlf_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -44,10 +45,11 @@ typedef enum {
|
|||||||
GIT_EOL_CRLF,
|
GIT_EOL_CRLF,
|
||||||
GIT_EOL_LF,
|
GIT_EOL_LF,
|
||||||
#ifdef GIT_WIN32
|
#ifdef GIT_WIN32
|
||||||
GIT_EOL_NATIVE = GIT_EOL_CRLF
|
GIT_EOL_NATIVE = GIT_EOL_CRLF,
|
||||||
#else
|
#else
|
||||||
GIT_EOL_NATIVE = GIT_EOL_LF
|
GIT_EOL_NATIVE = GIT_EOL_LF,
|
||||||
#endif
|
#endif
|
||||||
|
GIT_EOL_DEFAULT = GIT_EOL_NATIVE
|
||||||
} git_eol_t;
|
} git_eol_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -58,6 +60,7 @@ typedef struct {
|
|||||||
unsigned int printable, nonprintable;
|
unsigned int printable, nonprintable;
|
||||||
} git_text_stats;
|
} git_text_stats;
|
||||||
|
|
||||||
|
extern int git_filter__load_settings(git_repository *repo);
|
||||||
extern int git_filter__load_for_file(git_vector *filters, git_repository *repo, const char *full_path, int mode);
|
extern int git_filter__load_for_file(git_vector *filters, git_repository *repo, const char *full_path, int mode);
|
||||||
extern void git_filter__free(git_vector *filters);
|
extern void git_filter__free(git_vector *filters);
|
||||||
extern int git_filter__apply(git_buf *dest, git_buf *source, git_vector *filters);
|
extern int git_filter__apply(git_buf *dest, git_buf *source, git_vector *filters);
|
||||||
|
@ -48,7 +48,7 @@ struct git_repository {
|
|||||||
unsigned int lru_counter;
|
unsigned int lru_counter;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
int core_eol;
|
int eol;
|
||||||
int auto_crlf;
|
int auto_crlf;
|
||||||
} filter_options;
|
} filter_options;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user