From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, John Cai <johncai86@gmail.com>
Subject: Re: [PATCH v3 4/4] Documentation: add lint-fsck-msgids
Date: Wed, 26 Oct 2022 04:43:32 +0200 [thread overview]
Message-ID: <221026.867d0ncncu.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <20221025224224.2352979-5-gitster@pobox.com>
On Tue, Oct 25 2022, Junio C Hamano wrote:
> During the initial development of the fsck-msgids.txt feature, it
> has become apparent that it is very much error prone to make sure
> the description in the documentation file are sorted and correctly
> match what is in the fsck.h header file.
I have local fixes for the same issues in the list of advice in our
docs, some of it's missing, wrong, out of date etc.
I tried to quickly adapt the generation script I had for that, which
works nicely, and by line count much shorter than the lint :)
Having to exhaustively list every *.c file that uses fsck.h is a bit of
a bother, but we have the same with the other generated *.h's, so it
shouldn't be too bad.
And this way, if we get it wrong we get a compile error:
$ git -P diff; make
diff --git a/Documentation/fsck-msgids.txt b/Documentation/fsck-msgids.txt
index 7af76ff99a5..f0b4308a6e7 100644
--- a/Documentation/fsck-msgids.txt
+++ b/Documentation/fsck-msgids.txt
@@ -1,6 +1,3 @@
-`badDate`::
- (ERROR) Invalid date format in an author/committer line.
-
`badDateOverflow`::
(ERROR) Invalid date value in an author/committer line.
CC fsck.o
fsck.c:31:9: error: excess elements in array initializer [-Werror]
31 | { NULL, NULL, NULL, -1 }
| ^
fsck.c:31:9: note: (near initialization for ‘msg_id_info’)
fsck.c: In function ‘fsck_ident’:
fsck.c:810:51: error: ‘FSCK_MSG_BAD_DATE’ undeclared (first use in this function); did you mean ‘FSCK_MSG_BAD_NAME’?
810 | return report(options, oid, type, FSCK_MSG_BAD_DATE, "invalid author/committer line - bad date");
| ^~~~~~~~~~~~~~~~~
| FSCK_MSG_BAD_NAME
fsck.c:810:51: note: each undeclared identifier is reported only once for each function it appears in
cc1: all warnings being treated as errors
make: *** [Makefile:2617: fsck.o] Error 1
So, if you're interested:
Makefile | 12 ++++++++++++
fsck.h | 8 +-------
generate-fsckmsgids.sh | 42 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 55 insertions(+), 7 deletions(-)
diff --git a/Makefile b/Makefile
index 85f03c6aed1..21bbc3dfb9f 100644
--- a/Makefile
+++ b/Makefile
@@ -860,6 +860,7 @@ REFTABLE_TEST_LIB = reftable/libreftable_test.a
GENERATED_H += command-list.h
GENERATED_H += config-list.h
GENERATED_H += hook-list.h
+GENERATED_H += fsck-msgids.h
.PHONY: generated-hdrs
generated-hdrs: $(GENERATED_H)
@@ -2289,6 +2290,14 @@ git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
$(filter %.o,$^) $(LIBS)
+# Unfortunately our dependency management of generated headers used
+# from within other headers suck, so we'll need to list every user of
+# fsck.h here, but not too bad...
+FSCK_MSGIDS_H_BUILTINS = fsck index-pack mktag receive-pack unpack-objects
+$(foreach f,$(FSCK_MSGIDS_H_BUILTINS:%=builtin/%),$f.sp $f.s $f.o): fsck-msgids.h
+FSCK_MSGIDS_H_LIBS = fetch-pack fsck
+$(foreach f,$(FSCK_MSGIDS_H_LIBS),$f.sp $f.s $f.o): fsck-msgids.h
+
help.sp help.s help.o: command-list.h
builtin/bugreport.sp builtin/bugreport.s builtin/bugreport.o: hook-list.h
@@ -2333,6 +2342,9 @@ command-list.h: $(wildcard Documentation/git*.txt)
hook-list.h: generate-hooklist.sh Documentation/githooks.txt
$(QUIET_GEN)$(SHELL_PATH) ./generate-hooklist.sh >$@
+fsck-msgids.h: generate-fsckmsgids.sh Documentation/fsck-msgids.txt
+ $(QUIET_GEN)$(SHELL_PATH) ./generate-fsckmsgids.sh >$@
+
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):\
$(localedir_SQ):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
$(gitwebdir_SQ):$(PERL_PATH_SQ):$(PAGER_ENV):\
diff --git a/fsck.h b/fsck.h
index 6fbce68ad67..1a9d68482ea 100644
--- a/fsck.h
+++ b/fsck.h
@@ -2,6 +2,7 @@
#define GIT_FSCK_H
#include "oidset.h"
+#include "fsck-msgids.h"
enum fsck_msg_type {
/* for internal use only */
@@ -79,13 +80,6 @@ enum fsck_msg_type {
/* ignored (elevated when requested) */ \
FUNC(EXTRA_HEADER_ENTRY, IGNORE)
-#define MSG_ID(id, msg_type) FSCK_MSG_##id,
-enum fsck_msg_id {
- FOREACH_FSCK_MSG_ID(MSG_ID)
- FSCK_MSG_MAX
-};
-#undef MSG_ID
-
struct fsck_options;
struct object;
diff --git a/generate-fsckmsgids.sh b/generate-fsckmsgids.sh
new file mode 100755
index 00000000000..bbf236159aa
--- /dev/null
+++ b/generate-fsckmsgids.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+HT=' '
+
+fsck_list () {
+ sed -n \
+ -e "/::$/ {
+ s/::\$//;
+ s/^\`//;
+ s/\`$//;
+ p;
+ }" \
+ <Documentation/fsck-msgids.txt
+}
+
+txt2label () {
+ sed \
+ -e 's/\([^_]\)\([[:upper:]]\)/\1_\2/g' \
+ -e 's/^/FSCK_MSG_/' |
+ tr '[:lower:]' '[:upper:]'
+}
+
+fsck_labels () {
+ fsck_list |
+ txt2label
+}
+
+listify () {
+ sed \
+ -e "2,\$s/^/$HT/" \
+ -e 's/$/,/'
+}
+
+cat <<EOF
+/* Automatically generated by generate-fsck-msgids.sh */
+
+enum fsck_msg_id {
+ /* Auto-generated from Documentation/fsck-msgids.txt */
+ $(fsck_labels | listify)
+ FSCK_MSG_MAX
+};
+EOF
next prev parent reply other threads:[~2022-10-26 2:47 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-24 15:00 [PATCH 0/2] Document fsck msg ids John Cai via GitGitGadget
2022-10-24 15:00 ` [PATCH 1/2] fsck: remove the unused BAD_TAG_OBJECT John Cai via GitGitGadget
2022-10-24 16:57 ` Junio C Hamano
2022-10-24 18:16 ` Junio C Hamano
2022-10-24 18:33 ` John Cai
2022-10-24 23:39 ` Jeff King
2022-10-24 15:00 ` [PATCH 2/2] fsck: document msg-id John Cai via GitGitGadget
2022-10-24 17:33 ` Junio C Hamano
2022-10-25 9:41 ` Ævar Arnfjörð Bjarmason
2022-10-25 16:07 ` Junio C Hamano
2022-10-24 18:51 ` [PATCH 0/2] Document fsck msg ids Junio C Hamano
2022-10-25 3:17 ` [PATCH v2 " John Cai via GitGitGadget
2022-10-25 3:17 ` [PATCH v2 1/2] fsck: remove the unused BAD_TAG_OBJECT John Cai via GitGitGadget
2022-10-25 3:17 ` [PATCH v2 2/2] fsck: document msg-id John Cai via GitGitGadget
2022-10-25 4:30 ` [PATCH v2 0/2] Document fsck msg ids Junio C Hamano
2022-10-25 4:40 ` Junio C Hamano
2022-10-25 5:12 ` [PATCH] Documentation: add lint-fsck-msgids Junio C Hamano
2022-10-25 22:42 ` [PATCH v3 0/4] document fsck error message ids Junio C Hamano
2022-10-25 22:42 ` [PATCH v3 1/4] fsck: remove the unused BAD_TAG_OBJECT Junio C Hamano
2022-10-25 22:42 ` [PATCH v3 2/4] fsck: remove the unused MISSING_TREE_OBJECT Junio C Hamano
2022-10-25 22:42 ` [PATCH v3 3/4] fsck: document msg-id Junio C Hamano
2022-10-25 22:42 ` [PATCH v3 4/4] Documentation: add lint-fsck-msgids Junio C Hamano
2022-10-26 2:43 ` Ævar Arnfjörð Bjarmason [this message]
2022-10-26 5:34 ` Jeff King
2022-10-26 6:46 ` Junio C Hamano
2022-10-26 11:35 ` Ævar Arnfjörð Bjarmason
2022-10-28 1:23 ` Jeff King
2022-10-28 2:04 ` Ævar Arnfjörð Bjarmason
2022-10-28 5:32 ` Jeff King
2022-10-28 10:41 ` Ævar Arnfjörð Bjarmason
2022-10-28 3:02 ` John Cai
2022-10-28 3:11 ` Ævar Arnfjörð Bjarmason
2022-10-28 5:32 ` Junio C Hamano
2022-10-28 5:37 ` Jeff King
2022-10-28 5:35 ` Jeff King
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=221026.867d0ncncu.gmgdl@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johncai86@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).