mirror of
https://github.com/git/git.git
synced 2024-11-27 03:53:55 +08:00
submodule-config: keep update strategy around
Currently submodule.<name>.update is only handled by git-submodule.sh. C code will start to need to make use of that value as more of the functionality of git-submodule.sh moves into library code in C. Add the update field to 'struct submodule' and populate it so it can be read as sm->update or from sm->update_command. Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2a73b3dad0
commit
ea2fa5a338
@ -59,6 +59,7 @@ static void free_one_config(struct submodule_entry *entry)
|
||||
{
|
||||
free((void *) entry->config->path);
|
||||
free((void *) entry->config->name);
|
||||
free((void *) entry->config->update_strategy.command);
|
||||
free(entry->config);
|
||||
}
|
||||
|
||||
@ -194,6 +195,8 @@ static struct submodule *lookup_or_create_by_name(struct submodule_cache *cache,
|
||||
|
||||
submodule->path = NULL;
|
||||
submodule->url = NULL;
|
||||
submodule->update_strategy.type = SM_UPDATE_UNSPECIFIED;
|
||||
submodule->update_strategy.command = NULL;
|
||||
submodule->fetch_recurse = RECURSE_SUBMODULES_NONE;
|
||||
submodule->ignore = NULL;
|
||||
|
||||
@ -311,6 +314,16 @@ static int parse_config(const char *var, const char *value, void *data)
|
||||
free((void *) submodule->url);
|
||||
submodule->url = xstrdup(value);
|
||||
}
|
||||
} else if (!strcmp(item.buf, "update")) {
|
||||
if (!value)
|
||||
ret = config_error_nonbool(var);
|
||||
else if (!me->overwrite &&
|
||||
submodule->update_strategy.type != SM_UPDATE_UNSPECIFIED)
|
||||
warn_multiple_config(me->commit_sha1, submodule->name,
|
||||
"update");
|
||||
else if (parse_submodule_update_strategy(value,
|
||||
&submodule->update_strategy) < 0)
|
||||
die(_("invalid value for %s"), var);
|
||||
}
|
||||
|
||||
strbuf_release(&name);
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define SUBMODULE_CONFIG_CACHE_H
|
||||
|
||||
#include "hashmap.h"
|
||||
#include "submodule.h"
|
||||
#include "strbuf.h"
|
||||
|
||||
/*
|
||||
@ -14,6 +15,7 @@ struct submodule {
|
||||
const char *url;
|
||||
int fetch_recurse;
|
||||
const char *ignore;
|
||||
struct submodule_update_strategy update_strategy;
|
||||
/* the sha1 blob id of the responsible .gitmodules file */
|
||||
unsigned char gitmodules_sha1[20];
|
||||
};
|
||||
|
21
submodule.c
21
submodule.c
@ -210,6 +210,27 @@ void gitmodules_config(void)
|
||||
}
|
||||
}
|
||||
|
||||
int parse_submodule_update_strategy(const char *value,
|
||||
struct submodule_update_strategy *dst)
|
||||
{
|
||||
free((void*)dst->command);
|
||||
dst->command = NULL;
|
||||
if (!strcmp(value, "none"))
|
||||
dst->type = SM_UPDATE_NONE;
|
||||
else if (!strcmp(value, "checkout"))
|
||||
dst->type = SM_UPDATE_CHECKOUT;
|
||||
else if (!strcmp(value, "rebase"))
|
||||
dst->type = SM_UPDATE_REBASE;
|
||||
else if (!strcmp(value, "merge"))
|
||||
dst->type = SM_UPDATE_MERGE;
|
||||
else if (skip_prefix(value, "!", &value)) {
|
||||
dst->type = SM_UPDATE_COMMAND;
|
||||
dst->command = xstrdup(value);
|
||||
} else
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void handle_ignore_submodules_arg(struct diff_options *diffopt,
|
||||
const char *arg)
|
||||
{
|
||||
|
16
submodule.h
16
submodule.h
@ -13,6 +13,20 @@ enum {
|
||||
RECURSE_SUBMODULES_ON = 2
|
||||
};
|
||||
|
||||
enum submodule_update_type {
|
||||
SM_UPDATE_UNSPECIFIED = 0,
|
||||
SM_UPDATE_CHECKOUT,
|
||||
SM_UPDATE_REBASE,
|
||||
SM_UPDATE_MERGE,
|
||||
SM_UPDATE_NONE,
|
||||
SM_UPDATE_COMMAND
|
||||
};
|
||||
|
||||
struct submodule_update_strategy {
|
||||
enum submodule_update_type type;
|
||||
const char *command;
|
||||
};
|
||||
|
||||
int is_staging_gitmodules_ok(void);
|
||||
int update_path_in_gitmodules(const char *oldpath, const char *newpath);
|
||||
int remove_path_from_gitmodules(const char *path);
|
||||
@ -21,6 +35,8 @@ void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt,
|
||||
const char *path);
|
||||
int submodule_config(const char *var, const char *value, void *cb);
|
||||
void gitmodules_config(void);
|
||||
int parse_submodule_update_strategy(const char *value,
|
||||
struct submodule_update_strategy *dst);
|
||||
void handle_ignore_submodules_arg(struct diff_options *diffopt, const char *);
|
||||
void show_submodule_summary(FILE *f, const char *path,
|
||||
const char *line_prefix,
|
||||
|
Loading…
Reference in New Issue
Block a user