| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import argparse | 5 import argparse |
| 6 import fnmatch | 6 import fnmatch |
| 7 import logging | 7 import logging |
| 8 import os | 8 import os |
| 9 import shutil | 9 import shutil |
| 10 import subprocess | 10 import subprocess |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 | 36 |
| 37 def clean_up_old_git_installations(git_directory): | 37 def clean_up_old_git_installations(git_directory): |
| 38 """Removes git installations other than |git_directory|.""" | 38 """Removes git installations other than |git_directory|.""" |
| 39 for entry in fnmatch.filter(os.listdir(ROOT_DIR), 'git-*_bin'): | 39 for entry in fnmatch.filter(os.listdir(ROOT_DIR), 'git-*_bin'): |
| 40 full_entry = os.path.join(ROOT_DIR, entry) | 40 full_entry = os.path.join(ROOT_DIR, entry) |
| 41 if full_entry != git_directory: | 41 if full_entry != git_directory: |
| 42 logging.info('Cleaning up old git installation %r', entry) | 42 logging.info('Cleaning up old git installation %r', entry) |
| 43 shutil.rmtree(full_entry, ignore_errors=True) | 43 shutil.rmtree(full_entry, ignore_errors=True) |
| 44 | 44 |
| 45 | 45 |
| 46 def bootstrap_cipd(cipd_directory): | 46 def bootstrap_cipd(cipd_directory, cipd_platform): |
| 47 """Bootstraps CIPD client into |cipd_directory|.""" | 47 """Bootstraps CIPD client into |cipd_directory|.""" |
| 48 _check_call([ | 48 _check_call([ |
| 49 sys.executable, | 49 sys.executable, |
| 50 os.path.join(ROOT_DIR, 'recipe_modules', 'cipd', 'resources', | 50 os.path.join(ROOT_DIR, 'recipe_modules', 'cipd', 'resources', |
| 51 'bootstrap.py'), | 51 'bootstrap.py'), |
| 52 '--platform', 'windows-amd64', | 52 '--platform', cipd_platform, |
| 53 '--dest-directory', cipd_directory | 53 '--dest-directory', cipd_directory |
| 54 ]) | 54 ]) |
| 55 | 55 |
| 56 | 56 |
| 57 def cipd_install(args, dest_directory, package, version): | 57 def cipd_install(args, dest_directory, package, version): |
| 58 """Installs CIPD |package| at |version| into |dest_directory|.""" | 58 """Installs CIPD |package| at |version| into |dest_directory|.""" |
| 59 manifest_file = tempfile.mktemp() | 59 manifest_file = tempfile.mktemp() |
| 60 try: | 60 try: |
| 61 with open(manifest_file, 'w') as f: | 61 with open(manifest_file, 'w') as f: |
| 62 f.write('%s %s\n' % (package, version)) | 62 f.write('%s %s\n' % (package, version)) |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 if os.path.relpath(git_directory, ROOT_DIR) not in f.read(): | 96 if os.path.relpath(git_directory, ROOT_DIR) not in f.read(): |
| 97 return True | 97 return True |
| 98 if not os.path.exists(os.path.join( | 98 if not os.path.exists(os.path.join( |
| 99 git_directory, 'etc', 'profile.d', 'python.sh')): | 99 git_directory, 'etc', 'profile.d', 'python.sh')): |
| 100 return True | 100 return True |
| 101 return False | 101 return False |
| 102 | 102 |
| 103 | 103 |
| 104 def install_git(args, git_version, git_directory): | 104 def install_git(args, git_version, git_directory): |
| 105 """Installs |git_version| into |git_directory|.""" | 105 """Installs |git_version| into |git_directory|.""" |
| 106 cipd_platform = 'windows-%s' % ('amd64' if args.bits == 64 else '386') |
| 106 if not args.cipd_client: | 107 if not args.cipd_client: |
| 107 bootstrap_cipd(ROOT_DIR) | 108 bootstrap_cipd(ROOT_DIR, cipd_platform) |
| 108 args.cipd_client = os.path.join(ROOT_DIR, 'cipd') | 109 args.cipd_client = os.path.join(ROOT_DIR, 'cipd') |
| 109 temp_dir = tempfile.mkdtemp() | 110 temp_dir = tempfile.mkdtemp() |
| 110 try: | 111 try: |
| 111 cipd_install(args, | 112 cipd_install(args, |
| 112 temp_dir, | 113 temp_dir, |
| 113 'infra/depot_tools/git_installer/windows-amd64', | 114 'infra/depot_tools/git_installer/%s' % cipd_platform, |
| 114 'v' + git_version.replace('.', '_')) | 115 'v' + git_version.replace('.', '_')) |
| 115 | 116 |
| 116 if not os.path.exists(git_directory): | 117 if not os.path.exists(git_directory): |
| 117 os.makedirs(git_directory) | 118 os.makedirs(git_directory) |
| 118 | 119 |
| 119 # 7-zip has weird expectations for command-line syntax. Pass it as a string | 120 # 7-zip has weird expectations for command-line syntax. Pass it as a string |
| 120 # to avoid subprocess module quoting breaking it. Also double-escape | 121 # to avoid subprocess module quoting breaking it. Also double-escape |
| 121 # backslashes in paths. | 122 # backslashes in paths. |
| 122 _check_call(' '.join([ | 123 _check_call(' '.join([ |
| 123 os.path.join(temp_dir, 'git-installer.exe'), | 124 os.path.join(temp_dir, 'git-installer.exe'), |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 # TODO(phajdan.jr): consider replacing the call with python code. | 163 # TODO(phajdan.jr): consider replacing the call with python code. |
| 163 _check_call([ | 164 _check_call([ |
| 164 'xcopy', '/i', '/q', '/d', '/y', | 165 'xcopy', '/i', '/q', '/d', '/y', |
| 165 os.path.join(ROOT_DIR, 'man', 'html', '*'), | 166 os.path.join(ROOT_DIR, 'man', 'html', '*'), |
| 166 os.path.join(git_directory, 'mingw64', 'share', 'doc', 'git-doc')], | 167 os.path.join(git_directory, 'mingw64', 'share', 'doc', 'git-doc')], |
| 167 stdout=DEVNULL) | 168 stdout=DEVNULL) |
| 168 | 169 |
| 169 | 170 |
| 170 def main(argv): | 171 def main(argv): |
| 171 parser = argparse.ArgumentParser() | 172 parser = argparse.ArgumentParser() |
| 173 parser.add_argument('--bits', type=int, choices=(32,64), default=64, |
| 174 help='Bitness of the client to install.') |
| 172 parser.add_argument('--cipd-client', help='Path to CIPD client binary.') | 175 parser.add_argument('--cipd-client', help='Path to CIPD client binary.') |
| 173 parser.add_argument('--cipd-cache-directory', | 176 parser.add_argument('--cipd-cache-directory', |
| 174 help='Path to CIPD cache directory.') | 177 help='Path to CIPD cache directory.') |
| 175 parser.add_argument('--force', action='store_true', | 178 parser.add_argument('--force', action='store_true', |
| 176 help='Always re-install git.') | 179 help='Always re-install git.') |
| 177 parser.add_argument('--verbose', action='store_true') | 180 parser.add_argument('--verbose', action='store_true') |
| 178 args = parser.parse_args(argv) | 181 args = parser.parse_args(argv) |
| 179 | 182 |
| 180 if os.environ.get('WIN_TOOLS_FORCE') == '1': | 183 if os.environ.get('WIN_TOOLS_FORCE') == '1': |
| 181 args.force = True | 184 args.force = True |
| 182 | 185 |
| 183 logging.basicConfig(level=logging.INFO if args.verbose else logging.WARN) | 186 logging.basicConfig(level=logging.INFO if args.verbose else logging.WARN) |
| 184 | 187 |
| 185 git_version = get_target_git_version() | 188 git_version = get_target_git_version() |
| 186 git_directory = os.path.join(ROOT_DIR, 'git-%s-64_bin' % git_version) | 189 git_directory = os.path.join( |
| 190 ROOT_DIR, 'git-%s-%s_bin' % (git_version, args.bits)) |
| 187 | 191 |
| 188 clean_up_old_git_installations(git_directory) | 192 clean_up_old_git_installations(git_directory) |
| 189 | 193 |
| 190 if need_to_install_git(args, git_directory): | 194 if need_to_install_git(args, git_directory): |
| 191 install_git(args, git_version, git_directory) | 195 install_git(args, git_version, git_directory) |
| 192 | 196 |
| 193 sync_git_help_files(git_directory) | 197 sync_git_help_files(git_directory) |
| 194 | 198 |
| 195 return 0 | 199 return 0 |
| 196 | 200 |
| 197 | 201 |
| 198 if __name__ == '__main__': | 202 if __name__ == '__main__': |
| 199 sys.exit(main(sys.argv[1:])) | 203 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |