зеркало из https://github.com/microsoft/git.git
Convert resolve_ref+xstrdup to new resolve_refdup function
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
e4776bd936
Коммит
96ec7b1e70
|
@ -104,6 +104,7 @@ static int branch_merged(int kind, const char *name,
|
||||||
*/
|
*/
|
||||||
struct commit *reference_rev = NULL;
|
struct commit *reference_rev = NULL;
|
||||||
const char *reference_name = NULL;
|
const char *reference_name = NULL;
|
||||||
|
void *reference_name_to_free = NULL;
|
||||||
int merged;
|
int merged;
|
||||||
|
|
||||||
if (kind == REF_LOCAL_BRANCH) {
|
if (kind == REF_LOCAL_BRANCH) {
|
||||||
|
@ -114,11 +115,9 @@ static int branch_merged(int kind, const char *name,
|
||||||
branch->merge &&
|
branch->merge &&
|
||||||
branch->merge[0] &&
|
branch->merge[0] &&
|
||||||
branch->merge[0]->dst &&
|
branch->merge[0]->dst &&
|
||||||
(reference_name =
|
(reference_name = reference_name_to_free =
|
||||||
resolve_ref(branch->merge[0]->dst, sha1, 1, NULL)) != NULL) {
|
resolve_refdup(branch->merge[0]->dst, sha1, 1, NULL)) != NULL)
|
||||||
reference_name = xstrdup(reference_name);
|
|
||||||
reference_rev = lookup_commit_reference(sha1);
|
reference_rev = lookup_commit_reference(sha1);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!reference_rev)
|
if (!reference_rev)
|
||||||
reference_rev = head_rev;
|
reference_rev = head_rev;
|
||||||
|
@ -143,7 +142,7 @@ static int branch_merged(int kind, const char *name,
|
||||||
" '%s', even though it is merged to HEAD."),
|
" '%s', even though it is merged to HEAD."),
|
||||||
name, reference_name);
|
name, reference_name);
|
||||||
}
|
}
|
||||||
free((char *)reference_name);
|
free(reference_name_to_free);
|
||||||
return merged;
|
return merged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,10 +730,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||||
|
|
||||||
track = git_branch_track;
|
track = git_branch_track;
|
||||||
|
|
||||||
head = resolve_ref("HEAD", head_sha1, 0, NULL);
|
head = resolve_refdup("HEAD", head_sha1, 0, NULL);
|
||||||
if (!head)
|
if (!head)
|
||||||
die(_("Failed to resolve HEAD as a valid ref."));
|
die(_("Failed to resolve HEAD as a valid ref."));
|
||||||
head = xstrdup(head);
|
|
||||||
if (!strcmp(head, "HEAD")) {
|
if (!strcmp(head, "HEAD")) {
|
||||||
detached = 1;
|
detached = 1;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -696,17 +696,14 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct branch_info old;
|
struct branch_info old;
|
||||||
|
void *path_to_free;
|
||||||
unsigned char rev[20];
|
unsigned char rev[20];
|
||||||
int flag;
|
int flag;
|
||||||
memset(&old, 0, sizeof(old));
|
memset(&old, 0, sizeof(old));
|
||||||
old.path = resolve_ref("HEAD", rev, 0, &flag);
|
old.path = path_to_free = resolve_refdup("HEAD", rev, 0, &flag);
|
||||||
if (old.path)
|
|
||||||
old.path = xstrdup(old.path);
|
|
||||||
old.commit = lookup_commit_reference_gently(rev, 1);
|
old.commit = lookup_commit_reference_gently(rev, 1);
|
||||||
if (!(flag & REF_ISSYMREF)) {
|
if (!(flag & REF_ISSYMREF))
|
||||||
free((char *)old.path);
|
|
||||||
old.path = NULL;
|
old.path = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (old.path && !prefixcmp(old.path, "refs/heads/"))
|
if (old.path && !prefixcmp(old.path, "refs/heads/"))
|
||||||
old.name = old.path + strlen("refs/heads/");
|
old.name = old.path + strlen("refs/heads/");
|
||||||
|
@ -720,8 +717,10 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = merge_working_tree(opts, &old, new);
|
ret = merge_working_tree(opts, &old, new);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
free(path_to_free);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
|
if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
|
||||||
orphaned_commit_warning(old.commit);
|
orphaned_commit_warning(old.commit);
|
||||||
|
@ -729,7 +728,7 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
|
||||||
update_refs_for_switch(opts, &old, new);
|
update_refs_for_switch(opts, &old, new);
|
||||||
|
|
||||||
ret = post_checkout_hook(old.commit, new->commit, 1);
|
ret = post_checkout_hook(old.commit, new->commit, 1);
|
||||||
free((char *)old.path);
|
free(path_to_free);
|
||||||
return ret || opts->writeout_error;
|
return ret || opts->writeout_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -372,14 +372,15 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
|
||||||
int i = 0, pos = 0;
|
int i = 0, pos = 0;
|
||||||
unsigned char head_sha1[20];
|
unsigned char head_sha1[20];
|
||||||
const char *current_branch;
|
const char *current_branch;
|
||||||
|
void *current_branch_to_free;
|
||||||
|
|
||||||
/* get current branch */
|
/* get current branch */
|
||||||
current_branch = resolve_ref("HEAD", head_sha1, 1, NULL);
|
current_branch = current_branch_to_free =
|
||||||
|
resolve_refdup("HEAD", head_sha1, 1, NULL);
|
||||||
if (!current_branch)
|
if (!current_branch)
|
||||||
die("No current branch");
|
die("No current branch");
|
||||||
if (!prefixcmp(current_branch, "refs/heads/"))
|
if (!prefixcmp(current_branch, "refs/heads/"))
|
||||||
current_branch += 11;
|
current_branch += 11;
|
||||||
current_branch = xstrdup(current_branch);
|
|
||||||
|
|
||||||
/* get a line */
|
/* get a line */
|
||||||
while (pos < in->len) {
|
while (pos < in->len) {
|
||||||
|
@ -421,7 +422,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
|
||||||
}
|
}
|
||||||
|
|
||||||
strbuf_complete_line(out);
|
strbuf_complete_line(out);
|
||||||
free((char *)current_branch);
|
free(current_branch_to_free);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -628,11 +628,8 @@ static void populate_value(struct refinfo *ref)
|
||||||
|
|
||||||
if (need_symref && (ref->flag & REF_ISSYMREF) && !ref->symref) {
|
if (need_symref && (ref->flag & REF_ISSYMREF) && !ref->symref) {
|
||||||
unsigned char unused1[20];
|
unsigned char unused1[20];
|
||||||
const char *symref;
|
ref->symref = resolve_refdup(ref->refname, unused1, 1, NULL);
|
||||||
symref = resolve_ref(ref->refname, unused1, 1, NULL);
|
if (!ref->symref)
|
||||||
if (symref)
|
|
||||||
ref->symref = xstrdup(symref);
|
|
||||||
else
|
|
||||||
ref->symref = "";
|
ref->symref = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1096,6 +1096,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
struct commit_list *common = NULL;
|
struct commit_list *common = NULL;
|
||||||
const char *best_strategy = NULL, *wt_strategy = NULL;
|
const char *best_strategy = NULL, *wt_strategy = NULL;
|
||||||
struct commit_list **remotes = &remoteheads;
|
struct commit_list **remotes = &remoteheads;
|
||||||
|
void *branch_to_free;
|
||||||
|
|
||||||
if (argc == 2 && !strcmp(argv[1], "-h"))
|
if (argc == 2 && !strcmp(argv[1], "-h"))
|
||||||
usage_with_options(builtin_merge_usage, builtin_merge_options);
|
usage_with_options(builtin_merge_usage, builtin_merge_options);
|
||||||
|
@ -1104,12 +1105,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
* Check if we are _not_ on a detached HEAD, i.e. if there is a
|
* Check if we are _not_ on a detached HEAD, i.e. if there is a
|
||||||
* current branch.
|
* current branch.
|
||||||
*/
|
*/
|
||||||
branch = resolve_ref("HEAD", head_sha1, 0, &flag);
|
branch = branch_to_free = resolve_refdup("HEAD", head_sha1, 0, &flag);
|
||||||
if (branch) {
|
if (branch && !prefixcmp(branch, "refs/heads/"))
|
||||||
if (!prefixcmp(branch, "refs/heads/"))
|
branch += 11;
|
||||||
branch += 11;
|
|
||||||
branch = xstrdup(branch);
|
|
||||||
}
|
|
||||||
if (!branch || is_null_sha1(head_sha1))
|
if (!branch || is_null_sha1(head_sha1))
|
||||||
head_commit = NULL;
|
head_commit = NULL;
|
||||||
else
|
else
|
||||||
|
@ -1520,6 +1518,6 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
ret = suggest_conflicts(option_renormalize);
|
ret = suggest_conflicts(option_renormalize);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
free((char *)branch);
|
free(branch_to_free);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -804,6 +804,7 @@ static int merge_commit(struct notes_merge_options *o)
|
||||||
struct notes_tree *t;
|
struct notes_tree *t;
|
||||||
struct commit *partial;
|
struct commit *partial;
|
||||||
struct pretty_print_context pretty_ctx;
|
struct pretty_print_context pretty_ctx;
|
||||||
|
void *local_ref_to_free;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -826,10 +827,10 @@ static int merge_commit(struct notes_merge_options *o)
|
||||||
t = xcalloc(1, sizeof(struct notes_tree));
|
t = xcalloc(1, sizeof(struct notes_tree));
|
||||||
init_notes(t, "NOTES_MERGE_PARTIAL", combine_notes_overwrite, 0);
|
init_notes(t, "NOTES_MERGE_PARTIAL", combine_notes_overwrite, 0);
|
||||||
|
|
||||||
o->local_ref = resolve_ref("NOTES_MERGE_REF", sha1, 0, NULL);
|
o->local_ref = local_ref_to_free =
|
||||||
|
resolve_refdup("NOTES_MERGE_REF", sha1, 0, NULL);
|
||||||
if (!o->local_ref)
|
if (!o->local_ref)
|
||||||
die("Failed to resolve NOTES_MERGE_REF");
|
die("Failed to resolve NOTES_MERGE_REF");
|
||||||
o->local_ref = xstrdup(o->local_ref);
|
|
||||||
|
|
||||||
if (notes_merge_commit(o, t, partial, sha1))
|
if (notes_merge_commit(o, t, partial, sha1))
|
||||||
die("Failed to finalize notes merge");
|
die("Failed to finalize notes merge");
|
||||||
|
@ -846,7 +847,7 @@ static int merge_commit(struct notes_merge_options *o)
|
||||||
free_notes(t);
|
free_notes(t);
|
||||||
strbuf_release(&msg);
|
strbuf_release(&msg);
|
||||||
ret = merge_abort(o);
|
ret = merge_abort(o);
|
||||||
free((char *)o->local_ref);
|
free(local_ref_to_free);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ static int prefer_ofs_delta = 1;
|
||||||
static int auto_update_server_info;
|
static int auto_update_server_info;
|
||||||
static int auto_gc = 1;
|
static int auto_gc = 1;
|
||||||
static const char *head_name;
|
static const char *head_name;
|
||||||
|
static void *head_name_to_free;
|
||||||
static int sent_capabilities;
|
static int sent_capabilities;
|
||||||
|
|
||||||
static enum deny_action parse_deny_action(const char *var, const char *value)
|
static enum deny_action parse_deny_action(const char *var, const char *value)
|
||||||
|
@ -695,10 +696,8 @@ static void execute_commands(struct command *commands, const char *unpacker_erro
|
||||||
|
|
||||||
check_aliased_updates(commands);
|
check_aliased_updates(commands);
|
||||||
|
|
||||||
free((char *)head_name);
|
free(head_name_to_free);
|
||||||
head_name = resolve_ref("HEAD", sha1, 0, NULL);
|
head_name = head_name_to_free = resolve_refdup("HEAD", sha1, 0, NULL);
|
||||||
if (head_name)
|
|
||||||
head_name = xstrdup(head_name);
|
|
||||||
|
|
||||||
for (cmd = commands; cmd; cmd = cmd->next)
|
for (cmd = commands; cmd; cmd = cmd->next)
|
||||||
if (!cmd->skip_update)
|
if (!cmd->skip_update)
|
||||||
|
|
|
@ -726,10 +726,8 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
|
||||||
|
|
||||||
if (ac == 0) {
|
if (ac == 0) {
|
||||||
static const char *fake_av[2];
|
static const char *fake_av[2];
|
||||||
const char *refname;
|
|
||||||
|
|
||||||
refname = resolve_ref("HEAD", sha1, 1, NULL);
|
fake_av[0] = resolve_refdup("HEAD", sha1, 1, NULL);
|
||||||
fake_av[0] = xstrdup(refname);
|
|
||||||
fake_av[1] = NULL;
|
fake_av[1] = NULL;
|
||||||
av = fake_av;
|
av = fake_av;
|
||||||
ac = 1;
|
ac = 1;
|
||||||
|
|
1
cache.h
1
cache.h
|
@ -866,6 +866,7 @@ extern int read_ref(const char *filename, unsigned char *sha1);
|
||||||
* errno is sometimes set on errors, but not always.
|
* errno is sometimes set on errors, but not always.
|
||||||
*/
|
*/
|
||||||
extern const char *resolve_ref(const char *ref, unsigned char *sha1, int reading, int *flag);
|
extern const char *resolve_ref(const char *ref, unsigned char *sha1, int reading, int *flag);
|
||||||
|
extern char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, int *flag);
|
||||||
|
|
||||||
extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
|
extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
|
||||||
extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
|
extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
|
||||||
|
|
|
@ -50,11 +50,12 @@ static struct complete_reflogs *read_complete_reflog(const char *ref)
|
||||||
for_each_reflog_ent(ref, read_one_reflog, reflogs);
|
for_each_reflog_ent(ref, read_one_reflog, reflogs);
|
||||||
if (reflogs->nr == 0) {
|
if (reflogs->nr == 0) {
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
const char *name = resolve_ref(ref, sha1, 1, NULL);
|
const char *name;
|
||||||
|
void *name_to_free;
|
||||||
|
name = name_to_free = resolve_refdup(ref, sha1, 1, NULL);
|
||||||
if (name) {
|
if (name) {
|
||||||
name = xstrdup(name);
|
|
||||||
for_each_reflog_ent(name, read_one_reflog, reflogs);
|
for_each_reflog_ent(name, read_one_reflog, reflogs);
|
||||||
free((char *)name);
|
free(name_to_free);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (reflogs->nr == 0) {
|
if (reflogs->nr == 0) {
|
||||||
|
@ -171,11 +172,11 @@ int add_reflog_for_walk(struct reflog_walk_info *info,
|
||||||
else {
|
else {
|
||||||
if (*branch == '\0') {
|
if (*branch == '\0') {
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
const char *head = resolve_ref("HEAD", sha1, 0, NULL);
|
|
||||||
if (!head)
|
|
||||||
die ("No current branch");
|
|
||||||
free(branch);
|
free(branch);
|
||||||
branch = xstrdup(head);
|
branch = resolve_refdup("HEAD", sha1, 0, NULL);
|
||||||
|
if (!branch)
|
||||||
|
die ("No current branch");
|
||||||
|
|
||||||
}
|
}
|
||||||
reflogs = read_complete_reflog(branch);
|
reflogs = read_complete_reflog(branch);
|
||||||
if (!reflogs || reflogs->nr == 0) {
|
if (!reflogs || reflogs->nr == 0) {
|
||||||
|
|
6
refs.c
6
refs.c
|
@ -605,6 +605,12 @@ const char *resolve_ref(const char *ref, unsigned char *sha1, int reading, int *
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, int *flag)
|
||||||
|
{
|
||||||
|
const char *ret = resolve_ref(ref, sha1, reading, flag);
|
||||||
|
return ret ? xstrdup(ret) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* The argument to filter_refs */
|
/* The argument to filter_refs */
|
||||||
struct ref_filter {
|
struct ref_filter {
|
||||||
const char *pattern;
|
const char *pattern;
|
||||||
|
|
|
@ -111,7 +111,6 @@ void status_printf_more(struct wt_status *s, const char *color,
|
||||||
void wt_status_prepare(struct wt_status *s)
|
void wt_status_prepare(struct wt_status *s)
|
||||||
{
|
{
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
const char *head;
|
|
||||||
|
|
||||||
memset(s, 0, sizeof(*s));
|
memset(s, 0, sizeof(*s));
|
||||||
memcpy(s->color_palette, default_wt_status_colors,
|
memcpy(s->color_palette, default_wt_status_colors,
|
||||||
|
@ -119,8 +118,7 @@ void wt_status_prepare(struct wt_status *s)
|
||||||
s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
|
s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
|
||||||
s->use_color = -1;
|
s->use_color = -1;
|
||||||
s->relative_paths = 1;
|
s->relative_paths = 1;
|
||||||
head = resolve_ref("HEAD", sha1, 0, NULL);
|
s->branch = resolve_refdup("HEAD", sha1, 0, NULL);
|
||||||
s->branch = head ? xstrdup(head) : NULL;
|
|
||||||
s->reference = "HEAD";
|
s->reference = "HEAD";
|
||||||
s->fp = stdout;
|
s->fp = stdout;
|
||||||
s->index_file = get_index_file();
|
s->index_file = get_index_file();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче