зеркало из https://github.com/microsoft/git.git
submodules: load gitmodules file from commit sha1
teach submodules to load a '.gitmodules' file from a commit sha1. This enables the population of the submodule_cache to be based on the state of the '.gitmodules' file from a particular commit. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
f9f42560e2
Коммит
9ebf689aad
2
cache.h
2
cache.h
|
@ -1693,6 +1693,8 @@ extern int git_default_config(const char *, const char *, void *);
|
||||||
extern int git_config_from_file(config_fn_t fn, const char *, void *);
|
extern int git_config_from_file(config_fn_t fn, const char *, void *);
|
||||||
extern int git_config_from_mem(config_fn_t fn, const enum config_origin_type,
|
extern int git_config_from_mem(config_fn_t fn, const enum config_origin_type,
|
||||||
const char *name, const char *buf, size_t len, void *data);
|
const char *name, const char *buf, size_t len, void *data);
|
||||||
|
extern int git_config_from_blob_sha1(config_fn_t fn, const char *name,
|
||||||
|
const unsigned char *sha1, void *data);
|
||||||
extern void git_config_push_parameter(const char *text);
|
extern void git_config_push_parameter(const char *text);
|
||||||
extern int git_config_from_parameters(config_fn_t fn, void *data);
|
extern int git_config_from_parameters(config_fn_t fn, void *data);
|
||||||
extern void git_config(config_fn_t fn, void *);
|
extern void git_config(config_fn_t fn, void *);
|
||||||
|
|
8
config.c
8
config.c
|
@ -1214,10 +1214,10 @@ int git_config_from_mem(config_fn_t fn, const enum config_origin_type origin_typ
|
||||||
return do_config_from(&top, fn, data);
|
return do_config_from(&top, fn, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int git_config_from_blob_sha1(config_fn_t fn,
|
int git_config_from_blob_sha1(config_fn_t fn,
|
||||||
const char *name,
|
const char *name,
|
||||||
const unsigned char *sha1,
|
const unsigned char *sha1,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
enum object_type type;
|
enum object_type type;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
|
@ -379,9 +379,9 @@ static int parse_config(const char *var, const char *value, void *data)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gitmodule_sha1_from_commit(const unsigned char *commit_sha1,
|
int gitmodule_sha1_from_commit(const unsigned char *commit_sha1,
|
||||||
unsigned char *gitmodules_sha1,
|
unsigned char *gitmodules_sha1,
|
||||||
struct strbuf *rev)
|
struct strbuf *rev)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,9 @@ const struct submodule *submodule_from_name(const unsigned char *commit_sha1,
|
||||||
const char *name);
|
const char *name);
|
||||||
const struct submodule *submodule_from_path(const unsigned char *commit_sha1,
|
const struct submodule *submodule_from_path(const unsigned char *commit_sha1,
|
||||||
const char *path);
|
const char *path);
|
||||||
|
extern int gitmodule_sha1_from_commit(const unsigned char *commit_sha1,
|
||||||
|
unsigned char *gitmodules_sha1,
|
||||||
|
struct strbuf *rev);
|
||||||
void submodule_free(void);
|
void submodule_free(void);
|
||||||
|
|
||||||
#endif /* SUBMODULE_CONFIG_H */
|
#endif /* SUBMODULE_CONFIG_H */
|
||||||
|
|
12
submodule.c
12
submodule.c
|
@ -198,6 +198,18 @@ void gitmodules_config(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gitmodules_config_sha1(const unsigned char *commit_sha1)
|
||||||
|
{
|
||||||
|
struct strbuf rev = STRBUF_INIT;
|
||||||
|
unsigned char sha1[20];
|
||||||
|
|
||||||
|
if (gitmodule_sha1_from_commit(commit_sha1, sha1, &rev)) {
|
||||||
|
git_config_from_blob_sha1(submodule_config, rev.buf,
|
||||||
|
sha1, NULL);
|
||||||
|
}
|
||||||
|
strbuf_release(&rev);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine if a submodule has been initialized at a given 'path'
|
* Determine if a submodule has been initialized at a given 'path'
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -37,6 +37,7 @@ void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt,
|
||||||
const char *path);
|
const char *path);
|
||||||
int submodule_config(const char *var, const char *value, void *cb);
|
int submodule_config(const char *var, const char *value, void *cb);
|
||||||
void gitmodules_config(void);
|
void gitmodules_config(void);
|
||||||
|
extern void gitmodules_config_sha1(const unsigned char *commit_sha1);
|
||||||
extern int is_submodule_initialized(const char *path);
|
extern int is_submodule_initialized(const char *path);
|
||||||
extern int is_submodule_populated(const char *path);
|
extern int is_submodule_populated(const char *path);
|
||||||
int parse_submodule_update_strategy(const char *value,
|
int parse_submodule_update_strategy(const char *value,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче