12 #define _RPMEVR_INTERNAL
20 #define _RPMTS_INTERNAL
24 #define _RPMGI_INTERNAL
30 #define _RPMROLLBACK_INTERNAL
31 #include <rpmrollback.h>
42 #define QVA_ISSET(_qvaflags, _FLAG) ((_qvaflags) & (VERIFY_##_FLAG))
44 #define VSF_ISSET(_vsflags, _FLAG) ((_vsflags) & (RPMVSF_##_FLAG))
45 #define VSF_SET(_vsflags, _FLAG) \
46 (*((unsigned *)&(_vsflags)) |= (RPMVSF_##_FLAG))
47 #define VSF_CLR(_vsflags, _FLAG) \
48 (*((unsigned *)&(_vsflags)) &= ~(RPMVSF_##_FLAG))
50 GENfree(
const void **)
54 #define QVA_ISSET(_qvaflags, _FLAG) ((_qvaflags) & (VERIFY_##_FLAG))
56 #define VSF_ISSET(_vsflags, _FLAG) ((_vsflags) & (RPMVSF_##_FLAG))
57 #define VSF_SET(_vsflags, _FLAG) (_vsflags) |= (RPMVSF_##_FLAG)
58 #define VSF_CLR(_vsflags, _FLAG) (_vsflags) &= ~(RPMVSF_##_FLAG)
87 rpmcliHashesTotal = (isatty (STDOUT_FILENO) ? 44 : 50);
89 if (rpmcliHashesCurrent != rpmcliHashesTotal) {
90 float pct = (float) (total ? (((
float) amount) / total) : 1);
91 hashesNeeded = (int)((rpmcliHashesTotal * pct) + 0.5);
92 while (hashesNeeded > rpmcliHashesCurrent) {
93 if (isatty (STDOUT_FILENO)) {
99 fprintf(stdout,
"(%3d%%)", (
int)((100 * pct) + 0.5));
100 for (i = 0; i < (rpmcliHashesTotal + 6); i++)
101 (
void) putchar (
'\b');
103 fprintf(stdout,
"#");
105 rpmcliHashesCurrent++;
107 (void) fflush(stdout);
109 if (rpmcliHashesCurrent == rpmcliHashesTotal) {
111 rpmcliProgressCurrent++;
112 if (isatty(STDOUT_FILENO)) {
114 (
void) putchar (
'#');
115 pct = (float) (rpmcliProgressTotal
116 ? (((
float) rpmcliProgressCurrent) / rpmcliProgressTotal)
118 fprintf(stdout,
" [%3d%%]", (
int)((100 * pct) + 0.5));
120 fprintf(stdout,
"\n");
122 (void) fflush(stdout);
141 int flags = (int) ((
long)data);
144 const char * filename = (
const char *)key;
146 static FD_t fd = NULL;
151 if (filename == NULL || filename[0] ==
'\0')
153 fd =
Fopen(filename,
"r%{?_rpmgio}");
157 int ut =
urlPath(filename, NULL);
160 fd =
Fopen(filename,
"r%{?_rpmgio}");
164 if (fd == NULL ||
Ferror(fd)) {
172 fd =
fdLink(fd,
"persist (showProgress)");
174 #if defined(POSIX_FADV_WILLNEED)
175 (void)
Fadvise(fd, 0, 0, POSIX_FADV_WILLNEED);
185 fd =
fdFree(fd,
"persist (showProgress)");
194 rpmcliHashesCurrent = 0;
201 if (isatty (STDOUT_FILENO))
202 fprintf(stdout,
"%4d:%-23.23s", (
int)rpmcliProgressCurrent + 1, s);
204 fprintf(stdout,
"%-28.28s", s);
205 (void) fflush(stdout);
208 char * t =
rpmExpand(
"%{?___NVRA}%{!?___NVRA:%%{NAME}-%%{VERSION}-%%{RELEASE}}", NULL);
210 fprintf(stdout,
"%s\n", s);
211 (void) fflush(stdout);
221 fprintf(stdout,
"%%%% %f\n", (
double) (total
222 ? ((((
float) amount) / total) * 100)
224 else if (flags & INSTALL_HASH)
227 (void) fflush(stdout);
231 rpmcliHashesCurrent = 0;
232 rpmcliProgressTotal = 1;
233 rpmcliProgressCurrent = 0;
234 if (!(flags & INSTALL_LABEL))
236 if (flags & INSTALL_HASH)
237 fprintf(stdout,
"%-28s",
_(
"Preparing..."));
239 fprintf(stdout,
"%s\n",
_(
"Preparing packages for installation..."));
240 (void) fflush(stdout);
244 if (flags & INSTALL_HASH)
247 rpmcliProgressCurrent = 0;
251 rpmcliHashesCurrent = 0;
252 rpmcliProgressTotal = total;
253 rpmcliProgressCurrent = 0;
254 if (!(flags & INSTALL_LABEL))
256 if (flags & INSTALL_HASH)
257 fprintf(stdout,
"%-28s\n",
_(
"Repackaging..."));
259 fprintf(stdout,
"%s\n",
_(
"Repackaging erased files..."));
260 (void) fflush(stdout);
264 if (amount && (flags & INSTALL_HASH))
269 rpmcliProgressTotal = total;
270 rpmcliProgressCurrent = total;
271 if (flags & INSTALL_HASH)
274 rpmcliProgressCurrent = 0;
275 if (!(flags & INSTALL_LABEL))
277 if (flags & INSTALL_HASH)
278 fprintf(stdout,
"%-28s\n",
_(
"Upgrading..."));
280 fprintf(stdout,
"%s\n",
_(
"Upgrading packages..."));
281 (void) fflush(stdout);
321 if (ts->suggests != NULL && ts->nsuggests > 0) {
326 for (i = 0; i < ts->nsuggests && (s = (
char *)ts->suggests[i]) != NULL;
327 s =
_free(s), ts->suggests[i++] = NULL)
331 ts->suggests =
_free(ts->suggests);
396 const char * fn = NULL;
400 if (av != NULL && av[0] != NULL)
401 ftsp =
Fts_open((
char *
const *)av, _ftsOpts, NULL);
403 while((fts =
Fts_read(ftsp)) != NULL) {
409 if (fts_level > 0 && fts->
fts_level >= fts_level)
452 "%{?_rpmgi_pattern_glob}"
453 "%{!?_rpmgi_pattern_glob:.}",
458 "%{?_rpmgi_pattern_regex:%{_rpmgi_pattern_regex ", arg,
"}}"
459 "%{!?_rpmgi_pattern_regex:", arg,
"-[^-]+-[^-]+\\.[^.]+\\.rpm$}",
472 if (xx || dav == NULL)
476 for (i = 0; i < dac; i++) {
485 for (i = 0; i < nac; i++) {
486 const char * t = nav[i];
487 size_t nt = strlen(t);
490 if (!(nt > 0 && t[nt-1] ==
'/'))
494 nav[i] =
_free(nav[i]);
499 if (nac > 0 && nav != NULL)
513 mirePattern =
_free(mirePattern);
541 if (argv == NULL)
goto exit;
544 rpmcliPackagesTotal = 0;
556 time_t ttid = (time_t)ia->
arbtid;
558 ctime(&ttid), ia->
arbtid);
568 #if defined(SUPPORT_NOSIGNATURES)
570 VSF_SET(vsflags, NOSHA1HEADER);
597 if (relocations->
newPath == NULL)
606 const char * fn = NULL;;
666 if (xx && he->
c == 1) {
674 _(
"package %s is not relocatable\n"), he->
p.
str);
690 assert(xx != 0 && he->
p.
str != NULL);
730 numFailed = (numRPMS ? numRPMS : 1);
731 if (numFailed)
goto exit;
742 numFailed = (numRPMS ? numRPMS : 1);
753 numFailed = (numRPMS ? numRPMS : 1);
757 if (numFailed)
goto exit;
780 if (argv == NULL)
return 0;
784 #if defined(SUPPORT_NOSIGNATURES)
786 VSF_SET(vsflags, NOSHA1HEADER);
814 time_t ttid = (time_t)ia->
arbtid;
816 ctime(&ttid), ia->
arbtid);
831 for (arg = argv; *arg; arg++) {
860 if (numFailed == 0 && numRPMS > 0) {
875 numFailed += (rc < 0 ? numRPMS : rc);
885 const char ** specFilePtr,
const char ** cookie)
890 if (fd == NULL ||
Ferror(fd)) {
896 fprintf(stdout,
_(
"Installing %s\n"), arg);
901 VSF_SET(nvsflags, NEEDPAYLOAD);
910 if (fd != NULL) (void)
Fclose(fd);