hgext/hgk.py
author Matt Mackall <mpm@selenic.com>
Thu, 11 Oct 2007 00:46:54 -0500
changeset 5451 0a43875677b1
parent 5395 e73a83af7926
permissions -rw-r--r--
revlog: break up compression of large deltas Python's zlib apparently makes an internal copy of strings passed to compress(). To avoid this, compress strings 1M at a time, then join them at the end if the result would be smaller than the original. For initial commits of large but compressible files, this cuts peak memory usage nearly in half.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
     1
# Minimal support for git commands on an hg repository
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
     2
#
2858
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2744
diff changeset
     3
# Copyright 2005, 2006 Chris Mason <mason@suse.com>
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
     4
#
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
     5
# This software may be used and distributed according to the terms
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
     6
# of the GNU General Public License, incorporated herein by reference.
5395
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
     7
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
     8
# The hgk extension allows browsing the history of a repository in a
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
     9
# graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    10
# not distributed with Mercurial.)
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    11
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    12
# hgk consists of two parts: a Tcl script that does the displaying and
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    13
# querying of information, and an extension to mercurial named hgk.py,
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    14
# which provides hooks for hgk to get information. hgk can be found in
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    15
# the contrib directory, and hgk.py can be found in the hgext
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    16
# directory.  
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    17
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    18
# To load the hgext.py extension, add it to your .hgrc file (you have
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    19
# to use your global $HOME/.hgrc file, not one in a repository). You
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    20
# can specify an absolute path:
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    21
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    22
#   [extensions]
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    23
#   hgk=/usr/local/lib/hgk.py
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    24
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    25
# Mercurial can also scan the default python library path for a file
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    26
# named 'hgk.py' if you set hgk empty:
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    27
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    28
#   [extensions]
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    29
#   hgk=
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    30
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    31
# The hg view command will launch the hgk Tcl script. For this command
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    32
# to work, hgk must be in your search path. Alternately, you can
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    33
# specify the path to hgk in your .hgrc file:
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    34
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    35
#   [hgk]
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    36
#   path=/location/of/hgk
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    37
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    38
# hgk can make use of the extdiff extension to visualize
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    39
# revisions. Assuming you had already configured extdiff vdiff
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    40
# command, just add:
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    41
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    42
#   [hgk]
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    43
#   vdiff=vdiff
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    44
#
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    45
# Revisions context menu will now display additional entries to fire
e73a83af7926 hgk: add basic usage and configuration documentation
Patrick Mezard <pmezard@gmail.com>
parents: 5393
diff changeset
    46
# vdiff on hovered and selected revisions.
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
    47
3963
ba45041827a2 remove various unused import
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3886
diff changeset
    48
import sys, os
3886
abaee83ce0a6 Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents: 3803
diff changeset
    49
from mercurial import hg, fancyopts, commands, ui, util, patch, revlog
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    50
3060
aa1cee5b8afb hgk.py: add an optional file list to debug-diff-tree
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3056
diff changeset
    51
def difftree(ui, repo, node1=None, node2=None, *files, **opts):
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    52
    """diff trees from two commits"""
3060
aa1cee5b8afb hgk.py: add an optional file list to debug-diff-tree
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3056
diff changeset
    53
    def __difftree(repo, node1, node2, files=[]):
3978
ee5663cb4406 hgk: remove unused code, node2 is always set
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3963
diff changeset
    54
        assert node2 is not None
3981
180670f14045 hgk: (re)optimize reading of changelog and manifest
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3979
diff changeset
    55
        mmap = repo.changectx(node1).manifest()
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
    56
        mmap2 = repo.changectx(node2).manifest()
3978
ee5663cb4406 hgk: remove unused code, node2 is always set
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3963
diff changeset
    57
        status = repo.status(node1, node2, files=files)[:5]
ee5663cb4406 hgk: remove unused code, node2 is always set
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3963
diff changeset
    58
        modified, added, removed, deleted, unknown = status
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
    59
3066
c6bfe536a1f9 hgk.py: fix for a bug introduced in 32fd512ca7c0
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3064
diff changeset
    60
        empty = hg.short(hg.nullid)
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
    61
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1614
diff changeset
    62
        for f in modified:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
    63
            # TODO get file permissions
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
    64
            print ":100664 100664 %s %s M\t%s\t%s" % (hg.short(mmap[f]),
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
    65
                                                      hg.short(mmap2[f]),
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
    66
                                                      f, f)
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1614
diff changeset
    67
        for f in added:
3066
c6bfe536a1f9 hgk.py: fix for a bug introduced in 32fd512ca7c0
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3064
diff changeset
    68
            print ":000000 100664 %s %s N\t%s\t%s" % (empty,
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
    69
                                                      hg.short(mmap2[f]),
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
    70
                                                      f, f)
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1614
diff changeset
    71
        for f in removed:
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
    72
            print ":100664 000000 %s %s D\t%s\t%s" % (hg.short(mmap[f]),
3066
c6bfe536a1f9 hgk.py: fix for a bug introduced in 32fd512ca7c0
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3064
diff changeset
    73
                                                      empty,
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
    74
                                                      f, f)
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
    75
    ##
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
    76
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    77
    while True:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    78
        if opts['stdin']:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    79
            try:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    80
                line = raw_input().split(' ')
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    81
                node1 = line[0]
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    82
                if len(line) > 1:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    83
                    node2 = line[1]
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    84
                else:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    85
                    node2 = None
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    86
            except EOFError:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    87
                break
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    88
        node1 = repo.lookup(node1)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    89
        if node2:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    90
            node2 = repo.lookup(node2)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    91
        else:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    92
            node2 = node1
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    93
            node1 = repo.changelog.parents(node1)[0]
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    94
        if opts['patch']:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    95
            if opts['pretty']:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
    96
                catcommit(repo, node2, "")
3064
fbd3f9fd645d hgk.py: use mercurial.patch functions when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3062
diff changeset
    97
            patch.diff(repo, node1, node2,
fbd3f9fd645d hgk.py: use mercurial.patch functions when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3062
diff changeset
    98
                       files=files,
fbd3f9fd645d hgk.py: use mercurial.patch functions when possible
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3062
diff changeset
    99
                       opts=patch.diffopts(ui, {'git': True}))
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   100
        else:
3060
aa1cee5b8afb hgk.py: add an optional file list to debug-diff-tree
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3056
diff changeset
   101
            __difftree(repo, node1, node2, files=files)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   102
        if not opts['stdin']:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   103
            break
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   104
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   105
def catcommit(repo, n, prefix, ctx=None):
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   106
    nlprefix = '\n' + prefix;
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   107
    if ctx is None:
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   108
        ctx = repo.changectx(n)
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   109
    (p1, p2) = ctx.parents()
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   110
    print "tree %s" % (hg.short(ctx.changeset()[0])) # use ctx.node() instead ??
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   111
    if p1: print "parent %s" % (hg.short(p1.node()))
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   112
    if p2: print "parent %s" % (hg.short(p2.node()))
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   113
    date = ctx.date()
4040
cc08d2543593 hgk: remove embedded nulls in descriptions
Matt Mackall <mpm@selenic.com>
parents: 3981
diff changeset
   114
    description = ctx.description().replace("\0", "")
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   115
    lines = description.splitlines()
2525
c49dc6f38a19 hgk: Don't choke on empty changelogs
Brendan Cully <brendan@kublai.com>
parents: 2432
diff changeset
   116
    if lines and lines[-1].startswith('committer:'):
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   117
        committer = lines[-1].split(': ')[1].rstrip()
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   118
    else:
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   119
        committer = ctx.user()
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1278
diff changeset
   120
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   121
    print "author %s %s %s" % (ctx.user(), int(date[0]), date[1])
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   122
    print "committer %s %s %s" % (committer, int(date[0]), date[1])
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   123
    print "revision %d" % ctx.rev()
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   124
    print ""
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   125
    if prefix != "":
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   126
        print "%s%s" % (prefix, description.replace('\n', nlprefix).strip())
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   127
    else:
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   128
        print description
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   129
    if prefix:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   130
        sys.stdout.write('\0')
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   131
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   132
def base(ui, repo, node1, node2):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   133
    """Output common ancestor information"""
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   134
    node1 = repo.lookup(node1)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   135
    node2 = repo.lookup(node2)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   136
    n = repo.changelog.ancestor(node1, node2)
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
   137
    print hg.short(n)
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   138
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   139
def catfile(ui, repo, type=None, r=None, **opts):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   140
    """cat a specific revision"""
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   141
    # in stdin mode, every line except the commit is prefixed with two
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   142
    # spaces.  This way the our caller can find the commit without magic
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   143
    # strings
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   144
    #
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   145
    prefix = ""
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   146
    if opts['stdin']:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   147
        try:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   148
            (type, r) = raw_input().split(' ');
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   149
            prefix = "    "
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   150
        except EOFError:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   151
            return
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   152
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   153
    else:
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   154
        if not type or not r:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   155
            ui.warn("cat-file: type or revision not supplied\n")
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   156
            commands.help_(ui, 'cat-file')
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   157
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   158
    while r:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   159
        if type != "commit":
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   160
            sys.stderr.write("aborting hg cat-file only understands commits\n")
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   161
            sys.exit(1);
720
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
   162
        n = repo.lookup(r)
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   163
        catcommit(repo, n, prefix)
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   164
        if opts['stdin']:
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   165
            try:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   166
                (type, r) = raw_input().split(' ');
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   167
            except EOFError:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   168
                break
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   169
        else:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   170
            break
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   171
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   172
# git rev-tree is a confusing thing.  You can supply a number of
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   173
# commit sha1s on the command line, and it walks the commit history
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   174
# telling you which commits are reachable from the supplied ones via
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   175
# a bitmask based on arg position.
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   176
# you can specify a commit to stop at by starting the sha1 with ^
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   177
def revtree(args, repo, full="tree", maxnr=0, parents=False):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   178
    def chlogwalk():
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   179
        count = repo.changelog.count()
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   180
        i = count
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   181
        l = [0] * 100
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   182
        chunk = 100
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   183
        while True:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   184
            if chunk > i:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   185
                chunk = i
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   186
                i = 0
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   187
            else:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   188
                i -= chunk
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   189
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   190
            for x in xrange(0, chunk):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   191
                if i + x >= count:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   192
                    l[chunk - x:] = [0] * (chunk - x)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   193
                    break
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   194
                if full != None:
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   195
                    l[x] = repo.changectx(i + x)
3981
180670f14045 hgk: (re)optimize reading of changelog and manifest
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3979
diff changeset
   196
                    l[x].changeset() # force reading
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   197
                else:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   198
                    l[x] = 1
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   199
            for x in xrange(chunk-1, -1, -1):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   200
                if l[x] != 0:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   201
                    yield (i + x, full != None and l[x] or None)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   202
            if i == 0:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   203
                break
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1278
diff changeset
   204
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   205
    # calculate and return the reachability bitmask for sha
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   206
    def is_reachable(ar, reachable, sha):
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   207
        if len(ar) == 0:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   208
            return 1
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   209
        mask = 0
3468
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3173
diff changeset
   210
        for i in xrange(len(ar)):
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   211
            if sha in reachable[i]:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   212
                mask |= 1 << i
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   213
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   214
        return mask
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   215
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   216
    reachable = []
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   217
    stop_sha1 = []
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   218
    want_sha1 = []
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   219
    count = 0
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   220
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   221
    # figure out which commits they are asking for and which ones they
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   222
    # want us to stop on
3468
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3173
diff changeset
   223
    for i in xrange(len(args)):
720
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
   224
        if args[i].startswith('^'):
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
   225
            s = repo.lookup(args[i][1:])
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
   226
            stop_sha1.append(s)
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   227
            want_sha1.append(s)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   228
        elif args[i] != 'HEAD':
720
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
   229
            want_sha1.append(repo.lookup(args[i]))
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   230
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   231
    # calculate the graph for the supplied commits
3468
0e68608bd11d use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3173
diff changeset
   232
    for i in xrange(len(want_sha1)):
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   233
        reachable.append({});
720
095dd8c757e0 Change hgit revision lookup to use repo.lookup
mason@suse.com
parents: 719
diff changeset
   234
        n = want_sha1[i];
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   235
        visit = [n];
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   236
        reachable[i][n] = 1
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   237
        while visit:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   238
            n = visit.pop(0)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   239
            if n in stop_sha1:
1243
9d10f89b75a5 Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents: 1239
diff changeset
   240
                continue
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   241
            for p in repo.changelog.parents(n):
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   242
                if p not in reachable[i]:
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   243
                    reachable[i][p] = 1
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   244
                    visit.append(p)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   245
                if p in stop_sha1:
1243
9d10f89b75a5 Fix hgit revtree bug with stop revision handling
root@coffee.suse.com
parents: 1239
diff changeset
   246
                    continue
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   247
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   248
    # walk the repository looking for commits that are in our
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   249
    # reachability graph
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   250
    for i, ctx in chlogwalk():
334
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   251
        n = repo.changelog.node(i)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   252
        mask = is_reachable(want_sha1, reachable, n)
290574209284 hgit: remove tabs
mpm@selenic.com
parents: 280
diff changeset
   253
        if mask:
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   254
            parentstr = ""
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   255
            if parents:
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   256
                pp = repo.changelog.parents(n)
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   257
                if pp[0] != hg.nullid:
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
   258
                    parentstr += " " + hg.short(pp[0])
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   259
                if pp[1] != hg.nullid:
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
   260
                    parentstr += " " + hg.short(pp[1])
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   261
            if not full:
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
   262
                print hg.short(n) + parentstr
3061
fe5c92529d1c hgk.py: fix warnings from pychecker
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3060
diff changeset
   263
            elif full == "commit":
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
   264
                print hg.short(n) + parentstr
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   265
                catcommit(repo, n, '    ', ctx)
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   266
            else:
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   267
                (p1, p2) = repo.changelog.parents(n)
3056
3dab573a4330 hgk: use short changeset hashes
TK Soh <teekaysoh@yahoo.com>
parents: 3009
diff changeset
   268
                (h, h1, h2) = map(hg.short, (n, p1, p2))
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   269
                (i1, i2) = map(repo.changelog.rev, (p1, p2))
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   270
3979
e0d13267f7a4 hgk: use contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3978
diff changeset
   271
                date = ctx.date()[0]
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   272
                print "%s %s:%s" % (date, h, mask),
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   273
                mask = is_reachable(want_sha1, reachable, p1)
3578
3b4e00cba57a Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3468
diff changeset
   274
                if i1 != hg.nullrev and mask > 0:
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   275
                    print "%s:%s " % (h1, mask),
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   276
                mask = is_reachable(want_sha1, reachable, p2)
3578
3b4e00cba57a Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3468
diff changeset
   277
                if i2 != hg.nullrev and mask > 0:
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   278
                    print "%s:%s " % (h2, mask),
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   279
                print ""
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   280
            if maxnr and count >= maxnr:
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   281
                break
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   282
            count += 1
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   283
3090
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   284
def revparse(ui, repo, *revs, **opts):
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   285
    """Parse given revisions"""
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   286
    def revstr(rev):
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   287
        if rev == 'HEAD':
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   288
            rev = 'tip'
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   289
        return revlog.hex(repo.lookup(rev))
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   290
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   291
    for r in revs:
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   292
        revrange = r.split(':', 1)
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   293
        ui.write('%s\n' % revstr(revrange[0]))
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   294
        if len(revrange) == 2:
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   295
            ui.write('^%s\n' % revstr(revrange[1]))
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   296
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   297
# git rev-list tries to order things by date, and has the ability to stop
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   298
# at a given commit without walking the whole repo.  TODO add the stop
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   299
# parameter
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   300
def revlist(ui, repo, *revs, **opts):
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   301
    """print revisions"""
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   302
    if opts['header']:
356
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   303
        full = "commit"
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   304
    else:
7dec9a46d82a hgit rev-list support
mpm@selenic.com
parents: 350
diff changeset
   305
        full = None
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   306
    copy = [x for x in revs]
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   307
    revtree(copy, repo, full, opts['max_count'], opts['parents'])
267
497aa6d276d2 Initial import of hgit and hgk
mpm@selenic.com
parents:
diff changeset
   308
5393
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   309
def config(ui, repo, **opts):
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   310
    """print extension options"""
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   311
    def writeopt(name, value):
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   312
        ui.write('k=%s\nv=%s\n' % (name, value)) 
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   313
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   314
    writeopt('vdiff', ui.config('hgk', 'vdiff', ''))
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   315
    
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   316
3090
edefbb3a3b08 hgk: add --limit, and revranges
Brendan Cully <brendan@kublai.com>
parents: 3089
diff changeset
   317
def view(ui, repo, *etc, **opts):
1278
6a0d373d3126 hgit -> hgk.py
mpm@selenic.com
parents: 1243
diff changeset
   318
    "start interactive history viewer"
6a0d373d3126 hgit -> hgk.py
mpm@selenic.com
parents: 1243
diff changeset
   319
    os.chdir(repo.root)
3173
eb0906ebba81 hgk: fix mixup of --limit and REVRANGE in hgk call
TK Soh <teekaysoh@yahoo.com>
parents: 3090
diff changeset
   320
    optstr = ' '.join(['--%s %s' % (k, v) for k, v in opts.iteritems() if v])
eb0906ebba81 hgk: fix mixup of --limit and REVRANGE in hgk call
TK Soh <teekaysoh@yahoo.com>
parents: 3090
diff changeset
   321
    cmd = ui.config("hgk", "path", "hgk") + " %s %s" % (optstr, " ".join(etc))
eb0906ebba81 hgk: fix mixup of --limit and REVRANGE in hgk call
TK Soh <teekaysoh@yahoo.com>
parents: 3090
diff changeset
   322
    ui.debug("running %s\n" % cmd)
4686
39001f4b7d99 hgk: Use $HG instead of hg (see 849f011dbf79)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4040
diff changeset
   323
    util.system(cmd)
1278
6a0d373d3126 hgit -> hgk.py
mpm@selenic.com
parents: 1243
diff changeset
   324
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   325
cmdtable = {
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   326
    "^view":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   327
        (view,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   328
         [('l', 'limit', '', 'limit number of changes displayed')],
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   329
         'hg view [-l LIMIT] [REVRANGE]'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   330
    "debug-diff-tree":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   331
        (difftree,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   332
         [('p', 'patch', None, 'generate patch'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   333
          ('r', 'recursive', None, 'recursive'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   334
          ('P', 'pretty', None, 'pretty'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   335
          ('s', 'stdin', None, 'stdin'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   336
          ('C', 'copy', None, 'detect copies'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   337
          ('S', 'search', "", 'search')],
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   338
         'hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]...'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   339
    "debug-cat-file":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   340
        (catfile,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   341
         [('s', 'stdin', None, 'stdin')],
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   342
         'hg debug-cat-file [OPTION]... TYPE FILE'),
5393
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   343
    "debug-config":
c2ad1890fc53 hgk: add debug-config command to pass configuration options
Patrick Mezard <pmezard@gmail.com>
parents: 4730
diff changeset
   344
        (config, [], 'hg debug-config'),
4730
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   345
    "debug-merge-base":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   346
        (base, [], 'hg debug-merge-base node node'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   347
    "debug-rev-parse":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   348
        (revparse,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   349
         [('', 'default', '', 'ignored')],
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   350
         'hg debug-rev-parse REV'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   351
    "debug-rev-list":
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   352
        (revlist,
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   353
         [('H', 'header', None, 'header'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   354
          ('t', 'topo-order', None, 'topo-order'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   355
          ('p', 'parents', None, 'parents'),
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   356
          ('n', 'max-count', 0, 'max-count')],
eadfaa9ec487 Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4686
diff changeset
   357
         'hg debug-rev-list [options] revs'),
1239
29f17e083e84 Turn hgit into an extension, and add commands supporting the latest gitk
mason@suse.com
parents: 740
diff changeset
   358
}