* [gentoo-commits] proj/portage-utils:master commit in: tests/qlop/, /
@ 2018-03-31 18:31 Fabian Groffen
0 siblings, 0 replies; 2+ messages in thread
From: Fabian Groffen @ 2018-03-31 18:31 UTC (permalink / raw
To: gentoo-commits
commit: 9b91c470b01b140c71d1cad71460c63c50faa342
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 31 18:27:19 2018 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sat Mar 31 18:27:19 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=9b91c470
qlop: document and format to fit on 80 chars, some style
qlop.c | 99 +++++++++++++++++++++++++++++++-------------------
tests/qlop/aborts.log | 71 ++++++++++++++++++++++++++++++++++++
tests/qlop/list09.good | 3 ++
3 files changed, 136 insertions(+), 37 deletions(-)
diff --git a/qlop.c b/qlop.c
index c01b3be..c7ad42f 100644
--- a/qlop.c
+++ b/qlop.c
@@ -89,6 +89,7 @@ show_merge_times(char *package, const char *logfile, int average, char human_rea
count = merge_time = 0;
cat[0] = 0;
+ /* setup cat and pkg vars */
if ((p = strchr(package, '/')) != NULL) {
pkg = p + 1;
strncpy(cat, package, sizeof(cat));
@@ -103,51 +104,62 @@ show_merge_times(char *package, const char *logfile, int average, char human_rea
return 1;
}
+ /* loop over lines searching for cat/pkg */
while (fgets(buf[0], sizeof(buf[0]), fp) != NULL) {
- if (strstr(buf[0], pkg) == NULL)
- continue;
-
if ((p = strchr(buf[0], '\n')) != NULL)
- *p = 0;
+ *p = '\0';
if ((p = strchr(buf[0], ':')) == NULL)
continue;
- *p = 0;
+ *p++ = '\0';
+ if (strstr(p, pkg) == NULL)
+ continue;
+
t[0] = atol(buf[0]);
if (t[0] < start_time || t[0] > end_time)
continue;
- strcpy(buf[1], p + 1);
+
+ /* copy message (stripping timestamp) */
+ strncpy(buf[1], p, BUFSIZ);
rmspace(buf[1]);
if (strncmp(buf[1], ">>> emerge (", 12) == 0) {
+ /* construct the matching end marker */
snprintf(ep, BUFSIZ, "completed %s", &buf[1][4]);
- char matched = 0;
- if ((p = strchr(buf[1], ')')) == NULL)
+ /* skip over "(X of Y)" */
+ if ((p = strchr(buf[1], ')')) == NULL) {
+ *ep = '\0';
continue;
- *p = 0;
- strcpy(buf[0], p + 1);
+ }
+ *p++ = '\0';
+
+ /* get the package as atom */
+ strncpy(buf[0], p, BUFSIZ);
rmspace(buf[0]);
- if ((p = strchr(buf[0], ' ')) == NULL)
+ if ((p = strchr(buf[0], ' ')) == NULL) {
+ *ep = '\0';
continue;
- *p = 0;
- if ((atom = atom_explode(buf[0])) == NULL)
+ }
+ *p = '\0';
+ if ((atom = atom_explode(buf[0])) == NULL) {
+ *ep = '\0';
continue;
+ }
- if (*cat) {
- if ((strcmp(cat, atom->CATEGORY) == 0) && (strcmp(pkg, atom->PN) == 0))
- matched = 1;
- } else if (strcmp(pkg, atom->PN) == 0)
- matched = 1;
-
- if (matched) {
+ /* match atom against our search */
+ if ((*cat && ((strcmp(cat, atom->CATEGORY) == 0) &&
+ (strcmp(pkg, atom->PN) == 0))) ||
+ (strcmp(pkg, atom->PN) == 0))
+ {
parallel_emerge = 0;
while (fgets(buf[0], sizeof(buf[0]), fp) != NULL) {
if ((p = strchr(buf[0], '\n')) != NULL)
- *p = 0;
+ *p = '\0';
if ((p = strchr(buf[0], ':')) == NULL)
continue;
- *p = 0;
+ *p++ = '\0';
+
t[1] = atol(buf[0]);
- strcpy(buf[1], p + 1);
+ strcpy(buf[1], p);
rmspace(buf[1]);
if (strncmp(buf[1], "Started emerge on:", 18) == 0) {
@@ -166,19 +178,25 @@ show_merge_times(char *package, const char *logfile, int average, char human_rea
break;
}
- /*
- * pay attention to malformed log files (when the end of an emerge process
- * is not indicated by the line '*** terminating'). We assume than the log is
- * malformed when we find a parallel emerge process which is trying to
- * emerge the same package
+ /* pay attention to malformed log files (when the
+ * end of an emerge process is not indicated by the
+ * line '*** terminating'). We assume than the log
+ * is malformed when we find a parallel emerge
+ * process which is trying to emerge the same
+ * package
*/
- if (strncmp(buf[1], ">>> emerge (", 12) == 0 && parallel_emerge > 0) {
+ if (strncmp(buf[1], ">>> emerge (", 12) == 0 &&
+ parallel_emerge > 0)
+ {
+ /* find package name */
p = strchr(buf[1], ')');
q = strchr(ep, ')');
if (!p || !q)
continue;
- if (!strcmp(p, q)) {
+ /* is this emerge doing the same thing as we're
+ * looking for? that means we failed */
+ if (strcmp(p, q) == 0) {
parallel_emerge--;
/* update the main emerge reference data */
snprintf(ep, BUFSIZ, "completed %s", &buf[1][4]);
@@ -186,21 +204,28 @@ show_merge_times(char *package, const char *logfile, int average, char human_rea
}
}
- if (strncmp(&buf[1][4], ep, BUFSIZ) == 0) {
+ /* if this line matches "completed emerge (X of Y) ..."
+ * we're finally somewhere */
+ if (strncmp(&buf[1][4], ep, BUFSIZ - 4) == 0) {
if (!average) {
- strcpy(buf[1], "");
+ buf[1][0] = '\0';
if (verbose) {
if (atom->PR_int)
- snprintf(buf[1], sizeof(buf[1]), "-%s-r%i", atom->PV, atom->PR_int);
+ snprintf(buf[1], sizeof(buf[1]),
+ "-%s-r%i", atom->PV, atom->PR_int);
else
- snprintf(buf[1], sizeof(buf[1]), "-%s", atom->PV);
+ snprintf(buf[1], sizeof(buf[1]),
+ "-%s", atom->PV);
}
- printf("%s%s%s%s: %s: ", BLUE, atom->PN, buf[1], NORM, chop_ctime(t[0]));
+ printf("%s%s%s%s: %s: ",
+ BLUE, atom->PN, buf[1], NORM,
+ chop_ctime(t[0]));
if (human_readable)
print_seconds_for_earthlings(t[1] - t[0]);
else
- printf("%s%"PRIu64"%s seconds", GREEN, (uint64_t)(t[1] - t[0]), NORM);
- puts("");
+ printf("%s%"PRIu64"%s seconds",
+ GREEN, (uint64_t)(t[1] - t[0]), NORM);
+ printf("\n");
}
merge_time += (t[1] - t[0]);
count++;
diff --git a/tests/qlop/aborts.log b/tests/qlop/aborts.log
new file mode 100644
index 0000000..1808cc6
--- /dev/null
+++ b/tests/qlop/aborts.log
@@ -0,0 +1,71 @@
+1364819649: >>> emerge (6 of 12) sys-devel/automake-1.11.6 to /
+1364819649: === (6 of 12) Cleaning (sys-devel/automake-1.11.6::/usr/portage/sys-devel/automake/automake-1.11.6.ebuild)
+1364819649: === (6 of 12) Compiling/Merging (sys-devel/automake-1.11.6::/usr/portage/sys-devel/automake/automake-1.11.6.ebuild)
+1364822878: === (6 of 12) Merging (sys-devel/automake-1.11.6::/usr/portage/sys-devel/automake/automake-1.11.6.ebuild)
+1364822879: >>> AUTOCLEAN: sys-devel/automake:1.11
+1364822879: === Unmerging... (sys-devel/automake-1.11.6)
+1364822879: >>> unmerge success: sys-devel/automake-1.11.6
+1364822881: === (6 of 12) Post-Build Cleaning (sys-devel/automake-1.11.6::/usr/portage/sys-devel/automake/automake-1.11.6.ebuild)
+1364822881: ::: completed emerge (6 of 12) sys-devel/automake-1.11.6 to /
+1364822881: >>> emerge (7 of 12) sys-devel/automake-1.9.6-r3 to /
+1364822881: === (7 of 12) Cleaning (sys-devel/automake-1.9.6-r3::/usr/portage/sys-devel/automake/automake-1.9.6-r3.ebuild)
+1364822881: === (7 of 12) Compiling/Merging (sys-devel/automake-1.9.6-r3::/usr/portage/sys-devel/automake/automake-1.9.6-r3.ebuild)
+1364823762: Started emerge on: Apr 01, 2013 15:42:41
+1364823762: *** emerge --update --verbose --rebuild-if-new-rev --newuse --complete-graph --with-bdeps=y --deep world
+1364823859: >>> emerge (1 of 3) app-arch/libarchive-3.1.2-r1 to /
+1364823859: === (1 of 3) Cleaning (app-arch/libarchive-3.1.2-r1::/usr/portage/app-arch/libarchive/libarchive-3.1.2-r1.ebuild)
+1364823860: === (1 of 3) Compiling/Merging (app-arch/libarchive-3.1.2-r1::/usr/portage/app-arch/libarchive/libarchive-3.1.2-r1.ebuild)
+1364823988: === (1 of 3) Merging (app-arch/libarchive-3.1.2-r1::/usr/portage/app-arch/libarchive/libarchive-3.1.2-r1.ebuild)
+1364823989: >>> AUTOCLEAN: app-arch/libarchive:0
+1364823989: === Unmerging... (app-arch/libarchive-3.0.4-r1)
+1364823991: >>> unmerge success: app-arch/libarchive-3.0.4-r1
+1364823992: === (1 of 3) Post-Build Cleaning (app-arch/libarchive-3.1.2-r1::/usr/portage/app-arch/libarchive/libarchive-3.1.2-r1.ebuild)
+1364823992: ::: completed emerge (1 of 3) app-arch/libarchive-3.1.2-r1 to /
+1364823992: >>> emerge (2 of 3) app-emulation/winetricks-947 to /
+1364823992: === (2 of 3) Cleaning (app-emulation/winetricks-947::/usr/portage/app-emulation/winetricks/winetricks-947.ebuild)
+1364823992: === (2 of 3) Compiling/Merging (app-emulation/winetricks-947::/usr/portage/app-emulation/winetricks/winetricks-947.ebuild)
+1364823995: === (2 of 3) Merging (app-emulation/winetricks-947::/usr/portage/app-emulation/winetricks/winetricks-947.ebuild)
+1364823996: >>> AUTOCLEAN: app-emulation/winetricks:0
+1364823996: === Unmerging... (app-emulation/winetricks-941)
+1364823996: >>> unmerge success: app-emulation/winetricks-941
+1364823997: === (2 of 3) Post-Build Cleaning (app-emulation/winetricks-947::/usr/portage/app-emulation/winetricks/winetricks-947.ebuild)
+1364823997: ::: completed emerge (2 of 3) app-emulation/winetricks-947 to /
+1364823997: >>> emerge (3 of 3) dev-util/cmake-2.8.9 to /
+1364823997: === (3 of 3) Cleaning (dev-util/cmake-2.8.9::/usr/portage/dev-util/cmake/cmake-2.8.9.ebuild)
+1364823997: === (3 of 3) Compiling/Merging (dev-util/cmake-2.8.9::/usr/portage/dev-util/cmake/cmake-2.8.9.ebuild)
+1364824573: === (3 of 3) Merging (dev-util/cmake-2.8.9::/usr/portage/dev-util/cmake/cmake-2.8.9.ebuild)
+1364824576: >>> AUTOCLEAN: dev-util/cmake:0
+1364824576: === Unmerging... (dev-util/cmake-2.8.9)
+1364824577: >>> unmerge success: dev-util/cmake-2.8.9
+1364824578: === (3 of 3) Post-Build Cleaning (dev-util/cmake-2.8.9::/usr/portage/dev-util/cmake/cmake-2.8.9.ebuild)
+1364824578: ::: completed emerge (3 of 3) dev-util/cmake-2.8.9 to /
+1364824578: *** Finished. Cleaning up...
+1364824580: *** exiting successfully.
+1364824580: *** terminating.
+1368795479: Started emerge on: May 17, 2013 14:57:59
+1368795479: *** emerge --update --verbose --rebuild-if-new-rev --newuse --complete-graph --with-bdeps=y --deep world
+1368795519: >>> emerge (1 of 2) sys-devel/automake-1.9.6-r3 to /
+1368795519: === (1 of 2) Cleaning (sys-devel/automake-1.9.6-r3::/usr/portage/sys-devel/automake/automake-1.9.6-r3.ebuild)
+1368795519: === (1 of 2) Compiling/Merging (sys-devel/automake-1.9.6-r3::/usr/portage/sys-devel/automake/automake-1.9.6-r3.ebuild)
+1368796964: === (1 of 2) Merging (sys-devel/automake-1.9.6-r3::/usr/portage/sys-devel/automake/automake-1.9.6-r3.ebuild)
+1368796965: >>> AUTOCLEAN: sys-devel/automake:1.9
+1368796966: === (1 of 2) Post-Build Cleaning (sys-devel/automake-1.9.6-r3::/usr/portage/sys-devel/automake/automake-1.9.6-r3.ebuild)
+1368796966: ::: completed emerge (1 of 2) sys-devel/automake-1.9.6-r3 to /
+1368796966: >>> emerge (2 of 2) app-mobilephone/obexftp-0.23-r1 to /
+1368796966: === (2 of 2) Cleaning (app-mobilephone/obexftp-0.23-r1::/usr/portage/app-mobilephone/obexftp/obexftp-0.23-r1.ebuild)
+1368796966: === (2 of 2) Compiling/Merging (app-mobilephone/obexftp-0.23-r1::/usr/portage/app-mobilephone/obexftp/obexftp-0.23-r1.ebuild)
+1368796985: === (2 of 2) Merging (app-mobilephone/obexftp-0.23-r1::/usr/portage/app-mobilephone/obexftp/obexftp-0.23-r1.ebuild)
+1368796986: >>> AUTOCLEAN: app-mobilephone/obexftp:0
+1368796986: === Unmerging... (app-mobilephone/obexftp-0.23-r1)
+1368796987: >>> unmerge success: app-mobilephone/obexftp-0.23-r1
+1368796988: === (2 of 2) Post-Build Cleaning (app-mobilephone/obexftp-0.23-r1::/usr/portage/app-mobilephone/obexftp/obexftp-0.23-r1.ebuild)
+1368796988: ::: completed emerge (2 of 2) app-mobilephone/obexftp-0.23-r1 to /
+1368796988: *** Finished. Cleaning up...
+1368796990: *** exiting successfully.
+1368796990: *** terminating.
+1368799175: Started emerge on: May 17, 2013 15:59:35
+1368799175: *** emerge --oneshot automake:1.12 automake:1.11 automake:1.9 libtool:2 binutils glibc:2.2 gcc:4.6
+1368799182: >>> emerge (1 of 7) sys-devel/automake-1.12.6 to /
+1368799182: === (1 of 7) Cleaning (sys-devel/automake-1.12.6::/usr/portage/sys-devel/automake/automake-1.12.6.ebuild)
+1368799183: === (1 of 7) Compiling/Merging (sys-devel/automake-1.12.6::/usr/portage/sys-devel/automake/automake-1.12.6.ebuild)
+1368799266: *** terminating.
diff --git a/tests/qlop/list09.good b/tests/qlop/list09.good
new file mode 100644
index 0000000..333d7ad
--- /dev/null
+++ b/tests/qlop/list09.good
@@ -0,0 +1,3 @@
+automake-1.11.6: Mon Apr 1 12:34:09 2013: 53 minutes, 52 seconds
+automake-1.9.6-r3: Fri May 17 12:58:39 2013: 24 minutes, 7 seconds
+automake: 2 times
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] proj/portage-utils:master commit in: tests/qlop/, /
@ 2019-12-27 20:42 Fabian Groffen
0 siblings, 0 replies; 2+ messages in thread
From: Fabian Groffen @ 2019-12-27 20:42 UTC (permalink / raw
To: gentoo-commits
commit: 1e5b2c8d3fb58335990e411af98498f249b54980
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 27 20:38:44 2019 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Dec 27 20:38:44 2019 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=1e5b2c8d
qlop: some changes to -r (running) mode
- warn when qlop needs to defer to log heuristics (#701968)
- print running packages most recent first
- suppress identical running packages (#701392)
- ignore batches in emerge.log that appear to be backwards in time
Bug: https://bugs.gentoo.org/701968
Bug: https://bugs.gentoo.org/701392
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
qlop.c | 50 +++++++++++++++++++++++++++++++++++++++++++-------
tests/qlop/list01.good | 2 +-
tests/qlop/list10.good | 4 ++--
tests/qlop/sync.log | 12 ++++++------
4 files changed, 52 insertions(+), 16 deletions(-)
diff --git a/qlop.c b/qlop.c
index 7cc8f44..634431a 100644
--- a/qlop.c
+++ b/qlop.c
@@ -371,6 +371,7 @@ static int do_emerge_log(
char *p;
char *q;
time_t tstart = LONG_MAX;
+ time_t tlast = tbegin;
time_t tstart_emerge = 0;
time_t last_merge = 0;
time_t sync_start = 0;
@@ -531,6 +532,9 @@ static int do_emerge_log(
}
tstart = atol(buf);
+ if (tstart < tlast)
+ continue;
+ tlast = tstart;
if (tstart < tbegin || tstart > tend)
continue;
@@ -845,6 +849,7 @@ static int do_emerge_log(
fclose(fp);
if (flags->do_running) {
time_t cutofftime;
+ set *pkgs_seen = create_set();
tstart = time(NULL);
@@ -856,7 +861,8 @@ static int do_emerge_log(
/* can't report endtime for non-finished operations */
flags->do_endtime = 0;
- sync_time /= sync_cnt;
+ if (sync_time > 0)
+ sync_time /= sync_cnt;
if (sync_start >= cutofftime) {
elapsed = tstart - sync_start;
if (elapsed >= sync_time)
@@ -876,9 +882,10 @@ static int do_emerge_log(
fmt_elapsedtime(flags, sync_time - elapsed));
}
}
- array_for_each(merge_matches, i, pkgw) {
+ array_for_each_rev(merge_matches, i, pkgw) {
time_t maxtime = 0;
bool isMax = false;
+ bool notseen;
if (pkgw->tbegin < cutofftime)
continue;
@@ -886,6 +893,11 @@ static int do_emerge_log(
snprintf(afmt, sizeof(afmt), "%s/%s",
pkgw->atom->CATEGORY, pkgw->atom->PN);
+ /* eliminate dups, bug #701392 */
+ add_set_unique(afmt, pkgs_seen, ¬seen);
+ if (!notseen)
+ continue;
+
elapsed = tstart - pkgw->tbegin;
pkg = get_set(afmt, merge_averages);
if (pkg != NULL) {
@@ -923,9 +935,11 @@ static int do_emerge_log(
maxtime > 0 && verbose ?
isMax ? " (longest run)" : " (average run)" : "");
}
+ clear_set(pkgs_seen);
array_for_each(unmerge_matches, i, pkgw) {
time_t maxtime = 0;
bool isMax = false;
+ bool notseen;
if (pkgw->tbegin < cutofftime)
continue;
@@ -933,6 +947,11 @@ static int do_emerge_log(
snprintf(afmt, sizeof(afmt), "%s/%s",
pkgw->atom->CATEGORY, pkgw->atom->PN);
+ /* eliminate dups, bug #701392 */
+ add_set_unique(afmt, pkgs_seen, ¬seen);
+ if (!notseen)
+ continue;
+
elapsed = tstart - pkgw->tbegin;
pkg = get_set(afmt, unmerge_averages);
if (pkg != NULL) {
@@ -959,6 +978,7 @@ static int do_emerge_log(
maxtime > 0 && verbose ?
isMax ? " (longest run)" : " (average run)" : "");
}
+ free_set(pkgs_seen);
} else if (flags->do_average) {
size_t total_merges = 0;
size_t total_unmerges = 0;
@@ -1135,9 +1155,22 @@ static array_t *probe_proc(array_t *atoms)
scandir_free(procs, procslen);
} else {
/* flag /proc doesn't exist */
+ warn("/proc doesn't exist, running merges are based on heuristics");
return NULL;
}
+ if (array_cnt(ret_atoms) == 0) {
+ /* if we didn't find anything, this is either because nothing is
+ * running, or because we didn't have appropriate permissions --
+ * try to figure out which of the two is it (there is no good
+ * way) */
+ if (geteuid() != 0) {
+ warn("insufficient privileges for full /proc access, "
+ "running merges are based on heuristics");
+ return NULL;
+ }
+ }
+
if (array_cnt(atoms) > 0) {
size_t j;
depend_atom *atomr;
@@ -1351,12 +1384,15 @@ int qlop_main(int argc, char **argv)
}
if (m.do_running) {
- array_t *new_atoms = probe_proc(atoms);
+ array_t *new_atoms = NULL;
+
+ if (runningmode > 1) {
+ warn("running without /proc scanning, heuristics only");
+ } else {
+ new_atoms = probe_proc(atoms);
+ }
- if (runningmode > 1 || new_atoms == NULL) {
- warn("/proc not available, deducing running "
- "merges from emerge.log");
- } else if (array_cnt(new_atoms) == 0) {
+ if (new_atoms != NULL && array_cnt(new_atoms) == 0) {
/* proc supported, found nothing running */
start_time = LONG_MAX;
}
diff --git a/tests/qlop/list01.good b/tests/qlop/list01.good
index 2689952..c923b2f 100644
--- a/tests/qlop/list01.good
+++ b/tests/qlop/list01.good
@@ -1,2 +1,2 @@
-2005-01-27T05:35:03 *** rsync://192.168.0.5/gentoo-portage
+2005-05-22T23:21:43 *** rsync://192.168.0.5/gentoo-portage
2015-05-16T08:20:02 *** gentoo
diff --git a/tests/qlop/list10.good b/tests/qlop/list10.good
index 348992a..52b4fd3 100644
--- a/tests/qlop/list10.good
+++ b/tests/qlop/list10.good
@@ -1,3 +1,3 @@
-1568982460 >>> dev-qt/qtmultimedia... (96 of 129) ETA: unknown
-1568996270 >>> kde-frameworks/kxmlgui... (98 of 129) ETA: unknown
1568996308 >>> net-analyzer/wireshark... (99 of 129) ETA: unknown
+1568996270 >>> kde-frameworks/kxmlgui... (98 of 129) ETA: unknown
+1568982460 >>> dev-qt/qtmultimedia... (96 of 129) ETA: unknown
diff --git a/tests/qlop/sync.log b/tests/qlop/sync.log
index 8979b23..24e1074 100644
--- a/tests/qlop/sync.log
+++ b/tests/qlop/sync.log
@@ -44,12 +44,12 @@
1106806630: *** exiting successfully.
1106806630: *** terminating.
-1106804103: Started emerge on: Jan 27, 2005 05:35:03
-1106804103: *** emerge sync
-1106804103: === sync
-1106804103: >>> starting rsync with rsync://192.168.0.5/gentoo-portage
-1106804537: === Sync completed with rsync://192.168.0.5/gentoo-portage
-1106804538: *** terminating.
+1116804103: Started emerge on: Jan 27, 2005 05:35:03
+1116804103: *** emerge sync
+1116804103: === sync
+1116804103: >>> starting rsync with rsync://192.168.0.5/gentoo-portage
+1116804537: === Sync completed with rsync://192.168.0.5/gentoo-portage
+1116804538: *** terminating.
1431764402: Started emerge on: May 16, 2015 04:20:01
1431764402: *** emerge --quiet --keep-going --verbose --nospinner --oneshot --quiet-build=n --sync
1431764402: === sync
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-12-27 20:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-31 18:31 [gentoo-commits] proj/portage-utils:master commit in: tests/qlop/, / Fabian Groffen
-- strict thread matches above, loose matches on Subject: below --
2019-12-27 20:42 Fabian Groffen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox