mirror of
https://github.com/git/git.git
synced 2024-11-27 12:03: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->path);
|
||||||
free((void *) entry->config->name);
|
free((void *) entry->config->name);
|
||||||
|
free((void *) entry->config->update_strategy.command);
|
||||||
free(entry->config);
|
free(entry->config);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,6 +195,8 @@ static struct submodule *lookup_or_create_by_name(struct submodule_cache *cache,
|
|||||||
|
|
||||||
submodule->path = NULL;
|
submodule->path = NULL;
|
||||||
submodule->url = NULL;
|
submodule->url = NULL;
|
||||||
|
submodule->update_strategy.type = SM_UPDATE_UNSPECIFIED;
|
||||||
|
submodule->update_strategy.command = NULL;
|
||||||
submodule->fetch_recurse = RECURSE_SUBMODULES_NONE;
|
submodule->fetch_recurse = RECURSE_SUBMODULES_NONE;
|
||||||
submodule->ignore = NULL;
|
submodule->ignore = NULL;
|
||||||
|
|
||||||
@ -311,6 +314,16 @@ static int parse_config(const char *var, const char *value, void *data)
|
|||||||
free((void *) submodule->url);
|
free((void *) submodule->url);
|
||||||
submodule->url = xstrdup(value);
|
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);
|
strbuf_release(&name);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define SUBMODULE_CONFIG_CACHE_H
|
#define SUBMODULE_CONFIG_CACHE_H
|
||||||
|
|
||||||
#include "hashmap.h"
|
#include "hashmap.h"
|
||||||
|
#include "submodule.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -14,6 +15,7 @@ struct submodule {
|
|||||||
const char *url;
|
const char *url;
|
||||||
int fetch_recurse;
|
int fetch_recurse;
|
||||||
const char *ignore;
|
const char *ignore;
|
||||||
|
struct submodule_update_strategy update_strategy;
|
||||||
/* the sha1 blob id of the responsible .gitmodules file */
|
/* the sha1 blob id of the responsible .gitmodules file */
|
||||||
unsigned char gitmodules_sha1[20];
|
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,
|
void handle_ignore_submodules_arg(struct diff_options *diffopt,
|
||||||
const char *arg)
|
const char *arg)
|
||||||
{
|
{
|
||||||
|
16
submodule.h
16
submodule.h
@ -13,6 +13,20 @@ enum {
|
|||||||
RECURSE_SUBMODULES_ON = 2
|
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 is_staging_gitmodules_ok(void);
|
||||||
int update_path_in_gitmodules(const char *oldpath, const char *newpath);
|
int update_path_in_gitmodules(const char *oldpath, const char *newpath);
|
||||||
int remove_path_from_gitmodules(const char *path);
|
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);
|
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);
|
||||||
|
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 handle_ignore_submodules_arg(struct diff_options *diffopt, const char *);
|
||||||
void show_submodule_summary(FILE *f, const char *path,
|
void show_submodule_summary(FILE *f, const char *path,
|
||||||
const char *line_prefix,
|
const char *line_prefix,
|
||||||
|
Loading…
Reference in New Issue
Block a user