Staging
v0.5.0
https://foss.heptapod.net/mercurial/hgview
Raw File
Tip revision: 19708f432bda73847bd88308ce5de6a58a773ebd authored by Alain Leufroy on 10 June 2011, 13:18:32 UTC
Added tag hgview-version-1.3.0 for changeset d43754c8e5b5
Tip revision: 19708f4
hgview.py
# hgview: visual mercurial graphlog browser in PyQt4
#
# Copyright 2008-2010 Logilab
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.

'''browse the repository in a(n other) graphical way

The hgview extension allows browsing the history of a repository in a
graphical way. It requires PyQt4 with QScintilla.
'''

import os
from mercurial import hg, commands, dispatch, error
    
# every command must take a ui and and repo as arguments.
# opts is a dict where you can find other command line flags
#
# Other parameters are taken in order from items on the command line that
# don't start with a dash.  If no default value is given in the parameter list,
# they are required.



def start_hgview(ui, repo, *pats, **opts):
    # WARNING, this docstring is superseeded programatically 
    """
start hgview log viewer
=======================

    This command will launch the hgview log navigator, allowing to
    visually browse in the hg graph log, search in logs, and display
    diff between arbitrary revisions of a file.

    If a filename is given, launch the filelog diff viewer for this file, 
    and with the '-n' option, launch the filelog navigator for the file.

    With the '-r' option, launch the manifest viexer for the given revision.

    """
    
    rundir = repo.root

    # If this user has a username validation hook enabled,
    # it could conflict with hgview because both will try to
    # allocate a QApplication, and PyQt doesn't deal well
    # with two app instances running under the same context.
    # To prevent this, we run the hook early before hgview
    # allocates the app
    try:
        from hgconf.uname import hook
        hook(ui, repo)
    except ImportError:
        pass

    import sys
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
    try:
        from PyQt4 import QtGui
        import hgviewlib.qt4.hgqv_rc
        from hgviewlib.util import rootpath
        from hgviewlib.qt4.hgrepoviewer import HgRepoViewer
        from hgviewlib.qt4.hgfiledialog import FileDiffViewer, FileViewer
        from hgviewlib.qt4.hgmanifestdialog import ManifestViewer
        from hgviewlib.qt4 import setup_font_substitutions

    except ImportError, e:
        print e
        # If we're unable to import Qt4 or hgviewlib, try to
        # run the application directly.
        # You can specificy it's location in ~/.hgrc via
        #   [hgview]
        #   path=
        cmd = ui.config("hgview", "path", "hgview") 
        os.system(cmd + " " + " ".join(pats))

    else:
        # make Ctrl+C works
        import signal
        signal.signal(signal.SIGINT, signal.SIG_DFL)        
        app = QtGui.QApplication(sys.argv)
        setup_font_substitutions()
        if len(pats) == 1:
            filename = rootpath(repo, opts.get("rev"), pats[0])
            if filename is None:
                raise(error.Abort("%s is not a tracked file" % pats[0]))
            
            # should be a filename of a file managed in the repo
            if opts.get('navigate'):
                mainwindow = FileViewer(repo, filename)
            else:
                mainwindow = FileDiffViewer(repo, filename)
        else:
            rev = opts.get('rev')
            if rev:
                rev = int(rev)
                mainwindow = ManifestViewer(repo, rev)
            else:
                head = None
                if opts.get('start'):
                    head = int(opts.get('start'))
                mainwindow = HgRepoViewer(repo, head)
        mainwindow.show()
        return app.exec_()

import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
import hgviewlib.hgviewhelp as hghelp

start_hgview.__doc__ = hghelp.long_help_msg
    
cmdtable = {
    "^hgview|hgv|qv": (start_hgview,
                       [('n', 'navigate', False, '(with filename) start in navigation mode'),
                        ('r', 'rev', '', 'start in manifest navigation mode at rev R'),
                        ('s', 'start', '', 'show only graph from rev S'),
                        ],
            "hg hgview [options] [filename]"),
}
    
back to top