[dpkg] 176/192: dpkg: Print the package name on maintainter script errors

Ximin Luo infinity0 at debian.org
Tue Oct 17 11:04:15 UTC 2017


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch pu/reproducible_builds
in repository dpkg.

commit 44b0bf1a576e3b0cfcb4c87f18d4195c3ffccb8f
Author: Guillem Jover <guillem at debian.org>
Date:   Mon Oct 9 08:15:25 2017 +0200

    dpkg: Print the package name on maintainter script errors
    
    When processing an archive or a package, we can call maintainer script
    for other packages. Not printing the package name for the script that
    failed means we can get very confusing output.
    
    Closes: #877521
---
 debian/changelog |  1 +
 src/script.c     | 29 ++++++++++++++++++++++-------
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 4416caa..db66fbf 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -46,6 +46,7 @@ dpkg (1.19.0) UNRELEASED; urgency=medium
   * Make --uniform-compression the new default dpkg-deb behavior. Add support
     for negating the option via --no-uniform-compression.
   * Clarify subprocess error message by shuffling words around.
+  * Print the package name on maintainter script errors. Closes: #877521
   * Perl modules:
     - Switch from Dpkg::Util to List::Util, now that the module in the
       new required Perl contains the needed functions.
diff --git a/src/script.c b/src/script.c
index 2f252ae..ac58779 100644
--- a/src/script.c
+++ b/src/script.c
@@ -212,10 +212,11 @@ vmaintscript_installed(struct pkginfo *pkg, const char *scriptname,
 	struct command cmd;
 	const char *scriptpath;
 	struct stat stab;
-	char buf[100];
+	char *buf;
 
 	scriptpath = pkg_infodb_get_file(pkg, &pkg->installed, scriptname);
-	sprintf(buf, _("installed %s script"), desc);
+	m_asprintf(&buf, _("installed %s package %s script"),
+	           pkg_name(pkg, pnaw_nonambig), desc);
 
 	command_init(&cmd, scriptpath, buf);
 	command_add_arg(&cmd, scriptname);
@@ -223,6 +224,8 @@ vmaintscript_installed(struct pkginfo *pkg, const char *scriptname,
 
 	if (stat(scriptpath, &stab)) {
 		command_destroy(&cmd);
+		free(buf);
+
 		if (errno == ENOENT) {
 			debug(dbg_scripts,
 			      "vmaintscript_installed nonexistent %s",
@@ -234,6 +237,7 @@ vmaintscript_installed(struct pkginfo *pkg, const char *scriptname,
 	maintscript_exec(pkg, &pkg->installed, &cmd, &stab, 0);
 
 	command_destroy(&cmd);
+	free(buf);
 
 	return 1;
 }
@@ -282,10 +286,11 @@ maintscript_new(struct pkginfo *pkg, const char *scriptname,
 	struct command cmd;
 	struct stat stab;
 	va_list args;
-	char buf[100];
+	char *buf;
 
 	strcpy(cidirrest, scriptname);
-	sprintf(buf, _("new %s script"), desc);
+	m_asprintf(&buf, _("new %s package %s script"),
+	           pkg_name(pkg, pnaw_nonambig), desc);
 
 	va_start(args, cidirrest);
 	command_init(&cmd, cidir, buf);
@@ -295,6 +300,8 @@ maintscript_new(struct pkginfo *pkg, const char *scriptname,
 
 	if (stat(cidir, &stab)) {
 		command_destroy(&cmd);
+		free(buf);
+
 		if (errno == ENOENT) {
 			debug(dbg_scripts,
 			      "maintscript_new nonexistent %s '%s'",
@@ -306,6 +313,7 @@ maintscript_new(struct pkginfo *pkg, const char *scriptname,
 	maintscript_exec(pkg, &pkg->available, &cmd, &stab, 0);
 
 	command_destroy(&cmd);
+	free(buf);
 	post_script_tasks();
 
 	return 1;
@@ -320,10 +328,11 @@ maintscript_fallback(struct pkginfo *pkg,
 	struct command cmd;
 	const char *oldscriptpath;
 	struct stat stab;
-	char buf[100];
+	char *buf;
 
 	oldscriptpath = pkg_infodb_get_file(pkg, &pkg->installed, scriptname);
-	sprintf(buf, _("old %s script"), desc);
+	m_asprintf(&buf, _("old %s package %s script"),
+	           pkg_name(pkg, pnaw_nonambig), desc);
 
 	command_init(&cmd, oldscriptpath, buf);
 	command_add_args(&cmd, scriptname, ifok,
@@ -336,6 +345,7 @@ maintscript_fallback(struct pkginfo *pkg,
 			      "maintscript_fallback nonexistent %s '%s'",
 			      scriptname, oldscriptpath);
 			command_destroy(&cmd);
+			free(buf);
 			return 0;
 		}
 		warning(_("unable to stat %s '%.250s': %s"),
@@ -343,6 +353,7 @@ maintscript_fallback(struct pkginfo *pkg,
 	} else {
 		if (!maintscript_exec(pkg, &pkg->installed, &cmd, &stab, SUBPROC_WARN)) {
 			command_destroy(&cmd);
+			free(buf);
 			post_script_tasks();
 			return 1;
 		}
@@ -350,7 +361,8 @@ maintscript_fallback(struct pkginfo *pkg,
 	notice(_("trying script from the new package instead ..."));
 
 	strcpy(cidirrest, scriptname);
-	sprintf(buf, _("new %s script"), desc);
+	m_asprintf(&buf, _("new %s package %s script"),
+	           pkg_name(pkg, pnaw_nonambig), desc);
 
 	command_destroy(&cmd);
 	command_init(&cmd, cidir, buf);
@@ -361,6 +373,8 @@ maintscript_fallback(struct pkginfo *pkg,
 
 	if (stat(cidir, &stab)) {
 		command_destroy(&cmd);
+		free(buf);
+
 		if (errno == ENOENT)
 			ohshit(_("there is no script in the new version of the package - giving up"));
 		else
@@ -371,6 +385,7 @@ maintscript_fallback(struct pkginfo *pkg,
 	notice(_("... it looks like that went OK"));
 
 	command_destroy(&cmd);
+	free(buf);
 	post_script_tasks();
 
 	return 1;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/dpkg.git



More information about the Reproducible-commits mailing list