summaryrefslogtreecommitdiff
path: root/src/pacman
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2008-02-20 18:57:46 -0600
committerDan McGee <dan@archlinux.org>2008-02-20 18:58:04 -0600
commit4bd52f3fe4d21fc4d54aba7b7c5d3134d69f9341 (patch)
tree0174e2bcf440f66cc94d75c4840bac3862bdb926 /src/pacman
parent92ab7c33fb4d72eba070636f620f595dc4650ee9 (diff)
parent420c8846b984b5ca8ddd27ff7b799ec77fbbc2a4 (diff)
Merge branch 'maint'
Remove gettext() function addition from gensync and updatesync in master as gettext is no longer used in them anyway.
Diffstat (limited to 'src/pacman')
-rw-r--r--src/pacman/add.c2
-rw-r--r--src/pacman/callback.c32
-rw-r--r--src/pacman/remove.c2
-rw-r--r--src/pacman/sync.c77
4 files changed, 61 insertions, 52 deletions
diff --git a/src/pacman/add.c b/src/pacman/add.c
index debe5c47..9d646e11 100644
--- a/src/pacman/add.c
+++ b/src/pacman/add.c
@@ -115,7 +115,7 @@ int pacman_add(alpm_list_t *targets)
for(i = targets; i; i = alpm_list_next(i)) {
char *targ = alpm_list_getdata(i);
if(alpm_trans_addtarget(targ) == -1) {
- printf("failed.\n");
+ printf(_("failed.\n"));
fprintf(stderr, _("error: '%s': %s\n"),
targ, alpm_strerrorlast());
add_cleanup();
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 268a8a7f..cf07a09d 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -329,9 +329,8 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
/* size of line to allocate for text printing (e.g. not progressbar) */
const int infolen = 50;
- int tmp, digits, oprlen, textlen, pkglen;
+ int tmp, digits, oprlen, textlen, remainlen;
char *opr = NULL;
- wchar_t *wcopr = NULL;
if(config->noprogressbar) {
return;
@@ -373,15 +372,6 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
opr = _("checking for file conflicts");
break;
}
- /* convert above strings to wide chars */
- oprlen = strlen(opr);
- wcopr = calloc(oprlen, sizeof(wchar_t));
- if(!wcopr) {
- fprintf(stderr, "malloc failure: could not allocate %zd bytes\n",
- strlen(opr) * sizeof(wchar_t));
- return;
- }
- oprlen = mbstowcs(wcopr, opr, oprlen);
/* find # of digits in package counts to scale output */
digits = 1;
@@ -392,30 +382,24 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
/* determine room left for non-digits text [not ( 1/12) part] */
textlen = infolen - 3 - (2 * digits);
- /* room left for package name */
- pkglen = textlen - oprlen - 1;
+
+ oprlen = mbstowcs(NULL, opr, 0);
+ /* room left (eg for package name) */
+ remainlen = textlen - oprlen - 1;
switch (event) {
case PM_TRANS_PROGRESS_ADD_START:
case PM_TRANS_PROGRESS_UPGRADE_START:
case PM_TRANS_PROGRESS_REMOVE_START:
- /* old way of doing it, but ISO C does not recognize it
- printf("(%2$*1$d/%3$*1$d) %4$s %6$-*5$.*5$s", digits, remain, howmany,
- opr, pkglen, pkgname);*/
printf("(%*d/%*d) %s %-*.*s", digits, remain, digits, howmany,
- opr, pkglen, pkglen, pkgname);
+ opr, remainlen, remainlen, pkgname);
break;
case PM_TRANS_PROGRESS_CONFLICTS_START:
- /* old way of doing it, but ISO C does not recognize it
- printf("(%2$*1$d/%3$*1$d) %5$-*4$s", digits, remain, howmany,
- textlen, opr);*/
- printf("(%*d/%*d) %-*s", digits, remain, digits, howmany,
- textlen, opr);
+ printf("(%*d/%*d) %s %-*s", digits, remain, digits, howmany,
+ opr, remainlen, "");
break;
}
- free(wcopr);
-
/* call refactored fill progress function */
fill_progress(percent, percent, getcols() - infolen);
diff --git a/src/pacman/remove.c b/src/pacman/remove.c
index 0722057f..4c5b5c09 100644
--- a/src/pacman/remove.c
+++ b/src/pacman/remove.c
@@ -107,7 +107,7 @@ int pacman_remove(alpm_list_t *targets)
for(i = finaltargs; i; i = alpm_list_next(i)) {
char *targ = alpm_list_getdata(i);
if(alpm_trans_addtarget(targ) == -1) {
- printf("failed.\n");
+ printf(_("failed.\n"));
fprintf(stderr, _("error: '%s': %s\n"),
targ, alpm_strerrorlast());
remove_cleanup();
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index 27218d61..e3e87703 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -25,6 +25,7 @@
#include <limits.h>
#include <unistd.h>
#include <dirent.h>
+#include <sys/stat.h>
#include <alpm.h>
#include <alpm_list.h>
@@ -57,6 +58,7 @@ static int sync_cleandb(const char *dbpath, int keep_used) {
/* step through the directory one file at a time */
while((ent = readdir(dir)) != NULL) {
char path[PATH_MAX];
+ struct stat buf;
alpm_list_t *syncdbs = NULL, *i;
int found = 0;
char *dname = ent->d_name;
@@ -68,6 +70,15 @@ static int sync_cleandb(const char *dbpath, int keep_used) {
if(!strcmp(dname, "sync") || !strcmp(dname, "local")) {
continue;
}
+
+ /* build the full path */
+ snprintf(path, PATH_MAX, "%s%s", dbpath, ent->d_name);
+ /* skip entries that are not dirs (lock file, etc.) */
+ stat(path, &buf);
+ if(!S_ISDIR(buf.st_mode)) {
+ continue;
+ }
+
if(keep_used) {
syncdbs = alpm_option_get_syncdbs();
for(i = syncdbs; i && !found; i = alpm_list_next(i)) {
@@ -78,9 +89,6 @@ static int sync_cleandb(const char *dbpath, int keep_used) {
/* We have a directory that doesn't match any syncdb.
* Ask the user if he wants to remove it. */
if(!found) {
- /* build the full path */
- snprintf(path, PATH_MAX, "%s%s", dbpath, ent->d_name);
-
if(!yesno(_("Do you want to remove %s? [Y/n] "), path)) {
continue;
}
@@ -197,6 +205,28 @@ static int sync_cleancache(int level)
return(0);
}
+static int sync_trans_init(pmtransflag_t flags) {
+ if(alpm_trans_init(PM_TRANS_TYPE_SYNC, flags, cb_trans_evt,
+ cb_trans_conv, cb_trans_progress) == -1) {
+ fprintf(stderr, _("error: failed to init transaction (%s)\n"),
+ alpm_strerrorlast());
+ if(pm_errno == PM_ERR_HANDLE_LOCK) {
+ printf(_(" if you're sure a package manager is not already\n"
+ " running, you can remove %s.\n"), alpm_option_get_lockfile());
+ }
+ return(-1);
+ }
+ return(0);
+}
+
+static int sync_trans_release() {
+ if(alpm_trans_release() == -1) {
+ fprintf(stderr, _("error: failed to release transaction (%s)\n"),
+ alpm_strerrorlast());
+ return(-1);
+ }
+ return(0);
+}
static int sync_synctree(int level, alpm_list_t *syncs)
{
alpm_list_t *i;
@@ -476,14 +506,7 @@ static int sync_trans(alpm_list_t *targets, int sync_only)
alpm_list_t *sync_dbs = alpm_option_get_syncdbs();
/* Step 1: create a new transaction... */
- if(alpm_trans_init(PM_TRANS_TYPE_SYNC, config->flags, cb_trans_evt,
- cb_trans_conv, cb_trans_progress) == -1) {
- fprintf(stderr, _("error: failed to init transaction (%s)\n"),
- alpm_strerrorlast());
- if(pm_errno == PM_ERR_HANDLE_LOCK) {
- printf(_(" if you're sure a package manager is not already\n"
- " running, you can remove %s.\n"), alpm_option_get_lockfile());
- }
+ if(sync_trans_init(config->flags) == -1) {
return(1);
}
@@ -529,22 +552,15 @@ static int sync_trans(alpm_list_t *targets, int sync_only)
printf(_(":: pacman has detected a newer version of itself.\n"));
if(yesno(_(":: Do you want to cancel the current operation\n"
":: and install the new pacman version now? [Y/n] "))) {
- if(alpm_trans_release() == -1) {
- fprintf(stderr, _("error: failed to release transaction (%s)\n"),
- alpm_strerrorlast());
- retval = 1;
- goto cleanup;
+ if(sync_trans_release() == -1) {
+ return(1);
}
- if(alpm_trans_init(PM_TRANS_TYPE_SYNC, config->flags,
- cb_trans_evt, cb_trans_conv, cb_trans_progress) == -1) {
- fprintf(stderr, _("error: failed to init transaction (%s)\n"),
- alpm_strerrorlast());
+ if(sync_trans_init(0) == -1) {
return(1);
}
if(alpm_trans_addtarget("pacman") == -1) {
fprintf(stderr, _("error: pacman: %s\n"), alpm_strerrorlast());
- retval = 1;
- goto cleanup;
+ return(1);
}
break;
}
@@ -744,9 +760,7 @@ cleanup:
if(data) {
FREELIST(data);
}
- if(alpm_trans_release() == -1) {
- fprintf(stderr, _("error: failed to release transaction (%s)\n"),
- alpm_strerrorlast());
+ if(sync_trans_release() == -1) {
retval = 1;
}
@@ -760,8 +774,19 @@ int pacman_sync(alpm_list_t *targets)
/* clean the cache */
if(config->op_s_clean) {
- int ret = sync_cleancache(config->op_s_clean);
+ int ret = 0;
+
+ if(sync_trans_init(0) == -1) {
+ return(1);
+ }
+
+ ret += sync_cleancache(config->op_s_clean);
ret += sync_cleandb_all();
+
+ if(sync_trans_release() == -1) {
+ ret++;
+ }
+
return(ret);
}