From 130458068243a584776dbbfdf2d2e1626259c390 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Wed, 17 Mar 2021 21:09:50 +0000 Subject: [PATCH] auc: support queue_position status from server Display position in queue while waiting for build. Signed-off-by: Daniel Golle (cherry picked from commit 5b7ff1ad655e78d9f3c9ed51ecec1a4f91ac2404) --- utils/auc/src/auc.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/utils/auc/src/auc.c b/utils/auc/src/auc.c index d3162066a8..8770d9a1d3 100644 --- a/utils/auc/src/auc.c +++ b/utils/auc/src/auc.c @@ -237,6 +237,7 @@ enum { TARGET_METADATA_VERSION, TARGET_REQUEST_HASH, TARGET_SOURCE_DATE_EPOCH, + TARGET_QUEUE_POSITION, TARGET_STATUS, TARGET_STDERR, TARGET_STDOUT, @@ -262,6 +263,7 @@ static const struct blobmsg_policy target_policy[__TARGET_MAX] = { [TARGET_METADATA_VERSION] = { .name = "metadata_version", .type = BLOBMSG_TYPE_INT32 }, [TARGET_REQUEST_HASH] = { .name = "request_hash", .type = BLOBMSG_TYPE_STRING }, [TARGET_SOURCE_DATE_EPOCH] = { .name = "source_date_epoch", .type = BLOBMSG_TYPE_STRING }, + [TARGET_QUEUE_POSITION] = { .name = "queue_position", .type = BLOBMSG_TYPE_INT32 }, [TARGET_STATUS] = { .name = "status", .type = BLOBMSG_TYPE_STRING }, [TARGET_STDERR] = { .name = "stderr", .type = BLOBMSG_TYPE_STRING }, [TARGET_STDOUT] = { .name = "stdout", .type = BLOBMSG_TYPE_STRING }, @@ -371,6 +373,9 @@ static int load_config() { #define ANSI_COLOR_RESET ANSI_ESC "[0m" #define ANSI_COLOR_RED ANSI_ESC "[1;31m" #define ANSI_COLOR_GREEN ANSI_ESC "[1;32m" +#define ANSI_CURSOR_SAFE "[s" +#define ANSI_CURSOR_RESTORE "[u" +#define ANSI_ERASE_LINE "[K" #define PKG_UPGRADE 0x1 #define PKG_DOWNGRADE 0x2 @@ -1342,7 +1347,7 @@ int main(int args, char *argv[]) { int upg_check = 0; int revcmp; unsigned char argc = 1; - bool force = false, use_get = false; + bool force = false, use_get = false, in_queue = false; snprintf(user_agent, sizeof(user_agent), "%s (%s)", argv[0], AUC_VERSION); fprintf(stdout, "%s\n", user_agent); @@ -1506,7 +1511,19 @@ int main(int args, char *argv[]) { fputs("Requesting build", stderr); retry_delay = 2; - fputc('.', stderr); + if (tb[TARGET_QUEUE_POSITION]) { + fprintf(stderr, "%s%s (position in queue: %d)", + ANSI_ESC, in_queue?ANSI_CURSOR_RESTORE:ANSI_CURSOR_SAFE, + blobmsg_get_u32(tb[TARGET_QUEUE_POSITION])); + in_queue = true; + } else { + if (in_queue) + fprintf(stderr, "%s%s%s%s", + ANSI_ESC, ANSI_CURSOR_RESTORE, + ANSI_ESC, ANSI_ERASE_LINE); + fputc('.', stderr); + in_queue = false; + } } else { retry_delay = 0; } -- 2.30.2