/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/win32/bzr.iss.cog

  • Committer: Eric Anderson
  • Date: 2008-11-25 01:45:22 UTC
  • mto: (0.200.116 trunk)
  • mto: This revision was merged to the branch mainline in revision 6960.
  • Revision ID: eric@pixelwareinc.com-20081125014522-leeq8vts9nv3awjm
When reading branch use active branch instead of first branch.

This allows us to interact with whatever is set as the current active 
branch instead of being limited to only the first branch (master). 
Useful for creating a branch from somewhere other than master.

Limited in its usefulness as I believe git only allows switching 
branches in a non-bare repositories and most trees being branched from 
are bare repositories. Also requiring the source repository to switch
its active branch is pretty intrusive. But something is better than
nothing.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
; Script for Inno Setup installer
2
 
; [[[cog cog.outl('; This script created by Cog from bzr.iss.cog source') ]]]
3
 
; [[[end]]]
4
 
; Cog is http://www.nedbatchelder.com/code/cog/
5
 
 
6
 
[Setup]
7
 
AppName=Bazaar
8
 
 
9
 
; [[[cog
10
 
; # Python 2.5 compatibility code
11
 
; import os
12
 
; import sys
13
 
; cwd = os.getcwd()
14
 
; if cwd not in sys.path:
15
 
;     sys.path.insert(0, cwd)
16
 
; #/Python 2.5 compatibility code
17
 
;
18
 
; import bzrlib
19
 
; try:
20
 
;     VERSION = bzrlib.__version__
21
 
;     AppVerName = 'Bazaar %s' % VERSION
22
 
;     OutputBaseFilename = 'bzr-%s-setup' % VERSION
23
 
; except:
24
 
;     VERSION = ''
25
 
;     AppVerName = 'Bazaar'
26
 
;     OutputBaseFilename = 'bzr-setup'
27
 
;
28
 
; cog.outl('AppVerName=%s' % AppVerName)
29
 
; cog.outl('OutputBaseFilename=%s' % OutputBaseFilename)
30
 
; ]]]
31
 
AppVerName=Bazaar
32
 
OutputBaseFilename=bzr-setup
33
 
; [[[end]]]
34
 
 
35
 
DefaultDirName={pf}\Bazaar
36
 
DefaultGroupName=Bazaar
37
 
 
38
 
SolidCompression=yes
39
 
 
40
 
OutputDir="..\"
41
 
SourceDir="..\..\win32_bzr.exe"
42
 
 
43
 
SetupIconFile="..\bzr.ico"
44
 
InfoBeforeFile="..\tools\win32\info.txt"
45
 
 
46
 
VersionInfoCompany="Canonical Ltd."
47
 
VersionInfoCopyright="Canonical Ltd., 2005-2008"
48
 
VersionInfoDescription="Windows installer for Bazaar"
49
 
; [[[cog
50
 
; import bzrlib
51
 
; version_number = []
52
 
; for i in bzrlib.version_info[:3]:
53
 
;     try:
54
 
;         i = int(i)
55
 
;     except ValueError:
56
 
;         i = 0
57
 
;     version_number.append(i)
58
 
; # incremental build number
59
 
; from tools.win32.file_version import *
60
 
; try:
61
 
;     version_prev = get_file_version(OutputBaseFilename + '.exe')
62
 
; except (FileNotFound, VersionNotAvailable):
63
 
;     pass
64
 
; else:
65
 
;     if version_number == list(version_prev[:3]):
66
 
;         version_number.append((version_prev[-1]+1) % 65536)
67
 
; version_str = '.'.join(str(i) for i in version_number)
68
 
; cog.outl('VersionInfoVersion="%s"' % version_str)
69
 
; ]]]
70
 
; [[[end]]]
71
 
 
72
 
AppComments="Bazaar: Friendly distributed version control system"
73
 
AppPublisher="Canonical Ltd."
74
 
AppPublisherURL="http://www.bazaar-vcs.org"
75
 
AppSupportURL="http://www.bazaar-vcs.org/BzrSupport"
76
 
AppUpdatesURL="http://www.bazaar-vcs.org/WindowsDownloads"
77
 
; [[[cog cog.outl('AppVersion=%s' % VERSION) ]]]
78
 
; [[[end]]]
79
 
 
80
 
ChangesEnvironment=yes
81
 
; MARKH: PrivilegesRequired=none means it can't be installed by a non-admin
82
 
; user - but sadly we still need admin - eg, tortoise overlays, installing
83
 
; into "\Program Files", installing COM objects etc all must be done by an
84
 
; admin.
85
 
PrivilegesRequired=admin
86
 
 
87
 
[Files]
88
 
; Tortoise files - these are at the top as we use 'ExtractTemporaryFile' on
89
 
; the TortoiseOverlays MSI, and inno documents such files should be at the
90
 
; start for best performance.
91
 
; [[[cog
92
 
; if "TBZR" in os.environ: # we need a more formal way of controlling this...
93
 
;     tovmsi32 = os.environ["TORTOISE_OVERLAYS_MSI_WIN32"] # point at the 32bit TortoiseOverlays .msi
94
 
;     tovmsi64 = os.environ["TORTOISE_OVERLAYS_MSI_X64"] # point at the 64bit TortoiseOverlays .msi
95
 
;     cog.outl('Source: "%s"; Flags: dontcopy ignoreversion ; Components: tortoise' % tovmsi32)
96
 
;     cog.outl('Source: "%s"; Flags: dontcopy ignoreversion ; Components: tortoise' % tovmsi64)
97
 
;     cog.outl('Source: "tbzrcache.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
98
 
;     cog.outl('Source: "tbzrcachew.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
99
 
;     cog.outl('Source: "tbzrcommand.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
100
 
;     cog.outl('Source: "tbzrcommandw.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
101
 
;     cog.outl('Source: "tbzrtrace.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: debug')
102
 
;     # Note 'regserver' here appears to run regsvr32 without elevation, which
103
 
;     # is no good for us - so we have a [run] entry below.
104
 
;     cog.outl('Source: "tbzr_old.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
105
 
;     cog.outl('Source: "tbzrshellext_x86.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
106
 
;     cog.outl('Source: "tbzrshellext_x64.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise; Check: IsWin64;')
107
 
;     cog.outl(r'Source: "plugins\qbzr\*"; DestDir: "{app}\plugins\qbzr"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete; Components: tortoise')
108
 
;
109
 
;     cog.outl('Source: "%s\\doc\\*.html"; DestDir: "{app}\\doc\\tbzr"; Flags: ignoreversion; Components: tortoise' % os.environ['TBZR'])
110
 
; ]]]
111
 
; [[[end]]]
112
 
 
113
 
; We can't say '*.*' due to optional components.
114
 
Source: "plugins\*.*"; DestDir: "{app}\\plugins"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete; Components: plugins
115
 
Source: "*.bat"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
116
 
Source: "*.url"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
117
 
Source: "msvc*.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
118
 
Source: "bz*.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
119
 
Source: "Python*.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
120
 
Source: "lib\*.*"; DestDir: "{app}\lib"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete;
121
 
Source: "doc\*.*"; DestDir: "{app}\doc"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete;
122
 
; [[[cog
123
 
; try:
124
 
;     import pycurl
125
 
; except ImportError:
126
 
;     ca_path = None
127
 
; else:
128
 
;     supported = pycurl.version_info()[8]
129
 
;     if 'https' in supported:
130
 
;         from bzrlib.transport.http.ca_bundle import get_ca_path
131
 
;         ca_path = get_ca_path()
132
 
;         if ca_path:
133
 
;             cog.outl('Source: "%s"; DestDir: "{app}"; Components: cabundle' % ca_path)
134
 
;         else:
135
 
;             cog.msg('You have pycurl with SSL support, '
136
 
;                     'but CA Bundle (curl-ca-bundle.crt) not found!')
137
 
; ]]]
138
 
; [[[end]]]
139
 
 
140
 
; imageformats plugins for PyQt4
141
 
; [[[cog
142
 
; plug_dir = os.path.join(os.path.dirname(cog.inFile), # $(bzr_src_root)/tools/win32
143
 
;                         '..', '..', 'win32_bzr.exe', 'imageformats')
144
 
; if os.path.isdir(plug_dir):
145
 
;     cog.outl('Source: "imageformats\\*.*"; DestDir: "{app}\\imageformats"; '
146
 
;              'Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete;')
147
 
; else:
148
 
;     cog.msg('imageformats plugins for PyQt4 not found')
149
 
; ]]]
150
 
; [[[end]]]
151
 
 
152
 
[Types]
153
 
Name: "typical"; Description: "A typical installation"
154
 
Name: "full"; Description: "Full Installation (typical installation plus test utilities)"
155
 
Name: "compact"; Description: "Compact installation"
156
 
Name: "custom"; Description: "Custom installation"; Flags: iscustom
157
 
 
158
 
[Components]
159
 
Name: "main"; Description: "Main Files"; Types: full typical compact custom; Flags: fixed
160
 
Name: "plugins"; Description: "Default plugins"; Types: full typical custom;
161
 
; [[[cog
162
 
; if ca_path:
163
 
;     cog.outl('Name: "cabundle"; '
164
 
;              'Description: "CA certificates for SSL support"; '
165
 
;              'Types: full typical custom')
166
 
; if "TBZR" in os.environ: # we need a more formal way of controlling this...
167
 
;     cog.outl('Name: "tortoise"; Description: "Windows Shell Extensions (TortoiseBZR)"; Types: full typical custom;')
168
 
;     cog.outl('Name: "debug"; Description: "Test, diagnostic and debugging utilities"; Types: full custom;')
169
 
;
170
 
; ]]]
171
 
; [[[end]]]
172
 
 
173
 
[Dirs]
174
 
Name: "{userappdata}\bazaar\2.0"
175
 
Name: "{app}\plugins"; Flags: uninsalwaysuninstall
176
 
 
177
 
 
178
 
[Icons]
179
 
Name: "{group}\Documentation index"; Filename: "{app}\doc\index.html"; WorkingDir: "{app}\doc";
180
 
Name: "{group}\Bazaar Home Page"; Filename: "{app}\bazaar.url"; Comment: "http://www.bazaar-vcs.org";
181
 
Name: "{group}\Start Bzr in cmd shell"; Filename: "{cmd}"; Parameters: "/K start_bzr.bat"; WorkingDir: "{app}"; IconFilename: "{app}\bzr.exe"; Comment: "Open new Bzr session";
182
 
; NOTE: Intent is to change the log file location - the line below will need to change to reflect that.
183
 
Name: "{group}\Open Bzr log file"; Filename: "notepad.exe"; Parameters: "{userdocs}\.bzr.log"; Comment: "Launch notepad to view the bzr log file";
184
 
 
185
 
; [[[cog
186
 
; if "TBZR" in os.environ:
187
 
;     cog.outl(r'Name: "{group}\TortoiseBZR documentation"; Filename: "{app}\doc\tbzr\index.html"; Comment: "Launch TortoiseBZR documentation";')
188
 
; ]]]
189
 
; [[[end]]]
190
 
; No Uninstall here - Control Panel will do
191
 
 
192
 
 
193
 
[Tasks]
194
 
Name: Path; Description: "Add {app} directory to PATH environment variable"
195
 
; [[[cog
196
 
; if "TBZR" in os.environ:
197
 
;     cog.outl('Name: TBZRReadme; Description: "View the TortoiseBZR Readme"; Components: tortoise')
198
 
; ]]]
199
 
; [[[end]]]
200
 
 
201
 
 
202
 
[Registry]
203
 
Root: HKLM; Subkey: "SOFTWARE\Bazaar"; Flags: noerror uninsdeletekey
204
 
Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "InstallPath"; ValueType: string; ValueData: "{app}"; Flags: noerror
205
 
; Don't write stuff that can be implied
206
 
;Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "BzrlibPath"; ValueType: string; ValueData: "{app}\lib\library.zip\bzrlib"; Flags: noerror
207
 
;Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "PluginsPath"; ValueType: string; ValueData: "{app}\plugins"; Flags: noerror
208
 
;Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "PythonPath"; ValueType: string; ValueData: "{app}\lib\library.zip"; Flags: noerror
209
 
; [[[cog cog.outl('Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "Version"; ValueType: string; ValueData: "%s"; Flags: noerror' % VERSION) ]]]
210
 
; [[[end]]]
211
 
 
212
 
 
213
 
[Run]
214
 
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--start-bzr"; Flags: skipifdoesntexist runhidden;
215
 
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--add-path"; Tasks: Path; Flags: skipifdoesntexist skipifsilent runhidden;
216
 
; [[[cog
217
 
; if "TBZR" in os.environ:
218
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/s /i: /n tbzrshellext_x86.dll"; WorkingDir: "{app}"; Components: tortoise; Description: "Registering Tortoise"; StatusMsg: "Registering Tortoise"')
219
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/s /i: /n tbzrshellext_x64.dll"; WorkingDir: "{app}"; Components: tortoise; Description: "Registering Tortoise"; StatusMsg: "Registering Tortoise"; Check: IsWin64')
220
 
;     cog.outl(r'Filename: "{app}\doc\tbzr\index.html"; Tasks: TBZRReadme; Flags: shellexec')
221
 
; ]]]
222
 
; [[[end]]]
223
 
 
224
 
 
225
 
[UninstallRun]
226
 
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--delete-path --delete-shell-menu --silent"; Flags: skipifdoesntexist runhidden;
227
 
; [[[cog
228
 
; if "TBZR" in os.environ:
229
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/u /s /i: tbzrshellext_x86.dll"; WorkingDir: "{app}"; Components: tortoise; StatusMsg: "Unregistering Tortoise"; Flags: skipifdoesntexist')
230
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/u /s /i: tbzrshellext_x64.dll"; WorkingDir: "{app}"; Components: tortoise; StatusMsg: "Unregistering Tortoise"; Flags: skipifdoesntexist; Check: IsWin64')
231
 
; ]]]
232
 
; [[[end]]]
233
 
 
234
 
 
235
 
[Code]
236
 
const
237
 
  SHCNF_IDLIST = $0000;
238
 
  SHCNE_ASSOCCHANGED = $08000000;
239
 
  WM_QUIT = 18;
240
 
  MOVEFILE_DELAY_UNTIL_REBOOT    = 4;
241
 
 
242
 
procedure SHChangeNotify(wEventId, uFlags, dwItem1, dwItem2: Integer);
243
 
 external 'SHChangeNotify@shell32.dll stdcall';
244
 
 
245
 
function MoveFileEx(lpExistingFileName, lpNewFileName: String; dwFlags: Cardinal): Integer;
246
 
 external 'MoveFileExA@kernel32.dll stdcall';
247
 
 
248
 
procedure DeleteFileNowOrLater(filename: string);
249
 
var
250
 
  rc : Integer;
251
 
begin
252
 
    if FileExists(filename) and not DeleteFile(filename) then
253
 
        // can't work out to pass NULL to the API, but an empty string
254
 
        // seems to work OK.
255
 
        MoveFileEx(filename, '', MOVEFILE_DELAY_UNTIL_REBOOT);
256
 
end;
257
 
 
258
 
procedure ShutdownTBZR;
259
 
var
260
 
    hwnd: HWND;
261
 
begin
262
 
// [[[cog
263
 
// if "TBZR" not in os.environ:
264
 
//     cog.outl('        Exit;  // No TSVN set - exit this procedure.')
265
 
// ]]]
266
 
// [[[end]]]
267
 
    // ask the cache process to shut-down.
268
 
    hwnd := FindWindowByClassName('TBZRCache_Taskbar');
269
 
    if hwnd <> 0 then
270
 
        PostMessage(hwnd, WM_QUIT, 1, 0);
271
 
end;
272
 
 
273
 
procedure CurStepChanged(CurStep: TSetupStep);
274
 
var
275
 
    S, tovmsi, fqtovmsi, params: String;
276
 
    ErrorCode: Integer;
277
 
begin
278
 
    if CurStep=ssInstall then begin
279
 
        ShutdownTBZR;
280
 
        // In case the user hasn't uninstalled the old version before
281
 
        // upgrading, we unregister and delete some obsolete files
282
 
        // (regsvr32 remains silent even if the file doesn't exist)
283
 
        Exec('regsvr32.exe', '/s /u "' + ExpandConstant('{app}\tbzr.dll') + '"',
284
 
             '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
285
 
        DeleteFileNowOrLater(ExpandConstant('{app}\tbzr.dll'));
286
 
        DeleteFileNowOrLater(ExpandConstant('{app}\tbzrtest.exe'));
287
 
        DeleteFileNowOrLater(ExpandConstant('{app}\tbzr_tracer.exe'));
288
 
    end;
289
 
 
290
 
    if CurStep=ssPostInstall then begin
291
 
        // a couple of post-install tasks
292
 
        if IsComponentSelected('tortoise') then begin
293
 
            // Need to execute:
294
 
            // msiexec /i TortoiseOverlays-1.X.X.XXXX-win32.msi /qn /norestart
295
 
// 64bit notes:
296
 
// We are still primarily a 32bit application - the only 64bit binary is the
297
 
// shell extension, but even then, we need to install the 32bit version too.
298
 
// Thus, we keep tortoise in 32bit "install mode" - meaning we are installed
299
 
// to "\Program Files (x86)".  We don't bother trying to install our single
300
 
// 64bit DLL into "\Program Files" - we use a different DLL name for 32 and
301
 
// 64 bit versions, so nothing will conflict.
302
 
// Note however that on a 64bit OS, we only need the 64bit TortoiseOverlays -
303
 
// the 32bit apps using shell extensions still work fine with that.
304
 
// [[[cog
305
 
// if "TBZR" in os.environ:
306
 
//     import os
307
 
//     cog.outl("if IsWin64 then")
308
 
//     cog.outl("  tovmsi := '%s'" % os.path.basename(os.environ["TORTOISE_OVERLAYS_MSI_X64"]))
309
 
//     cog.outl("else")
310
 
//     cog.outl("  tovmsi := '%s'" % os.path.basename(os.environ["TORTOISE_OVERLAYS_MSI_WIN32"]))
311
 
// else:
312
 
//     cog.outl("tovmsi := '';")
313
 
// ]]]
314
 
// [[[end]]]
315
 
            ExtractTemporaryFile(tovmsi);
316
 
            fqtovmsi := AddBackslash(ExpandConstant('{tmp}')) + tovmsi;
317
 
            params := '/i "' + fqtovmsi + '" /qn /norestart';
318
 
            if not ShellExec('', 'msiexec.exe', params, '', SW_HIDE,
319
 
                             ewWaitUntilTerminated, ErrorCode) then
320
 
                MsgBox('Failed to install TortoiseOverlays: ' + SysErrorMessage(ErrorCode),
321
 
                        mbInformation, MB_OK);
322
 
            // Ideally we could be bzr_postinstall.exe this way too, but
323
 
            // its needed at uninstall time.
324
 
        end;
325
 
        // cause explorer to re-fetch handlers.
326
 
        SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
327
 
    end;
328
 
end;
329
 
 
330
 
 
331
 
function InitializeUninstall(): Boolean;
332
 
begin
333
 
    ShutdownTBZR;
334
 
    result := True;
335
 
end;