summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 07efc6a)
raw | patch | inline | side by side (parent: 07efc6a)
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | |
Fri, 4 Aug 2006 15:50:41 +0000 (17:50 +0200) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sat, 5 Aug 2006 00:40:50 +0000 (17:40 -0700) |
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
http-push.c | patch | blob | history |
diff --git a/http-push.c b/http-push.c
index 4021e7d9274b713a7b5c48d66f9ddf21ddc07094..dc82657830d22d7e66575e9fcf47685e80b21fd4 100644 (file)
--- a/http-push.c
+++ b/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;
-
- if (pipe(pipe_fd) < 0)
- die("Verify merge base: pipe failed");
-
- 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;
- }
- }
+ 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);
- return verified;
+ if (merge_bases && !merge_bases->next && merge_bases->item == branch)
+ return 1;
+
+ return 0;
}
static int delete_remote_branch(char *pattern, int force)