hgext/graphlog.py
author Adrian Buehlmann <adrian@cadifra.com>
Thu, 12 May 2011 20:27:35 +0200
changeset 14311 9bbac962f4dd
parent 14139 4e5a36eeefd1
child 14319 b33f3e35efb0
permissions -rw-r--r--
graphlog: use cmdutil.command decorator
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
     1
# ASCII graph log extension for Mercurial
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
     2
#
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
     3
# Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4509
diff changeset
     4
#
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8210
diff changeset
     5
# This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10097
diff changeset
     6
# GNU General Public License version 2 or any later version.
8228
eee2319c5895 add blank line after copyright notices and after header
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
     7
8934
9dda4c73fc3b extensions: change descriptions for extensions providing a few commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8932
diff changeset
     8
'''command to view revision graphs from a shell
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
     9
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
    10
This extension adds a --graph option to the incoming, outgoing and log
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
    11
commands. When this options is given, an ASCII representation of the
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
    12
revision graph is also shown.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
    13
'''
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    14
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    15
from mercurial.cmdutil import revrange, show_changeset
7873
4a4c7f6a5912 cleanup: drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7763
diff changeset
    16
from mercurial.commands import templateopts
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    17
from mercurial.i18n import _
6212
e75aab656f46 Remove unused imports
Joel Rosdahl <joel@rosdahl.net>
parents: 6192
diff changeset
    18
from mercurial.node import nullrev
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
    19
from mercurial import cmdutil, commands, extensions
14139
4e5a36eeefd1 remove unused imports
timeless <timeless@mozdev.org>
parents: 14133
diff changeset
    20
from mercurial import hg, util, graphmod
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
    21
14311
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
    22
cmdtable = {}
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
    23
command = cmdutil.command(cmdtable)
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
    24
8840
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
    25
ASCIIDATA = 'ASC'
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
    26
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    27
def asciiedges(type, char, lines, seen, rev, parents):
8840
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
    28
    """adds edge info to changelog DAG walk suitable for ascii()"""
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    29
    if rev not in seen:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    30
        seen.append(rev)
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    31
    nodeidx = seen.index(rev)
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
    32
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    33
    knownparents = []
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    34
    newparents = []
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    35
    for parent in parents:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    36
        if parent in seen:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    37
            knownparents.append(parent)
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    38
        else:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    39
            newparents.append(parent)
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
    40
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    41
    ncols = len(seen)
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    42
    nextseen = seen[:]
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    43
    nextseen[nodeidx:nodeidx + 1] = newparents
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    44
    edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    45
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    46
    while len(newparents) > 2:
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    47
        # ascii() only knows how to add or remove a single column between two
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    48
        # calls. Nodes with more than two parents break this constraint so we
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    49
        # introduce intermediate expansion lines to grow the active node list
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    50
        # slowly.
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    51
        edges.append((nodeidx, nodeidx))
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    52
        edges.append((nodeidx, nodeidx + 1))
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    53
        nmorecols = 1
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    54
        yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    55
        char = '\\'
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    56
        lines = []
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    57
        nodeidx += 1
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    58
        ncols += 1
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    59
        edges = []
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    60
        del newparents[0]
7370
7bc62ebe7693 graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7369
diff changeset
    61
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    62
    if len(newparents) > 0:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    63
        edges.append((nodeidx, nodeidx))
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    64
    if len(newparents) > 1:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
    65
        edges.append((nodeidx, nodeidx + 1))
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    66
    nmorecols = len(nextseen) - ncols
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    67
    seen[:] = nextseen
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
    68
    yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
    69
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    70
def fix_long_right_edges(edges):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    71
    for (i, (start, end)) in enumerate(edges):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    72
        if end > start:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    73
            edges[i] = (start, end + 1)
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    74
7326
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    75
def get_nodeline_edges_tail(
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    76
        node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    77
    if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    78
        # Still going in the same non-vertical direction.
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    79
        if n_columns_diff == -1:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    80
            start = max(node_index + 1, p_node_index)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    81
            tail = ["|", " "] * (start - node_index - 1)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    82
            tail.extend(["/", " "] * (n_columns - start))
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    83
            return tail
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    84
        else:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    85
            return ["\\", " "] * (n_columns - node_index - 1)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    86
    else:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    87
        return ["|", " "] * (n_columns - node_index - 1)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
    88
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    89
def draw_edges(edges, nodeline, interline):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    90
    for (start, end) in edges:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    91
        if start == end + 1:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    92
            interline[2 * end + 1] = "/"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    93
        elif start == end - 1:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    94
            interline[2 * start + 1] = "\\"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    95
        elif start == end:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    96
            interline[2 * start] = "|"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    97
        else:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    98
            nodeline[2 * end] = "+"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
    99
            if start > end:
9198
061eeb602354 coding style: use a space after comma
Martin Geisler <mg@lazybytes.net>
parents: 9180
diff changeset
   100
                (start, end) = (end, start)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   101
            for i in range(2 * start + 1, 2 * end):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   102
                if nodeline[i] != "+":
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   103
                    nodeline[i] = "-"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   104
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   105
def get_padding_line(ni, n_columns, edges):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   106
    line = []
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   107
    line.extend(["|", " "] * ni)
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   108
    if (ni, ni - 1) in edges or (ni, ni) in edges:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   109
        # (ni, ni - 1)      (ni, ni)
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   110
        # | | | |           | | | |
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   111
        # +---o |           | o---+
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   112
        # | | c |           | c | |
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   113
        # | |/ /            | |/ /
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   114
        # | | |             | | |
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   115
        c = "|"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   116
    else:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   117
        c = " "
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   118
    line.extend([c, " "])
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   119
    line.extend(["|", " "] * (n_columns - ni - 1))
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   120
    return line
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   121
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   122
def asciistate():
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   123
    """returns the initial value for the "state" argument to ascii()"""
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   124
    return [0, 0]
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   125
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   126
def ascii(ui, state, type, char, text, coldata):
8839
bbfa21b6f18a graphlog: rename grapher to asciiedges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8838
diff changeset
   127
    """prints an ASCII graph of the DAG
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   128
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   129
    takes the following arguments (one call per node in the graph):
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   130
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   131
      - ui to write to
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   132
      - Somewhere to keep the needed state in (init to asciistate())
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   133
      - Column of the current node in the set of ongoing edges.
8840
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
   134
      - Type indicator of node data == ASCIIDATA.
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
   135
      - Payload: (char, lines):
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
   136
        - Character to use as node's symbol.
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
   137
        - List of lines to display as the node's text.
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   138
      - Edges; a list of (col, next_col) indicating the edges between
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   139
        the current node and its parents.
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   140
      - Number of columns (ongoing edges) in the current revision.
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   141
      - The difference between the number of columns (ongoing edges)
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   142
        in the next revision and the number of columns (ongoing edges)
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   143
        in the current revision. That is: -1 means one column removed;
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   144
        0 means no columns added or removed; 1 means one column added.
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   145
    """
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   146
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   147
    idx, edges, ncols, coldiff = coldata
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   148
    assert -2 < coldiff < 2
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   149
    if coldiff == -1:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   150
        # Transform
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   151
        #
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   152
        #     | | |        | | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   153
        #     o | |  into  o---+
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   154
        #     |X /         |/ /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   155
        #     | |          | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   156
        fix_long_right_edges(edges)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   157
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   158
    # add_padding_line says whether to rewrite
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   159
    #
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   160
    #     | | | |        | | | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   161
    #     | o---+  into  | o---+
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   162
    #     |  / /         |   | |  # <--- padding line
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   163
    #     o | |          |  / /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   164
    #                    o | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   165
    add_padding_line = (len(text) > 2 and coldiff == -1 and
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   166
                        [x for (x, y) in edges if x + 1 < y])
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   167
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   168
    # fix_nodeline_tail says whether to rewrite
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   169
    #
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   170
    #     | | o | |        | | o | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   171
    #     | | |/ /         | | |/ /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   172
    #     | o | |    into  | o / /   # <--- fixed nodeline tail
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   173
    #     | |/ /           | |/ /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   174
    #     o | |            o | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   175
    fix_nodeline_tail = len(text) <= 2 and not add_padding_line
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   176
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   177
    # nodeline is the line containing the node character (typically o)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   178
    nodeline = ["|", " "] * idx
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   179
    nodeline.extend([char, " "])
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   180
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   181
    nodeline.extend(
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   182
        get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   183
                                state[0], fix_nodeline_tail))
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   184
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   185
    # shift_interline is the line containing the non-vertical
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   186
    # edges between this entry and the next
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   187
    shift_interline = ["|", " "] * idx
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   188
    if coldiff == -1:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   189
        n_spaces = 1
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   190
        edge_ch = "/"
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   191
    elif coldiff == 0:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   192
        n_spaces = 2
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   193
        edge_ch = "|"
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   194
    else:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   195
        n_spaces = 3
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   196
        edge_ch = "\\"
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   197
    shift_interline.extend(n_spaces * [" "])
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   198
    shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   199
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   200
    # draw edges from the current node to its parents
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   201
    draw_edges(edges, nodeline, shift_interline)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   202
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   203
    # lines is the list of all graph lines to print
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   204
    lines = [nodeline]
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   205
    if add_padding_line:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   206
        lines.append(get_padding_line(idx, ncols, edges))
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   207
    lines.append(shift_interline)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   208
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   209
    # make sure that there are as many graph lines as there are
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   210
    # log strings
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   211
    while len(text) < len(lines):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   212
        text.append("")
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   213
    if len(lines) < len(text):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   214
        extra_interline = ["|", " "] * (ncols + coldiff)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   215
        while len(lines) < len(text):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   216
            lines.append(extra_interline)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   217
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   218
    # print lines
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   219
    indentation_level = max(ncols, ncols + coldiff)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   220
    for (line, logstr) in zip(lines, text):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   221
        ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   222
        ui.write(ln.rstrip() + '\n')
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   223
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   224
    # ... and start over
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   225
    state[0] = coldiff
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   226
    state[1] = idx
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
   227
7326
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
   228
def get_revs(repo, rev_opt):
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
   229
    if rev_opt:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
   230
        revs = revrange(repo, rev_opt)
11448
25430ff23cfa glog: fix crash on empty revision range
Eric Eisner <ede@mit.edu>
parents: 11321
diff changeset
   231
        if len(revs) == 0:
25430ff23cfa glog: fix crash on empty revision range
Eric Eisner <ede@mit.edu>
parents: 11321
diff changeset
   232
            return (nullrev, nullrev)
7326
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
   233
        return (max(revs), min(revs))
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
   234
    else:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
   235
        return (len(repo) - 1, 0)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
   236
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
   237
def check_unsupported_flags(pats, opts):
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   238
    for op in ["follow_first", "copies", "newest_first"]:
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   239
        if op in opts and opts[op]:
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   240
            raise util.Abort(_("-G/--graph option is incompatible with --%s")
10097
ffa6f2eb934e glog: fix "incompatible option" error message.
Greg Ward <greg-hg@gerg.ca>
parents: 10084
diff changeset
   241
                             % op.replace("_", "-"))
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
   242
    if pats and opts.get('follow'):
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
   243
        raise util.Abort(_("-G/--graph option is incompatible with --follow "
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
   244
                           "with file argument"))
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   245
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   246
def revset(pats, opts):
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   247
    """Return revset str built of revisions, log options and file patterns.
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   248
    """
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   249
    opt2revset = {
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   250
        'follow': (0, 'follow()'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   251
        'no_merges': (0, 'not merge()'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   252
        'only_merges': (0, 'merge()'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   253
        'removed': (0, 'removes("*")'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   254
        'date': (1, 'date($)'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   255
        'branch': (2, 'branch($)'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   256
        'exclude': (2, 'not file($)'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   257
        'include': (2, 'file($)'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   258
        'keyword': (2, 'keyword($)'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   259
        'only_branch': (2, 'branch($)'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   260
        'prune': (2, 'not ($ or ancestors($))'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   261
        'user': (2, 'user($)'),
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   262
        }
14132
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   263
    optrevset = []
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   264
    revset = []
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   265
    for op, val in opts.iteritems():
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   266
        if not val:
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   267
            continue
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   268
        if op == 'rev':
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   269
            # Already a revset
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   270
            revset.extend(val)
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   271
        if op not in opt2revset:
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   272
            continue
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   273
        arity, revop = opt2revset[op]
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   274
        revop = revop.replace('$', '%(val)r')
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   275
        if arity == 0:
14132
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   276
            optrevset.append(revop)
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   277
        elif arity == 1:
14132
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   278
            optrevset.append(revop % {'val': val})
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
   279
        else:
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   280
            for f in val:
14132
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   281
                optrevset.append(revop % {'val': f})
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   282
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   283
    for path in pats:
14132
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   284
        optrevset.append('file(%r)' % path)
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   285
14132
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   286
    if revset or optrevset:
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   287
        if revset:
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   288
            revset = ['(' + ' or '.join(revset) + ')']
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   289
        if optrevset:
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   290
            revset.append('(' + ' and '.join(optrevset) + ')')
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   291
        revset = ' and '.join(revset)
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   292
    else:
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
   293
        revset = 'all()'
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   294
    return revset
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   295
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   296
def generate(ui, dag, displayer, showparents, edgefn):
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
   297
    seen, state = [], asciistate()
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
   298
    for rev, type, ctx, parents in dag:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
   299
        char = ctx.node() in showparents and '@' or 'o'
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
   300
        displayer.show(ctx)
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
   301
        lines = displayer.hunk.pop(rev).split('\n')[:-1]
12579
aa1faedeac5a graphlog: style with header and footer (issue2395)
Mads Kiilerich <mads@kiilerich.com>
parents: 11776
diff changeset
   302
        displayer.flush(rev)
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
   303
        edges = edgefn(type, char, lines, seen, rev, parents)
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
   304
        for type, char, lines, coldata in edges:
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
   305
            ascii(ui, state, type, char, lines, coldata)
12579
aa1faedeac5a graphlog: style with header and footer (issue2395)
Mads Kiilerich <mads@kiilerich.com>
parents: 11776
diff changeset
   306
    displayer.close()
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
   307
14311
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
   308
@command('glog',
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
   309
    [('l', 'limit', '',
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
   310
     _('limit number of changes displayed'), _('NUM')),
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
   311
    ('p', 'patch', False, _('show patch')),
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
   312
    ('r', 'rev', [], _('show the specified revision or range'), _('REV')),
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
   313
    ] + templateopts,
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
   314
    _('hg glog [OPTION]... [FILE]'))
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   315
def graphlog(ui, repo, *pats, **opts):
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   316
    """show revision history alongside an ASCII revision graph
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   317
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   318
    Print a revision history alongside a revision graph drawn with
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   319
    ASCII characters.
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   320
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   321
    Nodes printed as an @ character are parents of the working
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   322
    directory.
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   323
    """
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   324
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
   325
    check_unsupported_flags(pats, opts)
7370
7bc62ebe7693 graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7369
diff changeset
   326
14133
28085b82f801 graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents: 14132
diff changeset
   327
    revs = sorted(revrange(repo, [revset(pats, opts)]), reverse=1)
28085b82f801 graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents: 14132
diff changeset
   328
    limit = cmdutil.loglimit(opts)
28085b82f801 graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents: 14132
diff changeset
   329
    if limit is not None:
28085b82f801 graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents: 14132
diff changeset
   330
        revs = revs[:limit]
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   331
    revdag = graphmod.dagwalker(repo, revs)
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   332
9368
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
   333
    displayer = show_changeset(ui, repo, opts, buffered=True)
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
   334
    showparents = [ctx.node() for ctx in repo[None].parents()]
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   335
    generate(ui, revdag, displayer, showparents, asciiedges)
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   336
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   337
def graphrevs(repo, nodes, opts):
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   338
    limit = cmdutil.loglimit(opts)
8837
d8e3a98018cb graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8836
diff changeset
   339
    nodes.reverse()
10111
27457d31ae3f cmdutil: replace sys.maxint with None as default value in loglimit
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10097
diff changeset
   340
    if limit is not None:
8837
d8e3a98018cb graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8836
diff changeset
   341
        nodes = nodes[:limit]
d8e3a98018cb graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8836
diff changeset
   342
    return graphmod.nodes(repo, nodes)
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   343
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   344
def goutgoing(ui, repo, dest=None, **opts):
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   345
    """show the outgoing changesets alongside an ASCII revision graph
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
   346
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   347
    Print the outgoing changesets alongside a revision graph drawn with
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   348
    ASCII characters.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   349
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   350
    Nodes printed as an @ character are parents of the working
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   351
    directory.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   352
    """
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   353
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
   354
    check_unsupported_flags([], opts)
12735
8888e56ac417 outgoing: unify common graphlog.outgoing and hg.outgoing code
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12730
diff changeset
   355
    o = hg._outgoing(ui, repo, dest, opts)
8888e56ac417 outgoing: unify common graphlog.outgoing and hg.outgoing code
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12730
diff changeset
   356
    if o is None:
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   357
        return
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   358
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   359
    revdag = graphrevs(repo, o, opts)
9368
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
   360
    displayer = show_changeset(ui, repo, opts, buffered=True)
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
   361
    showparents = [ctx.node() for ctx in repo[None].parents()]
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   362
    generate(ui, revdag, displayer, showparents, asciiedges)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   363
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   364
def gincoming(ui, repo, source="default", **opts):
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   365
    """show the incoming changesets alongside an ASCII revision graph
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   366
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   367
    Print the incoming changesets alongside a revision graph drawn with
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   368
    ASCII characters.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   369
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   370
    Nodes printed as an @ character are parents of the working
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
   371
    directory.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   372
    """
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
   373
    def subreporecurse():
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
   374
        return 1
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   375
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
   376
    check_unsupported_flags([], opts)
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
   377
    def display(other, chlist, displayer):
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
   378
        revdag = graphrevs(other, chlist, opts)
9368
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
   379
        showparents = [ctx.node() for ctx in repo[None].parents()]
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
   380
        generate(ui, revdag, displayer, showparents, asciiedges)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   381
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
   382
    hg._incoming(display, subreporecurse, ui, repo, source, opts, buffered=True)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   383
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   384
def uisetup(ui):
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   385
    '''Initialize the extension.'''
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   386
    _wrapcmd(ui, 'log', commands.table, graphlog)
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   387
    _wrapcmd(ui, 'incoming', commands.table, gincoming)
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   388
    _wrapcmd(ui, 'outgoing', commands.table, goutgoing)
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   389
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   390
def _wrapcmd(ui, cmd, table, wrapfn):
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   391
    '''wrap the command'''
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   392
    def graph(orig, *args, **kwargs):
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   393
        if kwargs['graph']:
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
   394
            return wrapfn(*args, **kwargs)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   395
        return orig(*args, **kwargs)
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
   396
    entry = extensions.wrapcommand(table, cmd, graph)
7763
cdc913e7fc5f log-like commands now use -G for --graph, -g for --git
Jim Correia <jim.correia@pobox.com>
parents: 7716
diff changeset
   397
    entry[1].append(('G', 'graph', None, _("show the revision DAG")))