patchReintegrate: send "Huh?" warnings to stderr, not stdout
4 messages between Apr 27, 2026 and May 4, 2026, from Erik Cervin-Edin, Tian Yuchen, Erik Cervin Edin, erik@cervined.in.
Plain Markdown or JSON for tools and agents. Diffs are folded; open one to read it.
Erik Cervin-EdinApr 27, 2026, 10:47 UTC on loreThe "Huh?: $msg" warning in show_merge(), emitted when a first-parent merge subject does not match either "Merge branch '...'" or "Merge remote branch '...'", uses
echo 2>&1 "Huh?: $msg"
The "2>&1" redirect dupes stderr onto stdout's destination; it does not change where stdout itself points. Since echo writes to stdout, the "Huh?:" message lands on stdout regardless -- as would any command's normal output. The intent appears to have been ">&2", which dupes stdout onto stderr.
In the common Reintegrate invocation that captures stdout, e.g.
Meta/Reintegrate next..seen >Meta/redo-seen.sh
this means the warning is silently embedded in the generated heredoc body instead of being printed to the maintainer's terminal. The resulting redo-* script is corrupted with a "Huh?:..." line and the maintainer has no diagnostic that something went wrong.
Every other diagnostic in this script already uses ">&2"; this line is the lone outlier.
Use ">&2" so the warning reaches stderr as intended.
Signed-off-by: Erik Cervin-Edin <erik@cervined.in>
---
Reintegrate | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to Reintegrate +1 −1
diff --git a/Reintegrate b/Reintegrate
index a1e67a0330..6fdc7c5f41 100755
--- a/Reintegrate
+++ b/Reintegrate
@@ -327,7 +327,7 @@ show_merge () {
merge_hier=
;;
*)
- echo 2>&1 "Huh?: $msg"
+ echo >&2 "Huh?: $msg"
return
;;
esac &&
--
2.53.0
Re: [PATCH] Reintegrate: send "Huh?" warnings to stderr, not stdout
On 4/27/26 18:47, Erik Cervin-Edin wrote:
Show 5 quoted lines
> The "Huh?: $msg" warning in show_merge(), emitted when a first-parent
> merge subject does not match either "Merge branch '...'" or "Merge
> remote branch '...'", uses
>
> echo 2>&1 "Huh?: $msg"
Yes, this is clearly wrong.
> The "2>&1" redirect dupes stderr onto stdout's destination; it does
> not change where stdout itself points. Since echo writes to stdout,
> the "Huh?:" message lands on stdout regardless -- as would any
> command's normal output.
> The intent appears to have been ">&2", which dupes stdout onto stderr.
It would be better for me if this sentence (i.e., what was the code originally *intended* to do before the patch?) were placed right at the beginning. Something similar to:
In show_merge(), the warning "Huh?: $msg" is emitted to stdout because
it uses the erroneous redirect `echo 2>&1`. The intent was clearly to
use `>&2` to print to stderr...
Of course, it’s up to you ;)
Show 14 quoted lines
>
> In the common Reintegrate invocation that captures stdout, e.g.
>
> Meta/Reintegrate next..seen >Meta/redo-seen.sh
>
> this means the warning is silently embedded in the generated heredoc
> body instead of being printed to the maintainer's terminal. The
> resulting redo-* script is corrupted with a "Huh?:..." line and the
> maintainer has no diagnostic that something went wrong.
>
> Every other diagnostic in this script already uses ">&2"; this line
> is the lone outlier.
>
> Use ">&2" so the warning reaches stderr as intended.
Overall, the reasoning is nice :-)
Show 18 quoted lines
> Signed-off-by: Erik Cervin-Edin <erik@cervined.in>
> ---
> Reintegrate | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Reintegrate b/Reintegrate
> index a1e67a0330..6fdc7c5f41 100755
> --- a/Reintegrate
> +++ b/Reintegrate
> @@ -327,7 +327,7 @@ show_merge () {
> merge_hier=
> ;;
> *)
> - echo 2>&1 "Huh?: $msg"
> + echo >&2 "Huh?: $msg"
> return
> ;;
> esac &&Re: [PATCH] Reintegrate: send "Huh?" warnings to stderr, not stdout
On 26/04/29 02:05AM, Tian Yuchen wrote:
Show 9 quoted lines
> It would be better for me if this sentence (i.e., what was the code
> originally *intended* to do before the patch?) were placed right at the
> beginning. Something similar to:
>
> In show_merge(), the warning "Huh?: $msg" is emitted to stdout because it
> uses the erroneous redirect `echo 2>&1`. The intent was clearly to use `>&2`
> to print to stderr...
>
> Of course, it’s up to you ;)
Good point! I hoisted the intent up to the opening paragraph; took the spirit of your wording rather than copying it verbatim, and tightened the rest while I was at it.
[PATCH v2] Reintegrate: send "Huh?" warnings to stderr, not stdout
From: Erik Cervin-Edin <erik@cervined.in>
In show_merge(), the "Huh?: $msg" warning -- emitted when a first-parent merge subject does not match either "Merge branch '...'" or "Merge remote branch '...'" -- is meant to go to stderr, but the redirect
echo 2>&1 "Huh?: $msg"
goes the wrong way and sends the message to stdout instead.
In the common Reintegrate invocation that captures stdout, e.g.
Meta/Reintegrate next..seen >Meta/redo-seen.sh
this means the warning is silently embedded in the generated heredoc body instead of being printed to the maintainer's terminal, with no diagnostic that something went wrong. Worse, the resulting redo-* script is corrupted with a "Huh?:..." line.
Switch the redirection to ">&2", matching every other diagnostic in this script.
Signed-off-by: Erik Cervin-Edin <erik@cervined.in>
---
Reintegrate | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to Reintegrate +1 −1
diff --git a/Reintegrate b/Reintegrate
index a1e67a0330..6fdc7c5f41 100755
--- a/Reintegrate
+++ b/Reintegrate
@@ -327,7 +327,7 @@ show_merge () {
merge_hier=
;;
*)
- echo 2>&1 "Huh?: $msg"
+ echo >&2 "Huh?: $msg"
return
;;
esac &&
--
2.53.0