Mercurial log with one-liners

后端 未结 3 847
遇见更好的自我
遇见更好的自我 2021-02-01 03:14

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

changeset:   238:03a214f2a1cf
user:        My Name 

        
相关标签:
3条回答
  • 2021-02-01 03:29
     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"
    
    0 讨论(0)
  • 2021-02-01 03:31

    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$
    
    0 讨论(0)
  • 2021-02-01 03:46

    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"
    
    0 讨论(0)
提交回复
热议问题