From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 53F311391ED for ; Sat, 8 Mar 2014 05:51:39 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 3A603E0B16; Sat, 8 Mar 2014 05:51:22 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 05287E0B14 for ; Sat, 8 Mar 2014 05:51:20 +0000 (UTC) Received: from spoonbill.gentoo.org (spoonbill.gentoo.org [81.93.255.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id D815933FBCD for ; Sat, 8 Mar 2014 05:51:19 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by spoonbill.gentoo.org (Postfix) with ESMTP id 1A404188F9 for ; Sat, 8 Mar 2014 05:51:17 +0000 (UTC) From: "Mike Frysinger" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Mike Frysinger" Message-ID: <1392706725.005c787741d0506fbbd497c91a6f643f178bb7da.vapier@gentoo> Subject: [gentoo-commits] proj/portage-utils:master commit in: / X-VCS-Repository: proj/portage-utils X-VCS-Files: qmerge.c X-VCS-Directories: / X-VCS-Committer: vapier X-VCS-Committer-Name: Mike Frysinger X-VCS-Revision: 005c787741d0506fbbd497c91a6f643f178bb7da X-VCS-Branch: master Date: Sat, 8 Mar 2014 05:51:17 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 2ce41017-c2e7-409f-ba4f-e9f0f0e2f603 X-Archives-Hash: 9e61785f7fc5f08e16f4416bc7f3793a commit: 005c787741d0506fbbd497c91a6f643f178bb7da Author: Mike Frysinger gentoo org> AuthorDate: Tue Feb 18 06:58:45 2014 +0000 Commit: Mike Frysinger gentoo org> CommitDate: Tue Feb 18 06:58:45 2014 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage-utils.git;a=commit;h=005c7877 qmerge: auto fix local Packages files via `emaint binhost --fix` --- qmerge.c | 55 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/qmerge.c b/qmerge.c index 63855b6..479c551 100644 --- a/qmerge.c +++ b/qmerge.c @@ -1,7 +1,7 @@ /* * Copyright 2005-2010 Gentoo Foundation * Distributed under the terms of the GNU General Public License v2 - * $Header: /var/cvsroot/gentoo-projects/portage-utils/qmerge.c,v 1.136 2014/02/18 06:58:13 vapier Exp $ + * $Header: /var/cvsroot/gentoo-projects/portage-utils/qmerge.c,v 1.137 2014/02/18 06:58:45 vapier Exp $ * * Copyright 2005-2010 Ned Ludd - * Copyright 2005-2010 Mike Frysinger - @@ -65,7 +65,7 @@ static const char * const qmerge_opts_help[] = { COMMON_OPTS_HELP }; -static const char qmerge_rcsid[] = "$Id: qmerge.c,v 1.136 2014/02/18 06:58:13 vapier Exp $"; +static const char qmerge_rcsid[] = "$Id: qmerge.c,v 1.137 2014/02/18 06:58:45 vapier Exp $"; #define qmerge_usage(ret) usage(ret, QMERGE_FLAGS, qmerge_long_opts, qmerge_opts_help, lookup_applet_idx("qmerge")) char search_pkgs = 0; @@ -1378,7 +1378,7 @@ pkg_fetch(int level, const depend_atom *atom, const struct pkg_t *pkg) } if (access(buf, R_OK) == 0) { if (!pkg->SHA1[0] && !pkg->MD5[0]) { - warn("No checksum data for %s", buf); + warn("No checksum data for %s (try `emaint binhost --fix`)", buf); return; } else { if (pkg_verify_checksums(buf, pkg, atom, qmerge_strict, !quiet) == 0) { @@ -1520,20 +1520,51 @@ _q_static FILE * open_binpkg_index(void) { FILE *fp; - char buf[BUFSIZ]; + char *path; - snprintf(buf, sizeof(buf), "%s/portage/%s", port_tmpdir, Packages); - fp = fopen(buf, "r"); + xasprintf(&path, "%s/portage/%s", port_tmpdir, Packages); + fp = fopen(path, "r"); if (fp) - return fp; + goto done; + free(path); - snprintf(buf, sizeof(buf), "%s/%s", pkgdir, Packages); - fp = fopen(buf, "r"); + xasprintf(&path, "%s/%s", pkgdir, Packages); + fp = fopen(path, "r"); if (fp) - return fp; + goto done; - errp("Unable to open package file %s in %s/portage or %s", + /* This is normal when installing from local repo only. */ + warnp("Unable to open package file %s in %s/portage or %s", Packages, port_tmpdir, pkgdir); + warn("Attempting to manually regen via `emaint binhost`"); + + pid_t p; + int status; + + char argv_emaint[] = "emaint"; + char argv_binhost[] = "binhost"; + char argv_fix[] = "--fix"; + char *argv[] = { + argv_emaint, + argv_binhost, + argv_fix, + NULL, + }; + + p = vfork(); + switch (p) { + case 0: + _exit(execvp(argv[0], argv)); + case -1: + errp("vfork failed"); + } + waitpid(p, &status, 0); + + fp = fopen(path, "r"); + + done: + free(path); + return fp; } _q_static struct pkg_t * @@ -1812,7 +1843,7 @@ parse_packages(queue *todo) free(buf); fclose(fp); - return 0; + return EXIT_SUCCESS; } _q_static queue *