[PATCH 3 of 3] chg: detect chg started by chg

Jun Wu quark at fb.com
Wed Feb 24 09:31:25 EST 2016

# HG changeset patch
# User Jun Wu <quark at fb.com>
# Date 1456324196 0
#      Wed Feb 24 14:29:56 2016 +0000
# Node ID 2c07d50c16da4f859b3cb002d9c5a04554b7478f
# Parent  b7c36ebb96f5492f3dd90bacbb8fee65c6eabb59
chg: detect chg started by chg

Sometimes people may create a symbol link from hg to chg, or write a wrapper
script named hg calling chg. Without $HG and $CHGHG set, this will lead to
chg executes itself causing deadlock. The user will notice chg hangs for some
time and aborts with a timed out message, without knowing the root cause and
how to solve it.

This patch sets a dummy environment variable CHGMARK to detect this situation,
and print a fatal message with some possible solutions.

diff --git a/contrib/chg/chg.c b/contrib/chg/chg.c
--- a/contrib/chg/chg.c
+++ b/contrib/chg/chg.c
@@ -479,6 +479,13 @@
 	if (getenv("CHGDEBUG"))
+	if (getenv("CHGMARK"))
+		abortmsg("chg started by chg detected.\n"
+			 "Please make sure ${HG:-hg} is not a symlink or "
+			 "wrapper to chg. Alternatively, set $CHGHG to the "
+			 "path of real hg.");
+	setenv("CHGMARK", "", 1);
 	if (isunsupported(argc, argv))

More information about the Mercurial-devel mailing list