Mercurial log with one-liners
Asked Answered
C

4

36

The regular hg log command gives output with at least 4 lines per changeset. For example

changeset:   238:03a214f2a1cf
user:        My Name <[email protected]>
date:        Thu Aug 26 09:49:32 2010 +0200
summary:     Added tag v1.1 for changeset f22fd3974361

I mean to remember that there was a command to print a log in a more compact way what just had one line per changeset. A format that you could basically stick in a changelog.txt file and it would look nice.

Does that exist? Or am I mixing this with something I have seen with git or something else?

Crossarm answered 26/8, 2010 at 12:52 Comment(2)
for the changelog style, try log --style changelog :)Lymanlymann
Try this: hg log -T "\t{date|shortdate}\t[{rev}]\t{author|user}\t{desc}\n"Dickerson
F
31
 hg log --style compact

You can also use templates to display log out in different formats

hg help templates

In your case if you want to display only node ids do something like this

hg log --template "{node}\n"
Financier answered 26/8, 2010 at 13:34 Comment(0)
M
55

You can use hg log with a --template option, e.g.:

hg log --template '{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n'

This should show something like this (example from the GNU Emacs trunk I converted locally to an hg repository):

$ hg log --limit 5 --template '{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n'
36ab2e3f8ebd | 2010-09-08 16:54:00 +0200 | agustin: textmodes/ispell.el (ispell-valid-dictionary-list): Simplify logic.
9f3ac6d4a645 | 2010-09-08 16:42:54 +0200 | michael: Migrate to Tramp 2.2.  Rearrange load dependencies.
8c696d2a7695 | 2010-09-07 20:01:23 +0200 | agustin: Make sure original ispell arg list is initialized in (ispell-start-process).
b5f110747072 | 2010-09-07 06:23:16 +0000 | yamaoka: gnus-html.el (gnus-html-wash-tags, gnus-html-put-image): Mark cid and internal images as deletable by `W D D'.
b53cfb7d099e | 2010-09-07 01:20:19 +0000 | yamaoka: gnus-async.el (gnus-html-prefetch-images): Autoload it when compiling; (gnus-async-article-callback): Fix typo.
$

Once you have a nice template for one-line summaries of changesets, you can add a command alias in your ~/.hgrc file like this:

[alias]
shortlog = log --template '{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n'

With the alias installed you can now type hg shortlog, hg short or even hg shor (to uniquely identify hg shortlog instead of hg showconfig) and all the usual `log' command-options. For instance it should now be possible to type:

$ hg short -r 100:103
db9f8efcf689 | 1990-09-14 19:07:14 +0000 | jimb: *** empty log message ***
5874bf15e07d | 1990-09-19 18:22:41 +0000 | gnulists: Initial revision
797d304414fd | 1990-09-27 21:17:59 +0000 | mtr: Initial revision
b2656b7830e4 | 1990-10-09 02:52:33 +0000 | rms: *** empty log message ***
$

or even things that use tag names (example from the mercurial crew repository itself):

keramida@kobe:/hg/mercurial/crew$ hg short -r 1.4 -r 1.5 -r 1.6
31ec469f9b55 | 2009-11-16 21:25:36 +0100 | mg: i18n-ja: fixed bad indentation
ff2704a8ded3 | 2010-03-05 17:24:52 -0600 | mpm: mq: drop -Q in favor of --mq only
f786fc4b8764 | 2010-06-29 12:12:34 +0200 | mads: log: follow filenames through renames (issue647)
keramida@kobe:/hg/mercurial/crew$
Menam answered 10/9, 2010 at 0:44 Comment(1)
For more information, see this guide, and there's also hg help templates.Haldis
F
31
 hg log --style compact

You can also use templates to display log out in different formats

hg help templates

In your case if you want to display only node ids do something like this

hg log --template "{node}\n"
Financier answered 26/8, 2010 at 13:34 Comment(0)
G
6

To get the description on one line even if original comment contains multiple line combine a splitlines and join function like below:

{join(splitlines(desc), ' ')}

Here is an example i'm using to extract data as CSV:

hg log --template "{node};{date|shortdate};{branch};{author};{join(splitlines(desc), ' ')};{diffstat};files: {join(files, ', ')}\n"
Gamboge answered 17/4, 2015 at 14:50 Comment(0)
G
1

Just in case anyone wants something similar to git log --oneline:

hg log --template '{rev} {tags} {desc|strip|firstline}\n' -l 5
2737 tip Lint: trailing-whitespace
2736  Hack: temporary auto-subscription on login
2735  Fix: Encoding wasn't passed in memory metrics

Replace {rev} with {node|short} if you want hashes (but in Mercurial revision numbers are traditionally used).

Garrison answered 22/2, 2022 at 15:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.