Merge branch 'js/http-mb'
authorJunio C Hamano <junkio@cox.net>
Sun, 13 Aug 2006 02:24:51 +0000 (19:24 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 13 Aug 2006 02:24:51 +0000 (19:24 -0700)
1  2 
http-push.c
diff --combined http-push.c
index d45733ef64ecb8c153a0f62cfb193eed332402e6,dc82657830d22d7e66575e9fcf47685e80b21fd4..0359ae5b6f421c9b1b0229a2aa7019510a656ef2
@@@ -530,7 -530,7 +530,7 @@@ static void start_put(struct transfer_r
        request->dest = xmalloc(strlen(request->url) + 14);
        sprintf(request->dest, "Destination: %s", request->url);
        posn += 38;
 -      *(posn++) = '.';
 +      *(posn++) = '_';
        strcpy(posn, request->lock->token);
  
        slot = get_active_slot();
@@@ -2182,49 -2182,14 +2182,14 @@@ static void fetch_symref(const char *pa
  
  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)