The graph looks like this because the changes are ordered by their revision numbers. The main repository has ordered and numbered changes:
0 Imported initial repo. 1 Trivial change to also echo b. 2 Added another echo for c. 3 Echo for d. 4 Echo for e.
This reflects the order in which changesets are added to the repository. The repository of function branches has the following order:
0 Imported initial repo. 1 Trivial change to also echo b. 3 Added another echo for c. 4 Automatic merge... 5 Echo for d. 6 Automatic merge... 7 Echo for e. 8 Automatic merge...
Again, everything is ordered beautifully. But when you pull the function branch to the main repository, only the missing changes are added. So the result is basically this:
0 Imported initial repo. 1 Trivial change to also echo b. 2 Added another echo for c. 3 Echo for d. 4 Echo for e. 5 Refactored echos to print. 6 Automatic merge... 7 Automatic merge... 8 Automatic merge...
and the graph reflects this.
As you noticed, the repository is in order - this is just an artifact of how change sets on disk are ordered. If you want, you can exchange the repository for a good graph for one with an ugly schedule, since now they contain the same changes. Remember to move any important settings from .hg/hgrc (copy the file from the clone with an ugly schedule).
By the way, when I look at the graph in my clone http://hg.intevation.org/mercurial/crew/ (development branch for Mercurial) and compare it to the graph in the new clone https://www.mercurial-scm.org/ repo / hg (main branch for Mercurial) I see the same phenomenon.
source share