Git-Url:
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2/.git;a=commitdiff;h=8e0cc0073d47678e8afaa33203669c8acd19c7b1
commit 8e0cc0073d47678e8afaa33203669c8acd19c7b1
Author: Christian Hamar alias krix <[EMAIL PROTECTED]>
Date: Mon Jul 23 22:01:21 2007 +0200
Another progress bar implement
* Added progressbar for inter-conflicts check (maybe works good :P)
* Tested make check runs fine on i686 vmiklos said ok.
* Actually it uses the simple PROGRESS_CONFLICTS printout
diff --git a/lib/libpacman/add.c b/lib/libpacman/add.c
index 759093f..0c26ed4 100644
--- a/lib/libpacman/add.c
+++ b/lib/libpacman/add.c
@@ -223,7 +223,7 @@ int _pacman_add_prepare(pmtrans_t *trans, pmdb_t *db,
pmlist_t **data)
/* no unsatisfied deps, so look for conflicts */
_pacman_log(PM_LOG_FLOW1, _("looking for conflicts"));
- lp = _pacman_checkconflicts(db, trans->packages);
+ lp = _pacman_checkconflicts(trans, db, trans->packages);
if(lp != NULL) {
if(data) {
*data = lp;
diff --git a/lib/libpacman/conflict.c b/lib/libpacman/conflict.c
index bc58465..f352873 100644
--- a/lib/libpacman/conflict.c
+++ b/lib/libpacman/conflict.c
@@ -46,12 +46,13 @@
*
* conflicts are always name only
*/
-pmlist_t *_pacman_checkconflicts(pmdb_t *db, pmlist_t *packages)
+pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmdb_t *db, pmlist_t
*packages)
{
pmpkg_t *info = NULL;
pmlist_t *i, *j, *k;
pmlist_t *baddeps = NULL;
pmdepmissing_t *miss = NULL;
+ double percent;
if(db == NULL) {
return(NULL);
@@ -59,10 +60,15 @@ pmlist_t *_pacman_checkconflicts(pmdb_t *db, pmlist_t
*packages)
for(i = packages; i; i = i->next) {
pmpkg_t *tp = i->data;
+ percent = (double)(_pacman_list_count(packages) -
_pacman_list_count(i) + 1) / _pacman_list_count(packages);
if(tp == NULL) {
continue;
}
+ PROGRESS(trans, PM_TRANS_PROGRESS_INTERCONFLICTS_START, "",
+ (percent * 100), _pacman_list_count(packages),
+ (_pacman_list_count(packages) - _pacman_list_count(i) +1));
+
for(j = _pacman_pkg_getinfo(tp, PM_PKG_CONFLICTS); j; j = j->next) {
if(!strcmp(tp->name, j->data)) {
/* a package cannot conflict with itself -- that's just not nice */
diff --git a/lib/libpacman/conflict.h b/lib/libpacman/conflict.h
index c5c29bc..cab8b68 100644
--- a/lib/libpacman/conflict.h
+++ b/lib/libpacman/conflict.h
@@ -32,7 +32,7 @@ typedef struct __pmconflict_t {
char ctarget[PKG_NAME_LEN];
} pmconflict_t;
-pmlist_t *_pacman_checkconflicts(pmdb_t *db, pmlist_t *packages);
+pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmdb_t *db, pmlist_t
*packages);
pmlist_t *_pacman_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root,
pmlist_t **skip_list);
#endif /* _PACMAN_CONFLICT_H */
diff --git a/lib/libpacman/pacman.h b/lib/libpacman/pacman.h
index 5376cb2..1d28668 100644
--- a/lib/libpacman/pacman.h
+++ b/lib/libpacman/pacman.h
@@ -317,7 +317,8 @@ enum {
PM_TRANS_PROGRESS_ADD_START,
PM_TRANS_PROGRESS_UPGRADE_START,
PM_TRANS_PROGRESS_REMOVE_START,
- PM_TRANS_PROGRESS_CONFLICTS_START
+ PM_TRANS_PROGRESS_CONFLICTS_START,
+ PM_TRANS_PROGRESS_INTERCONFLICTS_START
};
/* Transaction Event callback */
diff --git a/lib/libpacman/sync.c b/lib/libpacman/sync.c
index fabb008..9adc5f7 100644
--- a/lib/libpacman/sync.c
+++ b/lib/libpacman/sync.c
@@ -496,7 +496,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmdb_t
*db_local, pmlist_t *dbs_sync,
EVENT(trans, PM_TRANS_EVT_INTERCONFLICTS_START, NULL, NULL);
_pacman_log(PM_LOG_FLOW1, _("looking for conflicts"));
- deps = _pacman_checkconflicts(db_local, list);
+ deps = _pacman_checkconflicts(trans, db_local, list);
if(deps) {
int errorout = 0;
diff --git a/src/pacman-g2/trans.c b/src/pacman-g2/trans.c
index 3b42f91..370331f 100644
--- a/src/pacman-g2/trans.c
+++ b/src/pacman-g2/trans.c
@@ -66,7 +66,9 @@ void cb_trans_evt(unsigned char event, void *data1, void
*data2)
pm_fprintf(stderr, NL, _("resolving dependencies... "));
break;
case PM_TRANS_EVT_INTERCONFLICTS_START:
- pm_fprintf(stderr, NL, _("looking for
inter-conflicts... "));
+ if(config->noprogressbar) {
+ MSG(NL, _("looking for inter-conflicts... "));
+ }
break;
case PM_TRANS_EVT_FILECONFLICTS_DONE:
if(config->noprogressbar) {
@@ -78,7 +80,11 @@ void cb_trans_evt(unsigned char event, void *data1, void
*data2)
case PM_TRANS_EVT_CHECKDEPS_DONE:
case PM_TRANS_EVT_RESOLVEDEPS_DONE:
case PM_TRANS_EVT_INTERCONFLICTS_DONE:
- pm_fprintf(stderr, CL, _("done.\n"));
+ if(config->noprogressbar) {
+ MSG(CL, _("done.\n"));
+ } else {
+ MSG(NL, "");
+ }
break;
case PM_TRANS_EVT_EXTRACT_DONE:
if(!config->noprogressbar) {
@@ -291,11 +297,12 @@ void cb_trans_progress(unsigned char event, char
*pkgname, int percent, int howm
{
int i, hash;
unsigned int maxpkglen, progresslen = maxcols - 57;
- char *addstr, *upgstr, *removestr, *conflictstr, *ptr;
+ char *addstr, *upgstr, *removestr, *conflictstr, *interconflictstr,
*ptr;
addstr = strdup(_("installing"));
upgstr = strdup(_("upgrading"));
removestr = strdup(_("removing"));
conflictstr = strdup(_("checking for file conflicts"));
+ interconflictstr = strdup(_("looking for inter-conflicts"));
if(config->noprogressbar) {
return;
@@ -322,6 +329,10 @@ void cb_trans_progress(unsigned char event, char *pkgname,
int percent, int howm
ptr = removestr;
break;
+ case PM_TRANS_PROGRESS_INTERCONFLICTS_START:
+ ptr = interconflictstr;
+ break;
+
case PM_TRANS_PROGRESS_CONFLICTS_START:
ptr = conflictstr;
break;
@@ -346,6 +357,7 @@ void cb_trans_progress(unsigned char event, char *pkgname,
int percent, int howm
putchar(' ');
break;
+ case PM_TRANS_PROGRESS_INTERCONFLICTS_START:
case PM_TRANS_PROGRESS_CONFLICTS_START:
printf("%s (", ptr);
for(i=0;i<(int)log10(howmany)-(int)log10(remain);i++)
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git