git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/4] usage.c: add a non-fatal bug() function to go with BUG()

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Mar 28, 2021, 02:26 UTC
Message-ID
<patch-4.5-515d146cac8-20210328T022343Z-avarab@gmail.com>
In-Reply-To
<cover-0.5-00000000000-20210328T022343Z-avarab@gmail.com>

Add a bug() function that works like error() except the message is prefixed with "bug:" instead of "error:".

The reason this is needed is for e.g. the fsck code. If we encounter what we'd consider a BUG() in the middle of fsck traversal we'd still like to try as hard as possible to go past that object and complete the fsck, instead of hard dying. A follow-up commit will introduce such a use in object-file.c.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 .../technical/api-error-handling.txt          |  8 ++++-
 Documentation/technical/api-trace2.txt        |  4 +--
 git-compat-util.h                             |  3 ++
 run-command.c                                 | 11 +++++++
 t/helper/test-trace2.c                        | 14 +++++++--
 t/t0210-trace2-normal.sh                      | 19 ++++++++++++
 usage.c                                       | 29 +++++++++++++++++++
 7 files changed, 83 insertions(+), 5 deletions(-)
diff --git a/Documentation/technical/api-error-handling.txt b/Documentation/technical/api-error-handling.txt
index 8be4f4d0d6a..9d6ac6f6649 100644
--- a/Documentation/technical/api-error-handling.txt
+++ b/Documentation/technical/api-error-handling.txt
@@ -1,7 +1,7 @@
 Error reporting in git
 ======================
 
-`BUG`, `die`, `usage`, `error`, and `warning` report errors of
+`BUG`, `bug`, `die`, `usage`, `error`, and `warning` report errors of
 various kinds.
 
 - `BUG` is for failed internal assertions that should never happen,
@@ -18,6 +18,12 @@ various kinds.
   to the user and returns -1 for convenience in signaling the error
   to the caller.
 
+- `bug` (lower-case, not `BUG`) is supposed to be used like `BUG` but
+  has the same non-fatal semantics as `error`. It's meant to signal an
+  internal bug in a library whose caller might still want to attempt
+  some amount of graceful recovery, or to append other error output of
+  their own.
+
 - `warning` is for reporting situations that probably should not
   occur but which the user (and Git) can continue to work around
   without running into too many problems.  Like `error`, it
diff --git a/Documentation/technical/api-trace2.txt b/Documentation/technical/api-trace2.txt
index 3f52f981a2d..cafe373f405 100644
--- a/Documentation/technical/api-trace2.txt
+++ b/Documentation/technical/api-trace2.txt
@@ -465,8 +465,8 @@ completed.)
 ------------
 
 `"error"`::
-	This event is emitted when one of the `BUG()`, `error()`, `die()`,
-	`warning()`, or `usage()` functions are called.
+	This event is emitted when one of the `BUG()`, `bug()`, `error()`,
+	`die()`, `warning()`, or `usage()` functions are called.
 +
 ------------
 {
diff --git a/git-compat-util.h b/git-compat-util.h
index 9ddf9d7044b..13c1dcf9dcc 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -463,6 +463,7 @@ NORETURN void usage(const char *err);
 NORETURN void usagef(const char *err, ...) __attribute__((format (printf, 1, 2)));
 NORETURN void die(const char *err, ...) __attribute__((format (printf, 1, 2)));
 NORETURN void die_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
+int bug(const char *err, ...) __attribute__((format (printf, 1, 2)));
 int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
 int error_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
 void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
@@ -497,6 +498,8 @@ static inline int const_error(void)
 typedef void (*report_fn)(const char *, va_list params);
 
 void set_die_routine(NORETURN_PTR report_fn routine);
+void set_bug_routine(report_fn routine);
+report_fn get_bug_routine(void);
 void set_error_routine(report_fn routine);
 report_fn get_error_routine(void);
 void set_warn_routine(report_fn routine);
diff --git a/run-command.c b/run-command.c
index be6bc128cd9..8b818b063ff 100644
--- a/run-command.c
+++ b/run-command.c
@@ -348,6 +348,12 @@ static void fake_fatal(const char *err, va_list params)
 	vreportf("fatal: ", err, params);
 }
 
+static void child_bug_fn(const char *err, va_list params)
+{
+	const char msg[] = "bug() should not be called in child\n";
+	xwrite(2, msg, sizeof(msg) - 1);
+}
+
 static void child_error_fn(const char *err, va_list params)
 {
 	const char msg[] = "error() should not be called in child\n";
@@ -371,9 +377,12 @@ static void NORETURN child_die_fn(const char *err, va_list params)
 static void child_err_spew(struct child_process *cmd, struct child_err *cerr)
 {
 	static void (*old_errfn)(const char *err, va_list params);
+	static void (*old_bugfn)(const char *err, va_list params);
 
 	old_errfn = get_error_routine();
 	set_error_routine(fake_fatal);
+	old_bugfn = get_bug_routine();
+	set_bug_routine(fake_fatal);
 	errno = cerr->syserr;
 
 	switch (cerr->err) {
@@ -399,6 +408,7 @@ static void child_err_spew(struct child_process *cmd, struct child_err *cerr)
 		error_errno("cannot exec '%s'", cmd->argv[0]);
 		break;
 	}
+	set_bug_routine(old_bugfn);
 	set_error_routine(old_errfn);
 }
 
@@ -789,6 +799,7 @@ int start_command(struct child_process *cmd)
 		 * called, they can take stdio locks and malloc.
 		 */
 		set_die_routine(child_die_fn);
+		set_error_routine(child_bug_fn);
 		set_error_routine(child_error_fn);
 		set_warn_routine(child_warn_fn);
 
diff --git a/t/helper/test-trace2.c b/t/helper/test-trace2.c
index f93633f895a..6248427e4bf 100644
--- a/t/helper/test-trace2.c
+++ b/t/helper/test-trace2.c
@@ -198,7 +198,7 @@ static int ut_006data(int argc, const char **argv)
 	return 0;
 }
 
-static int ut_007bug(int argc, const char **argv)
+static int ut_007BUG(int argc, const char **argv)
 {
 	/*
 	 * Exercise BUG() to ensure that the message is printed to trace2.
@@ -206,6 +206,15 @@ static int ut_007bug(int argc, const char **argv)
 	BUG("the bug message");
 }
 
+static int ut_008bug(int argc, const char **argv)
+{
+	/*
+	 * Exercise BUG() to ensure that the message is printed to trace2.
+	 */
+	bug("the bug message");
+	return 0;
+}
+
 /*
  * Usage:
  *     test-tool trace2 <ut_name_1> <ut_usage_1>
@@ -222,7 +231,8 @@ static struct unit_test ut_table[] = {
 	{ ut_004child,    "004child",  "[<child_command_line>]" },
 	{ ut_005exec,     "005exec",   "<git_command_args>" },
 	{ ut_006data,     "006data",   "[<category> <key> <value>]+" },
-	{ ut_007bug,      "007bug",    "" },
+	{ ut_007BUG,      "007bug",    "" },
+	{ ut_008bug,      "008bug",    "" },
 };
 /* clang-format on */
 
diff --git a/t/t0210-trace2-normal.sh b/t/t0210-trace2-normal.sh
index 0cf3a63b75b..9c866af971f 100755
--- a/t/t0210-trace2-normal.sh
+++ b/t/t0210-trace2-normal.sh
@@ -166,6 +166,25 @@ test_expect_success 'BUG messages are written to trace2' '
 	test_cmp expect actual
 '
 
+# Verb 008bug
+#
+# Check that BUG writes to trace2
+
+test_expect_success 'bug messages are written to trace2' '
+	test_when_finished "rm trace.normal actual expect" &&
+	GIT_TRACE2="$(pwd)/trace.normal" test-tool trace2 008bug &&
+	perl "$TEST_DIRECTORY/t0210/scrub_normal.perl" <trace.normal >actual &&
+	cat >expect <<-EOF &&
+		version $V
+		start _EXE_ trace2 008bug
+		cmd_name trace2 (trace2)
+		error the bug message
+		exit elapsed:_TIME_ code:0
+		atexit elapsed:_TIME_ code:0
+	EOF
+	test_cmp expect actual
+'
+
 sane_unset GIT_TRACE2_BRIEF
 
 # Now test without environment variables and get all Trace2 settings
diff --git a/usage.c b/usage.c
index c7d233b0de9..34bd3abf048 100644
--- a/usage.c
+++ b/usage.c
@@ -69,6 +69,13 @@ static NORETURN void die_builtin(const char *err, va_list params)
 	exit(128);
 }
 
+static void bug_builtin(const char *err, va_list params)
+{
+	trace2_cmd_error_va(err, params);
+
+	vreportf("bug: ", err, params);
+}
+
 static void error_builtin(const char *err, va_list params)
 {
 	trace2_cmd_error_va(err, params);
@@ -109,6 +116,7 @@ static int die_is_recursing_builtin(void)
  * (ugh), so keep things static. */
 static NORETURN_PTR report_fn usage_routine = usage_builtin;
 static NORETURN_PTR report_fn die_routine = die_builtin;
+static report_fn bug_routine = bug_builtin;
 static report_fn error_routine = error_builtin;
 static report_fn warn_routine = warn_builtin;
 static int (*die_is_recursing)(void) = die_is_recursing_builtin;
@@ -118,11 +126,22 @@ void set_die_routine(NORETURN_PTR report_fn routine)
 	die_routine = routine;
 }
 
+
+void set_bug_routine(report_fn routine)
+{
+	bug_routine = routine;
+}
+
 void set_error_routine(report_fn routine)
 {
 	error_routine = routine;
 }
 
+report_fn get_bug_routine(void)
+{
+	return bug_routine;
+}
+
 report_fn get_error_routine(void)
 {
 	return error_routine;
@@ -223,6 +242,16 @@ int error_errno(const char *fmt, ...)
 	return -1;
 }
 
+int bug(const char *err, ...)
+{
+	va_list params;
+
+	va_start(params, err);
+	bug_routine(err, params);
+	va_end(params);
+	return -1;
+}
+
 #undef error
 int error(const char *err, ...)
 {
-- 
2.31.1.445.g91d8e479b0a
Previous: Bagas SanjayaNext: Ævar Arnfjörð Bjarmason
Message 7 of 245 in “usage.c: add a non-fatal bug() + misc doc fixes”
  1. 0/4 usage.c: add a non-fatal bug() + misc doc fixesÆvar Arnfjörð Bjarmason, Mar 28, 2021
  2. 3/4 api docs: document that BUG() emits a trace2 error eventÆvar Arnfjörð Bjarmason, Mar 28, 2021
  3. 1/4 usage.c: don't copy/paste the same comment three timesÆvar Arnfjörð Bjarmason, Mar 28, 2021
  4. Eric SunshineMar 28, 2021
  5. 2/4 api docs: document BUG() in api-error-handling.txtÆvar Arnfjörð Bjarmason, Mar 28, 2021
  6. Bagas SanjayaMar 29, 2021
  7. 4/4 usage.c: add a non-fatal bug() function to go with BUG()Ævar Arnfjörð Bjarmason, Mar 28, 2021
  8. 0/5 fsck: improve error reportingÆvar Arnfjörð Bjarmason, Mar 28, 2021
  9. 2/5 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Mar 28, 2021
  10. 1/5 cache.h: move object functions to object-store.hÆvar Arnfjörð Bjarmason, Mar 28, 2021
  11. 3/5 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Mar 28, 2021
  12. 4/5 fsck: improve the error on invalid object typesÆvar Arnfjörð Bjarmason, Mar 28, 2021
  13. Johannes SixtMar 28, 2021
  14. 5/5 fsck: improve error on loose object hash mismatchÆvar Arnfjörð Bjarmason, Mar 28, 2021
  15. 0/6 fsck: better "invalid object" error reportingÆvar Arnfjörð Bjarmason, Apr 13, 2021
  16. 1/6 cache.h: move object functions to object-store.hÆvar Arnfjörð Bjarmason, Apr 13, 2021
  17. 2/6 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Apr 13, 2021
  18. 4/6 object-store.h: move read_loose_object() below 'struct object_info'Ævar Arnfjörð Bjarmason, Apr 13, 2021
  19. Jeff KingApr 23, 2021
  20. 5/6 fsck: report invalid types recorded in objectsÆvar Arnfjörð Bjarmason, Apr 13, 2021
  21. Jeff KingApr 23, 2021
  22. Ævar Arnfjörð BjarmasonApr 26, 2021
  23. Jeff KingApr 26, 2021
  24. 3/6 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Apr 13, 2021
  25. Jeff KingApr 23, 2021
  26. 6/6 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Apr 13, 2021
  27. 00/17 fsck: better "invalid object" error reportingÆvar Arnfjörð Bjarmason, May 20, 2021
  28. 01/17 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, May 20, 2021
  29. 02/17 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, May 20, 2021
  30. 04/17 cat-file tests: test that --allow-unknown-type isn't on by defaultÆvar Arnfjörð Bjarmason, May 20, 2021
  31. Jonathan NiederMay 27, 2021
  32. Ævar Arnfjörð BjarmasonMay 28, 2021
  33. 03/17 cat-file tests: test for missing object with -t and -sÆvar Arnfjörð Bjarmason, May 20, 2021
  34. 05/17 rev-list tests: test for behavior with invalid object typesÆvar Arnfjörð Bjarmason, May 20, 2021
  35. 06/17 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, May 20, 2021
  36. 07/17 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, May 20, 2021
  37. 09/17 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, May 20, 2021
  38. 11/17 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, May 20, 2021
  39. Jonathan TanMay 27, 2021
  40. 10/17 object-file.c: add missing braces to loose_object_info()Ævar Arnfjörð Bjarmason, May 20, 2021
  41. 08/17 cache.h: move object functions to object-store.hÆvar Arnfjörð Bjarmason, May 20, 2021
  42. 14/17 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, May 20, 2021
  43. Jonathan TanMay 27, 2021
  44. 17/17 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, May 20, 2021
  45. Jonathan TanMay 27, 2021
  46. 15/17 object-store.h: move read_loose_object() below 'struct object_info'Ævar Arnfjörð Bjarmason, May 20, 2021
  47. 13/17 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, May 20, 2021
  48. 12/17 object-file.c: return -2 on "header too long" in unpack_loose_header()Ævar Arnfjörð Bjarmason, May 20, 2021
  49. Jonathan TanMay 27, 2021
  50. 16/17 fsck: report invalid types recorded in objectsÆvar Arnfjörð Bjarmason, May 20, 2021
  51. Jonathan TanMay 27, 2021
  52. Jonathan TanMay 27, 2021
  53. Junio C HamanoMay 28, 2021
  54. Felipe ContrerasMay 28, 2021
  55. 00/21 fsck: better "invalid object" error reportingÆvar Arnfjörð Bjarmason, Jun 24, 2021
  56. 01/21 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Jun 24, 2021
  57. Andrei RybakJun 24, 2021
  58. Ævar Arnfjörð BjarmasonJun 24, 2021
  59. 02/21 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, Jun 24, 2021
  60. 03/21 cat-file tests: test for missing object with -t and -sÆvar Arnfjörð Bjarmason, Jun 24, 2021
  61. 04/21 cat-file tests: test that --allow-unknown-type isn't on by defaultÆvar Arnfjörð Bjarmason, Jun 24, 2021
  62. 05/21 rev-list tests: test for behavior with invalid object typesÆvar Arnfjörð Bjarmason, Jun 24, 2021
  63. 06/21 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, Jun 24, 2021
  64. 07/21 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, Jun 24, 2021
  65. 08/21 cache.h: move object functions to object-store.hÆvar Arnfjörð Bjarmason, Jun 24, 2021
  66. 10/21 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, Jun 24, 2021
  67. 09/21 object-file.c: don't set "typep" when returning non-zeroÆvar Arnfjörð Bjarmason, Jun 24, 2021
  68. 11/21 object-file.c: add missing braces to loose_object_info()Ævar Arnfjörð Bjarmason, Jun 24, 2021
  69. 12/21 object-file.c: simplify unpack_loose_short_header()Ævar Arnfjörð Bjarmason, Jun 24, 2021
  70. 13/21 object-file.c: split up ternary in parse_loose_header()Ævar Arnfjörð Bjarmason, Jun 24, 2021
  71. 14/21 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, Jun 24, 2021
  72. 15/21 object-file.c: guard against future bugs in loose_object_info()Ævar Arnfjörð Bjarmason, Jun 24, 2021
  73. 16/21 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, Jun 24, 2021
  74. 17/21 object-file.c: return -2 on "header too long" in unpack_loose_header()Ævar Arnfjörð Bjarmason, Jun 24, 2021
  75. 18/21 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Jun 24, 2021
  76. 19/21 object-store.h: move read_loose_object() below 'struct object_info'Ævar Arnfjörð Bjarmason, Jun 24, 2021
  77. 20/21 fsck: report invalid types recorded in objectsÆvar Arnfjörð Bjarmason, Jun 24, 2021
  78. 21/21 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Jun 24, 2021
  79. 00/21 fsck: lib-ify object-file.c & better fsck "invalid object" error reportingÆvar Arnfjörð Bjarmason, Jul 10, 2021
  80. 01/21 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Jul 10, 2021
  81. 05/21 rev-list tests: test for behavior with invalid object typesÆvar Arnfjörð Bjarmason, Jul 10, 2021
  82. 02/21 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, Jul 10, 2021
  83. 06/21 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, Jul 10, 2021
  84. 04/21 cat-file tests: test that --allow-unknown-type isn't on by defaultÆvar Arnfjörð Bjarmason, Jul 10, 2021
  85. 03/21 cat-file tests: test for missing object with -t and -sÆvar Arnfjörð Bjarmason, Jul 10, 2021
  86. 07/21 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, Jul 10, 2021
  87. 08/21 cache.h: move object functions to object-store.hÆvar Arnfjörð Bjarmason, Jul 10, 2021
  88. 10/21 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, Jul 10, 2021
  89. 09/21 object-file.c: don't set "typep" when returning non-zeroÆvar Arnfjörð Bjarmason, Jul 10, 2021
  90. 12/21 object-file.c: simplify unpack_loose_short_header()Ævar Arnfjörð Bjarmason, Jul 10, 2021
  91. 11/21 object-file.c: add missing braces to loose_object_info()Ævar Arnfjörð Bjarmason, Jul 10, 2021
  92. 13/21 object-file.c: split up ternary in parse_loose_header()Ævar Arnfjörð Bjarmason, Jul 10, 2021
  93. 14/21 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, Jul 10, 2021
  94. 15/21 object-file.c: guard against future bugs in loose_object_info()Ævar Arnfjörð Bjarmason, Jul 10, 2021
  95. 16/21 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, Jul 10, 2021
  96. 17/21 object-file.c: return -2 on "header too long" in unpack_loose_header()Ævar Arnfjörð Bjarmason, Jul 10, 2021
  97. 19/21 object-store.h: move read_loose_object() below 'struct object_info'Ævar Arnfjörð Bjarmason, Jul 10, 2021
  98. 18/21 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Jul 10, 2021
  99. 20/21 fsck: report invalid types recorded in objectsÆvar Arnfjörð Bjarmason, Jul 10, 2021
  100. 21/21 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Jul 10, 2021
  101. 00/22 fsck: lib-ify object-file.c & better fsck "invalid object" error reportingÆvar Arnfjörð Bjarmason, Sep 7, 2021
  102. 01/22 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Sep 7, 2021
  103. Taylor BlauSep 16, 2021
  104. Ævar Arnfjörð BjarmasonSep 17, 2021
  105. 02/22 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, Sep 7, 2021
  106. Taylor BlauSep 16, 2021
  107. Ævar Arnfjörð BjarmasonSep 17, 2021
  108. 03/22 cat-file tests: test for missing object with -t and -sÆvar Arnfjörð Bjarmason, Sep 7, 2021
  109. Taylor BlauSep 16, 2021
  110. Taylor BlauSep 16, 2021
  111. Ævar Arnfjörð BjarmasonSep 16, 2021
  112. 04/22 cat-file tests: test that --allow-unknown-type isn't on by defaultÆvar Arnfjörð Bjarmason, Sep 7, 2021
  113. 05/22 rev-list tests: test for behavior with invalid object typesÆvar Arnfjörð Bjarmason, Sep 7, 2021
  114. Taylor BlauSep 16, 2021
  115. Ævar Arnfjörð BjarmasonSep 17, 2021
  116. 06/22 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, Sep 7, 2021
  117. 07/22 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, Sep 7, 2021
  118. 08/22 object-file.c: don't set "typep" when returning non-zeroÆvar Arnfjörð Bjarmason, Sep 7, 2021
  119. Taylor BlauSep 16, 2021
  120. Jeff KingSep 16, 2021
  121. 09/22 cache.h: move object functions to object-store.hÆvar Arnfjörð Bjarmason, Sep 7, 2021
  122. Taylor BlauSep 16, 2021
  123. 10/22 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, Sep 7, 2021
  124. Taylor BlauSep 16, 2021
  125. 11/22 object-file.c: add missing braces to loose_object_info()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  126. 12/22 object-file.c: simplify unpack_loose_short_header()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  127. 14/22 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  128. Taylor BlauSep 17, 2021
  129. 13/22 object-file.c: split up ternary in parse_loose_header()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  130. Taylor BlauSep 16, 2021
  131. 16/22 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  132. 17/22 object-file.c: return -2 on "header too long" in unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  133. 15/22 object-file.c: guard against future bugs in loose_object_info()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  134. Taylor BlauSep 17, 2021
  135. 18/22 object-file.c: use "enum" return type for unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 7, 2021
  136. Taylor BlauSep 17, 2021
  137. 19/22 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Sep 7, 2021
  138. Taylor BlauSep 17, 2021
  139. 20/22 object-store.h: move read_loose_object() below 'struct object_info'Ævar Arnfjörð Bjarmason, Sep 7, 2021
  140. 21/22 fsck: report invalid types recorded in objectsÆvar Arnfjörð Bjarmason, Sep 7, 2021
  141. Taylor BlauSep 17, 2021
  142. 22/22 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Sep 7, 2021
  143. Taylor BlauSep 17, 2021
  144. Taylor BlauSep 17, 2021
  145. 00/17 fsck: lib-ify object-file.c & better fsck "invalid object" error reportingÆvar Arnfjörð Bjarmason, Sep 20, 2021
  146. 01/17 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, Sep 20, 2021
  147. 02/17 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Sep 20, 2021
  148. 03/17 fsck tests: test current hash/type mismatch behaviorÆvar Arnfjörð Bjarmason, Sep 20, 2021
  149. 07/17 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, Sep 20, 2021
  150. 06/17 cat-file tests: test for missing/bogus object with -t, -s and -pÆvar Arnfjörð Bjarmason, Sep 20, 2021
  151. Taylor BlauSep 21, 2021
  152. 05/17 cat-file tests: move bogus_* variable declarations earlierÆvar Arnfjörð Bjarmason, Sep 20, 2021
  153. 04/17 fsck tests: test for garbage appended to a loose objectÆvar Arnfjörð Bjarmason, Sep 20, 2021
  154. 09/17 object-file.c: don't set "typep" when returning non-zeroÆvar Arnfjörð Bjarmason, Sep 20, 2021
  155. 08/17 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, Sep 20, 2021
  156. 10/17 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 20, 2021
  157. 11/17 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, Sep 20, 2021
  158. 14/17 object-file.c: return ULHR_TOO_LONG on "header too long"Ævar Arnfjörð Bjarmason, Sep 20, 2021
  159. 12/17 object-file.c: simplify unpack_loose_short_header()Ævar Arnfjörð Bjarmason, Sep 20, 2021
  160. 15/17 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, Sep 20, 2021
  161. 13/17 object-file.c: use "enum" return type for unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 20, 2021
  162. 16/17 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Sep 20, 2021
  163. 17/17 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Sep 20, 2021
  164. 00/17 fsck: lib-ify object-file.c & better fsck "invalid object" error reportingÆvar Arnfjörð Bjarmason, Sep 28, 2021
  165. 01/17 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, Sep 28, 2021
  166. 02/17 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Sep 28, 2021
  167. 03/17 fsck tests: test current hash/type mismatch behaviorÆvar Arnfjörð Bjarmason, Sep 28, 2021
  168. 04/17 fsck tests: test for garbage appended to a loose objectÆvar Arnfjörð Bjarmason, Sep 28, 2021
  169. 05/17 cat-file tests: move bogus_* variable declarations earlierÆvar Arnfjörð Bjarmason, Sep 28, 2021
  170. 06/17 cat-file tests: test for missing/bogus object with -t, -s and -pÆvar Arnfjörð Bjarmason, Sep 28, 2021
  171. 07/17 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, Sep 28, 2021
  172. 08/17 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, Sep 28, 2021
  173. 09/17 object-file.c: don't set "typep" when returning non-zeroÆvar Arnfjörð Bjarmason, Sep 28, 2021
  174. 11/17 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, Sep 28, 2021
  175. 10/17 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 28, 2021
  176. 12/17 object-file.c: simplify unpack_loose_short_header()Ævar Arnfjörð Bjarmason, Sep 28, 2021
  177. 14/17 object-file.c: return ULHR_TOO_LONG on "header too long"Ævar Arnfjörð Bjarmason, Sep 28, 2021
  178. 13/17 object-file.c: use "enum" return type for unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 28, 2021
  179. 15/17 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, Sep 28, 2021
  180. 16/17 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Sep 28, 2021
  181. 17/17 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Sep 28, 2021
  182. Taylor BlauSep 29, 2021
  183. 00/17 fsck: lib-ify object-file.c & better fsck "invalid object" error reportingÆvar Arnfjörð Bjarmason, Sep 30, 2021
  184. 01/17 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, Sep 30, 2021
  185. Andrei RybakSep 30, 2021
  186. Ævar Arnfjörð BjarmasonOct 1, 2021
  187. 03/17 fsck tests: test current hash/type mismatch behaviorÆvar Arnfjörð Bjarmason, Sep 30, 2021
  188. 02/17 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Sep 30, 2021
  189. 04/17 fsck tests: test for garbage appended to a loose objectÆvar Arnfjörð Bjarmason, Sep 30, 2021
  190. 05/17 cat-file tests: move bogus_* variable declarations earlierÆvar Arnfjörð Bjarmason, Sep 30, 2021
  191. 06/17 cat-file tests: test for missing/bogus object with -t, -s and -pÆvar Arnfjörð Bjarmason, Sep 30, 2021
  192. 07/17 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, Sep 30, 2021
  193. 08/17 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, Sep 30, 2021
  194. 09/17 object-file.c: don't set "typep" when returning non-zeroÆvar Arnfjörð Bjarmason, Sep 30, 2021
  195. 10/17 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 30, 2021
  196. 12/17 object-file.c: simplify unpack_loose_short_header()Ævar Arnfjörð Bjarmason, Sep 30, 2021
  197. 11/17 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, Sep 30, 2021
  198. 13/17 object-file.c: use "enum" return type for unpack_loose_header()Ævar Arnfjörð Bjarmason, Sep 30, 2021
  199. 14/17 object-file.c: return ULHR_TOO_LONG on "header too long"Ævar Arnfjörð Bjarmason, Sep 30, 2021
  200. 15/17 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, Sep 30, 2021
  201. 16/17 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Sep 30, 2021
  202. 17/17 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Sep 30, 2021
  203. Junio C HamanoSep 30, 2021
  204. Taylor BlauSep 30, 2021
  205. 00/17 fsck: lib-ify object-file.c & better fsck "invalid object" error reportingÆvar Arnfjörð Bjarmason, Oct 1, 2021
  206. 01/17 fsck tests: add test for fsck-ing an unknown typeÆvar Arnfjörð Bjarmason, Oct 1, 2021
  207. 02/17 fsck tests: refactor one test to use a sub-repoÆvar Arnfjörð Bjarmason, Oct 1, 2021
  208. 03/17 fsck tests: test current hash/type mismatch behaviorÆvar Arnfjörð Bjarmason, Oct 1, 2021
  209. 05/17 cat-file tests: move bogus_* variable declarations earlierÆvar Arnfjörð Bjarmason, Oct 1, 2021
  210. 06/17 cat-file tests: test for missing/bogus object with -t, -s and -pÆvar Arnfjörð Bjarmason, Oct 1, 2021
  211. 04/17 fsck tests: test for garbage appended to a loose objectÆvar Arnfjörð Bjarmason, Oct 1, 2021
  212. 07/17 cat-file tests: add corrupt loose object testÆvar Arnfjörð Bjarmason, Oct 1, 2021
  213. 08/17 cat-file tests: test for current --allow-unknown-type behaviorÆvar Arnfjörð Bjarmason, Oct 1, 2021
  214. 09/17 object-file.c: don't set "typep" when returning non-zeroÆvar Arnfjörð Bjarmason, Oct 1, 2021
  215. 10/17 object-file.c: return -1, not "status" from unpack_loose_header()Ævar Arnfjörð Bjarmason, Oct 1, 2021
  216. 11/17 object-file.c: make parse_loose_header_extended() publicÆvar Arnfjörð Bjarmason, Oct 1, 2021
  217. 12/17 object-file.c: simplify unpack_loose_short_header()Ævar Arnfjörð Bjarmason, Oct 1, 2021
  218. 13/17 object-file.c: use "enum" return type for unpack_loose_header()Ævar Arnfjörð Bjarmason, Oct 1, 2021
  219. 14/17 object-file.c: return ULHR_TOO_LONG on "header too long"Ævar Arnfjörð Bjarmason, Oct 1, 2021
  220. 15/17 object-file.c: stop dying in parse_loose_header()Ævar Arnfjörð Bjarmason, Oct 1, 2021
  221. 16/17 fsck: don't hard die on invalid object typesÆvar Arnfjörð Bjarmason, Oct 1, 2021
  222. 17/17 fsck: report invalid object type-path combinationsÆvar Arnfjörð Bjarmason, Oct 1, 2021
  223. Junio C HamanoOct 1, 2021
  224. Ævar Arnfjörð BjarmasonOct 1, 2021
  225. Han XinNov 11, 2021
  226. Junio C HamanoNov 11, 2021
  227. Han XinNov 11, 2021
  228. 0/2 v2.34.0-rc2 regression: free() of uninitialized in ab/fsck-unexpected-typeÆvar Arnfjörð Bjarmason, Nov 11, 2021
  229. 1/2 object-file: fix SEGV on free() regression in v2.34.0-rc2Ævar Arnfjörð Bjarmason, Nov 11, 2021
  230. Jeff KingNov 11, 2021
  231. Junio C HamanoNov 11, 2021
  232. Ævar Arnfjörð BjarmasonNov 13, 2021
  233. 2/2 object-file: free(*contents) only in read_loose_object() callerÆvar Arnfjörð Bjarmason, Nov 11, 2021
  234. Junio C HamanoNov 11, 2021
  235. Junio C HamanoMar 28, 2021
  236. Jeff KingMar 28, 2021
  237. Ævar Arnfjörð BjarmasonMar 29, 2021
  238. Jeff KingMar 31, 2021
  239. 0/3 trace2 docs: note that BUG() sends an "error" eventÆvar Arnfjörð Bjarmason, Apr 13, 2021
  240. 3/3 api docs: document that BUG() emits a trace2 error eventÆvar Arnfjörð Bjarmason, Apr 13, 2021
  241. 1/3 usage.c: don't copy/paste the same comment three timesÆvar Arnfjörð Bjarmason, Apr 13, 2021
  242. Jeff KingApr 15, 2021
  243. 2/3 api docs: document BUG() in api-error-handling.txtÆvar Arnfjörð Bjarmason, Apr 13, 2021
  244. Jeff KingApr 15, 2021
  245. Jeff KingApr 15, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.