From: Adrian Vovk Date: Thu, 13 Jul 2023 18:47:30 +0000 (-0400) Subject: sysupdate: Split UpdateSetFlags out from UpdateSet X-Git-Tag: v257-rc1~913^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3f79921c08f75d1ed31290b64693a4572bb00db0;p=thirdparty%2Fsystemd.git sysupdate: Split UpdateSetFlags out from UpdateSet This will let us reuse UpdateSetFlags in updatectl --- diff --git a/src/sysupdate/meson.build b/src/sysupdate/meson.build index 417b47a1364..3e50c42afef 100644 --- a/src/sysupdate/meson.build +++ b/src/sysupdate/meson.build @@ -8,6 +8,7 @@ systemd_sysupdate_sources = files( 'sysupdate-resource.c', 'sysupdate-transfer.c', 'sysupdate-update-set.c', + 'sysupdate-update-set-flags.c', 'sysupdate.c', ) diff --git a/src/sysupdate/sysupdate-update-set-flags.c b/src/sysupdate/sysupdate-update-set-flags.c new file mode 100644 index 00000000000..1aade456db6 --- /dev/null +++ b/src/sysupdate/sysupdate-update-set-flags.c @@ -0,0 +1,93 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "glyph-util.h" +#include "sysupdate-update-set-flags.h" +#include "terminal-util.h" + +const char *update_set_flags_to_color(UpdateSetFlags flags) { + + if (flags == 0 || (flags & UPDATE_OBSOLETE)) + return (flags & UPDATE_NEWEST) ? ansi_highlight_grey() : ansi_grey(); + + if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_NEWEST)) + return ansi_highlight(); + + if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_PROTECTED)) + return ansi_highlight_magenta(); + + if ((flags & (UPDATE_AVAILABLE|UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_OBSOLETE)) == (UPDATE_AVAILABLE|UPDATE_NEWEST)) + return ansi_highlight_green(); + + return NULL; +} + +const char *update_set_flags_to_glyph(UpdateSetFlags flags) { + + if (flags == 0 || (flags & UPDATE_OBSOLETE)) + return special_glyph(SPECIAL_GLYPH_MULTIPLICATION_SIGN); + + if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_NEWEST)) + return special_glyph(SPECIAL_GLYPH_BLACK_CIRCLE); + + if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_PROTECTED)) + return special_glyph(SPECIAL_GLYPH_WHITE_CIRCLE); + + if ((flags & (UPDATE_AVAILABLE|UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_OBSOLETE)) == (UPDATE_AVAILABLE|UPDATE_NEWEST)) + return special_glyph(SPECIAL_GLYPH_CIRCLE_ARROW); + + return " "; +} + +const char *update_set_flags_to_string(UpdateSetFlags flags) { + + switch ((unsigned) flags) { + + case 0: + return "n/a"; + + case UPDATE_INSTALLED|UPDATE_NEWEST: + case UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_PROTECTED: + case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST: + case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED: + return "current"; + + case UPDATE_AVAILABLE|UPDATE_NEWEST: + case UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED: + return "candidate"; + + case UPDATE_INSTALLED: + case UPDATE_INSTALLED|UPDATE_AVAILABLE: + return "installed"; + + case UPDATE_INSTALLED|UPDATE_PROTECTED: + case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_PROTECTED: + return "protected"; + + case UPDATE_AVAILABLE: + case UPDATE_AVAILABLE|UPDATE_PROTECTED: + return "available"; + + case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_NEWEST: + case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED: + case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST: + case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED: + return "current+obsolete"; + + case UPDATE_INSTALLED|UPDATE_OBSOLETE: + case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE: + return "installed+obsolete"; + + case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_PROTECTED: + case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_PROTECTED: + return "protected+obsolete"; + + case UPDATE_AVAILABLE|UPDATE_OBSOLETE: + case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_PROTECTED: + case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST: + case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED: + return "available+obsolete"; + + default: + assert_not_reached(); + } +} diff --git a/src/sysupdate/sysupdate-update-set-flags.h b/src/sysupdate/sysupdate-update-set-flags.h new file mode 100644 index 00000000000..6f954d7c220 --- /dev/null +++ b/src/sysupdate/sysupdate-update-set-flags.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +typedef enum UpdateSetFlags { + UPDATE_NEWEST = 1 << 0, + UPDATE_AVAILABLE = 1 << 1, + UPDATE_INSTALLED = 1 << 2, + UPDATE_OBSOLETE = 1 << 3, + UPDATE_PROTECTED = 1 << 4, +} UpdateSetFlags; + +const char *update_set_flags_to_color(UpdateSetFlags flags); +const char *update_set_flags_to_glyph(UpdateSetFlags flags); +const char *update_set_flags_to_string(UpdateSetFlags flags); diff --git a/src/sysupdate/sysupdate-update-set.c b/src/sysupdate/sysupdate-update-set.c index f5a800429fb..5682102d617 100644 --- a/src/sysupdate/sysupdate-update-set.c +++ b/src/sysupdate/sysupdate-update-set.c @@ -1,10 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "alloc-util.h" -#include "glyph-util.h" #include "string-util.h" #include "sysupdate-update-set.h" -#include "terminal-util.h" UpdateSet *update_set_free(UpdateSet *us) { if (!us) @@ -27,37 +25,3 @@ int update_set_cmp(UpdateSet *const*a, UpdateSet *const*b) { /* Newest version at the beginning */ return -strverscmp_improved((*a)->version, (*b)->version); } - -const char* update_set_flags_to_color(UpdateSetFlags flags) { - - if (flags == 0 || (flags & UPDATE_OBSOLETE)) - return (flags & UPDATE_NEWEST) ? ansi_highlight_grey() : ansi_grey(); - - if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_NEWEST)) - return ansi_highlight(); - - if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_PROTECTED)) - return ansi_highlight_magenta(); - - if ((flags & (UPDATE_AVAILABLE|UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_OBSOLETE)) == (UPDATE_AVAILABLE|UPDATE_NEWEST)) - return ansi_highlight_green(); - - return NULL; -} - -const char* update_set_flags_to_glyph(UpdateSetFlags flags) { - - if (flags == 0 || (flags & UPDATE_OBSOLETE)) - return special_glyph(SPECIAL_GLYPH_MULTIPLICATION_SIGN); - - if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_NEWEST)) - return special_glyph(SPECIAL_GLYPH_BLACK_CIRCLE); - - if (FLAGS_SET(flags, UPDATE_INSTALLED|UPDATE_PROTECTED)) - return special_glyph(SPECIAL_GLYPH_WHITE_CIRCLE); - - if ((flags & (UPDATE_AVAILABLE|UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_OBSOLETE)) == (UPDATE_AVAILABLE|UPDATE_NEWEST)) - return special_glyph(SPECIAL_GLYPH_CIRCLE_ARROW); - - return " "; -} diff --git a/src/sysupdate/sysupdate-update-set.h b/src/sysupdate/sysupdate-update-set.h index 981535aedff..0b9bbfbe674 100644 --- a/src/sysupdate/sysupdate-update-set.h +++ b/src/sysupdate/sysupdate-update-set.h @@ -8,14 +8,7 @@ typedef struct UpdateSet UpdateSet; #include "sysupdate-instance.h" - -typedef enum UpdateSetFlags { - UPDATE_NEWEST = 1 << 0, - UPDATE_AVAILABLE = 1 << 1, - UPDATE_INSTALLED = 1 << 2, - UPDATE_OBSOLETE = 1 << 3, - UPDATE_PROTECTED = 1 << 4, -} UpdateSetFlags; +#include "sysupdate-update-set-flags.h" struct UpdateSet { UpdateSetFlags flags; @@ -25,8 +18,4 @@ struct UpdateSet { }; UpdateSet *update_set_free(UpdateSet *us); - int update_set_cmp(UpdateSet *const*a, UpdateSet *const*b); - -const char* update_set_flags_to_color(UpdateSetFlags flags); -const char* update_set_flags_to_glyph(UpdateSetFlags flags); diff --git a/src/sysupdate/sysupdate.c b/src/sysupdate/sysupdate.c index b94e2244d7d..e2f154d0e8d 100644 --- a/src/sysupdate/sysupdate.c +++ b/src/sysupdate/sysupdate.c @@ -375,60 +375,6 @@ static int context_discover_update_sets(Context *c) { return 0; } -static const char *update_set_flags_to_string(UpdateSetFlags flags) { - - switch ((unsigned) flags) { - - case 0: - return "n/a"; - - case UPDATE_INSTALLED|UPDATE_NEWEST: - case UPDATE_INSTALLED|UPDATE_NEWEST|UPDATE_PROTECTED: - case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST: - case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED: - return "current"; - - case UPDATE_AVAILABLE|UPDATE_NEWEST: - case UPDATE_AVAILABLE|UPDATE_NEWEST|UPDATE_PROTECTED: - return "candidate"; - - case UPDATE_INSTALLED: - case UPDATE_INSTALLED|UPDATE_AVAILABLE: - return "installed"; - - case UPDATE_INSTALLED|UPDATE_PROTECTED: - case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_PROTECTED: - return "protected"; - - case UPDATE_AVAILABLE: - case UPDATE_AVAILABLE|UPDATE_PROTECTED: - return "available"; - - case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_NEWEST: - case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED: - case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST: - case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED: - return "current+obsolete"; - - case UPDATE_INSTALLED|UPDATE_OBSOLETE: - case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE: - return "installed+obsolete"; - - case UPDATE_INSTALLED|UPDATE_OBSOLETE|UPDATE_PROTECTED: - case UPDATE_INSTALLED|UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_PROTECTED: - return "protected+obsolete"; - - case UPDATE_AVAILABLE|UPDATE_OBSOLETE: - case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_PROTECTED: - case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST: - case UPDATE_AVAILABLE|UPDATE_OBSOLETE|UPDATE_NEWEST|UPDATE_PROTECTED: - return "available+obsolete"; - - default: - assert_not_reached(); - } -} - static int context_show_table(Context *c) { _cleanup_(table_unrefp) Table *t = NULL; int r;