Kiln » TortoiseHg » TortoiseHg
Clone URL:  
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
== C++ Shell Extension == === Installing build tools === Get the gratis "Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1" from microsoft.com. You can install from web or download an ISO image, burn a DVD and install from that. Make sure you get the correct download for the Windows version you want to use for building: the x86 (32 bit) download won't install on 64 bit platforms. The SDK contains the C++ compiler, linker, nmake, and header files, which is all we need to build the x86 (32 bit) and 64 bit variants of the shell extension. The compiler and linker can build both the 32 bit and the 64 bit targets, no matter if you install the 32 bit (x86) or the 64 bit version of the SDK. In other words: it can cross compile. The SDK is compatible with Visual C++ 2005 and 2008 (including express versions). But Visual C++ is *not* needed to build the shell extension! Leave all install options at their defaults. (see also C:\Program Files\Microsoft SDKs\Windows\v7.0\ReleaseNotes.Htm section "4.4.2 Setting Build Environment Switches" after install) === Building the x86 (32 bit) target === Open a command shell and cd into win32/shellext of the TortoiseHg sources. Copy/paste the following line (including the double quotes) into that shell cmd.exe /E:ON /V:ON /K "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /xp /x86 /Release and execute it (see ReleaseNotes.Htm). This should show the following in your shell ''' Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.0. Targeting Windows XP x86 RELEASE ''' Then execute nmake /f Makefile.nmake clean followed by nmake /f Makefile.nmake Which should go like this: ''' $ nmake /f Makefile.nmake clean Microsoft (R) Program Maintenance Utility Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. del *.obj *.dll *.exe *.lib *.exp *.manifest $ nmake /f Makefile.nmake Microsoft (R) Program Maintenance Utility Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. cl /nologo /Ox /W2 /EHsc /MT /DAPPMAIN /DTHG_DEBUG /c TortoiseUtils.cpp Direntry.cpp Directory.cpp Winstat.cpp ThgDebug.cpp InitStatus.cpp CShellExtCMenu.cpp CShellExtOverlay.cpp IconBitmapUtils.cpp Registry.cpp ShellExt.cpp StringUtils.cpp SysInfo.cpp dirstate.cpp Winstat64.cpp Dirstatecache.cpp DirectoryStatus.cpp Thgstatus.cpp QueryDirstate.cpp TortoiseUtils.cpp Direntry.cpp Directory.cpp Winstat.cpp ThgDebug.cpp InitStatus.cpp CShellExtCMenu.cpp CShellExtOverlay.cpp IconBitmapUtils.cpp Registry.cpp ShellExt.cpp StringUtils.cpp SysInfo.cpp dirstate.cpp Winstat64.cpp Dirstatecache.cpp DirectoryStatus.cpp Thgstatus.cpp QueryDirstate.cpp Generating Code... link /OUT:THgShell.dll /nologo /INCREMENTAL:NO /MANIFEST shlwapi.lib gdiplus.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /DLL /DEF:ShellExt.def TortoiseUtils.obj Direntry.obj Directory.obj Winstat.obj ThgDebug.obj InitStatus.obj CShellExtCMenu.obj CShellExtOverlay.obj IconBitmapUtils.obj Registry.obj ShellExt.obj StringUtils.obj SysInfo.obj dirstate.obj Winstat64.obj Dirstatecache.obj DirectoryStatus.obj Thgstatus.obj QueryDirstate.obj Creating library THgShell.lib and object THgShell.exp mt -nologo -manifest THgShell.dll.manifest -outputresource:"THgShell.dll;#2" ''' This should produce the file THgShell.dll, which contains the 32 bit variant of the shell extension. === Building the 64 bit target === Open a command shell and cd into win32/shellext of the TortoiseHg sources. Copy/paste the following line (including the double quotes) into that shell cmd.exe /E:ON /V:ON /K "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /xp /x64 /Release and execute it (see ReleaseNotes.Htm). This should show the following in your shell ''' Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.0. Targeting Windows XP x64 RELEASE ''' Then execute nmake /f Makefile.nmake clean followed by nmake /f Makefile.nmake Which should go like this: ''' $ nmake /f Makefile.nmake clean Microsoft (R) Program Maintenance Utility Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. del *.obj *.dll *.exe *.lib *.exp *.manifest $ nmake /f Makefile.nmake Microsoft (R) Program Maintenance Utility Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. cl /nologo /Ox /W2 /EHsc /MT /DAPPMAIN /DTHG_DEBUG /c TortoiseUtils.cpp Direntry.cpp Directory.cpp Winstat.cpp ThgDebug.cpp InitStatus.cpp CShellExtCMenu.cpp CShellExtOverlay.cpp IconBitmapUtils.cpp Registry.cpp ShellExt.cpp StringUtils.cpp SysInfo.cpp dirstate.cpp Winstat64.cpp Dirstatecache.cpp DirectoryStatus.cpp Thgstatus.cpp QueryDirstate.cpp TortoiseUtils.cpp Direntry.cpp Directory.cpp Winstat.cpp ThgDebug.cpp InitStatus.cpp CShellExtCMenu.cpp CShellExtOverlay.cpp IconBitmapUtils.cpp Registry.cpp ShellExt.cpp StringUtils.cpp SysInfo.cpp dirstate.cpp Winstat64.cpp Dirstatecache.cpp DirectoryStatus.cpp Thgstatus.cpp QueryDirstate.cpp Generating Code... link /OUT:THgShell.dll /nologo /INCREMENTAL:NO /MANIFEST shlwapi.lib gdiplus.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /DLL /DEF:ShellExt.def TortoiseUtils.obj Direntry.obj Directory.obj Winstat.obj ThgDebug.obj InitStatus.obj CShellExtCMenu.obj CShellExtOverlay.obj IconBitmapUtils.obj Registry.obj ShellExt.obj StringUtils.obj SysInfo.obj dirstate.obj Winstat64.obj Dirstatecache.obj DirectoryStatus.obj Thgstatus.obj QueryDirstate.obj Creating library THgShell.lib and object THgShell.exp mt -nologo -manifest THgShell.dll.manifest -outputresource:"THgShell.dll;#2" ''' This should produce the file THgShell.dll, which contains the 64 bit variant of the shell extension. === Testing === To install the new THgShell.dll for testing, rename the THgShellx86.dll in "C:\Program Files\TortoiseHg" to something else (e.g. THgShell-01.dll), then copy the newly built THgShell.dll to "C:\Program Files\TortoiseHg\THgShellx86.dll" and restart explorer.exe (logout/login will do as well). For x64 systems, the dll is instead located in "C:\Program Files\Common Files\TortoiseHg\ThgShellx64.dll". See http://www.addictivetips.com/windows-tips/how-to-restart-explorer-exe-process-properly-in-windows-xp-and-vista/ for properly restarting explorer (in case you don't want to do a logout/login). Of course, simply killing explorer.exe with the task manager and restarting it will work too (you might loose some settings changes you might have done in explorer though). The shell extension emits trace output (TDEBUG_TRACE macro calls in the sources). This output can be captured by using for example the tool **DebugView** from Microsoft sysinternals (see http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx). The debug output must be enabled in the registry. Double click the file "DebugShellExt.reg" and restart explorer. Example output (copied via clipboard): {{{ [3504] [THG] findHgRoot(W:\xxx2\aa): hgroot = 'W:\xxx2' (found repo) [3504] [THG] Dirstatecache::get: lstat(W:\xxx2\.hg\dirstate) ok [3504] [THG] DirectoryStatus::read(W:\xxx2): done. 2 entries read [3504] [THG] HgQueryDirstate: relbase = '' [3504] [THG] HgQueryDirstate: basedir_status = M }}} Another very helpful tool is sysinternals **Autoruns** (http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx ). This can be used to explore the registration of the extension. Use the tab "Explorer" to see the shell extensions registered. Recommended setting is "Hide Microsoft Entries" in menu "Options" === TortoiseOverlays shim === The TortoiseHg shell extension uses the common TortoiseOverlays package shared with other Tortoise projects (TortoiseSVN, TortoiseBZR, etc.). The sources for the TortoiseOverlays project can be found at http://tortoisesvn.tigris.org/svn/tortoisesvn/TortoiseOverlays/ (use user: "guest", no password). === Issues === * #324 - Question mark overlays are missing on Windows 7