mirror of
https://github.com/git/git.git
synced 2026-03-13 18:33:25 +01:00
Merge branch 'js/http-mb' into next
* js/http-mb: http-push: avoid fork() by calling merge_bases() directly Allow config file to specify Signed-off-by identity in format-patch. Fix crash when GIT_DIR is invalid
This commit is contained in:
@@ -257,6 +257,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
char message_id[1024];
|
||||
char ref_message_id[1024];
|
||||
|
||||
setup_ident();
|
||||
git_config(git_format_config);
|
||||
init_revisions(&rev, prefix);
|
||||
rev.commit_format = CMIT_FMT_EMAIL;
|
||||
@@ -306,7 +307,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
!strcmp(argv[i], "-s")) {
|
||||
const char *committer;
|
||||
const char *endpos;
|
||||
setup_ident();
|
||||
committer = git_committer_info(1);
|
||||
endpos = strchr(committer, '>');
|
||||
if (!endpos)
|
||||
|
||||
47
http-push.c
47
http-push.c
@@ -2182,49 +2182,14 @@ static void fetch_symref(const char *path, char **symref, unsigned char *sha1)
|
||||
|
||||
static int verify_merge_base(unsigned char *head_sha1, unsigned char *branch_sha1)
|
||||
{
|
||||
int pipe_fd[2];
|
||||
pid_t merge_base_pid;
|
||||
char line[PATH_MAX + 20];
|
||||
unsigned char merge_sha1[20];
|
||||
int verified = 0;
|
||||
struct commit *head = lookup_commit(head_sha1);
|
||||
struct commit *branch = lookup_commit(branch_sha1);
|
||||
struct commit_list *merge_bases = get_merge_bases(head, branch, 1);
|
||||
|
||||
if (pipe(pipe_fd) < 0)
|
||||
die("Verify merge base: pipe failed");
|
||||
if (merge_bases && !merge_bases->next && merge_bases->item == branch)
|
||||
return 1;
|
||||
|
||||
merge_base_pid = fork();
|
||||
if (!merge_base_pid) {
|
||||
static const char *args[] = {
|
||||
"merge-base",
|
||||
"-a",
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
args[2] = strdup(sha1_to_hex(head_sha1));
|
||||
args[3] = sha1_to_hex(branch_sha1);
|
||||
|
||||
dup2(pipe_fd[1], 1);
|
||||
close(pipe_fd[0]);
|
||||
close(pipe_fd[1]);
|
||||
execv_git_cmd(args);
|
||||
die("merge-base setup failed");
|
||||
}
|
||||
if (merge_base_pid < 0)
|
||||
die("merge-base fork failed");
|
||||
|
||||
dup2(pipe_fd[0], 0);
|
||||
close(pipe_fd[0]);
|
||||
close(pipe_fd[1]);
|
||||
while (fgets(line, sizeof(line), stdin) != NULL) {
|
||||
if (get_sha1_hex(line, merge_sha1))
|
||||
die("expected sha1, got garbage:\n %s", line);
|
||||
if (!memcmp(branch_sha1, merge_sha1, 20)) {
|
||||
verified = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return verified;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int delete_remote_branch(char *pattern, int force)
|
||||
|
||||
Reference in New Issue
Block a user