tortoisehg.py
author TK Soh <teekaysoh@yahoo.com>
Sun, 13 Jan 2008 06:17:30 +0000
changeset 629 71fa0ab981e8
parent 421 0a35e08e57cc
child 1176 997eb001c711
permissions -rw-r--r--
hggtk/history: only refresh log window if new rev is checked out
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
421
0a35e08e57cc tortoise: add version handling based on Mercurial's versioning code
TK Soh <teekaysoh@yahoo.com>
parents: 361
diff changeset
    16
# specify version string, otherwise 'hg identify' will be used:
0a35e08e57cc tortoise: add version handling based on Mercurial's versioning code
TK Soh <teekaysoh@yahoo.com>
parents: 361
diff changeset
    17
version = ''
0a35e08e57cc tortoise: add version handling based on Mercurial's versioning code
TK Soh <teekaysoh@yahoo.com>
parents: 361
diff changeset
    18
0a35e08e57cc tortoise: add version handling based on Mercurial's versioning code
TK Soh <teekaysoh@yahoo.com>
parents: 361
diff changeset
    19
import tortoise.version
0a35e08e57cc tortoise: add version handling based on Mercurial's versioning code
TK Soh <teekaysoh@yahoo.com>
parents: 361
diff changeset
    20
tortoise.version.remember_version(version)
0a35e08e57cc tortoise: add version handling based on Mercurial's versioning code
TK Soh <teekaysoh@yahoo.com>
parents: 361
diff changeset
    21
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    22
# shell extension classes
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    23
from tortoise.contextmenu import ContextMenuExtension
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    24
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
    25
212
0b0e24b16442 setup: fix installation path
TK Soh <teekaysoh@yahoo.com>
parents: 153
diff changeset
    26
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
    27
print "bin path = ", bin_path
0b0e24b16442 setup: fix installation path
TK Soh <teekaysoh@yahoo.com>
parents: 153
diff changeset
    28
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    29
# TortoiseHg registry setup
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    30
def register_tortoise_path(unregister=False):
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    31
    key = r"Software\TortoiseHg"
361
dfaa2d2e4705 setup: install software registry key to HKLM
TK Soh <teekaysoh@yahoo.com>
parents: 212
diff changeset
    32
    cat = _winreg.HKEY_LOCAL_MACHINE
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    33
    if (unregister):
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    34
        _winreg.DeleteKey(cat, key)
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    35
        print "TortoiseHg unregistered"
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    36
    else:
212
0b0e24b16442 setup: fix installation path
TK Soh <teekaysoh@yahoo.com>
parents: 153
diff changeset
    37
        _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
    38
        print "TortoiseHg registered"
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    39
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    40
# for COM registration via py2exe
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    41
def DllRegisterServer():
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    42
    RegisterServer(ContextMenuExtension)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    43
    RegisterServer(ChangedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    44
    RegisterServer(AddedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    45
    RegisterServer(UnchangedOverlay)
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    46
    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
    47
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    48
# for COM registration via py2exe
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    49
def DllUnregisterServer():
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    50
    UnregisterServer(ContextMenuExtension)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    51
    UnregisterServer(ChangedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    52
    UnregisterServer(AddedOverlay)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    53
    UnregisterServer(UnchangedOverlay)
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    54
    register_tortoise_path(unregister=True)
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    55
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    56
def RegisterServer(cls):
2
e8ddeb25f3f7 first working draft on icon overlay for Hg
TK Soh <teekaysoh@yahoo.com>
parents: 1
diff changeset
    57
    # 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
    58
    try:
2
e8ddeb25f3f7 first working draft on icon overlay for Hg
TK Soh <teekaysoh@yahoo.com>
parents: 1
diff changeset
    59
        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
    60
    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
    61
        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
    62
        register.UnregisterClasses(cls)
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    63
        raise "Error: Failed to find mercurial module!"
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    64
22
c4dd9fd12468 remove all remaining references to bzr
TK Soh <teekaysoh@yahoo.com>
parents: 3
diff changeset
    65
    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
    66
    try:
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    67
        key = "CLSID\\%s\\PythonCOMPath" % cls._reg_clsid_
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    68
        path = _winreg.QueryValue(_winreg.HKEY_CLASSES_ROOT, key)
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    69
        _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
    70
    except:
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    71
        pass
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    72
        
0
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    73
    # 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
    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
        _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
    76
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    77
    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
    78
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    79
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
    80
    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
    81
        try:
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    82
            _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
    83
        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
    84
            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
    85
            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
    86
                raise
bac32db38e52 import bzr-tortoise source @ rev 222 (Sat 2007-04-21 20:03:54 -0700)
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
    87
    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
    88
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    89
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
    90
    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
    91
    register.UseCommandLine(ContextMenuExtension,
148
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    92
            finalize_register = lambda: RegisterServer(ContextMenuExtension),
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    93
            finalize_unregister = lambda: UnregisterServer(ContextMenuExtension))
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    94
    
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    95
    for cls in (ChangedOverlay, AddedOverlay, UnchangedOverlay):
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    96
        register.UseCommandLine(cls,
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    97
                finalize_register = lambda: RegisterServer(cls),
db8d4198ad71 COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents: 147
diff changeset
    98
                finalize_unregister = lambda: UnregisterServer(cls))
153
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
    99
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
   100
    if "--unregister" in sys.argv[1:]:
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
   101
        register_tortoise_path(unregister=True)
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
   102
    else:
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
   103
        register_tortoise_path()
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
   104
98807a6fbcc5 register TortoiseHg directory during installation
TK Soh <teekaysoh@yahoo.com>
parents: 151
diff changeset
   105