From 7bd2ff685188d0d9b6ab6c6f43f6d28811936881 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 31 May 2007 02:51:28 -0400 Subject: Move DB and cache dirs away from there dependence on ROOTDIR This change allows us to use all autoconf specified paths, most notably $(localstatedir). It is quite a change and touches a lot of files, as all references to the DB and cache were done with the ROOTDIR as a prefix. * add --lock command-line option to pacman to specify the location of the lockfile (this can now be specified at configure time by setting the $localstatedir path). * Rip quite a few settings out of configure.ac as they are now picked by setting the paths during configure or make. * Fix bug with /tmp fallback for sync downloads not working correctly (related to root location, now the system tmp dir is used). * Simplified the parameters to some libalpm functions, and added get/set for the new lockfile option. * Renamed several of the DEFS to names without the PM_ prefix. Signed-off-by: Dan McGee --- src/pacman/Makefile.am | 10 ++++++++-- src/pacman/add.c | 3 +-- src/pacman/callback.c | 2 +- src/pacman/pacman.c | 20 ++++++++++++++------ src/pacman/query.c | 5 +++-- src/pacman/remove.c | 3 +-- src/pacman/sync.c | 29 +++++++++++------------------ src/pacman/util.c | 4 ++-- src/pacman/util.h | 4 ++-- 9 files changed, 43 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/pacman/Makefile.am b/src/pacman/Makefile.am index 06d1b447..5248abf3 100644 --- a/src/pacman/Makefile.am +++ b/src/pacman/Makefile.am @@ -1,9 +1,15 @@ SUBDIRS = po +# paths set at make time +conffile = ${sysconfdir}/pacman.conf +lockfile = ${localstatedir}/run/pacman.lck + bin_PROGRAMS = pacman pacman.static -localedir = $(datadir)/locale -DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ +DEFS = -DLOCALEDIR=\"@localedir@\" \ + -DCONFFILE=\"$(conffile)\" \ + -DLOCKFILE=\"$(lockfile)\" \ + @DEFS@ INCLUDES = -I$(top_srcdir)/lib/libalpm AM_CFLAGS = -pedantic -D_GNU_SOURCE diff --git a/src/pacman/add.c b/src/pacman/add.c index cf636234..ef84a398 100644 --- a/src/pacman/add.c +++ b/src/pacman/add.c @@ -95,8 +95,7 @@ int pacman_add(alpm_list_t *targets) if(pm_errno == PM_ERR_HANDLE_LOCK) { /* TODO this and the 2 other places should probably be on stderr */ printf(_(" if you're sure a package manager is not already\n" - " running, you can remove %s%s.\n"), - alpm_option_get_root(), PM_LOCK); + " running, you can remove %s.\n"), LOCKFILE); } return(1); } diff --git a/src/pacman/callback.c b/src/pacman/callback.c index 5f391306..e13a7e7d 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -550,7 +550,7 @@ void cb_dl_progress(const char *filename, int xfered, int total) fname = strdup(filename); /* strip extension if it's there * NOTE: in the case of package files, only the pkgname is sent now */ - if((p = strstr(fname, PM_EXT_PKG)) || (p = strstr(fname, PM_EXT_DB))) { + if((p = strstr(fname, PKGEXT)) || (p = strstr(fname, DBEXT))) { *p = '\0'; } if(strlen(fname) > FILENAME_TRIM_LEN) { diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 58e85b22..e3656830 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -159,6 +159,7 @@ static void usage(int op, char *myname) printf(_(" -r, --root set an alternate installation root\n")); printf(_(" -b, --dbpath set an alternate database location\n")); printf(_(" --cachedir set an alternate package cache location\n")); + printf(_(" --lock set an alternate lockfile location\n")); } } @@ -302,6 +303,7 @@ static int parseargs(int argc, char *argv[]) {"noscriptlet", no_argument, 0, 1005}, {"ask", required_argument, 0, 1006}, {"cachedir", required_argument, 0, 1007}, + {"lock", required_argument, 0, 1008}, {0, 0, 0, 0} }; struct stat st; @@ -360,6 +362,9 @@ static int parseargs(int argc, char *argv[]) } alpm_option_set_cachedir(optarg); break; + case 1008: + alpm_option_set_lockfile(optarg); + break; case 'A': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_ADD); break; case 'F': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE); @@ -519,7 +524,7 @@ int main(int argc, char *argv[]) (config->op_s_search || config->group || config->op_q_list || config->op_q_info || config->flags & PM_TRANS_FLAG_PRINTURIS)) || (config->op == PM_OP_DEPTEST && config->op_d_resolve) - || (strcmp(alpm_option_get_root(), PM_ROOT) != 0)) { + || (strcmp(alpm_option_get_root(), ROOTDIR) != 0)) { /* special case: PM_OP_SYNC can be used w/ config->op_s_search by any user */ /* special case: ignore root user check if -r is specified, fall back on * normal FS checking */ @@ -535,7 +540,7 @@ int main(int argc, char *argv[]) alpm_option_set_logcb(cb_log); if(config->configfile == NULL) { - config->configfile = strdup(PM_ROOT PM_CONF); + config->configfile = strdup(CONFFILE); } if(alpm_parse_config(config->configfile, NULL, "") != 0) { @@ -548,10 +553,13 @@ int main(int argc, char *argv[]) alpm_option_set_dlcb(cb_dl_progress); if(config->verbose > 0) { - printf("Root : %s\n", alpm_option_get_root()); - printf("DBPath : %s\n", alpm_option_get_dbpath()); - printf("CacheDir : %s\n", alpm_option_get_cachedir()); - list_display(_("Targets :"), pm_targets); + printf("Root : %s\n", alpm_option_get_root()); + printf("Conf File : %s\n", config->configfile); + printf("Lock File : %s\n", alpm_option_get_lockfile()); + printf("Root : %s\n", alpm_option_get_root()); + printf("DBPath : %s\n", alpm_option_get_dbpath()); + printf("CacheDir : %s\n", alpm_option_get_cachedir()); + list_display("Targets :", pm_targets); } /* Opening local database */ diff --git a/src/pacman/query.c b/src/pacman/query.c index 57850e8f..a4a42075 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -311,8 +311,9 @@ int pacman_query(alpm_list_t *targets) } if(config->op_q_changelog) { char changelog[PATH_MAX]; - snprintf(changelog, PATH_MAX, "%s%s/%s/%s-%s/changelog", - alpm_option_get_root(), alpm_option_get_dbpath(), + /* TODO should be done in the backend- no raw DB stuff up front */ + snprintf(changelog, PATH_MAX, "%s/%s/%s-%s/changelog", + alpm_option_get_dbpath(), alpm_db_get_name(db_local), alpm_pkg_get_name(info), alpm_pkg_get_version(info)); diff --git a/src/pacman/remove.c b/src/pacman/remove.c index e4f34886..9cdfb0d8 100644 --- a/src/pacman/remove.c +++ b/src/pacman/remove.c @@ -86,8 +86,7 @@ int pacman_remove(alpm_list_t *targets) alpm_strerror(pm_errno)); if(pm_errno == PM_ERR_HANDLE_LOCK) { printf(_(" if you're sure a package manager is not already\n" - " running, you can remove %s%s.\n"), - alpm_option_get_root(), PM_LOCK); + " running, you can remove %s.\n"), LOCKFILE); } FREELIST(finaltargs); return(1); diff --git a/src/pacman/sync.c b/src/pacman/sync.c index f013d45f..d04c7da9 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -61,7 +61,7 @@ static int split_pkgname(char *target, char *name, char *version) } strncpy(tmp, p, 512); /* trim file extension (if any) */ - if((p = strstr(tmp, PM_EXT_PKG))) { + if((p = strstr(tmp, PKGEXT))) { *p = '\0'; } /* trim architecture */ @@ -89,13 +89,7 @@ static int split_pkgname(char *target, char *name, char *version) static int sync_cleancache(int level) { - const char *root, *cachedir; - char dirpath[PATH_MAX]; - - root = alpm_option_get_root(); - cachedir = alpm_option_get_cachedir(); - - snprintf(dirpath, PATH_MAX, "%s%s", root, cachedir); + const char *cachedir = alpm_option_get_cachedir(); if(level == 1) { /* incomplete cleanup: we keep latest packages and partial downloads */ @@ -106,7 +100,7 @@ static int sync_cleancache(int level) if(!yesno(_("Do you want to remove old packages from cache? [Y/n] "))) return(0); printf(_("removing old packages from cache... ")); - dir = opendir(dirpath); + dir = opendir(cachedir); if(dir == NULL) { fprintf(stderr, _("error: could not access cache directory\n")); return(1); @@ -124,12 +118,12 @@ static int sync_cleancache(int level) char *str = alpm_list_getdata(i); char name[256], version[64]; - if(strstr(str, PM_EXT_PKG) == NULL) { + if(strstr(str, PKGEXT) == NULL) { clean = alpm_list_add(clean, strdup(str)); continue; } /* we keep partially downloaded files */ - if(strstr(str, PM_EXT_PKG ".part")) { + if(strstr(str, PKGEXT ".part")) { continue; } if(split_pkgname(str, name, version) != 0) { @@ -140,10 +134,10 @@ static int sync_cleancache(int level) char *s = alpm_list_getdata(j); char n[256], v[64]; - if(strstr(s, PM_EXT_PKG) == NULL) { + if(strstr(s, PKGEXT) == NULL) { continue; } - if(strstr(s, PM_EXT_PKG ".part")) { + if(strstr(s, PKGEXT ".part")) { continue; } if(split_pkgname(s, n, v) != 0) { @@ -163,7 +157,7 @@ static int sync_cleancache(int level) for(i = clean; i; i = alpm_list_next(i)) { char path[PATH_MAX]; - snprintf(path, PATH_MAX, "%s/%s", dirpath, (char *)alpm_list_getdata(i)); + snprintf(path, PATH_MAX, "%s/%s", cachedir, (char *)alpm_list_getdata(i)); unlink(path); } FREELIST(clean); @@ -173,12 +167,12 @@ static int sync_cleancache(int level) return(0); printf(_("removing all packages from cache... ")); - if(rmrf(dirpath)) { + if(rmrf(cachedir)) { fprintf(stderr, _("error: could not remove cache directory\n")); return(1); } - if(makepath(dirpath)) { + if(makepath(cachedir)) { fprintf(stderr, _("error: could not create new cache directory\n")); return(1); } @@ -492,8 +486,7 @@ int pacman_sync(alpm_list_t *targets) alpm_strerror(pm_errno)); if(pm_errno == PM_ERR_HANDLE_LOCK) { printf(_(" if you're sure a package manager is not already\n" - " running, you can remove %s%s.\n"), - alpm_option_get_root(), PM_LOCK); + " running, you can remove %s.\n"), LOCKFILE); } return(1); } diff --git a/src/pacman/util.c b/src/pacman/util.c index f38be60c..e48ea10f 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -80,7 +80,7 @@ int getcols() } /* does the same thing as 'mkdir -p' */ -int makepath(char *path) +int makepath(const char *path) { char *orig, *str, *ptr; char full[PATH_MAX+1] = ""; @@ -112,7 +112,7 @@ int makepath(char *path) } /* does the same thing as 'rm -rf' */ -int rmrf(char *path) +int rmrf(const char *path) { int errflag = 0; struct dirent *dp; diff --git a/src/pacman/util.h b/src/pacman/util.h index 45c8b07d..755b30e1 100644 --- a/src/pacman/util.h +++ b/src/pacman/util.h @@ -38,8 +38,8 @@ #endif int getcols(); -int makepath(char *path); -int rmrf(char *path); +int makepath(const char *path); +int rmrf(const char *path); void indentprint(const char *str, int indent); char *strtoupper(char *str); char *strtrim(char *str); -- cgit v1.2.3-70-g09d2