thg /

Full commit
TK Soh 9935bc5 

Steve Borho 8fa164a 

TK Soh 9935bc5 

Steve Borho 8fa164a 

TK Soh 9935bc5 

Steve Borho 95ec18d 
Steve Borho e155972 
TK Soh 9935bc5 

Steve Borho e155972 

TK Soh 9935bc5 

Steve Borho d678478 
TK Soh 9935bc5 

Steve Borho e155972 

TK Soh 9935bc5 

# front-end for TortoiseHg dialogs
# Copyright (C) 2007 TK Soh <>

import pygtk
import gtk

import os
import sys

from mercurial import demandimport; demandimport.enable()
from mercurial import ui
from tortoise.thgutil import get_prog_root

# always use hg exe installed with TortoiseHg
thgdir = get_prog_root()
    os.environ['PATH'] = os.path.pathsep.join([thgdir, os.environ['PATH']])
except KeyError:
    os.environ['PATH'] = thgdir

if not sys.stdin.isatty():
        import win32traceutil
        # FIXME: quick workaround traceback caused by missing "closed" 
        # attribute in win32trace.
        from mercurial import ui
        def write_err(self, *args):
            for a in args:
        ui.ui.write_err = write_err
    except ImportError:
    except pywintypes.error:

# Map hgproc commands to dialog modules in hggtk/
from hggtk import commit, status, addremove, tagadd, tags, history, merge
from hggtk import diff, revisions, update, serve, clone, synch, hgcmd, about
from hggtk import recovery, thgconfig, datamine, hginit, thgshelve, rename
from hggtk import hgignore
_dialogs = { 'commit' : commit,    'status' : status,    'revert' : status,
             'add'    : addremove, 'remove' : addremove, 'tag'    : tagadd,
             'tags'   : tags,      'log'    : history,   'history': history,
             'diff'   : diff,      'merge'  : merge,     'tip'    : revisions,
             'parents': revisions, 'heads'  : revisions, 'update' : update,
             'clone'  : clone,     'serve'  : serve,     'synch'  : synch,
             'about'  : about,     'config' : thgconfig, 'recovery': recovery,
             'datamine': datamine, 'init'   : hginit,    'shelve' : thgshelve,
             'hgignore': hgignore, 'rename' : rename }

def get_list_from_file(filename):
    fd = open(filename, "r")
    lines = [ x.replace("\n", "") for x in fd.readlines() ]
    return lines

def get_option(args):
    import getopt
    long_opt_list = ('command=', 'exepath=', 'listfile=', 'root=', 'cwd=',
            'deletelistfile', 'nogui', 'detect')
    opts, args = getopt.getopt(args, "c:e:l:dR:", long_opt_list)
    # Set default options
    options = {}
    options['hgcmd'] = 'help'
    options['cwd'] = os.getcwd()
    options['files'] = []
    options['gui'] = True
    listfile = None
    delfile = False
    for o, a in opts:
        if o in ("-c", "--command"):
            options['hgcmd'] = a
        elif o in ("-l", "--listfile"):
            listfile = a
        elif o in ("-d", "--deletelistfile"):
            delfile = True
        elif o in ("--nogui"):
            options['gui'] = False
        elif o in ("-R", "--root"):
            options['root'] = a
        elif o in ("--cwd"):
            options['cwd'] = a
        elif o in ("--detect"):
            options['detect'] = True

    if listfile:
        options['files'] = get_list_from_file(listfile)
        if delfile:

    return (options, args)

def parse(args):
    option, args = get_option(args)
    cmdline = ['hg', option['hgcmd']] 
    if 'root' in option:
    option['cmdline'] = cmdline

    global _dialogs
    dialog = _dialogs.get(option['hgcmd'], hgcmd)**option)

def run_trapped(args):
        dlg = parse(sys.argv[1:])
        import traceback
        from hggtk.dialog import error_dialog
        tr = traceback.format_exc()
        print tr
        error_dialog(None, "Error executing hgproc", tr)

if __name__=='__main__':
    #dlg = parse(['-c', 'help', '--', '-v'])
    #dlg = parse(['-c', 'log', '--root', 'c:\hg\h1', '--', '-l1'])
    #dlg = parse(['-c', 'status', '--root', 'c:\hg\h1', ])
    #dlg = parse(['-c', 'add', '--root', 'c:\hg\h1', '--listfile', 'c:\\hg\\h1\\f1', '--notify'])
    #dlg = parse(['-c', 'rollback', '--root', 'c:\\hg\\h1'])
    print "hgproc sys.argv =", sys.argv
    dlg = run_trapped(sys.argv[1:])