annotate install.py @ 515:6d5e2a583502 default tip

Remove onsub extension
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 10 May 2022 09:54:59 -0700
parents fc35cae2fb52
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import os
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import os.path
514
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
3 import re
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 import sys
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 import stat
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
6 import shutil
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 import argparse
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 import functools
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
9 import traceback
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 import subprocess
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 import configparser
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
14 # Utility stuff.
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
15
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 dotfiles_dir = os.path.abspath(os.path.dirname(__file__))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 is_nix = True
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
19 is_mac = False
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 is_windows = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 if sys.platform == "win32":
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 is_nix = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 is_windows = True
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
24 if sys.platform == 'darwin':
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
25 is_mac = True
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27
471
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
28 def _is_executable(fpath):
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
29 return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
30
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
31
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
32 def which(exename):
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
33 for path in os.environ.get("PATH", "").split(os.pathsep):
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
34 exepath = os.path.join(path, exename)
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
35 if _is_executable(exepath):
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
36 return exepath
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
37 return None
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
38
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
39
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
40 def _p(*paths, force_unix=False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
41 res = os.path.join(dotfiles_dir, *paths)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
42 if force_unix:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
43 res = res.replace('\\', '/')
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
44 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
45 res = res.replace('/', os.sep)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
46 return res
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 def nixslash(path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 return path.replace('\\', '/')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 def ensure_dir(path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 full_path = os.path.abspath(os.path.expanduser(path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 if not os.path.isdir(full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 os.makedirs(full_path, mode=0o700)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 def mklink(orig_rel_path, link_path, mode=None):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 orig_full_path = os.path.join(dotfiles_dir, orig_rel_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 link_full_path = os.path.abspath(os.path.expanduser(link_path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 if os.path.islink(link_full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 print("Unlinking %s" % link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 os.unlink(link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 elif os.path.exists(link_full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 print("Removing %s" % link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 os.remove(link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 print("%s -> %s" % (link_full_path, orig_full_path))
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
70 if not is_windows or os.path.isfile(orig_full_path):
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
71 os.symlink(orig_full_path, link_full_path)
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
72 else:
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
73 subprocess.check_call(['mklink', '/J', link_full_path, orig_full_path], shell=True)
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 if mode is not None:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 os.chmod(link_full_path, mode)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 def writelines(path, lines):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 full_path = os.path.abspath(os.path.expanduser(path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 print("%d lines to %s" % (len(lines), full_path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 with open(full_path, 'w') as fp:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 for l in lines:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 fp.write(l)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 fp.write('\n')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86
432
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
87 def _on_rmtree_err(func, name, excinfo):
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
88 os.chmod(name, stat.S_IWUSR | stat.S_IWGRP)
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
89 os.remove(name)
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
90
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
91
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
92 def rmtree(dirpath):
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
93 shutil.rmtree(dirpath, onerror=_on_rmtree_err)
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
94
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
95
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
96 # Installer method decorators.
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
97
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 def only_on_nix(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 @functools.wraps(f)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 def decorator(*args, **kwargs):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 if is_nix:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 return f(*args, **kwargs)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 return decorator
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
106 def only_on_mac(f):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
107 @functools.wraps(f)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
108 def decorator(*args, **kwargs):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
109 if is_mac:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
110 return f(*args, **kwargs)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
111 return decorator
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
112
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
113
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 def only_on_win(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 @functools.wraps(f)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 def decorator(*args, **kwargs):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 return f(*args, **kwargs)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 return decorator
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
122 def supports_forcing(f):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
123 f.__dotfiles_supports_forcing__ = True
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
124 return f
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
125
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
126
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 def needs_config(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 f.__dotfiles_needs_config__ = True
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 return f
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 def run_priority(prio):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 def wrapper(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 f.__dotfiles_priority__ = prio
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 return f
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 return wrapper
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
139 # Installer methods.
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
140
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 def install_bash():
479
91652f4b9752 Fix bash config install.
Ludovic Chabant <ludovic@chabant.com>
parents: 473
diff changeset
143 mklink('bashrc/bashrc', '~/.bashrc')
91652f4b9752 Fix bash config install.
Ludovic Chabant <ludovic@chabant.com>
parents: 473
diff changeset
144 mklink('bashrc/bash_profile', '~/.bash_profile')
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 def install_fish():
425
350f7a55ff33 Improve fish configuration.
Ludovic Chabant <ludovic@chabant.com>
parents: 417
diff changeset
149 ensure_dir('~/.config/fish')
350f7a55ff33 Improve fish configuration.
Ludovic Chabant <ludovic@chabant.com>
parents: 417
diff changeset
150 writelines('~/.config/fish/config.fish',
350f7a55ff33 Improve fish configuration.
Ludovic Chabant <ludovic@chabant.com>
parents: 417
diff changeset
151 ['source %s' % _p('fish', 'config.fish')])
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
154 def _install_vim_bundle(cfg, cfg_section_name, bundle_dir, force=False):
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
155 if not cfg.has_section(cfg_section_name):
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
156 return
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
157
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
158 os.makedirs(bundle_dir, exist_ok=True)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
159
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
160 # Keep track of lowercase directory names because the cfg parser stores
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
161 # config section names in lowercase.
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
162 existing_plugins = dict([(d.lower(), d) for d in os.listdir(bundle_dir)])
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
163
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
164 for name, url in cfg.items(cfg_section_name):
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
165 path = os.path.join(bundle_dir, name)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
166 if url.startswith('[local]'):
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
167 pass
514
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
168 elif url.startswith('[git'):
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
169 clone_git(url, path, force=force)
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
170 else:
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
171 clone_hg(url, path, force=force)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
172 print()
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
173
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
174 existing_plugins.pop(name, None)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
175
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
176 for k, name in existing_plugins.items():
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
177 print("Removing plugin %s" % name)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
178 ok = input("OK? [Y/n]")
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
179 if ok.lower() == "y":
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
180 path = os.path.join(bundle_dir, name)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
181 rmtree(path)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
182
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
183
432
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
184 @needs_config
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
185 @supports_forcing
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
186 def install_vim(cfg, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 vimrc_path = '~/.vimrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
188 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189 vimrc_path = '~/_vimrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190 writelines(vimrc_path, [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191 'set runtimepath+=%s' % nixslash(_p('vim')),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 'source %s' % nixslash(_p('vim', 'vimrc'))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194
494
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
195 # Create a gvimrc file mostly to fix a bug with Scoop, which
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
196 # installs a _gvimrc in the base runtime path, and it can mess
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
197 # up colors and settings.
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
198 gvimrc_path = '~/.gvimrc'
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
199 if is_windows:
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
200 gvimrc_path = '~/_gvimrc'
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
201 writelines(gvimrc_path, [
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
202 'source %s' % nixslash(_p('vim', 'gvimrc'))
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
203 ])
76defcf6bf02 Add gvimrc file.
Ludovic Chabant <ludovic@chabant.com>
parents: 492
diff changeset
204
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
205 _install_vim_bundle(cfg, 'vimbundles', _p('vim', 'bundle'), force)
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
206 _install_vim_bundle(cfg, 'vimbundles:local', _p('vim', 'local'), force)
432
06a551d3fbb2 Move vim plugin subrepos to a separate config section, support cleaning up.
Ludovic Chabant <ludovic@chabant.com>
parents: 431
diff changeset
207
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
208
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
209 @run_priority(2) # Needs to run before `fish`.
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
210 def install_mercurial():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
211 hgrc_path = '~/.hgrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
212 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
213 hgrc_path = '~/mercurial.ini'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
214 writelines(hgrc_path, [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
215 '%%include %s' % _p('hgrc/hgrc'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
216 '[ui]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
217 'ignore = %s' % _p('hgrc/hgignore'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
218 '[subrepos]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
219 'git:allowed = true',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
220 '[extensions]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
221 'hggit = %s' % _p('lib/hg/hg-git/hggit/'),
512
38aa9895725d Tweak clone URLs
Ludovic Chabant <ludovic@chabant.com>
parents: 494
diff changeset
222 'allpaths = %s' % _p('lib/hg/mercurial-all_paths/mercurial_all_paths.py'),
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
223 'prompt = %s' % _p('lib/hg/hg-prompt/prompt.py'),
448
cc00cbbf5460 Rename evolve extension's repo folder to `evolve`.
Ludovic Chabant <ludovic@chabant.com>
parents: 447
diff changeset
224 'evolve = %s' % _p('lib/hg/evolve/hgext3rd/evolve'),
436
8986ec3a9c1c Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents: 432
diff changeset
225 '[alias]',
8986ec3a9c1c Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents: 432
diff changeset
226 ('dlog = log --pager=yes --style=%s' %
446
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
227 _p('lib/hg/mercurial-cli-templates/map-cmdline.dlog',
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
228 force_unix=True)),
436
8986ec3a9c1c Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents: 432
diff changeset
229 ('slog = log --pager=yes --style=%s' %
446
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
230 _p('lib/hg/mercurial-cli-templates/map-cmdline.slog',
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
231 force_unix=True)),
436
8986ec3a9c1c Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents: 432
diff changeset
232 ('nlog = log --pager=yes --style=%s' %
446
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
233 _p('lib/hg/mercurial-cli-templates/map-cmdline.nlog',
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
234 force_unix=True)),
436
8986ec3a9c1c Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents: 432
diff changeset
235 ('sglog = glog --pager=yes --style=%s' %
446
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
236 _p('lib/hg/mercurial-cli-templates/map-cmdline.sglog',
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
237 force_unix=True)),
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
238 ('nglog = glog --pager=yes --style=%s' %
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
239 _p('lib/hg/mercurial-cli-templates/map-cmdline.nlog',
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
240 force_unix=True)),
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
241 ('blog = glog --page=yes --style=%s' %
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
242 _p('hgrc/logstyles')),
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
243 ('wip = glog --pager=yes --style=%s --rev wip' %
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
244 _p('hgrc/wip.style', force_unix=True))
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
245 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
246 if is_nix:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
247 print("Building fast-hg-prompt...")
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
248 compile_ok = True
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
249 try:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
250 subprocess.check_call(['make'], cwd=_p('lib/hg/fast-hg-prompt'))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
251 except subprocess.CalledProcessError:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
252 compile_ok = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
253
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
254 for n in ['bookmark', 'remote', 'status']:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
255 link_path = os.path.expanduser('~/.local/bin/fast-hg-%s' % n)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
256 if compile_ok:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
257 mklink('lib/hg/fast-hg-prompt/fast-hg-%s' % n, link_path,
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
258 mode=(stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
259 elif os.path.islink(link_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
260 os.unlink(link_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
261 elif os.path.exists(link_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
262 os.remove(link_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
263
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
264
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
265 def install_git():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
266 writelines('~/.gitconfig', [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
267 '[include]',
455
1172b8484c68 Add global `gitignore` file.
Ludovic Chabant <ludovic@chabant.com>
parents: 451
diff changeset
268 ' path = %s' % _p('git/gitconfig', force_unix=True),
1172b8484c68 Add global `gitignore` file.
Ludovic Chabant <ludovic@chabant.com>
parents: 451
diff changeset
269 '[core]',
1172b8484c68 Add global `gitignore` file.
Ludovic Chabant <ludovic@chabant.com>
parents: 451
diff changeset
270 ' excludesfile = %s' % _p('git/gitignore', force_unix=True)
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
271 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
272 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
273 subprocess.check_call(
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
274 ['setx', 'GIT_SSH',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
275 '%USERPROFILE%\\Dropbox\\Utilities\\plink.exe'],
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
276 shell=True)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
277
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
278
473
e368c8ae2a4b Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 472
diff changeset
279 def install_universal_ctags():
513
b8eeae888aab Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents: 512
diff changeset
280 ensure_dir('~/.ctags.d')
b8eeae888aab Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents: 512
diff changeset
281 writelines('~/.ctags.d/global.ctags', [
b8eeae888aab Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents: 512
diff changeset
282 '--exclude=node_modules',
b8eeae888aab Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents: 512
diff changeset
283 # On Windows, u-ctags has a bug where it outputs double-backslashes.
b8eeae888aab Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents: 512
diff changeset
284 '--output-format=e-ctags'
b8eeae888aab Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents: 512
diff changeset
285 ])
473
e368c8ae2a4b Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 472
diff changeset
286
e368c8ae2a4b Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 472
diff changeset
287
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
288 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
289 def install_tmux():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
290 mklink('tmux/tmux.conf', '~/.tmux.conf')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
291
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
292
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
293 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
294 def install_weechat():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
295 mklink('weechat', '~/.weechat')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
296
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
297
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
298 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
299 def install_mutt():
471
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
300 if which('gpg2'):
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
301 gpgbin = 'gpg2'
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
302 else:
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
303 if not which('gpg'):
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
304 print("WARNING: no GPG tools seem to be installed!")
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
305 gpgbin = 'gpg'
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
306 writelines('~/.muttrc', [
471
31079b060068 Update mutt config.
Ludovic Chabant <ludovic@chabant.com>
parents: 470
diff changeset
307 'source "%s -dq %s |"' % (gpgbin, _p('mutt/variables.gpg')),
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
308 'source "%s"' % _p('mutt/muttrc'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
309 'source "%s"' % _p('lib/mutt/mutt-colors-solarized/'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
310 'mutt-colors-solarized-dark-256.muttrc')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
311 ])
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
312
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
313
447
48933cecdf7f Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents: 446
diff changeset
314 def install_tridactyl():
48933cecdf7f Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents: 446
diff changeset
315 cfgname = '~/_tridactylrc' if is_windows else '~/.tridactylrc'
48933cecdf7f Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents: 446
diff changeset
316 writelines(cfgname, [
48933cecdf7f Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents: 446
diff changeset
317 'source %s' % _p('tridactyl/tridactylrc')
48933cecdf7f Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents: 446
diff changeset
318 ])
48933cecdf7f Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents: 446
diff changeset
319
48933cecdf7f Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents: 446
diff changeset
320
470
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
321 def install_qutebrowser():
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
322 if is_mac:
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
323 config_dir = '~/.qutebrowser'
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
324 elif is_windows:
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
325 config_dir = '%s/qutebrowser/' % os.getenv('APPDATA')
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
326 else:
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
327 config_dir = '~/.config/qutebrowser'
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
328
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
329 mklink('qutebrowser', config_dir)
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
330
3b9394a0a58b Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents: 455
diff changeset
331
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
332 def _on_error_try_make_readable(func, path, exc_info):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
333 if not os.access(path, os.W_OK):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
334 os.chmod(path, stat.S_IWUSR)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
335 func(path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
336 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
337 raise
446
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
338
edefbb8ea16a Mercurial tweaks.
Ludovic Chabant <ludovic@chabant.com>
parents: 438
diff changeset
339
438
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
340 def _is_non_empty_dir_with(path, contains=None):
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
341 if not os.path.isdir(path):
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
342 return False
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
343 if isinstance(contains, str):
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
344 contains = [contains]
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
345 for cnt in contains:
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
346 if not os.path.exists(os.path.join(path, cnt)):
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
347 return False
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
348 return True
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
349
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
350
514
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
351 re_git_url_prefix = re.compile(r'^\[git(\:(?P<branch>[^\]]+))?\](?P<url>.*)$')
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
352
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
353 # TODO: support for submodules
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
354 def clone_git(url, path, force=False):
514
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
355 m = re_git_url_prefix.match(url)
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
356 if not m:
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
357 raise Exception("Not a git url: %s" % url)
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
358 url, branch = m.group('url'), (m.group('branch') or 'master')
515
6d5e2a583502 Remove onsub extension
Ludovic Chabant <ludovic@chabant.com>
parents: 514
diff changeset
359
438
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
360 if _is_non_empty_dir_with(path, '.git'):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
361 if not force:
514
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
362 print("git pull origin %s %s" % (branch, path))
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
363 subprocess.check_call(['git', 'pull', 'origin', branch],
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
364 cwd=path)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
365 return
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
366 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
367 print("Deleting existing: %s" % path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
368 shutil.rmtree(path, onerror=_on_error_try_make_readable)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
369
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
370 print("git clone %s %s" % (url, path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
371 ensure_dir(os.path.dirname(path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
372 subprocess.check_call(['git', 'clone', url, path])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
373
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
374
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
375 def clone_hg(url, path, force=False):
438
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
376 if _is_non_empty_dir_with(path, '.hg'):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
377 if not force:
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
378 print("hg pull -u %s" % path)
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
379 subprocess.check_call(['hg', 'pull', '-u'], cwd=path)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
380 return
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
381 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
382 print("Deleting existing: %s" % path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
383 shutil.rmtree(path, onerror=_on_error_try_make_readable)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
384
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
385 print("hg clone %s %s" % (url, path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
386 ensure_dir(os.path.dirname(path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
387 env = dict(os.environ)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
388 env.update({'HGPLAIN': '1'})
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
389 subprocess.check_call(['hg', 'clone', url, path], env=env)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
390
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
391
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
392 @needs_config
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
393 @supports_forcing
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
394 @run_priority(100)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
395 def install_subrepos(cfg, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
396 if not cfg.has_section('subrepos'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
397 return
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
398
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
399 for path, url in cfg.items('subrepos'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
400 full_path = _p(path)
514
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
401 if url.startswith('[git'):
fc35cae2fb52 Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents: 513
diff changeset
402 clone_git(url, full_path, force=force)
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
403 else:
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
404 clone_hg(url, full_path, force=force)
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
405 print()
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
406
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
407
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
408 @only_on_mac
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
409 @run_priority(210)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
410 def install_xcode():
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
411 if shutil.which('xcodebuild') is None:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
412 print("Installing XCode")
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
413 subprocess.check_call(['xcode-select', '--install'])
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
414 subprocess.check_call(['sudo', 'xcodebuild', '-license', 'accept'])
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
415
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
416
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
417 @only_on_mac
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
418 @run_priority(209)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
419 def install_homebrew():
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
420 if shutil.which('brew') is None:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
421 print("Installing Homebrew and Homebrew Cask")
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
422 subprocess.check_call([
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
423 '/usr/bin/ruby', '-e',
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
424 "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"]) # NOQA
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
425 subprocess.check_call(['brew', 'tap', 'caskroom/fonts'])
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
426
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
427
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
428 @only_on_mac
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
429 @needs_config
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
430 @supports_forcing
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
431 @run_priority(208)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
432 def install_mactools(cfg, force=False):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
433 if not cfg.has_section('mactools'):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
434 return
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
435
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
436 for name, _ in cfg.items('mactools'):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
437 args = ['brew', 'install', name]
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
438 if force:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
439 args.append('--force')
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
440 subprocess.check_call(args)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
441
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
442
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
443 @only_on_win
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
444 @run_priority(209)
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
445 def install_scoop():
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
446 if shutil.which('scoop') is None:
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
447 print("Installing Scoop")
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
448 subprocess.check_call(
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
449 '@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" '
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
450 '-NoProfile -InputFormat None -ExecutionPolicy Bypass '
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
451 '-Command "iex (new-object net.webclient).downloadstring(\'https://get.scoop.sh\')"')
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
452 subprocess.check_call(
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
453 ['scoop.cmd', 'bucket', 'add', 'extras'])
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
454 else:
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
455 print("Scoop is already installed")
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
456
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
457 @only_on_win
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
458 @needs_config
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
459 @supports_forcing
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
460 @run_priority(208)
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
461 def install_wintools(cfg, force=False):
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
462 if not cfg.has_section('wintools'):
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
463 return
473
e368c8ae2a4b Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 472
diff changeset
464
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
465 for name, arch in cfg.items('wintools'):
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
466 args = ['scoop.cmd', 'install', name]
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
467 if arch:
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
468 args += ['-a', arch]
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
469 subprocess.check_call(args)
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
470
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
471
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
472 # Main stuff!
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
473
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
474 class FatalInstallerError(Exception):
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
475 pass
473
e368c8ae2a4b Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 472
diff changeset
476
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
477
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
478 def main():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
479 print("dotfiles installer")
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
480 print("python %s" % sys.version)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
481 print("on %s" % sys.platform)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
482 print('')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
483
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
484 cfg = configparser.ConfigParser()
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
485 cfg.read([
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
486 _p('install.cfg'),
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
487 _p('local', 'local_install.cfg')])
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
488
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
489 # Get all the methods in this module that are named `install_xxx`.
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
490 mod_names = ['all']
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
491 this_mod = sys.modules[__name__]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
492 for an in dir(this_mod):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
493 if not an.startswith('install_'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
494 continue
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
495
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
496 name = an[len('install_'):]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
497 mod_names.append(name)
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
498
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
499 # See if we have any local install script.
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
500 local_mod = None
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
501 local_install_py = _p('local', 'local_install.py')
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
502 if os.path.isfile(local_install_py):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
503 import importlib.util
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
504 spec = importlib.util.spec_from_file_location('local_install',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
505 local_install_py)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
506 local_mod = importlib.util.module_from_spec(spec)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
507 spec.loader.exec_module(local_mod)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
508 sys.modules['local_install'] = local_mod
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
509
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
510 # Create the parser, where you can specify one or more install target.
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
511 parser = argparse.ArgumentParser()
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
512 parser.add_argument(
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
513 'module', nargs='*',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
514 help="Which module(s) to install. Defaults to all modules.")
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
515 parser.add_argument(
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
516 '-l', '--list', action='store_true',
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
517 help="List available modules to install.")
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
518 parser.add_argument(
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
519 '-f', '--force', action='store_true',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
520 help="Force installation by overwriting things.")
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
521 args = parser.parse_args()
473
e368c8ae2a4b Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 472
diff changeset
522
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
523 # Print list and exit if needed.
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
524 if args.list:
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
525 print("Available modules to install:")
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
526 for nm in mod_names:
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
527 print(nm)
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
528 print()
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
529 print("Specify 'all' to install all modules.")
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
530 return
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
531
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
532 # Get the list of methods to run.
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
533 funcs = []
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
534 selected_mods = set(args.module)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
535 if 'all' in selected_mods:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
536 selected_mods = set(mod_names)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
537 selected_mods.remove('all')
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
538 selected_mods.difference_update([neg[3:] for neg in args.module if neg.startswith('no-')])
473
e368c8ae2a4b Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 472
diff changeset
539
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
540 for mn in selected_mods:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
541 func = getattr(this_mod, 'install_%s' % mn)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
542 funcs.append((mn, func))
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
543 # See if there's a local method too for this.
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
544 if local_mod is not None:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
545 local_func = getattr(local_mod, 'install_%s' % mn, None)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
546 if local_func is not None:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
547 lmn = '%s (local)' % mn
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
548 funcs.append((lmn, local_func))
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
549
438
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
550 failed_installs = []
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
551 funcs = sorted(funcs, key=_get_install_func_priority, reverse=True)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
552 for name, func in funcs:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
553 print("Installing %s" % name)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
554
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
555 f_args = []
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
556 f_kwargs = {}
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
557 if getattr(func, '__dotfiles_needs_config__', False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
558 f_args.append(cfg)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
559 if getattr(func, '__dotfiles_supports_forcing__', False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
560 f_kwargs['force'] = args.force
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
561
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
562 try:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
563 func(*f_args, **f_kwargs)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
564 except Exception as ex:
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
565 failed_installs.append((name, sys.exc_info()))
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
566 print("ERROR: %s" % ex)
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
567 traceback.print_exc()
472
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
568 if isinstance(ex, FatalInstallerError):
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
569 print("Aborting all remaining installs because '%s' failed!" % name)
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
570 break
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
571 else:
97412ea9b3fa Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 471
diff changeset
572 print("Skipping install of '%s'." % name)
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
573
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
574 print()
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
575
438
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
576 if failed_installs:
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
577 print()
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
578 print("----------------------------------")
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
579 print("ERROR: There were failed installs!")
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
580 for name, ex_info in failed_installs:
438
3d999fcf62c6 Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents: 437
diff changeset
581 print("ERROR: failed to install '%s'." % name)
487
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
582 print("ERROR: %s" % ex_info[1])
5bbc05a69f4c Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents: 479
diff changeset
583 traceback.print_exception(*ex_info)
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
584
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
585
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
586 def _get_install_func_priority(func_info):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
587 func = func_info[1]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
588 return getattr(func, '__dotfiles_priority__', 0)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
589
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
590
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
591 if __name__ == '__main__':
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
592 main()