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 <bmw...@google.com>
---
 t/helper/test-pkt-line.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/t/helper/test-pkt-line.c b/t/helper/test-pkt-line.c
index 0f19e53c7..30775f986 100644
--- a/t/helper/test-pkt-line.c
+++ b/t/helper/test-pkt-line.c
@@ -1,3 +1,4 @@
+#include "cache.h"
 #include "pkt-line.h"
 
 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)
 {
        if (argc < 2)
@@ -57,6 +88,8 @@ int cmd_main(int argc, const char **argv)
                pack(argc - 2, argv + 2);
        else if (!strcmp(argv[1], "unpack"))
                unpack();
+       else if (!strcmp(argv[1], "unpack-sideband"))
+               unpack_sideband();
        else
                die("invalid argument '%s'", argv[1]);
 
-- 
2.18.0.rc1.244.gcf134e6275-goog

Reply via email to