6

According to HG manual:

By default this command prints revision number and changeset id, tags, non-trivial parents, user, date and time, and a summary for each commit. When the -v/--verbose switch is used, the list of changed files and full commit message are shown.

I have tried hg log -v but still it does not show the trivial parents.

TN.
  • 18,874
  • 30
  • 99
  • 157
  • 1
    What does "trivial" mean in this case? One parent? Or is it more complicated than that? – mpen Jun 04 '15 at 17:41

4 Answers4

7

You can use the --debug option.

$ hg log --template '{parents}\n' --debug
12:49f2f93d2efdd41c9ffb9dccf4d451e2d8bfbc5f -1:0000000000000000000000000000000000000000 
7:012b1bb5d99549a5a7c1a280755fa6336c0b472a -1:0000000000000000000000000000000000000000 
10:d6dc52582cfaa0e8be17a5b9da61b55692353afc 11:8ee9fa792548fc30669a34cf39fcc7185aabaa19 
8:d589ca45072469148f833f38918861e8de406e64 -1:0000000000000000000000000000000000000000 
vsh
  • 229
  • 2
  • 1
5

You can see them visually in 'hg log -G' once you've turned on the Graphlog Extension.

In this context "trivial" just means "is the current revision number minus one", so in a situation like this:

o  changeset:   1440:fe26f69d4b84
|  user:        dan@scofield.bx.psu.edu
|  date:        Fri Jul 18 12:11:58 2008 -0400
|  summary:     Typo in last commit.
|
o  changeset:   1439:74cbef36b62f
|  user:        dan@scofield.bx.psu.edu
|  date:        Fri Jul 18 12:10:23 2008 -0400
|  summary:     Fix bug in JobWrapper.get_input_fnames(), used by pbs runner, when an input dataset was optional and left empty.
|
o  changeset:   1438:1e111ebb2664
|  user:        James Taylor <james@jamestaylor.org>
|  date:        Thu Jul 17 22:14:40 2008 -0400
|  summary:     Workflows (owned and shared) can now be added to the tool menu.
|
o    changeset:   1437:4a4de494fbf6
|\   parent:      1436:37a7f508eb30
| |  parent:      1431:8b83b7250224
| |  user:        James Taylor <james@jamestaylor.org>
| |  date:        Thu Jul 17 20:42:00 2008 -0400
| |  summary:     Merge.
| |
| o  changeset:   1436:37a7f508eb30
| |  user:        James Taylor <james@jamestaylor.org>
| |  date:        Thu Jul 17 20:40:20 2008 -0400
| |  summary:     Allow loading a specific controller/action in the root middle frame, and use
| |
| o  changeset:   1435:96e1cda02414
| |  user:        James Taylor <james@jamestaylor.org>
| |  date:        Thu Jul 17 20:16:13 2008 -0400
| |  summary:     Fix for scroll panel when dropping while still overlapping the edge.
| |

A parent list is only shown for 1437 because for the rest have a single parent that is revision number minus one.

Ry4an Brase
  • 78,112
  • 7
  • 148
  • 169
  • I know how to show the graph and I know what is the trivial parent, but I would like to know if there is a way to force `hg log` to show the trivial parents:) (I am building graph from `hg log` output and I am now computing parents, but I will throw my code away if `hg log` can do this.) – TN. Mar 03 '10 at 16:18
  • 1
    There's no way to have hg-log do it, but there are plenty of extensions that export the revision graph in a way that's much easier to parse/consume than log's output. Check out the Graphviz extension for an example which includes easily tweakable code. – Ry4an Brase Mar 03 '10 at 17:22
  • Ok, thx. It seems more convenient in my situation to keep my trivial parents computing code, since `hg log --template "..."` is enough in my case. Btw. do you know why `hg log -r :` and `hg log` produces output in reversed order -- is it a bug or feature? :) – TN. Mar 03 '10 at 23:51
  • 1
    The colon syntax does x:y, where x defaults to 0 and y defaults to tip. Without a -r `hg log` does `-r tip:0` so that folks can do `hg log -l 3` and see the last 3 commits w/ the least possible typing. – Ry4an Brase Mar 04 '10 at 01:19
3

The template keyword parents is empty when the only parent is the next node

hg log --template "{parents}\n" -l 20

Bas Smit
  • 645
  • 1
  • 7
  • 19
0

with this simple patch to mercurial sources you'll get all parents in the log: file cmdutil.py: (line 990 in hg 3.1.2)

 def _meaningful_parentrevs(self, log, rev):
    """Return list of meaningful (or all if debug) parentrevs for rev.

    For merges (two non-nullrev revisions) both parents are meaningful.
    Otherwise the first parent revision is considered meaningful if it
    is not the preceding revision.
    """
    parents = log.parentrevs(rev)
    return parents    #<=================add this line
    if not self.ui.debugflag and parents[1] == nullrev:
        if parents[0] >= rev - 1:
            parents = []
        else:
            parents = [parents[0]]
    return parents

In mercurial 4.0 find in the file scmutil.py:

def meaningfulparents(repo, ctx):
    """Return list of meaningful (or all if debug) parentrevs for rev.

    For merges (two non-nullrev revisions) both parents are meaningful.
    Otherwise the first parent revision is considered meaningful if it
    is not the preceding revision.
    """
    parents = ctx.parents()
    return parents       #<===========================add this line
    if len(parents) > 1:
        return parents
    if repo.ui.debugflag:
        return [parents[0], repo['null']]
    if parents[0].rev() >= intrev(ctx.rev()) - 1:
        return []
    return parents

you'll get something like:

$ hg log
changeset:   62355:2722bdc1f0fc
branch:      ALL-3158-fortran-memkind
tag:         tip
parent:      62354:82da46786838
parent:      -1:000000000000
user:        Marcos Mayorga <mm@mm-studios.com>
date:        Mon Jan 30 09:12:13 2017 +0000
summary:     memkind smoke tests for FORTRAN

changeset:   62354:82da46786838
branch:      ALL-3158-fortran-memkind
parent:      62194:c98a4c8295ab
parent:      -1:000000000000
user:        Marcos Mayorga <mm@mm-studios.com>
date:        Fri Jan 27 14:38:53 2017 +0000
summary:     create branch

...