From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH v6 04/23] receive-pack: factor out queueing of command
Date: Wed, 17 Sep 2014 15:45:39 -0700 [thread overview]
Message-ID: <1410993958-32394-5-git-send-email-gitster@pobox.com> (raw)
In-Reply-To: <1410993958-32394-1-git-send-email-gitster@pobox.com>
Make a helper function to accept a line of a protocol message and
queue an update command out of the code from read_head_info().
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Unchanged since v5.
builtin/receive-pack.c | 50 +++++++++++++++++++++++++++++---------------------
1 file changed, 29 insertions(+), 21 deletions(-)
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index c9b92bf..587f7da 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -831,16 +831,40 @@ static void execute_commands(struct command *commands,
"the reported refs above");
}
+static struct command **queue_command(struct command **tail,
+ const char *line,
+ int linelen)
+{
+ unsigned char old_sha1[20], new_sha1[20];
+ struct command *cmd;
+ const char *refname;
+ int reflen;
+
+ if (linelen < 83 ||
+ line[40] != ' ' ||
+ line[81] != ' ' ||
+ get_sha1_hex(line, old_sha1) ||
+ get_sha1_hex(line + 41, new_sha1))
+ die("protocol error: expected old/new/ref, got '%s'", line);
+
+ refname = line + 82;
+ reflen = linelen - 82;
+ cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
+ hashcpy(cmd->old_sha1, old_sha1);
+ hashcpy(cmd->new_sha1, new_sha1);
+ memcpy(cmd->ref_name, refname, reflen);
+ cmd->ref_name[reflen] = '\0';
+ *tail = cmd;
+ return &cmd->next;
+}
+
static struct command *read_head_info(struct sha1_array *shallow)
{
struct command *commands = NULL;
struct command **p = &commands;
for (;;) {
char *line;
- unsigned char old_sha1[20], new_sha1[20];
- struct command *cmd;
- char *refname;
- int len, reflen, linelen;
+ int len, linelen;
line = packet_read_line(0, &len);
if (!line)
@@ -866,23 +890,7 @@ static struct command *read_head_info(struct sha1_array *shallow)
quiet = 1;
}
- if (linelen < 83 ||
- line[40] != ' ' ||
- line[81] != ' ' ||
- get_sha1_hex(line, old_sha1) ||
- get_sha1_hex(line + 41, new_sha1))
- die("protocol error: expected old/new/ref, got '%s'",
- line);
-
- refname = line + 82;
- reflen = linelen - 82;
- cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
- hashcpy(cmd->old_sha1, old_sha1);
- hashcpy(cmd->new_sha1, new_sha1);
- memcpy(cmd->ref_name, refname, reflen);
- cmd->ref_name[reflen] = '\0';
- *p = cmd;
- p = &cmd->next;
+ p = queue_command(p, line, linelen);
}
return commands;
}
--
2.1.0-403-g099cf47
next prev parent reply other threads:[~2014-09-17 22:46 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-17 22:45 [PATCH v6 00/23] Signed push Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 01/23] receive-pack: do not overallocate command structure Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 02/23] receive-pack: parse feature request a bit earlier Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 03/23] receive-pack: do not reuse old_sha1[] for other things Junio C Hamano
2014-09-17 22:45 ` Junio C Hamano [this message]
2014-09-17 22:45 ` [PATCH v6 05/23] send-pack: move REF_STATUS_REJECT_NODELETE logic a bit higher Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 06/23] send-pack: refactor decision to send update per ref Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 07/23] send-pack: always send capabilities Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 08/23] send-pack: factor out capability string generation Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 09/23] receive-pack: " Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 10/23] send-pack: rename "new_refs" to "need_pack_data" Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 11/23] send-pack: refactor inspecting and resetting status and sending commands Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 12/23] send-pack: clarify that cmds_sent is a boolean Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 13/23] gpg-interface: move parse_gpg_output() to where it should be Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 14/23] gpg-interface: move parse_signature() " Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 15/23] pack-protocol doc: typofix for PKT-LINE Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 16/23] push: the beginning of "git push --signed" Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 17/23] receive-pack: GPG-validate push certificates Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 18/23] send-pack: send feature request on push-cert packet Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 19/23] signed push: remove duplicated protocol info Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 20/23] signed push: add "pushee" header to push certificate Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 21/23] signed push: fortify against replay attacks Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 22/23] signed push: teach smart-HTTP to pass "git push --signed" around Junio C Hamano
2014-09-17 22:45 ` [PATCH v6 23/23] signed push: allow stale nonce in stateless mode Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1410993958-32394-5-git-send-email-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).