aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Ludd <solar@gentoo.org>2006-01-24 01:02:26 +0000
committerNed Ludd <solar@gentoo.org>2006-01-24 01:02:26 +0000
commit9c51cbef1a893d3d1d2a678502432f81df2b8f49 (patch)
treebe4e6f13d871cf537f87ac785c655947897a42bd
parentfirst (incompelete) pass at glsa handling (diff)
downloadportage-utils-9c51cbef1a893d3d1d2a678502432f81df2b8f49.tar.gz
portage-utils-9c51cbef1a893d3d1d2a678502432f81df2b8f49.tar.bz2
portage-utils-9c51cbef1a893d3d1d2a678502432f81df2b8f49.zip
- lets use a save and restore method for handling stderr so we can reopen the same filedes later if need be
-rw-r--r--main.c9
-rw-r--r--qmerge.c75
2 files changed, 61 insertions, 23 deletions
diff --git a/main.c b/main.c
index 5d942555..753a6d8f 100644
--- a/main.c
+++ b/main.c
@@ -1,7 +1,7 @@
/*
* Copyright 2005-2006 Gentoo Foundation
* Distributed under the terms of the GNU General Public License v2
- * $Header: /var/cvsroot/gentoo-projects/portage-utils/main.c,v 1.100 2006/01/23 12:50:58 solar Exp $
+ * $Header: /var/cvsroot/gentoo-projects/portage-utils/main.c,v 1.101 2006/01/24 01:02:26 solar Exp $
*
* Copyright 2005-2006 Ned Ludd - <solar@gentoo.org>
* Copyright 2005-2006 Mike Frysinger - <vapier@gentoo.org>
@@ -75,6 +75,8 @@ char install_mask[1024] = "";
const char *err_noapplet = "Sorry this applet was disabled at compile time";
+FILE *saved_stderr;
+
#define _q_unused_ __attribute__((__unused__))
#ifndef BUFSIZE
@@ -134,7 +136,7 @@ void no_colors() {
NULL
#define COMMON_GETOPTS_CASES(applet) \
case 'v': ++verbose; break; \
- case 'q': ++quiet; stderr = freopen("/dev/null", "w", stderr); break; \
+ case 'q': ++quiet; if (stderr == saved_stderr) stderr = fopen("/dev/null", "w"); break; \
case 'V': version_barf( applet ## _rcsid ); break; \
case 'h': applet ## _usage(EXIT_SUCCESS); break; \
case 'C': no_colors(); break; \
@@ -968,12 +970,15 @@ fuckit:
void cleanup() {
reinitialize_as_needed();
free_sets(virtuals);
+ if (saved_stderr != stderr)
+ fclose(stderr);
}
int main(int argc, char **argv)
{
IF_DEBUG(init_coredumps());
argv0 = argv[0];
+ saved_stderr = stderr;
#ifdef ENABLE_NLS
setlocale(LC_ALL, "");
diff --git a/qmerge.c b/qmerge.c
index dc47ebc4..5a9e8a78 100644
--- a/qmerge.c
+++ b/qmerge.c
@@ -1,7 +1,7 @@
/*
* Copyright 2005-2006 Gentoo Foundation
* Distributed under the terms of the GNU General Public License v2
- * $Header: /var/cvsroot/gentoo-projects/portage-utils/qmerge.c,v 1.21 2006/01/24 00:28:32 vapier Exp $
+ * $Header: /var/cvsroot/gentoo-projects/portage-utils/qmerge.c,v 1.22 2006/01/24 01:02:26 solar Exp $
*
* Copyright 2005-2006 Ned Ludd - <solar@gentoo.org>
* Copyright 2005-2006 Mike Frysinger - <vapier@gentoo.org>
@@ -34,18 +34,18 @@ static struct option const qmerge_long_opts[] = {
COMMON_LONG_OPTS
};
static const char *qmerge_opts_help[] = {
- "force download overwriting existing files",
- "search available packages",
- "install package",
- "uninstall package",
- "pretend only",
- "dont prompt before overwriting",
- "dont merge dependencies",
- "don't verify MD5 digest of files",
- COMMON_OPTS_HELP
+ "Force download overwriting existing files",
+ "Search available packages",
+ "Install package",
+ "Uninstall package",
+ "Pretend only",
+ "Don't prompt before overwriting",
+ "Don't merge dependencies",
+ "Don't verify MD5 digest of files",
+ COMMON_OPTS_HELP
};
-static const char qmerge_rcsid[] = "$Id: qmerge.c,v 1.21 2006/01/24 00:28:32 vapier Exp $";
+static const char qmerge_rcsid[] = "$Id: qmerge.c,v 1.22 2006/01/24 01:02:26 solar Exp $";
#define qmerge_usage(ret) usage(ret, QMERGE_FLAGS, qmerge_long_opts, qmerge_opts_help, lookup_applet_idx("qmerge"))
char pretend = 0;
@@ -101,7 +101,8 @@ int q_unlink_q(char *path, const char *func, int line) {
#define unlink_q(path) q_unlink_q(path, __FUNCTION__, __LINE__)
-#define qprintf(fmt, args...) { do { if (!quiet) fprintf(stdout, _( fmt ), ## args); } while (0); }
+#define qfprintf(stream, fmt, args...) { do { if (!quiet) fprintf(stream, _( fmt ), ## args); } while (0); }
+#define qprintf(fmt, args...) qfprintf(stdout, _( fmt ), ## args)
// rewrite using copyfile() utimes() stat(), lstat(), read() and perms.
int interactive_rename(const char *src, const char *dst, struct pkg_t *pkg) {
@@ -158,7 +159,7 @@ void fetch(const char *destdir, const char *src) {
void qmerge_initialize(const char *Packages) {
if (quiet)
- stderr = freopen("/dev/tty", "w", stderr);
+ stderr = saved_stderr;
if (strlen(BUSYBOX))
if (access(BUSYBOX, X_OK) != 0)
@@ -285,7 +286,7 @@ queue *resolve_rdepends(const int level, const struct pkg_t *package, queue *dep
case '<':
case '>':
case '=':
- qprintf("Unhandled depstring %s\n", ARGV[i]);
+ qfprintf(stderr, "Unhandled depstring %s\n", ARGV[i]);
break;
default:
if ((subatom = atom_explode(ARGV[i])) != NULL) {
@@ -367,22 +368,52 @@ void pkg_merge(int level, depend_atom *atom, struct pkg_t *pkg) {
}
if (pretend) {
char install_ver[126] = "";
+ char c = 'N';
p = best_version(pkg->CATEGORY, atom->PN);
- if (strlen(p) < 1)
+ if (strlen(p) < 1) {
+ c = 'N';
snprintf(buf, sizeof(buf), "%sN%s", GREEN, NORM);
- else {
+ } else {
depend_atom *subatom = atom_explode(p);
if (subatom != NULL) {
if (subatom->PR_int)
+ snprintf(buf, sizeof(buf), "%s-%s-r%i", subatom->PN, subatom->PV, subatom->PR_int);
+ else
+ snprintf(buf, sizeof(buf), "%s-%s", subatom->PN, subatom->PV);
+
+ if (atom->PR_int)
+ snprintf(install_ver, sizeof(install_ver), "%s-%s-r%i", atom->PN, atom->PV, atom->PR_int);
+ else
+ snprintf(install_ver, sizeof(install_ver), "%s-%s", atom->PN, atom->PV);
+
+ ret = atom_compare_str(install_ver, buf);
+ switch(ret) {
+ case EQUAL: c = 'R'; break;
+ case NEWER: c = 'U'; break;
+ case OLDER: c = 'D'; break;
+ default: c = '?'; break;
+ }
+
+ if (subatom->PR_int)
snprintf(buf, sizeof(buf), "%s-r%i", subatom->PV, subatom->PR_int);
else
- strncpy(buf, subatom->PV, sizeof(buf));
+ snprintf(buf, sizeof(buf), "%s", subatom->PV);
snprintf(install_ver, sizeof(install_ver), "[%s%s%s] ", DKBLUE, buf, NORM);
atom_implode(subatom);
}
- snprintf(buf, sizeof(buf), "%sR%s", YELLOW, NORM);
+ if (c == 'R')
+ snprintf(buf, sizeof(buf), "%s%c%s", YELLOW, c, NORM);
+ if ((c == 'U') || (c == 'D'))
+ snprintf(buf, sizeof(buf), "%s%c%s", BLUE, c, NORM);
+#ifdef UPGRADE_ONLY
+ switch(c) {
+ case 'N':
+ case 'U': break;
+ default: return;
+ }
+#endif
}
printf("[%s] ", buf);
for (i = 0; i < level; i++) putchar(' ');
@@ -394,8 +425,10 @@ void pkg_merge(int level, depend_atom *atom, struct pkg_t *pkg) {
IF_DEBUG(fprintf(stderr, "+Depstring: %s\n", pkg->RDEPEND));
// <hack>
- if (strncmp(pkg->RDEPEND, "|| ", 3) == 0)
+ if (strncmp(pkg->RDEPEND, "|| ", 3) == 0) {
+ qfprintf(stderr, "fix this rdepend hack %s\n", pkg->RDEPEND);
strcpy(pkg->RDEPEND, "");
+ }
// </hack>
makeargv(pkg->RDEPEND, &ARGC, &ARGV);
@@ -409,7 +442,7 @@ void pkg_merge(int level, depend_atom *atom, struct pkg_t *pkg) {
case '<':
case '>':
case '=':
- qprintf("Unhandled depstring %s\n", ARGV[i]);
+ qfprintf(stderr, "Unhandled depstring %s\n", ARGV[i]);
break;
default:
if ((subatom = atom_explode(ARGV[i])) != NULL) {
@@ -424,7 +457,7 @@ void pkg_merge(int level, depend_atom *atom, struct pkg_t *pkg) {
if (virtuals == NULL)
virtuals = resolve_virtuals();
resolved = find_binpkg(virtual(ARGV[i], virtuals));
- if ((resolved == NULL) || (!strlen(resolved))) warn("puke here cant resolve virtual(%s %s)", ARGV[i], virtual(ARGV[i], virtuals));
+ if ((resolved == NULL) || (!strlen(resolved))) warn("we could puke here now that we cant resolve virtual(%s %s)", ARGV[i], virtual(ARGV[i], virtuals));
} else
resolved = NULL;