[pacman-dev] [PATCH] Quick and dirty change to move sync repos.

Travis Willard travis at archlinux.org
Fri Aug 24 22:40:41 EDT 2007


Here's the quick-and-dirty version of moving repos to
$DBPATH/sync/$REPO.

I don't much like it, to be honest - I'd prefer to separate the concept
of the local repo from the sync repos entirely, but that would break
the current interface into libalpm, as alpm_db_register("local") would,
ideally, register a sync repo named "local", and we'd have to add
another method like alpm_localdb_register() or something of that sort
to register the local database.

I could do the less-dirty fix, but I quite imagine the current API is
supposed to remain decently stable, so here's one that works with the
current setup.

From 552b39f5dafdf4e1104ee7f4876f6a1a7115a736 Mon Sep 17 00:00:00 2001
From: Travis Willard <travis at archlinux.org>
Date: Fri, 24 Aug 2007 22:28:15 -0400
Subject: [PATCH] Quick and dirty change to move sync repos.

This is a quick-n-dirty fix to place all sync repos into the
$DBPATH/sync/$REPO path instead of the previous $DBPATH/$REPO - this
differentiates sync repos from local repos structurally.

Signed-off-by: Travis Willard <travis at archlinux.org>
---
 lib/libalpm/db.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c
index 0cb375d..6bc85b7 100644
--- a/lib/libalpm/db.c
+++ b/lib/libalpm/db.c
@@ -695,7 +695,9 @@ pmdb_t *_alpm_db_register(const char *treename)
 	struct stat buf;
 	pmdb_t *db;
 	const char *dbpath;
+	char real_dbpath[PATH_MAX];
 	char path[PATH_MAX];
+	char local;
 
 	ALPM_LOG_FUNC;
 
@@ -704,6 +706,7 @@ pmdb_t *_alpm_db_register(const char *treename)
 			_alpm_log(PM_LOG_WARNING, _("attempt to
re-register the 'local' DB")); RET_ERR(PM_ERR_DB_NOT_NULL, NULL);
 		}
+		local = 1;
 	} else {
 		alpm_list_t *i;
 		for(i = handle->dbs_sync; i; i = i->next) {
@@ -713,6 +716,7 @@ pmdb_t *_alpm_db_register(const char *treename)
 				return sdb;
 			}
 		}
+		local = 0;
 	}
 	
 	_alpm_log(PM_LOG_DEBUG, "registering database '%s'", treename);
@@ -723,7 +727,8 @@ pmdb_t *_alpm_db_register(const char *treename)
 		_alpm_log(PM_LOG_WARNING, _("database path is
undefined")); RET_ERR(PM_ERR_DB_OPEN, NULL);
 	}
-	snprintf(path, PATH_MAX, "%s%s", dbpath, treename);
+	snprintf(real_dbpath, PATH_MAX, "%s%s", dbpath, local?
"":"sync/");
+	snprintf(path, PATH_MAX, "%s%s", real_dbpath, treename);
 	/* TODO this is rediculous, we try to do this even if we can't
*/ if(stat(path, &buf) != 0 || !S_ISDIR(buf.st_mode)) {
 		_alpm_log(PM_LOG_DEBUG, "database dir '%s' does not
exist, creating it", @@ -733,7 +738,7 @@ pmdb_t
*_alpm_db_register(const char *treename) }
 	}
 
-	db = _alpm_db_new(dbpath, treename);
+	db = _alpm_db_new(real_dbpath, treename);
 	if(db == NULL) {
 		RET_ERR(PM_ERR_DB_CREATE, NULL);
 	}
@@ -744,7 +749,7 @@ pmdb_t *_alpm_db_register(const char *treename)
 		RET_ERR(PM_ERR_DB_OPEN, NULL);
 	}
 
-	if(strcmp(treename, "local") == 0) {
+	if(local) {
 		handle->db_local = db;
 	} else {
 		handle->dbs_sync = alpm_list_add(handle->dbs_sync, db);
-- 
1.5.2.5





More information about the pacman-dev mailing list