test-pkt-line: add unpack-sideband subcommand
Add an 'unpack-sideband' subcommand to the test-pkt-line helper to enable unpacking packet line data sent multiplexed using a sideband. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
53f9a3e157
commit
4bcd37d3bc
@ -1,3 +1,4 @@
|
|||||||
|
#include "cache.h"
|
||||||
#include "pkt-line.h"
|
#include "pkt-line.h"
|
||||||
|
|
||||||
static void pack_line(const char *line)
|
static void pack_line(const char *line)
|
||||||
@ -48,6 +49,36 @@ static void unpack(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void unpack_sideband(void)
|
||||||
|
{
|
||||||
|
struct packet_reader reader;
|
||||||
|
packet_reader_init(&reader, 0, NULL, 0,
|
||||||
|
PACKET_READ_GENTLE_ON_EOF |
|
||||||
|
PACKET_READ_CHOMP_NEWLINE);
|
||||||
|
|
||||||
|
while (packet_reader_read(&reader) != PACKET_READ_EOF) {
|
||||||
|
int band;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
switch (reader.status) {
|
||||||
|
case PACKET_READ_EOF:
|
||||||
|
break;
|
||||||
|
case PACKET_READ_NORMAL:
|
||||||
|
band = reader.line[0] & 0xff;
|
||||||
|
if (band < 1 || band > 2)
|
||||||
|
die("unexpected side band %d", band);
|
||||||
|
fd = band;
|
||||||
|
|
||||||
|
write_or_die(fd, reader.line + 1, reader.pktlen - 1);
|
||||||
|
break;
|
||||||
|
case PACKET_READ_FLUSH:
|
||||||
|
return;
|
||||||
|
case PACKET_READ_DELIM:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_main(int argc, const char **argv)
|
int cmd_main(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
@ -57,6 +88,8 @@ int cmd_main(int argc, const char **argv)
|
|||||||
pack(argc - 2, argv + 2);
|
pack(argc - 2, argv + 2);
|
||||||
else if (!strcmp(argv[1], "unpack"))
|
else if (!strcmp(argv[1], "unpack"))
|
||||||
unpack();
|
unpack();
|
||||||
|
else if (!strcmp(argv[1], "unpack-sideband"))
|
||||||
|
unpack_sideband();
|
||||||
else
|
else
|
||||||
die("invalid argument '%s'", argv[1]);
|
die("invalid argument '%s'", argv[1]);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user