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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.