[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