public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Frysinger" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage-utils:master commit in: /
Date: Tue, 19 May 2015 17:37:23 +0000 (UTC)	[thread overview]
Message-ID: <1432052225.357a4c2d329ccf46cddb96e07c9308105e977fd3.vapier@gentoo> (raw)

commit:     357a4c2d329ccf46cddb96e07c9308105e977fd3
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Tue May 19 16:17:05 2015 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Tue May 19 16:17:05 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=357a4c2d

cache: rework and move to /var/cache/edb

Since we want the portdir to be read-only when possible, move our
cache files to /var/cache/edb.  This means the cache regeneration
logic isn't as robust (as we can't rely on rsync deleting it), but
so be it.  We can see about improving this in the future.

URL: https://bugs.gentoo.org/548052
Reported-by: Martin Väth <martin <AT> mvath.de>

 main.c    | 125 ++++++++++++++++++++++++++++----------------------------------
 qcache.c  |  14 +------
 qglsa.c   |  16 +++++---
 qsearch.c |   2 +-
 4 files changed, 69 insertions(+), 88 deletions(-)

diff --git a/main.c b/main.c
index 51c48aa..d127621 100644
--- a/main.c
+++ b/main.c
@@ -35,6 +35,7 @@ char reinitialize_metacache = 0;
 static char *portdir;
 static char *portarch;
 static char *portvdb;
+static char *portedb;
 const char portcachedir_pms[] = "metadata/cache";
 const char portcachedir_md5[] = "metadata/md5-cache";
 static char *portroot;
@@ -698,6 +699,7 @@ void initialize_portage_env(void)
 		_Q_EVS(STR,  PORTAGE_TMPDIR,      port_tmpdir,         CONFIG_EPREFIX "var/tmp/portage/")
 		_Q_EVS(STR,  PKGDIR,              pkgdir,              CONFIG_EPREFIX "usr/portage/packages/")
 		_Q_EVS(STR,  Q_VDB,               portvdb,             CONFIG_EPREFIX "var/db/pkg")
+		_Q_EVS(STR,  Q_EDB,               portedb,             CONFIG_EPREFIX "var/cache/edb")
 		{ NULL, 0, _Q_BOOL, { NULL }, 0, NULL, }
 
 #undef _Q_EV
@@ -846,92 +848,83 @@ int filter_hidden(const struct dirent *dentry)
 	return 1;
 }
 
-#define CACHE_EBUILD_FILE (getenv("CACHE_EBUILD_FILE") ? getenv("CACHE_EBUILD_FILE") : ".ebuild.x")
-#define CACHE_METADATA_FILE ".metadata.x"
-const char *initialize_flat(int cache_type);
-const char *initialize_flat(int cache_type)
+static const char *
+initialize_flat(int cache_type, bool force)
 {
 	struct dirent **category, **pn, **eb;
 	struct stat st;
 	struct timeval start, finish;
-	static const char *cache_file;
-	const char *portcachedir_actual;
+	char *cache_file;
 	char *p;
-	int a, b, c, d, e, i;
+	int i;
 	int frac, secs, count;
 	FILE *fp;
 
-	a = b = c = d = e = i = 0;
 	count = frac = secs = 0;
 
-	cache_file = (cache_type == CACHE_EBUILD ? CACHE_EBUILD_FILE : CACHE_METADATA_FILE);
-
-	if (chdir(portdir) != 0) {
-		warnp("chdir to PORTDIR '%s' failed", portdir);
-		goto ret;
-	}
+	int portdir_fd, subdir_fd;
+	portdir_fd = open(portdir, O_RDONLY|O_CLOEXEC|O_PATH);
 
 	if (cache_type == CACHE_METADATA) {
-		if (chdir(portcachedir_md5) == 0) {
-			portcachedir_type = CACHE_METADATA_MD5;
-			portcachedir_actual = portcachedir_md5;
-		} else if (chdir(portcachedir_pms) == 0) {
+		subdir_fd = openat(portdir_fd, portcachedir_md5, O_RDONLY|O_CLOEXEC);
+		if (subdir_fd == -1) {
+			subdir_fd = openat(portdir_fd, portcachedir_pms, O_RDONLY|O_CLOEXEC);
+			if (subdir_fd == -1) {
+				warnp("could not read md5 or pms cache dirs in %s", portdir);
+				goto ret;
+			}
 			portcachedir_type = CACHE_METADATA_PMS;
-			portcachedir_actual = portcachedir_pms;
-		} else {
-			warnp("chdir to portage cache '%s/%s' or '%s/%s' failed", portdir, portcachedir_md5, portdir, portcachedir_pms);
-			goto ret;
-		}
-	}
+		} else
+			portcachedir_type = CACHE_METADATA_MD5;
+	} else
+		subdir_fd = portdir_fd;
+	xasprintf(&cache_file, "%s/dep/%s/%s", portedb, portdir,
+		(cache_type == CACHE_EBUILD ? ".ebuild.x" : ".metadata.x"));
 
-	if (stat(cache_file, &st) != -1)
+	if (stat(cache_file, &st) != -1) {
 		if (st.st_size == 0)
 			unlink(cache_file);
-
-	/* assuming --sync is used with --delete this will get recreated after every merge */
-	if (access(cache_file, R_OK) == 0)
+	} else if (!force) {
+		/* assuming --sync is used with --delete this will get recreated after every merge */
 		goto ret;
+	}
 	if (!quiet)
 		warn("Updating ebuild %scache ... ", cache_type == CACHE_EBUILD ? "" : "meta");
 
-	unlink(cache_file);
-	if (errno != ENOENT) {
-		warnfp("unlinking '%s/%s' failed", portdir, cache_file);
-		goto ret;
-	}
-
-	if ((fp = fopen(cache_file, "w")) == NULL) {
-		if (cache_type == CACHE_EBUILD)
-			warnfp("opening '%s/%s' failed", portdir, cache_file);
-		else
-			warnfp("opening '%s/%s/%s' failed", portdir, portcachedir_actual, cache_file);
+	if ((fp = fopen(cache_file, "we")) == NULL) {
+		warnfp("opening cache failed: %s", cache_file);
 		if (errno == EACCES)
 			warnf("You should run this command as root: q -%c",
-					cache_type == CACHE_EBUILD ? 'r' : 'm');
+				cache_type == CACHE_EBUILD ? 'r' : 'm');
 		goto ret;
 	}
 
 	gettimeofday(&start, NULL);
 
-	if ((a = scandir(".", &category, q_vdb_filter_cat, alphasort)) < 0)
+	int cat_cnt;
+	cat_cnt = scandirat(subdir_fd, ".", &category, q_vdb_filter_cat, alphasort);
+	if (cat_cnt < 0)
 		goto ret;
 
-	for (i = 0; i < a; i++) {
-		stat(category[i]->d_name, &st);
+	for (i = 0; i < cat_cnt; i++) {
+		if (fstatat(subdir_fd, category[i]->d_name, &st, 0))
+			continue;
 		if (!S_ISDIR(st.st_mode))
 			continue;
 		if (strchr(category[i]->d_name, '-') == NULL)
 			if (strncmp(category[i]->d_name, "virtual", 7) != 0)
 				continue;
 
-		if ((b = scandir(category[i]->d_name, &pn, q_vdb_filter_pkg, alphasort)) < 0)
+		int c, pkg_cnt;
+		pkg_cnt = scandirat(subdir_fd, category[i]->d_name, &pn, q_vdb_filter_pkg, alphasort);
+		if (pkg_cnt < 0)
 			continue;
-		for (c = 0; c < b; c++) {
+		for (c = 0; c < pkg_cnt; c++) {
 			char de[_Q_PATH_MAX];
 
 			snprintf(de, sizeof(de), "%s/%s", category[i]->d_name, pn[c]->d_name);
 
-			if (stat(de, &st) < 0)
+			if (fstatat(subdir_fd, de, &st, 0) < 0)
 				continue;
 
 			switch (cache_type) {
@@ -943,24 +936,25 @@ const char *initialize_flat(int cache_type)
 				if (S_ISREG(st.st_mode))
 					fprintf(fp, "%s\n", de);
 				continue;
-				break;
 			}
-			if ((e = scandir(de, &eb, filter_hidden, alphasort)) < 0)
+
+			int e, ebuild_cnt;
+			ebuild_cnt = scandirat(subdir_fd, de, &eb, filter_hidden, alphasort);
+			if (ebuild_cnt < 0)
 				continue;
-			for (d = 0; d < e; d++) {
-				if ((p = strrchr(eb[d]->d_name, '.')) != NULL)
+			for (e = 0; e < ebuild_cnt; ++e) {
+				if ((p = strrchr(eb[e]->d_name, '.')) != NULL)
 					if (strcmp(p, ".ebuild") == 0) {
 						count++;
-						fprintf(fp, "%s/%s/%s\n", category[i]->d_name, pn[c]->d_name, eb[d]->d_name);
+						fprintf(fp, "%s/%s\n", de, eb[e]->d_name);
 					}
 			}
-			while (d--) free(eb[d]);
-			free(eb);
+			scandir_free(eb, ebuild_cnt);
 		}
-		scandir_free(pn, b);
+		scandir_free(pn, pkg_cnt);
 	}
 	fclose(fp);
-	scandir_free(category, a);
+	scandir_free(category, cat_cnt);
 
 	if (quiet) goto ret;
 
@@ -978,27 +972,20 @@ const char *initialize_flat(int cache_type)
 	if (secs > 120)
 		warn("You should consider using the noatime mount option for PORTDIR='%s' if it's not already enabled", portdir);
 ret:
+	close(subdir_fd);
+	if (subdir_fd != portdir_fd)
+		close(portdir_fd);
 	return cache_file;
 }
-#define initialize_ebuild_flat() initialize_flat(CACHE_EBUILD)
-#define initialize_metadata_flat() initialize_flat(CACHE_METADATA)
-
-void reinitialize_ebuild_flat(void)
-{
-	if (chdir(portdir) != 0) {
-		warnp("chdir to PORTDIR '%s' failed", portdir);
-		return;
-	}
-	unlink(CACHE_EBUILD_FILE);
-	initialize_ebuild_flat();
-}
+#define initialize_ebuild_flat() initialize_flat(CACHE_EBUILD, false)
+#define initialize_metadata_flat() initialize_flat(CACHE_METADATA, false)
 
 void reinitialize_as_needed(void)
 {
 	if (reinitialize)
-		reinitialize_ebuild_flat();
+		initialize_flat(CACHE_EBUILD, true);
 	if (reinitialize_metacache)
-		initialize_metadata_flat();
+		initialize_flat(CACHE_METADATA, true);
 }
 
 typedef struct {

diff --git a/qcache.c b/qcache.c
index d0bab3b..0968d33 100644
--- a/qcache.c
+++ b/qcache.c
@@ -47,13 +47,6 @@ static const char * const qcache_opts_help[] = {
 #define qcache_usage(ret) usage(ret, QCACHE_FLAGS, qcache_long_opts, qcache_opts_help, lookup_applet_idx("qcache"))
 
 /********************************************************************/
-/* Constants                                                        */
-/********************************************************************/
-
-/* TODO: allow the user to override this value if s/he wishes */
-#define QCACHE_EDB "/var/cache/edb/dep"
-
-/********************************************************************/
 /* Structs                                                          */
 /********************************************************************/
 
@@ -512,7 +505,7 @@ int qcache_traverse(void (*func)(qcache_data*))
 	int i, j, k, len, num_cat, num_pkg, num_ebuild;
 	struct dirent **categories, **packages, **ebuilds;
 
-	xasprintf(&catpath, "%s%s", QCACHE_EDB, portdir);
+	xasprintf(&catpath, "%s/dep/%s", portedb, portdir);
 
 	if (-1 == (num_cat = scandir(catpath, &categories, qcache_file_select, alphasort))) {
 		errp("%s", catpath);
@@ -754,11 +747,8 @@ void qcache_stats(qcache_data *data)
 	if (!numpkg) {
 		struct dirent **categories;
 		char *catpath;
-		int len;
 
-		len = sizeof(char) * (strlen(QCACHE_EDB) + strlen(portdir) + 1);
-		catpath = xzalloc(len);
-		snprintf(catpath, len, "%s%s", QCACHE_EDB, portdir);
+		xasprintf(&catpath, "%s/dep/%s", portedb, portdir);
 
 		if (-1 == (numcat = scandir(catpath, &categories, qcache_file_select, alphasort))) {
 			errp("%s", catpath);

diff --git a/qglsa.c b/qglsa.c
index 328bbd8..7fba5c7 100644
--- a/qglsa.c
+++ b/qglsa.c
@@ -8,8 +8,6 @@
 
 #ifdef APPLET_qglsa
 
-#define QGLSA_DB "/var/cache/edb/glsa"
-
 #define QGLSA_FLAGS "ldtpfi" COMMON_FLAGS
 static struct option const qglsa_long_opts[] = {
 	{"list",      no_argument, NULL, 'l'},
@@ -34,19 +32,25 @@ static const char * const qglsa_opts_help[] = {
 static char *qglsa_load_list(void);
 static char *qglsa_load_list(void)
 {
-	char *ret = NULL;
+	char *file, *ret = NULL;
 	size_t size = 0;
-	eat_file(QGLSA_DB, &ret, &size);
+	xasprintf(&file, "%s/glsa", portedb);
+	eat_file(file, &ret, &size);
+	free(file);
 	return ret;
 }
 static void qglsa_append_to_list(const char *glsa);
 static void qglsa_append_to_list(const char *glsa)
 {
+	char *file;
 	FILE *f;
-	if ((f = fopen(QGLSA_DB, "a")) != NULL) {
-		fprintf(f, "%s\n", glsa);
+	xasprintf(&file, "%s/glsa", portedb);
+	if ((f = fopen(file, "a")) != NULL) {
+		fputs(glsa, f);
+		fputc('\n', f);
 		fclose(f);
 	}
+	free(file);
 }
 
 static void qglsa_decode_entities(char *xml_buf, size_t len);

diff --git a/qsearch.c b/qsearch.c
index e1285a3..ce36df2 100644
--- a/qsearch.c
+++ b/qsearch.c
@@ -88,7 +88,7 @@ int qsearch_main(int argc, char **argv)
 	}
 #endif
 	last[0] = 0;
-	fp = fopen(initialize_flat(search_cache), "r");
+	fp = fopen(initialize_flat(search_cache, false), "r");
 	if (!fp)
 		return 1;
 


             reply	other threads:[~2015-05-19 17:37 UTC|newest]

Thread overview: 593+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-19 17:37 Mike Frysinger [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-12-02  7:26 [gentoo-commits] proj/portage-utils:master commit in: / Fabian Groffen
2024-07-03 19:44 Fabian Groffen
2024-06-28 19:51 Fabian Groffen
2024-06-27 19:19 Fabian Groffen
2024-04-20 13:05 Fabian Groffen
2024-03-29 11:22 Fabian Groffen
2024-03-29 10:58 Fabian Groffen
2024-03-29 10:57 Fabian Groffen
2024-01-02 13:16 Fabian Groffen
2024-01-02 13:16 Fabian Groffen
2024-01-02  7:57 Fabian Groffen
2024-01-01 10:37 Fabian Groffen
2023-12-20 21:32 Mike Frysinger
2023-07-18  6:28 Fabian Groffen
2023-07-18  6:28 Fabian Groffen
2023-04-21 19:11 Fabian Groffen
2023-03-01 21:00 Fabian Groffen
2023-02-22 20:06 Fabian Groffen
2023-02-07  8:10 Fabian Groffen
2022-12-15  9:13 Fabian Groffen
2022-12-15  9:03 Fabian Groffen
2022-12-15  9:03 Fabian Groffen
2022-11-16  8:59 Fabian Groffen
2022-08-29  8:44 Fabian Groffen
2022-08-29  8:44 Fabian Groffen
2022-08-28 12:26 Fabian Groffen
2022-08-28 12:26 Fabian Groffen
2022-06-14  6:36 Fabian Groffen
2022-05-26 14:53 Fabian Groffen
2022-05-20 17:15 Fabian Groffen
2022-04-06 19:31 Fabian Groffen
2022-02-27 12:29 Fabian Groffen
2022-02-23 11:57 Fabian Groffen
2022-02-23 11:57 Fabian Groffen
2022-02-12 18:31 Fabian Groffen
2022-02-12 18:31 Fabian Groffen
2022-02-12 18:31 Fabian Groffen
2022-02-12 17:13 Fabian Groffen
2022-02-12 17:13 Fabian Groffen
2022-02-12 17:13 Fabian Groffen
2022-02-12 17:13 Fabian Groffen
2022-02-12 17:13 Fabian Groffen
2022-02-12 16:14 Fabian Groffen
2022-02-07  7:16 Fabian Groffen
2022-02-06 15:21 Fabian Groffen
2022-02-06 14:51 Fabian Groffen
2022-02-06 14:29 Fabian Groffen
2022-02-06 14:29 Fabian Groffen
2022-01-31  8:01 Fabian Groffen
2021-12-31 15:36 Fabian Groffen
2021-12-31 15:36 Fabian Groffen
2021-12-31 15:36 Fabian Groffen
2021-12-29 12:20 Fabian Groffen
2021-12-27 18:13 Fabian Groffen
2021-12-26 13:59 Fabian Groffen
2021-12-25  9:15 Fabian Groffen
2021-12-23 12:55 Fabian Groffen
2021-12-21 11:30 Fabian Groffen
2021-12-13  8:39 Fabian Groffen
2021-12-13  8:39 Fabian Groffen
2021-12-13  8:39 Fabian Groffen
2021-11-13 14:27 Fabian Groffen
2021-11-13 14:27 Fabian Groffen
2021-11-07 10:53 Fabian Groffen
2021-10-09 12:03 Fabian Groffen
2021-10-03 11:15 Fabian Groffen
2021-10-03  8:54 Fabian Groffen
2021-09-27 18:14 Fabian Groffen
2021-07-06  6:43 Fabian Groffen
2021-07-05  8:40 Fabian Groffen
2021-07-01 10:07 Fabian Groffen
2021-07-01 10:05 Fabian Groffen
2021-06-30  6:26 Fabian Groffen
2021-06-24  6:44 Fabian Groffen
2021-06-23  7:14 Fabian Groffen
2021-06-21 20:04 Fabian Groffen
2021-06-17  6:27 Fabian Groffen
2021-06-16 20:11 Fabian Groffen
2021-06-16 19:21 Fabian Groffen
2021-06-16 19:21 Fabian Groffen
2021-06-16 19:21 Fabian Groffen
2021-06-16 19:21 Fabian Groffen
2021-06-16 19:21 Fabian Groffen
2021-06-16 19:21 Fabian Groffen
2021-06-16 19:19 Fabian Groffen
2021-06-01 19:43 Fabian Groffen
2021-06-01 19:43 Fabian Groffen
2021-05-31 19:14 Fabian Groffen
2021-05-15 12:19 Fabian Groffen
2021-05-10  9:16 Fabian Groffen
2021-05-02 11:32 Fabian Groffen
2021-05-02 11:25 Fabian Groffen
2021-05-02 11:25 Fabian Groffen
2021-05-01 19:32 Fabian Groffen
2021-05-01  8:40 Fabian Groffen
2021-03-13 20:32 Fabian Groffen
2021-02-20 12:06 Fabian Groffen
2021-02-20 11:44 Fabian Groffen
2021-02-20 11:44 Fabian Groffen
2021-02-17 20:23 Fabian Groffen
2020-11-29  9:13 Fabian Groffen
2020-11-21 10:53 Fabian Groffen
2020-11-21 10:45 Fabian Groffen
2020-11-21 10:00 Fabian Groffen
2020-11-21  9:53 Fabian Groffen
2020-11-21  8:53 Fabian Groffen
2020-11-14 17:06 Fabian Groffen
2020-11-14 17:06 Fabian Groffen
2020-11-13  9:32 Fabian Groffen
2020-10-04 19:30 Fabian Groffen
2020-10-04 19:06 Fabian Groffen
2020-10-04 18:46 Fabian Groffen
2020-10-04 18:44 Fabian Groffen
2020-10-04 12:33 Fabian Groffen
2020-10-04 11:54 Fabian Groffen
2020-10-04 11:31 Fabian Groffen
2020-10-04 11:09 Fabian Groffen
2020-08-17 14:34 Fabian Groffen
2020-08-17 13:08 Fabian Groffen
2020-08-17 13:08 Fabian Groffen
2020-08-14 10:44 Fabian Groffen
2020-08-14 10:09 Fabian Groffen
2020-08-14  9:35 Fabian Groffen
2020-08-14  9:35 Fabian Groffen
2020-08-02  7:39 Fabian Groffen
2020-07-08  8:12 Fabian Groffen
2020-06-28 19:11 Fabian Groffen
2020-06-28 15:58 Fabian Groffen
2020-06-27  9:38 Fabian Groffen
2020-06-27  9:38 Fabian Groffen
2020-05-25 19:01 Fabian Groffen
2020-05-25 18:29 Fabian Groffen
2020-05-25 18:25 Fabian Groffen
2020-05-25 18:08 Fabian Groffen
2020-05-25 18:05 Fabian Groffen
2020-05-25 11:20 Fabian Groffen
2020-05-25 11:12 Fabian Groffen
2020-05-25 10:43 Fabian Groffen
2020-05-25 10:43 Fabian Groffen
2020-05-21 11:13 Fabian Groffen
2020-05-17 12:35 Fabian Groffen
2020-05-17 12:35 Fabian Groffen
2020-05-17 12:35 Fabian Groffen
2020-05-17 12:35 Fabian Groffen
2020-05-17  8:27 Fabian Groffen
2020-05-17  8:27 Fabian Groffen
2020-05-17  8:15 Fabian Groffen
2020-05-16 18:51 Fabian Groffen
2020-05-16 14:30 Fabian Groffen
2020-05-16 13:06 Fabian Groffen
2020-05-16 13:06 Fabian Groffen
2020-05-02  8:45 Fabian Groffen
2020-04-27  7:46 Fabian Groffen
2020-02-21  8:50 Fabian Groffen
2020-02-21  8:18 Fabian Groffen
2020-01-31 14:45 Fabian Groffen
2020-01-31 13:26 Fabian Groffen
2020-01-31 13:26 Fabian Groffen
2020-01-31 13:26 Fabian Groffen
2020-01-31 10:49 Fabian Groffen
2020-01-31 10:49 Fabian Groffen
2020-01-31 10:49 Fabian Groffen
2020-01-26 19:31 Fabian Groffen
2020-01-25 12:20 Fabian Groffen
2020-01-25 12:20 Fabian Groffen
2020-01-25 12:11 Fabian Groffen
2020-01-25 10:01 Fabian Groffen
2020-01-25  9:45 Fabian Groffen
2020-01-25  9:11 Fabian Groffen
2020-01-25  9:11 Fabian Groffen
2020-01-25  9:03 Fabian Groffen
2020-01-25  9:03 Fabian Groffen
2020-01-25  9:03 Fabian Groffen
2020-01-25  9:03 Fabian Groffen
2020-01-25  9:03 Fabian Groffen
2020-01-22 20:11 Fabian Groffen
2020-01-22 20:11 Fabian Groffen
2020-01-22 20:11 Fabian Groffen
2020-01-22 20:04 Fabian Groffen
2020-01-22 20:04 Fabian Groffen
2020-01-22 20:04 Fabian Groffen
2020-01-22 20:04 Fabian Groffen
2020-01-22 19:54 Fabian Groffen
2020-01-22 19:54 Fabian Groffen
2020-01-22 19:54 Fabian Groffen
2020-01-22 19:54 Fabian Groffen
2020-01-22 19:54 Fabian Groffen
2020-01-22 19:54 Fabian Groffen
2020-01-22 19:54 Fabian Groffen
2020-01-20 19:54 Fabian Groffen
2020-01-19 19:36 Fabian Groffen
2020-01-19 19:36 Fabian Groffen
2020-01-19 19:36 Fabian Groffen
2020-01-19 19:36 Fabian Groffen
2020-01-19 19:36 Fabian Groffen
2020-01-19 19:36 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 19:09 Fabian Groffen
2020-01-19 16:40 Fabian Groffen
2020-01-19 16:37 Fabian Groffen
2020-01-19 16:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-19 12:37 Fabian Groffen
2020-01-18 13:09 Fabian Groffen
2020-01-06  8:03 Fabian Groffen
2020-01-06  7:36 Fabian Groffen
2020-01-05 16:08 Fabian Groffen
2020-01-05 16:08 Fabian Groffen
2020-01-05 16:08 Fabian Groffen
2020-01-05 13:28 Fabian Groffen
2020-01-04 20:02 Fabian Groffen
2020-01-04 19:48 Fabian Groffen
2020-01-04 13:28 Fabian Groffen
2020-01-04 10:44 Fabian Groffen
2020-01-04 10:38 Fabian Groffen
2020-01-04 10:27 Fabian Groffen
2020-01-04 10:20 Fabian Groffen
2020-01-03 15:05 Fabian Groffen
2020-01-03 14:58 Fabian Groffen
2020-01-03 10:36 Fabian Groffen
2020-01-02 20:27 Fabian Groffen
2020-01-02 20:00 Fabian Groffen
2020-01-02 15:32 Fabian Groffen
2020-01-02 15:09 Fabian Groffen
2020-01-02 15:09 Fabian Groffen
2020-01-02 14:07 Fabian Groffen
2020-01-02 14:07 Fabian Groffen
2020-01-02 14:07 Fabian Groffen
2020-01-02 14:07 Fabian Groffen
2020-01-02 11:55 Fabian Groffen
2020-01-02  9:47 Fabian Groffen
2020-01-01 19:57 Fabian Groffen
2019-12-31  9:10 Fabian Groffen
2019-12-31  9:05 Fabian Groffen
2019-12-29 12:35 Fabian Groffen
2019-12-29  9:57 Fabian Groffen
2019-12-27 21:45 Fabian Groffen
2019-12-27 21:14 Fabian Groffen
2019-12-27 19:16 Fabian Groffen
2019-12-14 17:01 Fabian Groffen
2019-12-14 17:01 Fabian Groffen
2019-12-14 17:01 Fabian Groffen
2019-12-08 11:53 Fabian Groffen
2019-11-29 13:56 Fabian Groffen
2019-11-29 13:22 Fabian Groffen
2019-11-25 19:51 Fabian Groffen
2019-11-25 19:39 Fabian Groffen
2019-11-19 20:28 Fabian Groffen
2019-11-19 20:28 Fabian Groffen
2019-11-17 15:12 Fabian Groffen
2019-11-17 15:12 Fabian Groffen
2019-11-17 15:12 Fabian Groffen
2019-11-17 15:12 Fabian Groffen
2019-11-17 15:12 Fabian Groffen
2019-11-15 13:52 Fabian Groffen
2019-11-13 18:19 Fabian Groffen
2019-11-13 12:59 Fabian Groffen
2019-11-13 12:53 Fabian Groffen
2019-11-13 12:53 Fabian Groffen
2019-11-09 10:35 Fabian Groffen
2019-10-27 12:23 Fabian Groffen
2019-10-20 10:11 Fabian Groffen
2019-10-12 12:47 Fabian Groffen
2019-10-03 11:50 Fabian Groffen
2019-09-29 12:18 Fabian Groffen
2019-09-28 13:28 Fabian Groffen
2019-09-28 13:06 Fabian Groffen
2019-09-26 19:28 Fabian Groffen
2019-09-26 19:28 Fabian Groffen
2019-09-26 14:06 Fabian Groffen
2019-09-26 14:06 Fabian Groffen
2019-09-21 20:23 Fabian Groffen
2019-09-21 20:17 Fabian Groffen
2019-09-21 19:53 Fabian Groffen
2019-09-10 18:25 Fabian Groffen
2019-08-17  8:37 Fabian Groffen
2019-07-18 17:55 Fabian Groffen
2019-07-14 18:51 Fabian Groffen
2019-07-14 16:27 Fabian Groffen
2019-07-14 16:27 Fabian Groffen
2019-07-14 16:00 Fabian Groffen
2019-07-14 13:09 Fabian Groffen
2019-07-14 13:09 Fabian Groffen
2019-07-14  8:37 Fabian Groffen
2019-06-27  8:54 Fabian Groffen
2019-06-26 19:32 Fabian Groffen
2019-06-19 10:44 Fabian Groffen
2019-06-13 10:52 Fabian Groffen
2019-06-13  9:28 Fabian Groffen
2019-06-13  8:41 Fabian Groffen
2019-06-11 17:55 Fabian Groffen
2019-06-10 18:38 Fabian Groffen
2019-06-10 15:29 Fabian Groffen
2019-06-10 13:31 Fabian Groffen
2019-06-10 12:50 Fabian Groffen
2019-06-10 10:12 Fabian Groffen
2019-06-10 10:09 Fabian Groffen
2019-06-10 10:09 Fabian Groffen
2019-06-10 10:09 Fabian Groffen
2019-06-10 10:09 Fabian Groffen
2019-06-10 10:09 Fabian Groffen
2019-06-09  9:23 Fabian Groffen
2019-06-08 18:42 Fabian Groffen
2019-06-08 18:25 Fabian Groffen
2019-06-08 18:13 Fabian Groffen
2019-06-08 18:13 Fabian Groffen
2019-06-08 18:13 Fabian Groffen
2019-06-08 18:13 Fabian Groffen
2019-06-07 12:20 Fabian Groffen
2019-06-06 13:52 Fabian Groffen
2019-06-06 13:46 Fabian Groffen
2019-06-06 13:46 Fabian Groffen
2019-06-06  8:14 Fabian Groffen
2019-06-05  7:57 Fabian Groffen
2019-05-30 10:23 Fabian Groffen
2019-05-30 10:09 Fabian Groffen
2019-05-30  8:55 Fabian Groffen
2019-05-25 16:04 Fabian Groffen
2019-05-25 14:54 Fabian Groffen
2019-05-25 14:04 Fabian Groffen
2019-05-25 12:19 Fabian Groffen
2019-05-24 12:26 Fabian Groffen
2019-05-22  8:54 Fabian Groffen
2019-05-21 14:42 Fabian Groffen
2019-05-21 14:37 Fabian Groffen
2019-05-21 14:12 Fabian Groffen
2019-05-21 14:12 Fabian Groffen
2019-05-20 12:15 Fabian Groffen
2019-05-20 10:46 Fabian Groffen
2019-05-16 17:13 Fabian Groffen
2019-05-16 17:13 Fabian Groffen
2019-05-16 17:13 Fabian Groffen
2019-05-16 17:13 Fabian Groffen
2019-05-16 13:18 Fabian Groffen
2019-05-15  9:42 Fabian Groffen
2019-05-13 13:39 Fabian Groffen
2019-05-12  9:58 Fabian Groffen
2019-05-12  9:58 Fabian Groffen
2019-05-12  9:58 Fabian Groffen
2019-05-11 11:11 Fabian Groffen
2019-05-11  7:14 Fabian Groffen
2019-05-11  7:14 Fabian Groffen
2019-05-11  7:14 Fabian Groffen
2019-05-11  7:14 Fabian Groffen
2019-05-10 15:32 Fabian Groffen
2019-05-10 15:32 Fabian Groffen
2019-05-10  7:30 Fabian Groffen
2019-05-10  7:30 Fabian Groffen
2019-05-10  7:30 Fabian Groffen
2019-05-07  6:19 Fabian Groffen
2019-05-07  6:19 Fabian Groffen
2019-05-06 16:04 Fabian Groffen
2019-05-06  6:41 Fabian Groffen
2019-05-04 17:23 Fabian Groffen
2019-05-04 11:53 Fabian Groffen
2019-05-03 11:45 Fabian Groffen
2019-05-03  8:50 Fabian Groffen
2019-05-03  8:50 Fabian Groffen
2019-05-03  8:50 Fabian Groffen
2019-05-03  8:50 Fabian Groffen
2019-05-02 16:09 Fabian Groffen
2019-05-02  8:29 Fabian Groffen
2019-04-30  8:02 Fabian Groffen
2019-04-30  7:54 Fabian Groffen
2019-04-28 18:10 Fabian Groffen
2019-04-27  9:01 Fabian Groffen
2019-04-27  8:33 Fabian Groffen
2019-04-25 17:36 Fabian Groffen
2019-04-25  9:48 Fabian Groffen
2019-04-25  9:48 Fabian Groffen
2019-04-25  9:48 Fabian Groffen
2019-04-25  9:22 Fabian Groffen
2019-04-25  9:22 Fabian Groffen
2019-04-25  9:22 Fabian Groffen
2019-04-25  9:22 Fabian Groffen
2019-04-14 10:52 Fabian Groffen
2019-03-27 20:52 Fabian Groffen
2019-03-27 20:37 Fabian Groffen
2019-03-27 20:18 Fabian Groffen
2019-03-18 13:14 Fabian Groffen
2019-03-18 13:14 Fabian Groffen
2019-03-18 13:14 Fabian Groffen
2019-03-12  8:05 Fabian Groffen
2019-03-01 13:51 Fabian Groffen
2019-02-28 18:37 Fabian Groffen
2019-02-28 18:37 Fabian Groffen
2019-02-27 21:18 Fabian Groffen
2019-02-27 20:53 Fabian Groffen
2019-02-23 15:22 Fabian Groffen
2018-12-28  9:08 Fabian Groffen
2018-12-24 16:02 Fabian Groffen
2018-12-20 18:24 Fabian Groffen
2018-12-20 18:24 Fabian Groffen
2018-12-09 10:42 Fabian Groffen
2018-11-20 14:25 Fabian Groffen
2018-10-26 13:50 Fabian Groffen
2018-10-26 13:50 Fabian Groffen
2018-08-06  7:25 Fabian Groffen
2018-08-06  7:25 Fabian Groffen
2018-08-01 13:28 Fabian Groffen
2018-07-18 20:20 Fabian Groffen
2018-06-28  9:35 Fabian Groffen
2018-06-28  9:35 Fabian Groffen
2018-05-18 16:58 Fabian Groffen
2018-05-18 12:19 Fabian Groffen
2018-05-18 12:19 Fabian Groffen
2018-05-18 10:15 Fabian Groffen
2018-04-18 13:58 Fabian Groffen
2018-04-17 20:12 Fabian Groffen
2018-04-15 15:41 Fabian Groffen
2018-04-15 15:38 Fabian Groffen
2018-04-09  7:15 Fabian Groffen
2018-04-09  7:15 Fabian Groffen
2018-04-04 13:16 Fabian Groffen
2018-04-03 20:13 Fabian Groffen
2018-04-03 13:39 Fabian Groffen
2018-04-02 17:27 Fabian Groffen
2018-04-01 10:22 Fabian Groffen
2018-04-01 10:22 Fabian Groffen
2018-03-31  6:54 Fabian Groffen
2018-03-31  6:54 Fabian Groffen
2018-03-31  6:54 Fabian Groffen
2018-03-31  6:54 Fabian Groffen
2018-03-30  5:56 Fabian Groffen
2018-03-30  5:56 Fabian Groffen
2018-03-26 19:08 Fabian Groffen
2018-03-25 14:00 Fabian Groffen
2018-03-23 20:17 Fabian Groffen
2018-03-23 20:17 Fabian Groffen
2018-03-23 15:27 Fabian Groffen
2018-03-23 15:27 Fabian Groffen
2018-03-23 13:17 Fabian Groffen
2018-03-23 11:29 Fabian Groffen
2018-03-23 11:08 Fabian Groffen
2018-03-23  9:37 Fabian Groffen
2018-01-08 12:33 Fabian Groffen
2018-01-08 12:33 Fabian Groffen
2017-12-29 11:45 Fabian Groffen
2017-12-29 11:45 Fabian Groffen
2017-12-29 11:45 Fabian Groffen
2017-11-27  7:55 Robin H. Johnson
2017-11-27  7:55 Robin H. Johnson
2017-02-07  3:03 Mike Frysinger
2016-12-29  2:33 Mike Frysinger
2016-12-29  2:25 Mike Frysinger
2016-12-29  2:25 Mike Frysinger
2016-12-29  2:25 Mike Frysinger
2016-12-29  2:25 Mike Frysinger
2016-12-29  2:25 Mike Frysinger
2016-12-29  2:25 Mike Frysinger
2016-12-20 19:15 Mike Frysinger
2016-12-20 16:55 Mike Frysinger
2016-11-27  5:46 Mike Frysinger
2016-11-27  5:46 Mike Frysinger
2016-11-27  5:46 Mike Frysinger
2016-11-27  1:52 Mike Frysinger
2016-11-27  1:50 Mike Frysinger
2016-11-27  0:00 Mike Frysinger
2016-11-26 23:48 Mike Frysinger
2016-11-26 23:46 Mike Frysinger
2016-11-26 23:24 Mike Frysinger
2016-11-26 23:17 Mike Frysinger
2016-11-15  3:34 Mike Frysinger
2016-11-15  3:34 Mike Frysinger
2016-11-15  3:34 Mike Frysinger
2016-11-15  3:34 Mike Frysinger
2016-11-15  3:34 Mike Frysinger
2016-11-12 17:17 Mike Frysinger
2016-06-21 20:53 Mike Frysinger
2016-06-20  3:22 Mike Frysinger
2016-04-04 15:47 Mike Frysinger
2016-04-01 21:42 Mike Frysinger
2016-04-01 21:42 Mike Frysinger
2016-03-28  4:53 Mike Frysinger
2016-03-28  4:53 Mike Frysinger
2016-03-28  4:53 Mike Frysinger
2016-02-22 20:37 Mike Frysinger
2016-02-22 20:37 Mike Frysinger
2016-02-22 20:37 Mike Frysinger
2016-02-22 20:37 Mike Frysinger
2016-02-17  7:15 Mike Frysinger
2016-02-14  1:26 Mike Frysinger
2016-02-14  1:26 Mike Frysinger
2016-02-14  1:26 Mike Frysinger
2016-01-29  5:53 Mike Frysinger
2016-01-05  0:25 Mike Frysinger
2015-12-17  5:06 Mike Frysinger
2015-12-17  5:06 Mike Frysinger
2015-12-17  5:06 Mike Frysinger
2015-12-17  5:06 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-28  2:44 Mike Frysinger
2015-11-26 10:52 Mike Frysinger
2015-11-26 10:52 Mike Frysinger
2015-11-26 10:39 Mike Frysinger
2015-11-26 10:39 Mike Frysinger
2015-11-26 10:39 Mike Frysinger
2015-11-26 10:39 Mike Frysinger
2015-11-26 10:39 Mike Frysinger
2015-11-26 10:39 Mike Frysinger
2015-11-26 10:39 Mike Frysinger
2015-11-26  8:59 Mike Frysinger
2015-11-26  8:00 Mike Frysinger
2015-09-15 18:27 Mike Frysinger
2015-06-23  8:58 Mike Frysinger
2015-06-06  6:20 Mike Frysinger
2015-06-06  6:20 Mike Frysinger
2015-06-06  6:20 Mike Frysinger
2015-06-06  6:20 Mike Frysinger
2015-06-03 15:44 Mike Frysinger
2015-06-03 15:44 Mike Frysinger
2015-05-31  8:31 Mike Frysinger
2015-05-19 17:37 Mike Frysinger
2015-05-19 17:37 Mike Frysinger
2015-05-19 17:37 Mike Frysinger
2015-05-19 17:37 Mike Frysinger
2015-05-19 17:37 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-24  1:26 Mike Frysinger
2015-02-21 18:06 Mike Frysinger
2015-02-21  0:00 Mike Frysinger
2015-02-21  0:00 Mike Frysinger
2015-02-20 22:28 Mike Frysinger
2015-02-19  7:49 Mike Frysinger
2014-10-19 16:56 Mike Frysinger
2014-06-16 18:01 Mike Frysinger
2014-03-16  6:34 Mike Frysinger
2014-03-16  6:34 Mike Frysinger
2014-03-16  6:14 Mike Frysinger
2014-03-16  6:14 Mike Frysinger
2014-03-16  6:14 Mike Frysinger
2014-03-15  6:02 Mike Frysinger
2014-03-11  4:53 Mike Frysinger
2014-03-11  4:53 Mike Frysinger
2014-03-10  8:45 Mike Frysinger
2014-03-10  8:45 Mike Frysinger
2014-03-10  8:45 Mike Frysinger
2014-03-10  6:00 Mike Frysinger
2014-03-10  6:00 Mike Frysinger
2014-03-10  6:00 Mike Frysinger
2014-03-10  6:00 Mike Frysinger
2014-03-10  6:00 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger
2014-03-08  5:51 Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1432052225.357a4c2d329ccf46cddb96e07c9308105e977fd3.vapier@gentoo \
    --to=vapier@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox