hg outgoing performance: bug or design limitation?

Andrei Loskutov loskutov at gmx.de
Sun Dec 13 22:47:46 UTC 2009


Hi,

I'm trying to analyze performance/scalability issues in the Eclipse plugin  
for Mercurial and see some strange differences for the "hg outgoing"  
execution, depending which arguments are used in the template file.

For my experiments, I use hg 1.3.1 for Windows and a fairly large (270 MB)  
public available repo: http://bitbucket.org/mirror/django/

To reproduce:
1) clone the repo to a local "django1" directory.
2) create a copy of the cloned repo as "django2"
3) strip 1000 changesets from "django1", create 5-10 new changes
4) start playing.

If "hg outgoing path_to_django1" is executed at "django2 directory", it  
takes only 3 seconds to show me the 1000 changesets. In the output, per  
default, it doesn't show the file names affected by the changesets.

Now the fun begins. If I specify a style/template file, where I use  
{file_adds}, {file_dels}, or {file_mods} arguments to see which files are  
affected by the outgoing command, hg needs 3 minutes (!) to print out the  
required data (and it causes 100% of one of my two CPU's load all this  
time). I've tried to play with the template, but it seems that it doesn't  
matter how simple the formatting/how many arguments I use, the simple  
presence of one of these "file" arguments causes hg to be exceptionally  
slow.

I didn't played with the "hg incoming" yet, I guess it will behave similar.

So what, would you say, just do not add these arguments to the template?
It's simple: in the plugin, we show the outgoing/incoming changesets to  
the user, *including* the changed files information. We MUST know which  
files are affected by the changeset... So synchronization on such huge  
repositories lead to a very loooong Eclipse response times...

Now the question:

1) I'm doing something wrong? Is there a better way to get the affected  
paths for outgoing/incoming commands as using templates?
2) Is there any hidden parameter/command/setting which allows hg to be  
faster with templates/outgoing/incoming commands?
3) if 1 and 2 are not applicable: is this performance drop a "simple" hg  
bug, or is it "by design"?

Any help/hints are highly appreciated.

Regards,
Andrei Loskutov

@Home: http://andrei.gmxhome.de/



More information about the Mercurial mailing list