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

Reply via email to