зеркало из https://github.com/microsoft/git.git
apply: further split load_preimage()
load_preimage() is very specific to grab the current contents for the path given by patch->old_name. Split the logic that grabs the contents for a path out of it into a separate load_patch_target() function. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
ccf998b297
Коммит
5a81266169
|
@ -3067,6 +3067,31 @@ static struct patch *previous_patch(struct patch *patch, int *gone)
|
||||||
return previous;
|
return previous;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SUBMODULE_PATCH_WITHOUT_INDEX 1
|
||||||
|
|
||||||
|
static int load_patch_target(struct strbuf *buf,
|
||||||
|
struct cache_entry *ce,
|
||||||
|
struct stat *st,
|
||||||
|
const char *name,
|
||||||
|
unsigned expected_mode)
|
||||||
|
{
|
||||||
|
if (cached) {
|
||||||
|
if (read_file_or_gitlink(ce, buf))
|
||||||
|
return error(_("read of %s failed"), name);
|
||||||
|
} else if (name) {
|
||||||
|
if (S_ISGITLINK(expected_mode)) {
|
||||||
|
if (ce)
|
||||||
|
return read_file_or_gitlink(ce, buf);
|
||||||
|
else
|
||||||
|
return SUBMODULE_PATCH_WITHOUT_INDEX;
|
||||||
|
} else {
|
||||||
|
if (read_old_data(st, name, buf))
|
||||||
|
return error(_("read of %s failed"), name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We are about to apply "patch"; populate the "image" with the
|
* We are about to apply "patch"; populate the "image" with the
|
||||||
* current version we have, from the working tree or from the index,
|
* current version we have, from the working tree or from the index,
|
||||||
|
@ -3090,26 +3115,22 @@ static int load_preimage(struct image *image,
|
||||||
if (previous) {
|
if (previous) {
|
||||||
/* We have a patched copy in memory; use that. */
|
/* We have a patched copy in memory; use that. */
|
||||||
strbuf_add(&buf, previous->result, previous->resultsize);
|
strbuf_add(&buf, previous->result, previous->resultsize);
|
||||||
} else if (cached) {
|
} else {
|
||||||
if (read_file_or_gitlink(ce, &buf))
|
status = load_patch_target(&buf, ce, st,
|
||||||
|
patch->old_name, patch->old_mode);
|
||||||
|
if (status < 0)
|
||||||
|
return status;
|
||||||
|
else if (status == SUBMODULE_PATCH_WITHOUT_INDEX) {
|
||||||
|
/*
|
||||||
|
* There is no way to apply subproject
|
||||||
|
* patch without looking at the index.
|
||||||
|
* NEEDSWORK: shouldn't this be flagged
|
||||||
|
* as an error???
|
||||||
|
*/
|
||||||
|
free_fragment_list(patch->fragments);
|
||||||
|
patch->fragments = NULL;
|
||||||
|
} else if (status) {
|
||||||
return error(_("read of %s failed"), patch->old_name);
|
return error(_("read of %s failed"), patch->old_name);
|
||||||
} else if (patch->old_name) {
|
|
||||||
if (S_ISGITLINK(patch->old_mode)) {
|
|
||||||
if (ce) {
|
|
||||||
read_file_or_gitlink(ce, &buf);
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* There is no way to apply subproject
|
|
||||||
* patch without looking at the index.
|
|
||||||
* NEEDSWORK: shouldn't this be flagged
|
|
||||||
* as an error???
|
|
||||||
*/
|
|
||||||
free_fragment_list(patch->fragments);
|
|
||||||
patch->fragments = NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (read_old_data(st, patch->old_name, &buf))
|
|
||||||
return error(_("read of %s failed"), patch->old_name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче