aboutsummaryrefslogtreecommitdiff
path: root/utils/auc/src
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2021-03-17 21:09:50 +0000
committerDaniel Golle <daniel@makrotopia.org>2021-05-10 04:20:41 +0100
commit5b7ff1ad655e78d9f3c9ed51ecec1a4f91ac2404 (patch)
tree484ca3528d9764b9781c4da3b78a5d1cf7f2dd3e /utils/auc/src
parent70bb71fdffe1818fcc569bcfaedc045c2e89007a (diff)
auc: support queue_position status from server
Display position in queue while waiting for build. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Diffstat (limited to 'utils/auc/src')
-rw-r--r--utils/auc/src/auc.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/utils/auc/src/auc.c b/utils/auc/src/auc.c
index 5836875a3..ba3fdfa5f 100644
--- a/utils/auc/src/auc.c
+++ b/utils/auc/src/auc.c
@@ -238,6 +238,7 @@ enum {
TARGET_METADATA_VERSION,
TARGET_REQUEST_HASH,
TARGET_SOURCE_DATE_EPOCH,
+ TARGET_QUEUE_POSITION,
TARGET_STATUS,
TARGET_STDERR,
TARGET_STDOUT,
@@ -263,6 +264,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 },
@@ -424,6 +426,9 @@ static int verrevcmp(const char *val, const char *ref)
#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
@@ -1395,7 +1400,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);
@@ -1559,7 +1564,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;
}