[debhelper-devel] [debhelper] 02/02: dh_installman: Split manpages between processes

Niels Thykier nthykier at moszumanska.debian.org
Mon Jun 26 12:10:35 UTC 2017


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

nthykier pushed a commit to branch master
in repository debhelper.

commit f9999ffaa5995ebef7cc9c5dc1dc7efc10bb5604
Author: Niels Thykier <niels at thykier.net>
Date:   Mon Jun 26 11:56:35 2017 +0000

    dh_installman: Split manpages between processes
    
    Signed-off-by: Niels Thykier <niels at thykier.net>
---
 debian/changelog |  3 +++
 dh_installman    | 62 ++++++++++++++++++++++++++++++++++++++------------------
 2 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 75726f1..9c192de 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -25,6 +25,9 @@ debhelper (10.5.1) UNRELEASED; urgency=medium
   * dh_shlibdeps: Fix a regression where non-detached debug symbol files
     where not properly processed.  Thanks to Sven Joachim for reporting
     the issue.  (Closes: #865982)
+  * dh_installman: When re-encoding manpages, use the actual manpages as
+    tasks to split rather than packages.  This provides a much better
+    performance if the manpages are unevenly split between the packages.
 
  -- Niels Thykier <niels at thykier.net>  Sun, 25 Jun 2017 18:02:30 +0000
 
diff --git a/dh_installman b/dh_installman
index 236774f..930152f 100755
--- a/dh_installman
+++ b/dh_installman
@@ -232,30 +232,52 @@ on_items_in_parallel(\@all_packages, sub {
 			rm_files($sofile);
 			make_symlink_raw_target($sodest, $sofile);
 		}
-
-		# Now utf-8 conversion.
-		if (defined `man --version`) {
-			foreach my $dir (qw{usr/share/man}) {
-				next unless -e "$tmp/$dir";
-				my @files;
-				find(sub {
-						return if -l $_ || ! -f _;
-						my ($tmp, $orig) = ($_.".new", $_);
-						complex_doit "man --recode UTF-8 ./\Q$orig\E > \Q$tmp\E";
-						# recode uncompresses compressed pages
-						rm_files($orig) if s/\.(gz|Z)$//;
-						rename_path($tmp, $_);
-						# Schedule a permission reset
-						push(@files, "${File::Find::dir}/${_}");
-					}, "$tmp/$dir");
-				# Bulk reset permissions of all re-encoded files
-				xargs(\@files, 'chmod', '0644', '--') if @files;
-			}
-		}
 	}
 
 });
 
+# Now utf-8 conversion.
+if (defined `man --version`) {
+	my (@manpages_to_reencode, @issues);
+	for my $package (@{$dh{DOPACKAGES}}) {
+		next if is_udeb($package);
+		my $tmp = tmpdir($package);
+		foreach my $dir (qw{usr/share/man}) {
+			next unless -e "$tmp/$dir";
+			find(sub {
+					return if -l $_ || !-f _;
+					if ($_ =~ m/\.dh-new$/) {
+						push(@issues, "${File::Find::dir}/${_}");
+						return;
+					}
+					push(@manpages_to_reencode, "${File::Find::dir}/${_}");
+				}, "$tmp/$dir");
+		}
+		if (@issues) {
+			warning("Removing temporary manpages from another dh_installman instance");
+			rm_files(@issues);
+			warning("Possibly race-condition detected or left-overs from an interrupted dh_installman (e.g. with ^C)");
+			error("Please ensure there are no parallel dh_installman's running (for this pkg) and then re-run dh_installman");
+		}
+	}
+	if (@manpages_to_reencode) {
+		on_items_in_parallel(\@manpages_to_reencode, sub {
+			for my $manpage (@_) {
+				my $manpage_tmp = "${manpage}.dh-new";
+				complex_doit "man --recode UTF-8 ./\Q$manpage\E > \Q$manpage_tmp\E";
+				# recode uncompresses compressed pages
+				rm_files($manpage) if $manpage =~ s/\.(gz|Z)$//;
+				rename_path($manpage_tmp, $manpage);
+			}
+			# Bulk reset permissions of all re-encoded files
+			xargs(\@_, 'chmod', '0644', '--');
+		});
+	}
+} else {
+	# Should only occur during debhelper building itself (to avoid a B-D on man-db).
+	warning("man is not available.  Skipping re-encode of UTF-8 manpages")
+}
+
 # Check if a file is a .so man page, for use by File::Find.
 sub find_so_man {
 	# The -s test is because a .so file tends to be small. We don't want

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




More information about the debhelper-devel mailing list