~bzr-pqm/bzr/bzr.dev

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
# (c) Canonical Ltd, 2006
# written by Alexander Belchenko for bzr project
#
# This script will be executed after installation of bzrlib package
# and before installer exits.
# All printed data will appear on the last screen of installation
# procedure.
# The main goal of this script is to create special batch file
# launcher for bzr. Typical content of this batch file is:
#  @python bzr %*
#
# This file works only on Windows 2000/XP. For win98 there is
# should be "%1 %2 %3 %4 %5 %6 %7 %8 %9" instead of "%*".
# Or even more complex thing.
#
# [bialix]: bzr de-facto does not support win98.
#           Although it seems to work on. Sometimes.
# 2006/07/30    added minimal support of win98.
# 2007/01/30    added *real* support of win98.

import os
import sys
import _winreg

from bzrlib import win32utils


def _quoted_path(path):
    if ' ' in path:
        return '"' + path + '"'
    else:
        return path

def _win_batch_args():
    if win32utils.winver == 'Windows NT':
        return '%*'
    else:
        return '%1 %2 %3 %4 %5 %6 %7 %8 %9'


if "-install" in sys.argv[1:]:
    # try to detect version number automatically
    try:
        import bzrlib
    except ImportError:
        ver = ''
    else:
        ver = bzrlib.__version__

    ##
    # XXX change message for something more appropriate
    print """Bazaar %s

Congratulation! Bzr successfully installed.

""" % ver

    batch_path = "bzr.bat"
    prefix = sys.exec_prefix
    try:
        ##
        # try to create
        scripts_dir = os.path.join(prefix, "Scripts")
        script_path = _quoted_path(os.path.join(scripts_dir, "bzr"))
        python_path = _quoted_path(os.path.join(prefix, "python.exe"))
        args = _win_batch_args()
        batch_str = "@%s %s %s" % (python_path, script_path, args)
        # support of win98
        # if there is no HOME for bzr then set it for Bazaar manually
        base = os.environ.get('BZR_HOME', None)
        if base is None:
            base = win32utils.get_appdata_location()
        if base is None:
            base = os.environ.get('HOME', None)
        if base is None:
            base = os.path.splitdrive(sys.prefix)[0] + '\\'
            batch_str = ("@SET BZR_HOME=" + _quoted_path(base) + "\n" +
                         batch_str)

        batch_path = os.path.join(scripts_dir, "bzr.bat")
        f = file(batch_path, "w")
        f.write(batch_str)
        f.close()
        file_created(batch_path)        # registering manually created files for
                                        # auto-deinstallation procedure
        ##
        # inform user where batch launcher is.
        print "Created:", batch_path
        print "Use this batch file to run bzr"
    except Exception, e:
        print "ERROR: Unable to create %s: %s" % (batch_path, e)

    ## this hunk borrowed from pywin32_postinstall.py
    # use bdist_wininst builtins to create a shortcut.
    # CSIDL_COMMON_PROGRAMS only available works on NT/2000/XP, and
    # will fail there if the user has no admin rights.
    if get_root_hkey()==_winreg.HKEY_LOCAL_MACHINE:
        try:
            fldr = get_special_folder_path("CSIDL_COMMON_PROGRAMS")
        except OSError:
            # No CSIDL_COMMON_PROGRAMS on this platform
            fldr = get_special_folder_path("CSIDL_PROGRAMS")
    else:
        # non-admin install - always goes in this user's start menu.
        fldr = get_special_folder_path("CSIDL_PROGRAMS")

    # make Bazaar entry
    fldr = os.path.join(fldr, 'Bazaar')
    if not os.path.isdir(fldr):
        os.mkdir(fldr)
        directory_created(fldr)

    # link to documentation
    docs = os.path.join(sys.exec_prefix, 'Doc', 'Bazaar', 'index.html')
    dst = os.path.join(fldr, 'Documentation.lnk')
    create_shortcut(docs, 'Bazaar Documentation', dst)
    file_created(dst)
    print 'Documentation for Bazaar: Start => Programs => Bazaar'

    # bzr in cmd shell
    if os.name == 'nt':
        cmd = os.environ.get('COMSPEC', 'cmd.exe')
        args = "/K bzr help"
    else:
        # minimal support of win98
        cmd = os.environ.get('COMSPEC', 'command.com')
        args = "bzr help"
    dst = os.path.join(fldr, 'Start bzr.lnk')
    create_shortcut(cmd,
                    'Start bzr in cmd shell',
                    dst,
                    args,
                    os.path.join(sys.exec_prefix, 'Scripts'))
    file_created(dst)

    # uninstall shortcut
    uninst = os.path.join(sys.exec_prefix, 'Removebzr.exe')
    dst = os.path.join(fldr, 'Uninstall Bazaar.lnk')
    create_shortcut(uninst,
                    'Uninstall Bazaar',
                    dst,
                    '-u bzr-wininst.log',
                    sys.exec_prefix,
                    )
    file_created(dst)