[PATCH 2 of 2] log: make --line-range and --graph options work together

Denis Laxalde denis at laxalde.org
Sun Feb 11 12:07:36 EST 2018


Denis Laxalde a écrit :
> # HG changeset patch
> # User Denis Laxalde <denis at laxalde.org>
> # Date 1518356534 -3600
> #      Sun Feb 11 14:42:14 2018 +0100
> # Node ID 72ad5a53d41102d5e67a925cabc1aa9635d1fda8
> # Parent  50e9309bc899d5366811e8da9fe4dcc303aa4796
> # EXP-Topic log/linerange-graph
> log: make --line-range and --graph options work together

Please ignore this. This conflicts with Yuya's recent changes that got 
queued in the meantime.

> Pass "hunksfilter" (computed in "if linerange:" block) down through
> logcmdutil.graphlog() and logcmdutil.displaygraph() so that the
> revhunksfilter function can be built and used by displayer.show(). The
> logic is similar to the non-graph log case.
> 
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -3313,8 +3313,8 @@ def log(ui, repo, *pats, **opts):
>          Use -L/--line-range FILE,M:N options to follow the history of lines
>          from M to N in FILE. With -p/--patch only diff hunks affecting
>          specified line range will be shown. This option requires --follow;
> -       it can be specified multiple times. Currently, this option is not
> -       compatible with --graph. This option is experimental.
> +       it can be specified multiple times.
> +       This option is experimental.
>   
>       .. note::
>   
> @@ -3422,11 +3422,6 @@ def log(ui, repo, *pats, **opts):
>       revs, filematcher = logcmdutil.getrevs(repo, pats, opts)
>       hunksfilter = None
>   
> -    if opts.get('graph'):
> -        if linerange:
> -            raise error.Abort(_('graph not supported with line range patterns'))
> -        return logcmdutil.graphlog(ui, repo, revs, filematcher, opts)
> -
>       if linerange:
>           revs, lrfilematcher, hunksfilter = logcmdutil.getlinerangerevs(
>               repo, revs, opts)
> @@ -3442,6 +3437,10 @@ def log(ui, repo, *pats, **opts):
>           elif filematcher is None:
>               filematcher = lrfilematcher
>   
> +    if opts.get('graph'):
> +        return logcmdutil.graphlog(ui, repo, revs, filematcher, hunksfilter,
> +                                   opts)
> +
>       getrenamed = None
>       if opts.get('copies'):
>           endrev = None
> diff --git a/mercurial/logcmdutil.py b/mercurial/logcmdutil.py
> --- a/mercurial/logcmdutil.py
> +++ b/mercurial/logcmdutil.py
> @@ -862,7 +862,7 @@ def _graphnodeformatter(ui, displayer):
>       return formatnode
>   
>   def displaygraph(ui, repo, dag, displayer, edgefn, getrenamed=None,
> -                 filematcher=None, props=None):
> +                 filematcher=None, hunksfilter=None, props=None):
>       props = props or {}
>       formatnode = _graphnodeformatter(ui, displayer)
>       state = graphmod.asciistate()
> @@ -900,10 +900,14 @@ def displaygraph(ui, repo, dag, displaye
>           revmatchfn = None
>           if filematcher is not None:
>               revmatchfn = filematcher(ctx.rev())
> +        revhunksfilter = None
> +        if hunksfilter:
> +            revhunksfilter = hunksfilter(ctx.rev())
>           edges = edgefn(type, char, state, rev, parents)
>           firstedge = next(edges)
>           width = firstedge[2]
>           displayer.show(ctx, copies=copies, matchfn=revmatchfn,
> +                       hunksfilterfn=revhunksfilter,
>                          _graphwidth=width, **pycompat.strkwargs(props))
>           lines = displayer.hunk.pop(rev).split('\n')
>           if not lines[-1]:
> @@ -914,7 +918,7 @@ def displaygraph(ui, repo, dag, displaye
>               lines = []
>       displayer.close()
>   
> -def graphlog(ui, repo, revs, filematcher, opts):
> +def graphlog(ui, repo, revs, filematcher, hunksfilter, opts):
>       # Parameters are identical to log command ones
>       revdag = graphmod.dagwalker(repo, revs)
>   
> @@ -928,7 +932,7 @@ def graphlog(ui, repo, revs, filematcher
>       ui.pager('log')
>       displayer = changesetdisplayer(ui, repo, opts, buffered=True)
>       displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges, getrenamed,
> -                 filematcher)
> +                 filematcher, hunksfilter)
>   
>   def checkunsupportedgraphflags(pats, opts):
>       for op in ["newest_first"]:
> diff --git a/tests/test-log-linerange.t b/tests/test-log-linerange.t
> --- a/tests/test-log-linerange.t
> +++ b/tests/test-log-linerange.t
> @@ -173,8 +173,76 @@ Add some changes with two diff hunks
>     +4
>     
>     $ hg log -f --graph -L foo,5:7 -p
> -  abort: graph not supported with line range patterns
> -  [255]
> +  @  changeset:   5:cfdf972b3971
> +  |  tag:         tip
> +  |  user:        test
> +  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  summary:     foo: 3 -> 3+ and 11+ -> 11-; bar: a -> a+
> +  |
> +  |  diff --git a/foo b/foo
> +  |  --- a/foo
> +  |  +++ b/foo
> +  |  @@ -4,7 +4,7 @@
> +  |   0
> +  |    1
> +  |   2+
> +  |  -3
> +  |  +3+
> +  |   4
> +  |   5
> +  |   6
> +  |
> +  o  changeset:   4:eaec41c1a0c9
> +  :  user:        test
> +  :  date:        Thu Jan 01 00:00:00 1970 +0000
> +  :  summary:     11 -> 11+; leading space before "1"
> +  :
> +  :  diff --git a/foo b/foo
> +  :  --- a/foo
> +  :  +++ b/foo
> +  :  @@ -2,7 +2,7 @@
> +  :   0
> +  :   0
> +  :   0
> +  :  -1
> +  :  + 1
> +  :   2+
> +  :   3
> +  :   4
> +  :
> +  o  changeset:   2:63a884426fd0
> +  :  user:        test
> +  :  date:        Thu Jan 01 00:00:00 1970 +0000
> +  :  summary:     2 -> 2+; added bar
> +  :
> +  :  diff --git a/foo b/foo
> +  :  --- a/foo
> +  :  +++ b/foo
> +  :  @@ -3,6 +3,6 @@
> +  :   0
> +  :   0
> +  :   1
> +  :  -2
> +  :  +2+
> +  :   3
> +  :   4
> +  :
> +  o  changeset:   0:5ae1f82b9a00
> +     user:        test
> +     date:        Thu Jan 01 00:00:00 1970 +0000
> +     summary:     init
> +
> +     diff --git a/foo b/foo
> +     new file mode 100644
> +     --- /dev/null
> +     +++ b/foo
> +     @@ -0,0 +1,5 @@
> +     +0
> +     +1
> +     +2
> +     +3
> +     +4
> +
>   
>   With --template.
>   
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
> 



More information about the Mercurial-devel mailing list