diff options
Diffstat (limited to 'src/pacman/callback.c')
-rw-r--r-- | src/pacman/callback.c | 173 |
1 files changed, 77 insertions, 96 deletions
diff --git a/src/pacman/callback.c b/src/pacman/callback.c index 46ff2e88..d34aca13 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -81,7 +81,7 @@ static double get_update_timediff(int first_call) } } - return(retval); + return retval; } /* refactored from cb_trans_progress */ @@ -153,96 +153,96 @@ static void fill_progress(const int bar_percent, const int disp_percent, /* callback to handle messages/notifications from libalpm transactions */ -void cb_trans_evt(pmtransevt_t event, void *data1, void *data2) +void cb_trans_evt(alpm_transevt_t event, void *data1, void *data2) { switch(event) { - case PM_TRANS_EVT_CHECKDEPS_START: + case ALPM_TRANS_EVT_CHECKDEPS_START: printf(_("checking dependencies...\n")); break; - case PM_TRANS_EVT_FILECONFLICTS_START: + case ALPM_TRANS_EVT_FILECONFLICTS_START: if(config->noprogressbar) { printf(_("checking for file conflicts...\n")); } break; - case PM_TRANS_EVT_RESOLVEDEPS_START: + case ALPM_TRANS_EVT_RESOLVEDEPS_START: printf(_("resolving dependencies...\n")); break; - case PM_TRANS_EVT_INTERCONFLICTS_START: + case ALPM_TRANS_EVT_INTERCONFLICTS_START: printf(_("looking for inter-conflicts...\n")); break; - case PM_TRANS_EVT_ADD_START: + case ALPM_TRANS_EVT_ADD_START: if(config->noprogressbar) { printf(_("installing %s...\n"), alpm_pkg_get_name(data1)); } break; - case PM_TRANS_EVT_ADD_DONE: - alpm_logaction("installed %s (%s)\n", + case ALPM_TRANS_EVT_ADD_DONE: + alpm_logaction(config->handle, "installed %s (%s)\n", alpm_pkg_get_name(data1), alpm_pkg_get_version(data1)); display_optdepends(data1); break; - case PM_TRANS_EVT_REMOVE_START: + case ALPM_TRANS_EVT_REMOVE_START: if(config->noprogressbar) { printf(_("removing %s...\n"), alpm_pkg_get_name(data1)); } break; - case PM_TRANS_EVT_REMOVE_DONE: - alpm_logaction("removed %s (%s)\n", + case ALPM_TRANS_EVT_REMOVE_DONE: + alpm_logaction(config->handle, "removed %s (%s)\n", alpm_pkg_get_name(data1), alpm_pkg_get_version(data1)); break; - case PM_TRANS_EVT_UPGRADE_START: + case ALPM_TRANS_EVT_UPGRADE_START: if(config->noprogressbar) { printf(_("upgrading %s...\n"), alpm_pkg_get_name(data1)); } break; - case PM_TRANS_EVT_UPGRADE_DONE: - alpm_logaction("upgraded %s (%s -> %s)\n", + case ALPM_TRANS_EVT_UPGRADE_DONE: + alpm_logaction(config->handle, "upgraded %s (%s -> %s)\n", (char *)alpm_pkg_get_name(data1), (char *)alpm_pkg_get_version(data2), (char *)alpm_pkg_get_version(data1)); display_new_optdepends(data2,data1); break; - case PM_TRANS_EVT_INTEGRITY_START: + case ALPM_TRANS_EVT_INTEGRITY_START: if(config->noprogressbar) { printf(_("checking package integrity...\n")); } break; - case PM_TRANS_EVT_DELTA_INTEGRITY_START: + case ALPM_TRANS_EVT_DELTA_INTEGRITY_START: printf(_("checking delta integrity...\n")); break; - case PM_TRANS_EVT_DELTA_PATCHES_START: + case ALPM_TRANS_EVT_DELTA_PATCHES_START: printf(_("applying deltas...\n")); break; - case PM_TRANS_EVT_DELTA_PATCH_START: + case ALPM_TRANS_EVT_DELTA_PATCH_START: printf(_("generating %s with %s... "), (char *)data1, (char *)data2); break; - case PM_TRANS_EVT_DELTA_PATCH_DONE: + case ALPM_TRANS_EVT_DELTA_PATCH_DONE: printf(_("success!\n")); break; - case PM_TRANS_EVT_DELTA_PATCH_FAILED: + case ALPM_TRANS_EVT_DELTA_PATCH_FAILED: printf(_("failed.\n")); break; - case PM_TRANS_EVT_SCRIPTLET_INFO: - printf("%s", (char*)data1); + case ALPM_TRANS_EVT_SCRIPTLET_INFO: + printf("%s", (char *)data1); break; - case PM_TRANS_EVT_RETRIEVE_START: - printf(_(":: Retrieving packages from %s...\n"), (char*)data1); + case ALPM_TRANS_EVT_RETRIEVE_START: + printf(_(":: Retrieving packages from %s...\n"), (char *)data1); break; - case PM_TRANS_EVT_DISKSPACE_START: + case ALPM_TRANS_EVT_DISKSPACE_START: if(config->noprogressbar) { printf(_("checking available disk space...\n")); } break; /* all the simple done events, with fallthrough for each */ - case PM_TRANS_EVT_FILECONFLICTS_DONE: - case PM_TRANS_EVT_CHECKDEPS_DONE: - case PM_TRANS_EVT_RESOLVEDEPS_DONE: - case PM_TRANS_EVT_INTERCONFLICTS_DONE: - case PM_TRANS_EVT_INTEGRITY_DONE: - case PM_TRANS_EVT_DELTA_INTEGRITY_DONE: - case PM_TRANS_EVT_DELTA_PATCHES_DONE: - case PM_TRANS_EVT_DISKSPACE_DONE: + case ALPM_TRANS_EVT_FILECONFLICTS_DONE: + case ALPM_TRANS_EVT_CHECKDEPS_DONE: + case ALPM_TRANS_EVT_RESOLVEDEPS_DONE: + case ALPM_TRANS_EVT_INTERCONFLICTS_DONE: + case ALPM_TRANS_EVT_INTEGRITY_DONE: + case ALPM_TRANS_EVT_DELTA_INTEGRITY_DONE: + case ALPM_TRANS_EVT_DELTA_PATCHES_DONE: + case ALPM_TRANS_EVT_DISKSPACE_DONE: /* nothing */ break; } @@ -251,21 +251,25 @@ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2) /* callback to handle questions from libalpm transactions (yes/no) */ /* TODO this is one of the worst ever functions written. void *data ? wtf */ -void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, +void cb_trans_conv(alpm_transconv_t event, void *data1, void *data2, void *data3, int *response) { switch(event) { - case PM_TRANS_CONV_INSTALL_IGNOREPKG: - *response = yesno(_(":: %s is in IgnorePkg/IgnoreGroup. Install anyway?"), - alpm_pkg_get_name(data1)); + case ALPM_TRANS_CONV_INSTALL_IGNOREPKG: + if(!config->op_s_downloadonly) { + *response = yesno(_(":: %s is in IgnorePkg/IgnoreGroup. Install anyway?"), + alpm_pkg_get_name(data1)); + } else { + *response = 1; + } break; - case PM_TRANS_CONV_REPLACE_PKG: + case ALPM_TRANS_CONV_REPLACE_PKG: *response = yesno(_(":: Replace %s with %s/%s?"), alpm_pkg_get_name(data1), (char *)data3, alpm_pkg_get_name(data2)); break; - case PM_TRANS_CONV_CONFLICT_PKG: + case ALPM_TRANS_CONV_CONFLICT_PKG: /* data parameters: target package, local package, conflict (strings) */ /* print conflict only if it contains new information */ if(strcmp(data1, data3) == 0 || strcmp(data2, data3) == 0) { @@ -281,7 +285,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, (char *)data2); } break; - case PM_TRANS_CONV_REMOVE_PKGS: + case ALPM_TRANS_CONV_REMOVE_PKGS: { alpm_list_t *unresolved = (alpm_list_t *) data1; alpm_list_t *namelist = NULL, *i; @@ -304,11 +308,11 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, alpm_list_free(namelist); } break; - case PM_TRANS_CONV_SELECT_PROVIDER: + case ALPM_TRANS_CONV_SELECT_PROVIDER: { alpm_list_t *providers = (alpm_list_t *)data1; int count = alpm_list_count(providers); - char *depstring = alpm_dep_compute_string((pmdepend_t *)data2); + char *depstring = alpm_dep_compute_string((alpm_depend_t *)data2); printf(_(":: There are %d providers available for %s:\n"), count, depstring); free(depstring); @@ -316,7 +320,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, *response = select_question(count); } break; - case PM_TRANS_CONV_LOCAL_NEWER: + case ALPM_TRANS_CONV_LOCAL_NEWER: if(!config->op_s_downloadonly) { *response = yesno(_(":: %s-%s: local version is newer. Upgrade anyway?"), alpm_pkg_get_name(data1), @@ -325,7 +329,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, *response = 1; } break; - case PM_TRANS_CONV_CORRUPTED_PKG: + case ALPM_TRANS_CONV_CORRUPTED_PKG: *response = yesno(_(":: File %s is corrupted. Do you want to delete it?"), (char *)data1); break; @@ -339,7 +343,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2, } /* callback to handle display of transaction progress */ -void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, +void cb_trans_progress(alpm_transprog_t event, const char *pkgname, int percent, size_t howmany, size_t current) { /* size of line to allocate for text printing (e.g. not progressbar) */ @@ -351,7 +355,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, int len, wclen, wcwid, padwid; wchar_t *wcstr; - const int cols = getcols(0); + const int cols = getcols(); if(config->noprogressbar || cols == 0) { return; @@ -377,22 +381,22 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, /* set text of message to display */ switch (event) { - case PM_TRANS_PROGRESS_ADD_START: + case ALPM_TRANS_PROGRESS_ADD_START: opr = _("installing"); break; - case PM_TRANS_PROGRESS_UPGRADE_START: + case ALPM_TRANS_PROGRESS_UPGRADE_START: opr = _("upgrading"); break; - case PM_TRANS_PROGRESS_REMOVE_START: + case ALPM_TRANS_PROGRESS_REMOVE_START: opr = _("removing"); break; - case PM_TRANS_PROGRESS_CONFLICTS_START: + case ALPM_TRANS_PROGRESS_CONFLICTS_START: opr = _("checking for file conflicts"); break; - case PM_TRANS_PROGRESS_DISKSPACE_START: + case ALPM_TRANS_PROGRESS_DISKSPACE_START: opr = _("checking available disk space"); break; - case PM_TRANS_PROGRESS_INTEGRITY_START: + case ALPM_TRANS_PROGRESS_INTEGRITY_START: opr = _("checking package integrity"); break; default: @@ -400,7 +404,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, } infolen = cols * 6 / 10; - if (infolen < 50) { + if(infolen < 50) { infolen = 50; } @@ -494,12 +498,13 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total) int totaldownload = 0; off_t xfered, total; - double rate = 0.0, timediff = 0.0, f_xfered = 0.0; + double rate = 0.0, timediff = 0.0; unsigned int eta_h = 0, eta_m = 0, eta_s = 0; + double rate_human, xfered_human; + const char *rate_label, *xfered_label; int file_percent = 0, total_percent = 0; - char rate_size = 'K', xfered_size = 'K'; - const int cols = getcols(0); + const int cols = getcols(); if(config->noprogressbar || cols == 0 || file_total == -1) { if(file_xfered == 0) { @@ -510,7 +515,7 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total) } infolen = cols * 6 / 10; - if (infolen < 50) { + if(infolen < 50) { infolen = 50; } /* explanation of magic 28 number at the end */ @@ -561,7 +566,7 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total) diff_sec = current_time.tv_sec - initial_time.tv_sec; diff_usec = current_time.tv_usec - initial_time.tv_usec; timediff = diff_sec + (diff_usec / 1000000.0); - rate = xfered / (timediff * 1024.0); + rate = xfered / timediff; /* round elapsed time to the nearest second */ eta_s = (int)(timediff + 0.5); @@ -573,10 +578,10 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total) /* return if the calling interval was too short */ return; } - rate = (xfered - xfered_last) / (timediff * 1024.0); + rate = (xfered - xfered_last) / timediff; /* average rate to reduce jumpiness */ rate = (rate + 2 * rate_last) / 3; - eta_s = (total - xfered) / (rate * 1024.0); + eta_s = (total - xfered) / rate; rate_last = rate; xfered_last = xfered; } @@ -618,49 +623,25 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total) /* if padwid is < 0, we need to trim the string so padwid = 0 */ if(padwid < 0) { int i = filenamelen - 3; - wchar_t *p = wcfname; + wchar_t *wcp = wcfname; /* grab the max number of char columns we can fill */ - while(i > 0 && wcwidth(*p) < i) { - i -= wcwidth(*p); - p++; + while(i > 0 && wcwidth(*wcp) < i) { + i -= wcwidth(*wcp); + wcp++; } /* then add the ellipsis and fill out any extra padding */ - wcscpy(p, L"..."); + wcscpy(wcp, L"..."); padwid = i; } - /* Awesome formatting for progress bar. We need a mess of Kb->Mb->Gb stuff - * here. We'll use limit of 2048 for each until we get some empirical */ - /* rate_size = 'K'; was set above */ - if(rate > 2048.0) { - rate /= 1024.0; - rate_size = 'M'; - if(rate > 2048.0) { - rate /= 1024.0; - rate_size = 'G'; - /* we should not go higher than this for a few years (9999.9 Gb/s?)*/ - } - } - - f_xfered = xfered / 1024.0; /* convert to K by default */ - /* xfered_size = 'K'; was set above */ - if(f_xfered > 2048.0) { - f_xfered /= 1024.0; - xfered_size = 'M'; - if(f_xfered > 2048.0) { - f_xfered /= 1024.0; - xfered_size = 'G'; - /* I should seriously hope that archlinux packages never break - * the 9999.9GB mark... we'd have more serious problems than the progress - * bar in pacman */ - } - } + rate_human = humanize_size((off_t)rate, '\0', 0, &rate_label); + xfered_human = humanize_size(xfered, '\0', 0, &xfered_label); /* 1 space + filenamelen + 1 space + 7 for size + 1 + 7 for rate + 2 for /s + 1 space + 8 for eta */ - printf(" %ls%-*s %6.1f%c %#6.1f%c/s %02u:%02u:%02u", wcfname, - padwid, "", f_xfered, xfered_size, - rate, rate_size, eta_h, eta_m, eta_s); + printf(" %ls%-*s %6.1f%s %#6.1f%s/s %02u:%02u:%02u", wcfname, + padwid, "", xfered_human, xfered_label, rate_human, rate_label, + eta_h, eta_m, eta_s); free(fname); free(wcfname); @@ -674,7 +655,7 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total) } /* Callback to handle notifications from the library */ -void cb_log(pmloglevel_t level, const char *fmt, va_list args) +void cb_log(alpm_loglevel_t level, const char *fmt, va_list args) { if(!fmt || strlen(fmt) == 0) { return; |