~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/win32/bzr_postinstall.py

  • Committer: Andrew Bennetts
  • Date: 2009-10-26 06:44:40 UTC
  • mfrom: (4634.77.9 2.0)
  • mto: This revision was merged to the branch mainline in revision 4770.
  • Revision ID: andrew.bennetts@canonical.com-20091026064440-06u7tpg7l6sjkh8h
Merge lp:bzr/2.0 into lp:bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
 
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""bzr postinstall helper for win32 installation
18
18
Written by Alexander Belchenko
 
19
 
 
20
Dependency: ctypes
19
21
"""
20
22
 
21
23
import os
 
24
import shutil
22
25
import sys
23
26
 
24
27
 
25
28
##
26
29
# CONSTANTS
27
30
 
28
 
VERSION = "1.3.20060513"
 
31
VERSION = "1.5.20070131"
29
32
 
30
33
USAGE = """Bzr postinstall helper for win32 installation
31
34
Usage: %s [options]
45
48
    --check-mfc71               - check if MFC71.DLL present in system
46
49
""" % os.path.basename(sys.argv[0])
47
50
 
 
51
# Windows version
 
52
_major,_minor,_build,_platform,_text = sys.getwindowsversion()
 
53
# from MSDN:
 
54
# dwPlatformId
 
55
#   The operating system platform.
 
56
#   This member can be one of the following values.
 
57
#   ==========================  ======================================
 
58
#   Value                       Meaning
 
59
#   --------------------------  --------------------------------------
 
60
#   VER_PLATFORM_WIN32_NT       The operating system is Windows Vista,
 
61
#   2                           Windows Server "Longhorn",
 
62
#                               Windows Server 2003, Windows XP,
 
63
#                               Windows 2000, or Windows NT.
 
64
#
 
65
#   VER_PLATFORM_WIN32_WINDOWS  The operating system is Windows Me,
 
66
#   1                           Windows 98, or Windows 95.
 
67
#   ==========================  ======================================
 
68
if _platform == 2:
 
69
    winver = 'Windows NT'
 
70
else:
 
71
    # don't care about real Windows name, just to force safe operations
 
72
    winver = 'Windows 98'
 
73
 
 
74
 
48
75
##
49
76
# INTERNAL VARIABLES
50
77
 
53
80
 
54
81
 
55
82
def main():
 
83
    import ctypes
56
84
    import getopt
57
85
    import re
58
86
    import _winreg
126
154
    MB_ICONERROR = 16
127
155
    MB_ICONEXCLAMATION = 48
128
156
 
129
 
    bzr_dir = os.path.dirname(sys.argv[0])
 
157
    bzr_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
130
158
 
131
159
    if start_bzr:
132
160
        fname = os.path.join(bzr_dir, "start_bzr.bat")
155
183
            f.write(''.join(content))
156
184
            f.close()
157
185
 
158
 
    if add_path or delete_path:
 
186
    if (add_path or delete_path) and winver == 'Windows NT':
159
187
        # find appropriate registry key:
160
188
        # 1. HKLM\System\CurrentControlSet\Control\SessionManager\Environment
161
189
        # 2. HKCU\Environment
213
241
        if not hkey is None:
214
242
            _winreg.CloseKey(hkey)
215
243
 
 
244
    if (add_path or delete_path) and winver == 'Windows 98':
 
245
        # mutating autoexec.bat
 
246
        # adding or delete string:
 
247
        # SET PATH=%PATH%;C:\PROGRA~1\Bazaar
 
248
        abat = 'C:\\autoexec.bat'
 
249
        abak = 'C:\\autoexec.bak'
 
250
 
 
251
        def backup_autoexec_bat(name, backupname, dry_run):
 
252
            # backup autoexec.bat
 
253
            if os.path.isfile(name):
 
254
                if not dry_run:
 
255
                    shutil.copyfile(name, backupname)
 
256
                else:
 
257
                    print '*** backup copy of autoexec.bat created'
 
258
 
 
259
        GetShortPathName = ctypes.windll.kernel32.GetShortPathNameA
 
260
        buf = ctypes.create_string_buffer(260)
 
261
        if GetShortPathName(bzr_dir, buf, 260):
 
262
            bzr_dir_8_3 = buf.value
 
263
        else:
 
264
            bzr_dir_8_3 = bzr_dir
 
265
        pattern = 'SET PATH=%PATH%;' + bzr_dir_8_3
 
266
 
 
267
        # search pattern
 
268
        f = file(abat, 'r')
 
269
        lines = f.readlines()
 
270
        f.close()
 
271
        found = False
 
272
        for i in lines:
 
273
            if i.rstrip('\r\n') == pattern:
 
274
                found = True
 
275
                break
 
276
 
 
277
        if delete_path and found:
 
278
            backup_autoexec_bat(abat, abak, dry_run)
 
279
            if not dry_run:
 
280
                f = file(abat, 'w')
 
281
                for i in lines:
 
282
                    if i.rstrip('\r\n') != pattern:
 
283
                        f.write(i)
 
284
                f.close()
 
285
            else:
 
286
                print '*** Remove line <%s> from autoexec.bat' % pattern
 
287
                    
 
288
        elif add_path and not found:
 
289
            backup_autoexec_bat(abat, abak, dry_run)
 
290
            if not dry_run:
 
291
                f = file(abat, 'a')
 
292
                f.write(pattern)
 
293
                f.write('\n')
 
294
                f.close()
 
295
            else:
 
296
                print '*** Add line <%s> to autoexec.bat' % pattern
 
297
 
216
298
    if add_shell_menu and not delete_shell_menu:
217
299
        hkey = None
218
300
        try:
229
311
            _winreg.SetValue(hkey, '', _winreg.REG_SZ, 'Bzr Here')
230
312
            hkey2 = _winreg.CreateKey(hkey, 'command')
231
313
            _winreg.SetValue(hkey2, '', _winreg.REG_SZ,
232
 
                             'cmd /K "%s"' % os.path.join(bzr_dir,
233
 
                                                          'start_bzr.bat'))
 
314
                             '%s /K "%s"' % (
 
315
                                    os.environ.get('COMSPEC', '%COMSPEC%'),
 
316
                                    os.path.join(bzr_dir, 'start_bzr.bat')))
234
317
            _winreg.CloseKey(hkey2)
235
318
            _winreg.CloseKey(hkey)
236
319