[PATCH 0 of 2 RFC] Shell alias support

Steve Losh steve at stevelosh.com
Fri Jul 9 09:53:03 CDT 2010


On Jul 9, 2010, at 1:47 AM, Bill Barry wrote:

> Steve Losh wrote:
>> This is a second version of a patch I sent a day or two ago to add shell
>> aliases to Mercurial, like so:
>> 
>>    [alias]
>>    qempty = !hg qrefresh -X "`hg root`"
>> 
>> This would help get rid of hacky "alias hgsomething='hg something'" aliases in
>> people's .whateverrc files.
>> 
>> A few issues brought up in IRC:
>> 
>> * There's no guarantee that the 'hg' command in the alias refers to the same
>>  'hg' script that is being used. For example, if you 'make local' and run
>>  "./hg qempty" the qrefresh command inside that alias will be run with the
>>  'hg' on your path, not the local one.
>>  
> I don't think this can be done. If you must do something like this, you should probably run the command with some sort of [new?] expansion that stands for the repository root and a relative path from that. Persons who are knowledgeable enough to be running a "make local" copy of hg should be able to discover this concept quickly.

I don't think it's a big deal.  Shell alias might not even run "hg" at all, so I don't think we should try to do any magic handling for that one command.

>> * The second patch (which adds "$@" expansion) simply replaces raw strings --
>>  it doesn't take quoting into account. This might be surprising, but makes the
>>  code much, much cleaner and makes quoting in the alias itself simpler:
>>  whatever is in the definition is exactly what will be passed to the shell.
>>  
> 
> Surely there is some code already available which can make the quoting issues go away. OTOH, I doubt this is a big deal for anyone. The oddity I can see with it is if you do something like:
> 
> hg countv "branch('foo 1.2') and decendant('foo 1.2.2')"
> 
> which would be translated in your testcase to:
> echo 'Revisions in "branch('foo 1.2') and decendant('foo 1.2.2')":' ; hg log --template='.\n' -r 'branch('foo 1.2') and decendant('foo 1.2.2')' | wc -l
> 
> Which is probably not what you want.

Yeah, the quoting is going to get awful once you go more than 2 levels deep -- I don't think there's a good way around that in bash.

>> * If this is something people aren't comfortable with it could be turned into
>>  a 'shellalias' extension instead, but I don't know how that would affect
>>  quoting in the .hgrc file.
>>  
> 
> I think if it needs to be done this way, the cmdalias class can be derived to add the new functionality fairly easily, and the addalias function can be monkeypatched to use the new class instead of the current one (thus mimicking the proposed functionality nearly exactly; there may be an even better way to do this so that other extensions can also replace that class). This can be done in the extsetup method for the loading of the extension. Changing the help text appears much more difficult though.
>> * The '!' prefix was chosen because that's what git uses, but could be changed
>>  if desired.
>> 
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at selenic.com
>> http://selenic.com/mailman/listinfo/mercurial-devel
>> 
>>  
> 



More information about the Mercurial-devel mailing list