commit: 9dcbcdfd0c90d76ddbb4b4dcdd41a981441f53e2
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 28 18:35:53 2019 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Thu Feb 28 18:35:53 2019 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=9dcbcdfd
qlop: introduce machine elapsed time and standard time
Report elapsed time in short notation by default, use elaborate notation
using -H, print just seconds (previous behaviour) using -M.
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
qlop.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 54 insertions(+), 20 deletions(-)
diff --git a/qlop.c b/qlop.c
index 08ea479..d5c2548 100644
--- a/qlop.c
+++ b/qlop.c
@@ -11,12 +11,13 @@
#define QLOP_DEFAULT_LOGFILE "emerge.log"
-#define QLOP_FLAGS "ctaHmuUserd:f:w:" COMMON_FLAGS
+#define QLOP_FLAGS "ctaHMmuUserd:f:w:" COMMON_FLAGS
static struct option const qlop_long_opts[] = {
{"summary", no_argument, NULL, 'c'},
{"time", no_argument, NULL, 't'},
{"average", no_argument, NULL, 'a'},
{"human", no_argument, NULL, 'H'},
+ {"machine", no_argument, NULL, 'M'},
{"merge", no_argument, NULL, 'm'},
{"unmerge", no_argument, NULL, 'u'},
{"autoclean", no_argument, NULL, 'U'},
@@ -33,6 +34,7 @@ static const char * const qlop_opts_help[] = {
"Print time taken to complete action",
"Print average time taken to complete action",
"Print elapsed time in human readable format (use with -t or -a)",
+ "Print elapsed time as seconds with no formatting",
"Show merge history",
"Show unmerge history",
"Show autoclean unmerge history",
@@ -63,6 +65,7 @@ struct qlop_mode {
char do_average:1;
char do_summary:1;
char do_human:1;
+ char do_machine:1;
char do_endtime:1;
};
@@ -181,21 +184,28 @@ static char *fmt_date(struct qlop_mode *flags, time_t ts,
time_t te)
static char _elapsed_buf[256];
static char *fmt_elapsedtime(struct qlop_mode *flags, time_t e)
{
- if (flags->do_human) {
- time_t dd;
- time_t hh;
- time_t mm;
- time_t ss;
- size_t bufpos = 0;
-
- ss = e % 60;
- e /= 60;
- mm = e % 60;
- e /= 60;
- hh = e % 24;
- e /= 24;
- dd = e;
+ time_t dd;
+ time_t hh;
+ time_t mm;
+ time_t ss;
+ size_t bufpos = 0;
+
+ if (flags->do_machine) {
+ snprintf(_elapsed_buf, sizeof(_elapsed_buf),
+ "%s%zd%s",
+ GREEN, (size_t)e, NORM);
+ return _elapsed_buf;
+ }
+ ss = e % 60;
+ e /= 60;
+ mm = e % 60;
+ e /= 60;
+ hh = e % 24;
+ e /= 24;
+ dd = e;
+
+ if (flags->do_human) {
if (dd > 0)
bufpos += snprintf(_elapsed_buf + bufpos,
sizeof(_elapsed_buf) - bufpos,
@@ -220,8 +230,23 @@ static char *fmt_elapsedtime(struct qlop_mode *flags,
time_t e)
bufpos == 0 ? "" : ", ",
GREEN, (size_t)ss, NORM, ss == 1 ? "" :
"s");
} else {
- snprintf(_elapsed_buf, sizeof(_elapsed_buf), "%s%zd%s seconds",
- GREEN, (size_t)e, NORM);
+ hh += 24 * dd;
+ if (hh > 0) {
+ snprintf(_elapsed_buf, sizeof(_elapsed_buf),
+ "%s%zd%s:%s%02zd%s:%s%02zd%s",
+ GREEN, (size_t)hh, NORM,
+ GREEN, (size_t)mm, NORM,
+ GREEN, (size_t)ss, NORM);
+ } else if (mm > 0) {
+ snprintf(_elapsed_buf, sizeof(_elapsed_buf),
+ "%s%zd%s′%s%02zd%s″",
+ GREEN, (size_t)mm, NORM,
+ GREEN, (size_t)ss, NORM);
+ } else {
+ snprintf(_elapsed_buf, sizeof(_elapsed_buf),
+ "%s%zd%ss",
+ GREEN, (size_t)ss, NORM);
+ }
}
return _elapsed_buf;
@@ -461,7 +486,8 @@ static int do_emerge_log(
if (flags->do_time) {
printf("%s *** %s%s%s: %s\n",
fmt_date(flags,
sync_start, tstart),
- GREEN, p, NORM,
fmt_elapsedtime(flags, elapsed));
+ GREEN, p, NORM,
+ fmt_elapsedtime(flags,
elapsed));
} else {
printf("%s *** %s%s%s\n",
fmt_date(flags,
sync_start, tstart),
@@ -846,6 +872,7 @@ int qlop_main(int argc, char **argv)
m.do_average = 0;
m.do_summary = 0;
m.do_human = 0;
+ m.do_machine = 0;
m.do_endtime = 0;
while ((ret = GETOPT_LONG(QLOP, qlop, "")) != -1) {
@@ -861,6 +888,7 @@ int qlop_main(int argc, char **argv)
case 'a': m.do_average = 1; break;
case 'c': m.do_summary = 1; break;
case 'H': m.do_human = 1; break;
+ case 'M': m.do_machine = 1; break;
case 'e': m.do_endtime = 1; break;
case 'd':
if (start_time == 0) {
@@ -924,8 +952,7 @@ int qlop_main(int argc, char **argv)
m.do_sync == 0 &&
m.do_running == 0 &&
m.do_average == 0 &&
- m.do_summary == 0 &&
- m.do_human == 0
+ m.do_summary == 0
)
{
m.do_merge = 1;
@@ -951,6 +978,13 @@ int qlop_main(int argc, char **argv)
m.do_average = 0;
}
+ /* handle -H / -M conflict */
+ if (m.do_human && m.do_machine) {
+ warn("-H and -M cannot be used together, dropping -M: "
+ "only humans make mistakes");
+ m.do_machine = 0;
+ }
+
if (m.do_sync && array_cnt(atoms) > 0) {
warn("-s cannot be used when specifying atoms, dropping -s");
m.do_sync = 0;