Skip to content

Commit 39895c7

Browse files
committed
receive-pack: factor out queueing of command
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 <[email protected]>
1 parent c09b71c commit 39895c7

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

builtin/receive-pack.c

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -831,16 +831,40 @@ static void execute_commands(struct command *commands,
831831
"the reported refs above");
832832
}
833833

834+
static struct command **queue_command(struct command **tail,
835+
const char *line,
836+
int linelen)
837+
{
838+
unsigned char old_sha1[20], new_sha1[20];
839+
struct command *cmd;
840+
const char *refname;
841+
int reflen;
842+
843+
if (linelen < 83 ||
844+
line[40] != ' ' ||
845+
line[81] != ' ' ||
846+
get_sha1_hex(line, old_sha1) ||
847+
get_sha1_hex(line + 41, new_sha1))
848+
die("protocol error: expected old/new/ref, got '%s'", line);
849+
850+
refname = line + 82;
851+
reflen = linelen - 82;
852+
cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
853+
hashcpy(cmd->old_sha1, old_sha1);
854+
hashcpy(cmd->new_sha1, new_sha1);
855+
memcpy(cmd->ref_name, refname, reflen);
856+
cmd->ref_name[reflen] = '\0';
857+
*tail = cmd;
858+
return &cmd->next;
859+
}
860+
834861
static struct command *read_head_info(struct sha1_array *shallow)
835862
{
836863
struct command *commands = NULL;
837864
struct command **p = &commands;
838865
for (;;) {
839866
char *line;
840-
unsigned char old_sha1[20], new_sha1[20];
841-
struct command *cmd;
842-
char *refname;
843-
int len, reflen, linelen;
867+
int len, linelen;
844868

845869
line = packet_read_line(0, &len);
846870
if (!line)
@@ -866,23 +890,7 @@ static struct command *read_head_info(struct sha1_array *shallow)
866890
quiet = 1;
867891
}
868892

869-
if (linelen < 83 ||
870-
line[40] != ' ' ||
871-
line[81] != ' ' ||
872-
get_sha1_hex(line, old_sha1) ||
873-
get_sha1_hex(line + 41, new_sha1))
874-
die("protocol error: expected old/new/ref, got '%s'",
875-
line);
876-
877-
refname = line + 82;
878-
reflen = linelen - 82;
879-
cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
880-
hashcpy(cmd->old_sha1, old_sha1);
881-
hashcpy(cmd->new_sha1, new_sha1);
882-
memcpy(cmd->ref_name, refname, reflen);
883-
cmd->ref_name[reflen] = '\0';
884-
*p = cmd;
885-
p = &cmd->next;
893+
p = queue_command(p, line, linelen);
886894
}
887895
return commands;
888896
}

0 commit comments

Comments
 (0)