tortoisehg.py
author TK Soh <teekaysoh@yahoo.com>
Sat, 01 Dec 2007 16:25:19 +0000
changeset 337 1f161ca182e3
parent 212 0b0e24b16442
child 361 dfaa2d2e4705
permissions -rw-r--r--
cmenu: use different menu for hgk/hgview
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
     1
#
58
3ebc84829919 add copyright note
TK Soh <teekaysoh@yahoo.com>
parents: 22
diff changeset
     2
# Simple TortoiseSVN-like Mercurial plugin for the Windows Shell
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     3
# Published under the GNU GPL, v2 or later.
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     4
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     5
# Copyright (C) 2007 Henry Ludemann <misc@hl.id.au>
58
3ebc84829919 add copyright note
TK Soh <teekaysoh@yahoo.com>
parents: 22
diff changeset
     6
# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
     7
#
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     8
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
     9
import os
151
b8ee6fc5350b direct output to pywin trace collect when registered as DLL
TK Soh <teekaysoh@yahoo.com>
parents: 148
diff changeset
    10
import sys
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    11
import _winreg
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    12
151
b8ee6fc5350b direct output to pywin trace collect when registered as DLL
TK Soh <teekaysoh@yahoo.com>
parents: 148
diff changeset
    13
if hasattr(sys, "frozen") and sys.frozen == 'dll':
b8ee6fc5350b direct output to pywin trace collect when registered as DLL
TK Soh <teekaysoh@yahoo.com>
parents: 148
diff changeset
    14
    import win32traceutil
b8ee6fc5350b direct output to pywin trace collect when registered as DLL
TK Soh <teekaysoh@yahoo.com>
parents: 148
diff changeset
    15
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    16
# shell extension classes
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    17
from tortoise.contextmenu import ContextMenuExtension
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    18
from tortoise.iconoverlay import ChangedOverlay, AddedOverlay, UnchangedOverlay
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    19
212
0b0e24b16442 setup: fix installation path
TK Soh <teekaysoh@yahoo.com>
parents: 153
diff changeset
    20
bin_path = os.path.dirname(os.path.join(os.getcwd(), sys.argv[0]))
0b0e24b16442 setup: fix installation path
TK Soh <teekaysoh@yahoo.com>
parents: 153
diff changeset
    21
print "bin path = ", bin_path
0b0e24b16442 setup: fix installation path
TK Soh <teekaysoh@yahoo.com>
parents: 153
diff changeset
    22
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    23
# TortoiseHg registry setup
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    24
def register_tortoise_path(unregister=False):
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    25
    key = r"Software\TortoiseHg"
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    26
    cat = _winreg.HKEY_CURRENT_USER     # HKEY_LOCAL_MACHINE
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    27
    if (unregister):
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    28
        _winreg.DeleteKey(cat, key)
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    29
        print "TortoiseHg unregistered"
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    30
    else:
212
0b0e24b16442 setup: fix installation path
TK Soh <teekaysoh@yahoo.com>
parents: 153
diff changeset
    31
        _winreg.SetValue(cat, key, _winreg.REG_SZ, bin_path)
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    32
        print "TortoiseHg registered"
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    33
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    34
# for COM registration via py2exe
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    35
def DllRegisterServer():
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    36
    RegisterServer(ContextMenuExtension)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    37
    RegisterServer(ChangedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    38
    RegisterServer(AddedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    39
    RegisterServer(UnchangedOverlay)
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    40
    register_tortoise_path()
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    41
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    42
# for COM registration via py2exe
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    43
def DllUnregisterServer():
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    44
    UnregisterServer(ContextMenuExtension)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    45
    UnregisterServer(ChangedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    46
    UnregisterServer(AddedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    47
    UnregisterServer(UnchangedOverlay)
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    48
    register_tortoise_path(unregister=True)
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    49
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    50
def RegisterServer(cls):
2
e8ddeb25f3f7 first working draft on icon overlay for Hg
TK Soh <teekaysoh@yahoo.com>
parents: 1
diff changeset
    51
    # Add mercurial to the library path
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    52
    try:
2
e8ddeb25f3f7 first working draft on icon overlay for Hg
TK Soh <teekaysoh@yahoo.com>
parents: 1
diff changeset
    53
        import mercurial
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    54
    except ImportError:
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    55
        from win32com.server import register
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    56
        register.UnregisterClasses(cls)
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    57
        raise "Error: Failed to find mercurial module!"
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    58
22
c4dd9fd12468 remove all remaining references to bzr
TK Soh <teekaysoh@yahoo.com>
parents: 3
diff changeset
    59
    hg_path = os.path.dirname(os.path.dirname(mercurial.__file__))
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    60
    try:
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    61
        key = "CLSID\\%s\\PythonCOMPath" % cls._reg_clsid_
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    62
        path = _winreg.QueryValue(_winreg.HKEY_CLASSES_ROOT, key)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    63
        _winreg.SetValue(_winreg.HKEY_CLASSES_ROOT, key, _winreg.REG_SZ, "%s;%s" % (path, hg_path))
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    64
    except:
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    65
        pass
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    66
        
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    67
    # Add the appropriate shell extension registry keys
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    68
    for category, keyname in cls.registry_keys: 
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    69
        _winreg.SetValue(category, keyname, _winreg.REG_SZ, cls._reg_clsid_)
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    70
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    71
    print cls._reg_desc_, "registration complete."
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    72
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    73
def UnregisterServer(cls):
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    74
    for category, keyname in cls.registry_keys:
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    75
        try:
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    76
            _winreg.DeleteKey(category, keyname)
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    77
        except WindowsError, details:
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    78
            import errno
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    79
            if details.errno != errno.ENOENT:
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    80
                raise
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    81
    print cls._reg_desc_, "unregistration complete."
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    82
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    83
if __name__=='__main__':
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    84
    from win32com.server import register
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    85
    register.UseCommandLine(ContextMenuExtension,
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    86
            finalize_register = lambda: RegisterServer(ContextMenuExtension),
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    87
            finalize_unregister = lambda: UnregisterServer(ContextMenuExtension))
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    88
    
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    89
    for cls in (ChangedOverlay, AddedOverlay, UnchangedOverlay):
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    90
        register.UseCommandLine(cls,
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    91
                finalize_register = lambda: RegisterServer(cls),
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    92
                finalize_unregister = lambda: UnregisterServer(cls))
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    93
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    94
    if "--unregister" in sys.argv[1:]:
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    95
        register_tortoise_path(unregister=True)
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    96
    else:
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    97
        register_tortoise_path()
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    98
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    99