[PATCH 2 of 6] hgrc.d: separate namespace for mercurial scripts 9diff and 9mail

Jeff Sickel jas at corpus-callosum.com
Tue Aug 13 20:23:47 CDT 2013


On Aug 13, 2013, at 3:55 PM, Augie Fackler <raf at durin42.com> wrote:

> On Mon, Aug 12, 2013 at 06:01:08PM -0500, Jeff Sickel wrote:
>> # HG changeset patch
>> # User Jeff Sickel <jas at corpus-callosum.com>
>> # Date 1376347195 18000
>> #      Mon Aug 12 17:39:55 2013 -0500
>> # Branch stable
>> # Node ID c0fa3b1baa4c1fc968390c37400b08314808d115
>> # Parent  c662d9f71084020dc003d3b71804e426ef6640f3
>> hgrc.d: separate namespace for mercurial scripts 9diff and 9mail
>> 
>> diff -r c662d9f71084 -r c0fa3b1baa4c contrib/plan9/hgrc.d/9diff.rc
>> --- a/contrib/plan9/hgrc.d/9diff.rc	Mon Aug 12 17:36:49 2013 -0500
>> +++ b/contrib/plan9/hgrc.d/9diff.rc	Mon Aug 12 17:39:55 2013 -0500
>> @@ -4,4 +4,4 @@
>> extdiff =
>> 
>> [extdiff]
>> -9diff = 9diff -cm $parent $child $root
>> +9diff = /bin/mercurial/9diff -cm $parent $child $root
> 
> Why the change to the absolute path to 9diff? Is it a surety that
> that's where 9diff will be installed (remember, I only know about
> plan9 as a theoretical construct, I've never used it).

Plan 9 doesn't use a path in the same way we think of it in
other UNIX-based systems.  It binds namespaces together and
the rc shell will execute from /bin or any full or referenced
path to the file:

	bonanza; ns | grep '/bin'
	bind  /amd64/bin /bin 
	bind -a /rc/bin /bin 
	bind -a /usr/jas/bin/rc /bin 
	bind -a /usr/jas/bin/amd64 /bin 

In our case the actual install of 9diff is in:

	/rc/bin/mercurial/9diff

It's perfectly valid to start a script or executable as

	mercurial/9diff

Unfortunately the python implementation does a small shim
to behave like the posixmodule, but really isn't.  It still
uses os.system() in mercurial/util.py:468, which starts up
the fake sh shell with no real PATH to handle the fact that
we wanted the mercurial scripts in a separate namespace from
the typical rc scripts.  Without the explicit path we end
up with the error:

	/bin/sh: mercurial/9diff: not found

I should probably provide a plan9 platform module instead of
using posixmodule.c, but as the bulk of the python scripts
out there already test for windows and posix, we'd really
like to not add to the confusion.



> This feels like two patches: one to add the config for 9mail, and one
> to point 9diff at the dedicated namespace?
> 
>> diff -r c662d9f71084 -r c0fa3b1baa4c contrib/plan9/hgrc.d/9mail.rc
>> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
>> +++ b/contrib/plan9/hgrc.d/9mail.rc	Mon Aug 12 17:39:55 2013 -0500
>> @@ -0,0 +1,4 @@
>> +# The 9mail to support patchbomb and other email wrappers
>> +[email]
>> +method = /bin/mercurial/9mail
>> +
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at selenic.com
>> http://selenic.com/mailman/listinfo/mercurial-devel


This could be broken up into two patches if you like.

Jeff



More information about the Mercurial-devel mailing list