mirror of
https://github.com/git/git.git
synced 2024-10-30 22:07:53 +01:00
builtin/apply: make create_one_file() return -1 on error
To libify `git apply` functionality we have to signal errors to the caller instead of exit()ing. To do that in a compatible manner with the rest of the error handling in "builtin/apply.c", create_one_file() should return -1 instead of calling exit(). Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
739d8a16b5
commit
603752a88d
1 changed files with 21 additions and 15 deletions
|
@ -4198,32 +4198,36 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,
|
|||
* We optimistically assume that the directories exist,
|
||||
* which is true 99% of the time anyway. If they don't,
|
||||
* we create them and try again.
|
||||
*
|
||||
* Returns:
|
||||
* -1 on error
|
||||
* 0 otherwise
|
||||
*/
|
||||
static void create_one_file(struct apply_state *state,
|
||||
char *path,
|
||||
unsigned mode,
|
||||
const char *buf,
|
||||
unsigned long size)
|
||||
static int create_one_file(struct apply_state *state,
|
||||
char *path,
|
||||
unsigned mode,
|
||||
const char *buf,
|
||||
unsigned long size)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (state->cached)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
res = try_create_file(path, mode, buf, size);
|
||||
if (res < 0)
|
||||
exit(128);
|
||||
return -1;
|
||||
if (!res)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (errno == ENOENT) {
|
||||
if (safe_create_leading_directories(path))
|
||||
return;
|
||||
return 0;
|
||||
res = try_create_file(path, mode, buf, size);
|
||||
if (res < 0)
|
||||
exit(128);
|
||||
return -1;
|
||||
if (!res)
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (errno == EEXIST || errno == EACCES) {
|
||||
|
@ -4243,10 +4247,10 @@ static void create_one_file(struct apply_state *state,
|
|||
mksnpath(newpath, sizeof(newpath), "%s~%u", path, nr);
|
||||
res = try_create_file(newpath, mode, buf, size);
|
||||
if (res < 0)
|
||||
exit(128);
|
||||
return -1;
|
||||
if (!res) {
|
||||
if (!rename(newpath, path))
|
||||
return;
|
||||
return 0;
|
||||
unlink_or_warn(newpath);
|
||||
break;
|
||||
}
|
||||
|
@ -4255,7 +4259,8 @@ static void create_one_file(struct apply_state *state,
|
|||
++nr;
|
||||
}
|
||||
}
|
||||
die_errno(_("unable to write file '%s' mode %o"), path, mode);
|
||||
return error_errno(_("unable to write file '%s' mode %o"),
|
||||
path, mode);
|
||||
}
|
||||
|
||||
static int add_conflicted_stages_file(struct apply_state *state,
|
||||
|
@ -4300,7 +4305,8 @@ static int create_file(struct apply_state *state, struct patch *patch)
|
|||
|
||||
if (!mode)
|
||||
mode = S_IFREG | 0644;
|
||||
create_one_file(state, path, mode, buf, size);
|
||||
if (create_one_file(state, path, mode, buf, size))
|
||||
return -1;
|
||||
|
||||
if (patch->conflicted_threeway)
|
||||
return add_conflicted_stages_file(state, patch);
|
||||
|
|
Loading…
Reference in a new issue