From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: "SZEDER Gábor" <szeder.dev@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Documentation/build-docdep.perl: generate sorted output
Date: Fri, 21 Oct 2022 18:52:26 +0200 [thread overview]
Message-ID: <221021.86ilkddsor.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <20221021102950.539148-1-szeder.dev@gmail.com>
On Fri, Oct 21 2022, SZEDER Gábor wrote:
> To make sure that our manpages are rebuilt when any of the included
> source files change and only the affected manpages are rebuilt,
> 'build-docdep.perl' scans our documentation source files for include
> directives, and outputs 'make' dependencies to be included by
> 'Documentation/Makefile'. This script relies on Perl's hash data
> structures, and generates its output while iterating over them, and
> since hashes in Perl are very much unordered, the output varies
> greatly from run to run, both the order of targets and the order of
> dependencies of each target.
>
> This lack of ordering doesn't matter for 'make', because it cares
> neither about the order of targets in a Makefile nor about the order
> of a target's dependencies. However, it does matter to developers
> looking into build issues potentially involving these generated
> dependencies, as it's rather hard to tell whether there are any
> relevant (i.e. not order-only) changes among the dependencies compared
> to the previous run.
>
> So let's make 'build-docdep.perl's output stable and ordered by
> sorting the keys of the hashes before iterating over them.
>
> Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
> ---
> Documentation/build-docdep.perl | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/build-docdep.perl b/Documentation/build-docdep.perl
> index ba4205e030..1b3ac8fdd9 100755
> --- a/Documentation/build-docdep.perl
> +++ b/Documentation/build-docdep.perl
> @@ -38,9 +38,10 @@
> }
> }
>
> -while (my ($text, $included) = each %include) {
> +foreach my $text (sort keys %include) {
> + my $included = $include{$text};
> if (! exists $included{$text} &&
> (my $base = $text) =~ s/\.txt$//) {
> - print "$base.html $base.xml : ", join(" ", keys %$included), "\n";
> + print "$base.html $base.xml : ", join(" ", sort keys %$included), "\n";
> }
> }
This looks good to me, FWIW I ran this ad-hoc test and it's the same,
i.e. we end up with the same order as the initial glob order on the FS:
diff --git a/Documentation/build-docdep.perl b/Documentation/build-docdep.perl
index ba4205e0302..6f6e6c62eb8 100755
--- a/Documentation/build-docdep.perl
+++ b/Documentation/build-docdep.perl
@@ -1,9 +1,13 @@
#!/usr/bin/perl
+use strict;
+use warnings;
my %include = ();
my %included = ();
-for my $text (<*.txt>) {
+my @txt = <*.txt>;
+
+for my $text (@txt) {
open I, '<', $text || die "cannot read: $text";
while (<I>) {
if (/^include::/) {
@@ -38,9 +42,11 @@
}
}
-while (my ($text, $included) = each %include) {
+
+for my $text (grep { exists $include{$_} } @txt) {
+ my $included = $include{$text};
if (! exists $included{$text} &&
(my $base = $text) =~ s/\.txt$//) {
- print "$base.html $base.xml : ", join(" ", keys %$included), "\n";
+ print "$base.html $base.xml : ", join(" ", sort keys %$included), "\n";
}
}
next prev parent reply other threads:[~2022-10-21 16:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-21 10:29 [PATCH] Documentation/build-docdep.perl: generate sorted output SZEDER Gábor
2022-10-21 16:52 ` Ævar Arnfjörð Bjarmason [this message]
2022-10-21 17:57 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=221021.86ilkddsor.gmgdl@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=szeder.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).