author | Steve Borho <steve@borho.org> |
Sat, 03 May 2008 11:19:11 -0500 | |
changeset 1153 | e677decc9814 |
parent 421 | 0a35e08e57cc |
child 1176 | 997eb001c711 |
permissions | -rw-r--r-- |
148
db8d4198ad71
COM register: overhaul to support py2exe
TK Soh <teekaysoh@yahoo.com>
parents:
147
diff
changeset
|
1 |
# |
58 | 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 | 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 | 26 |
bin_path = os.path.dirname(os.path.join(os.getcwd(), sys.argv[0])) |
27 |
print "bin path = ", bin_path |
|
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 | 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 |