From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Shawn O. Pearce" Subject: [PATCH 4/6] Refactor send-pack/receive-pack capability handshake for extension Date: Thu, 14 Feb 2008 01:22:49 -0500 Message-ID: <20080214062249.GD30516@spearce.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 To: git@vger.kernel.org X-From: git-owner@vger.kernel.org Thu Feb 14 07:23:30 2008 Return-path: Envelope-to: gcvg-git-2@gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1JPXVK-00030z-8X for gcvg-git-2@gmane.org; Thu, 14 Feb 2008 07:23:30 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754165AbYBNGWx (ORCPT ); Thu, 14 Feb 2008 01:22:53 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753487AbYBNGWw (ORCPT ); Thu, 14 Feb 2008 01:22:52 -0500 Received: from corvette.plexpod.net ([64.38.20.226]:58447 "EHLO corvette.plexpod.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753493AbYBNGWv (ORCPT ); Thu, 14 Feb 2008 01:22:51 -0500 Received: from cpe-74-70-48-173.nycap.res.rr.com ([74.70.48.173] helo=asimov.home.spearce.org) by corvette.plexpod.net with esmtpa (Exim 4.68) (envelope-from ) id 1JPXUg-0003p0-Iw for git@vger.kernel.org; Thu, 14 Feb 2008 01:22:50 -0500 Received: by asimov.home.spearce.org (Postfix, from userid 1000) id 1CF2E20FBAE; Thu, 14 Feb 2008 01:22:49 -0500 (EST) Content-Disposition: inline User-Agent: Mutt/1.5.11 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - corvette.plexpod.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - spearce.org Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: This refactors the capability selection in send-pack to be more like how fetch-pack handles the transmission to the remote peer, so we can easily add additional capability strings to the push protocol as needed. Signed-off-by: Shawn O. Pearce --- builtin-send-pack.c | 17 ++++++++--------- receive-pack.c | 3 ++- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/builtin-send-pack.c b/builtin-send-pack.c index 8afb1d0..63fbcd2 100644 --- a/builtin-send-pack.c +++ b/builtin-send-pack.c @@ -378,10 +378,10 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest { struct ref *ref; int new_refs; - int ask_for_status_report = 0; int allow_deleting_refs = 0; int expect_status_report = 0; int flags = MATCH_REFS_NONE; + int pushing = 0; int ret; if (args.send_all) @@ -395,7 +395,7 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest /* Does the other end support the reporting? */ if (server_supports("report-status")) - ask_for_status_report = 1; + expect_status_report = 1; if (server_supports("delete-refs")) allow_deleting_refs = 1; @@ -477,18 +477,17 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest char *old_hex = sha1_to_hex(ref->old_sha1); char *new_hex = sha1_to_hex(ref->new_sha1); - if (ask_for_status_report) { + if (!pushing) packet_write(out, "%s %s %s%c%s", old_hex, new_hex, ref->name, 0, - "report-status"); - ask_for_status_report = 0; - expect_status_report = 1; - } + (expect_status_report ? " report-status" : "") + ); else packet_write(out, "%s %s %s", old_hex, new_hex, ref->name); + pushing++; } - ref->status = expect_status_report ? + ref->status = pushing && expect_status_report ? REF_STATUS_EXPECTING_REPORT : REF_STATUS_OK; } @@ -502,7 +501,7 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest } close(out); - if (expect_status_report) + if (pushing && expect_status_report) ret = receive_status(in, remote_refs); else ret = 0; diff --git a/receive-pack.c b/receive-pack.c index 3267495..7380395 100644 --- a/receive-pack.c +++ b/receive-pack.c @@ -318,7 +318,8 @@ static void read_head_info(void) refname = line + 82; reflen = strlen(refname); if (reflen + 82 < len) { - if (strstr(refname + reflen + 1, "report-status")) + const char *reqcap = refname + reflen + 1; + if (strstr(reqcap, "report-status")) report_status = 1; } cmd = xmalloc(sizeof(struct command) + len - 80); -- 1.5.4.1.1309.g833c2