Mercurial > dotfiles
annotate install.py @ 514:fc35cae2fb52
Support other branches than master for git repos
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 04 May 2022 15:03:48 -0700 |
parents | b8eeae888aab |
children | 6d5e2a583502 |
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 | 28 def _is_executable(fpath): |
29 return os.path.isfile(fpath) and os.access(fpath, os.X_OK) | |
30 | |
31 | |
32 def which(exename): | |
33 for path in os.environ.get("PATH", "").split(os.pathsep): | |
34 exepath = os.path.join(path, exename) | |
35 if _is_executable(exepath): | |
36 return exepath | |
37 return None | |
38 | |
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 | 195 # Create a gvimrc file mostly to fix a bug with Scoop, which |
196 # installs a _gvimrc in the base runtime path, and it can mess | |
197 # up colors and settings. | |
198 gvimrc_path = '~/.gvimrc' | |
199 if is_windows: | |
200 gvimrc_path = '~/_gvimrc' | |
201 writelines(gvimrc_path, [ | |
202 'source %s' % nixslash(_p('vim', 'gvimrc')) | |
203 ]) | |
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/'), |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
222 'onsub = %s' % _p('lib/hg/onsub/onsub.py'), |
512 | 223 '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
|
224 '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
|
225 '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
|
226 '[alias]', |
8986ec3a9c1c
Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents:
432
diff
changeset
|
227 ('dlog = log --pager=yes --style=%s' % |
446 | 228 _p('lib/hg/mercurial-cli-templates/map-cmdline.dlog', |
229 force_unix=True)), | |
436
8986ec3a9c1c
Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents:
432
diff
changeset
|
230 ('slog = log --pager=yes --style=%s' % |
446 | 231 _p('lib/hg/mercurial-cli-templates/map-cmdline.slog', |
232 force_unix=True)), | |
436
8986ec3a9c1c
Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents:
432
diff
changeset
|
233 ('nlog = log --pager=yes --style=%s' % |
446 | 234 _p('lib/hg/mercurial-cli-templates/map-cmdline.nlog', |
235 force_unix=True)), | |
436
8986ec3a9c1c
Properly use the Mercurial log templates.
Ludovic Chabant <ludovic@chabant.com>
parents:
432
diff
changeset
|
236 ('sglog = glog --pager=yes --style=%s' % |
446 | 237 _p('lib/hg/mercurial-cli-templates/map-cmdline.sglog', |
238 force_unix=True)), | |
239 ('nglog = glog --pager=yes --style=%s' % | |
240 _p('lib/hg/mercurial-cli-templates/map-cmdline.nlog', | |
241 force_unix=True)), | |
242 ('blog = glog --page=yes --style=%s' % | |
243 _p('hgrc/logstyles')), | |
244 ('wip = glog --pager=yes --style=%s --rev wip' % | |
245 _p('hgrc/wip.style', force_unix=True)) | |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
246 ]) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
247 if is_nix: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
248 print("Building fast-hg-prompt...") |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
249 compile_ok = True |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
250 try: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
251 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
|
252 except subprocess.CalledProcessError: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
253 compile_ok = False |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
254 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
255 for n in ['bookmark', 'remote', 'status']: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
256 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
|
257 if compile_ok: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
258 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
|
259 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
|
260 elif os.path.islink(link_path): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
261 os.unlink(link_path) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
262 elif os.path.exists(link_path): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
263 os.remove(link_path) |
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 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
266 def install_git(): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
267 writelines('~/.gitconfig', [ |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
268 '[include]', |
455
1172b8484c68
Add global `gitignore` file.
Ludovic Chabant <ludovic@chabant.com>
parents:
451
diff
changeset
|
269 ' path = %s' % _p('git/gitconfig', force_unix=True), |
1172b8484c68
Add global `gitignore` file.
Ludovic Chabant <ludovic@chabant.com>
parents:
451
diff
changeset
|
270 '[core]', |
1172b8484c68
Add global `gitignore` file.
Ludovic Chabant <ludovic@chabant.com>
parents:
451
diff
changeset
|
271 ' 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
|
272 ]) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
273 if is_windows: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
274 subprocess.check_call( |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
275 ['setx', 'GIT_SSH', |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
276 '%USERPROFILE%\\Dropbox\\Utilities\\plink.exe'], |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
277 shell=True) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
278 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
279 |
473
e368c8ae2a4b
Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
472
diff
changeset
|
280 def install_universal_ctags(): |
513
b8eeae888aab
Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents:
512
diff
changeset
|
281 ensure_dir('~/.ctags.d') |
b8eeae888aab
Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents:
512
diff
changeset
|
282 writelines('~/.ctags.d/global.ctags', [ |
b8eeae888aab
Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents:
512
diff
changeset
|
283 '--exclude=node_modules', |
b8eeae888aab
Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents:
512
diff
changeset
|
284 # 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
|
285 '--output-format=e-ctags' |
b8eeae888aab
Ignore node_modules in ctags
Ludovic Chabant <ludovic@chabant.com>
parents:
512
diff
changeset
|
286 ]) |
473
e368c8ae2a4b
Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
472
diff
changeset
|
287 |
e368c8ae2a4b
Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
472
diff
changeset
|
288 |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
289 @only_on_nix |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
290 def install_tmux(): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
291 mklink('tmux/tmux.conf', '~/.tmux.conf') |
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 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
294 @only_on_nix |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
295 def install_weechat(): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
296 mklink('weechat', '~/.weechat') |
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 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
299 @only_on_nix |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
300 def install_mutt(): |
471 | 301 if which('gpg2'): |
302 gpgbin = 'gpg2' | |
303 else: | |
304 if not which('gpg'): | |
305 print("WARNING: no GPG tools seem to be installed!") | |
306 gpgbin = 'gpg' | |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
307 writelines('~/.muttrc', [ |
471 | 308 '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
|
309 'source "%s"' % _p('mutt/muttrc'), |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
310 'source "%s"' % _p('lib/mutt/mutt-colors-solarized/' |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
311 'mutt-colors-solarized-dark-256.muttrc') |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
312 ]) |
417
6dbef23ca6bd
Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents:
416
diff
changeset
|
313 |
6dbef23ca6bd
Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents:
416
diff
changeset
|
314 |
447
48933cecdf7f
Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
315 def install_tridactyl(): |
48933cecdf7f
Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
316 cfgname = '~/_tridactylrc' if is_windows else '~/.tridactylrc' |
48933cecdf7f
Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
317 writelines(cfgname, [ |
48933cecdf7f
Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
318 'source %s' % _p('tridactyl/tridactylrc') |
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 |
48933cecdf7f
Add Tridactyl config.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
321 |
470
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
322 def install_qutebrowser(): |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
323 if is_mac: |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
324 config_dir = '~/.qutebrowser' |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
325 elif is_windows: |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
326 config_dir = '%s/qutebrowser/' % os.getenv('APPDATA') |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
327 else: |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
328 config_dir = '~/.config/qutebrowser' |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
329 |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
330 mklink('qutebrowser', config_dir) |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
331 |
3b9394a0a58b
Add qutebrowser config.
Ludovic Chabant <ludovic@chabant.com>
parents:
455
diff
changeset
|
332 |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
333 def _on_error_try_make_readable(func, path, exc_info): |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
334 if not os.access(path, os.W_OK): |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
335 os.chmod(path, stat.S_IWUSR) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
336 func(path) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
337 else: |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
338 raise |
446 | 339 |
340 | |
438
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
341 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
|
342 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
|
343 return False |
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
344 if isinstance(contains, str): |
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
345 contains = [contains] |
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
346 for cnt in contains: |
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
347 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
|
348 return False |
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
349 return True |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
350 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
351 |
514
fc35cae2fb52
Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents:
513
diff
changeset
|
352 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
|
353 |
fc35cae2fb52
Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents:
513
diff
changeset
|
354 # TODO: support for submodules |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
355 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
|
356 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
|
357 if not m: |
fc35cae2fb52
Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents:
513
diff
changeset
|
358 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
|
359 url, branch = m.group('url'), (m.group('branch') or 'master') |
fc35cae2fb52
Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents:
513
diff
changeset
|
360 |
438
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
361 if _is_non_empty_dir_with(path, '.git'): |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
362 if not force: |
514
fc35cae2fb52
Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents:
513
diff
changeset
|
363 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
|
364 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
|
365 cwd=path) |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
366 return |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
367 else: |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
368 print("Deleting existing: %s" % path) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
369 shutil.rmtree(path, onerror=_on_error_try_make_readable) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
370 |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
371 print("git clone %s %s" % (url, path)) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
372 ensure_dir(os.path.dirname(path)) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
373 subprocess.check_call(['git', 'clone', url, path]) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
374 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
375 |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
376 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
|
377 if _is_non_empty_dir_with(path, '.hg'): |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
378 if not force: |
417
6dbef23ca6bd
Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents:
416
diff
changeset
|
379 print("hg pull -u %s" % path) |
6dbef23ca6bd
Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents:
416
diff
changeset
|
380 subprocess.check_call(['hg', 'pull', '-u'], cwd=path) |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
381 return |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
382 else: |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
383 print("Deleting existing: %s" % path) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
384 shutil.rmtree(path, onerror=_on_error_try_make_readable) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
385 |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
386 print("hg clone %s %s" % (url, path)) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
387 ensure_dir(os.path.dirname(path)) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
388 env = dict(os.environ) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
389 env.update({'HGPLAIN': '1'}) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
390 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
|
391 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
392 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
393 @needs_config |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
394 @supports_forcing |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
395 @run_priority(100) |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
396 def install_subrepos(cfg, force=False): |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
397 if not cfg.has_section('subrepos'): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
398 return |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
399 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
400 for path, url in cfg.items('subrepos'): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
401 full_path = _p(path) |
514
fc35cae2fb52
Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents:
513
diff
changeset
|
402 if url.startswith('[git'): |
fc35cae2fb52
Support other branches than master for git repos
Ludovic Chabant <ludovic@chabant.com>
parents:
513
diff
changeset
|
403 clone_git(url, full_path, force=force) |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
404 else: |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
405 clone_hg(url, full_path, force=force) |
487
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
406 print() |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
407 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
408 |
431
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
409 @only_on_mac |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
410 @run_priority(210) |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
411 def install_xcode(): |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
412 if shutil.which('xcodebuild') is None: |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
413 print("Installing XCode") |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
414 subprocess.check_call(['xcode-select', '--install']) |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
415 subprocess.check_call(['sudo', 'xcodebuild', '-license', 'accept']) |
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 |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
418 @only_on_mac |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
419 @run_priority(209) |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
420 def install_homebrew(): |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
421 if shutil.which('brew') is None: |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
422 print("Installing Homebrew and Homebrew Cask") |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
423 subprocess.check_call([ |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
424 '/usr/bin/ruby', '-e', |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
425 "$(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
|
426 subprocess.check_call(['brew', 'tap', 'caskroom/fonts']) |
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 |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
429 @only_on_mac |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
430 @needs_config |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
431 @supports_forcing |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
432 @run_priority(208) |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
433 def install_mactools(cfg, force=False): |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
434 if not cfg.has_section('mactools'): |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
435 return |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
436 |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
437 for name, _ in cfg.items('mactools'): |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
438 args = ['brew', 'install', name] |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
439 if force: |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
440 args.append('--force') |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
441 subprocess.check_call(args) |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
442 |
e0bb52007402
Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents:
425
diff
changeset
|
443 |
472
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
444 @only_on_win |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
445 @run_priority(209) |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
446 def install_scoop(): |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
447 if shutil.which('scoop') is None: |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
448 print("Installing Scoop") |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
449 subprocess.check_call( |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
450 '@"%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
|
451 '-NoProfile -InputFormat None -ExecutionPolicy Bypass ' |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
452 '-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
|
453 subprocess.check_call( |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
454 ['scoop.cmd', 'bucket', 'add', 'extras']) |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
455 else: |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
456 print("Scoop is already installed") |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
457 |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
458 @only_on_win |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
459 @needs_config |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
460 @supports_forcing |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
461 @run_priority(208) |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
462 def install_wintools(cfg, force=False): |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
463 if not cfg.has_section('wintools'): |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
464 return |
473
e368c8ae2a4b
Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
472
diff
changeset
|
465 |
472
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
466 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
|
467 args = ['scoop.cmd', 'install', name] |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
468 if arch: |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
469 args += ['-a', arch] |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
470 subprocess.check_call(args) |
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 |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
473 # Main stuff! |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
474 |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
475 class FatalInstallerError(Exception): |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
476 pass |
473
e368c8ae2a4b
Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
472
diff
changeset
|
477 |
472
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
478 |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
479 def main(): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
480 print("dotfiles installer") |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
481 print("python %s" % sys.version) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
482 print("on %s" % sys.platform) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
483 print('') |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
484 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
485 cfg = configparser.ConfigParser() |
487
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
486 cfg.read([ |
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
487 _p('install.cfg'), |
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
488 _p('local', 'local_install.cfg')]) |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
489 |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
490 # 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
|
491 mod_names = ['all'] |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
492 this_mod = sys.modules[__name__] |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
493 for an in dir(this_mod): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
494 if not an.startswith('install_'): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
495 continue |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
496 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
497 name = an[len('install_'):] |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
498 mod_names.append(name) |
417
6dbef23ca6bd
Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents:
416
diff
changeset
|
499 |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
500 # See if we have any local install script. |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
501 local_mod = None |
487
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
502 local_install_py = _p('local', 'local_install.py') |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
503 if os.path.isfile(local_install_py): |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
504 import importlib.util |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
505 spec = importlib.util.spec_from_file_location('local_install', |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
506 local_install_py) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
507 local_mod = importlib.util.module_from_spec(spec) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
508 spec.loader.exec_module(local_mod) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
509 sys.modules['local_install'] = local_mod |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
510 |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
511 # 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
|
512 parser = argparse.ArgumentParser() |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
513 parser.add_argument( |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
514 'module', nargs='*', |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
515 help="Which module(s) to install. Defaults to all modules.") |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
516 parser.add_argument( |
472
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
517 '-l', '--list', action='store_true', |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
518 help="List available modules to install.") |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
519 parser.add_argument( |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
520 '-f', '--force', action='store_true', |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
521 help="Force installation by overwriting things.") |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
522 args = parser.parse_args() |
473
e368c8ae2a4b
Fix universal ctags config on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
472
diff
changeset
|
523 |
472
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
524 # Print list and exit if needed. |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
525 if args.list: |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
526 print("Available modules to install:") |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
527 for nm in mod_names: |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
528 print(nm) |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
529 print() |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
530 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
|
531 return |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
532 |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
533 # Get the list of methods to run. |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
534 funcs = [] |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
535 selected_mods = set(args.module) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
536 if 'all' in selected_mods: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
537 selected_mods = set(mod_names) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
538 selected_mods.remove('all') |
472
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
539 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
|
540 |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
541 for mn in selected_mods: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
542 func = getattr(this_mod, 'install_%s' % mn) |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
543 funcs.append((mn, func)) |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
544 # See if there's a local method too for this. |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
545 if local_mod is not None: |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
546 local_func = getattr(local_mod, 'install_%s' % mn, None) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
547 if local_func is not None: |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
548 lmn = '%s (local)' % mn |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
549 funcs.append((lmn, local_func)) |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
550 |
438
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
551 failed_installs = [] |
407
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
552 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
|
553 for name, func in funcs: |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
554 print("Installing %s" % name) |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
555 |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
556 f_args = [] |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
557 f_kwargs = {} |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
558 if getattr(func, '__dotfiles_needs_config__', False): |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
559 f_args.append(cfg) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
560 if getattr(func, '__dotfiles_supports_forcing__', False): |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
561 f_kwargs['force'] = args.force |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
562 |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
563 try: |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
564 func(*f_args, **f_kwargs) |
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
565 except Exception as ex: |
487
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
566 failed_installs.append((name, sys.exc_info())) |
416
222b477ad678
Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents:
407
diff
changeset
|
567 print("ERROR: %s" % ex) |
487
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
568 traceback.print_exc() |
472
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
569 if isinstance(ex, FatalInstallerError): |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
570 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
|
571 break |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
572 else: |
97412ea9b3fa
Improve install script, add scoop apps on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
471
diff
changeset
|
573 print("Skipping install of '%s'." % name) |
487
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
574 |
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
575 print() |
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
576 |
438
3d999fcf62c6
Check for subrepo directories with no repos in them.
Ludovic Chabant <ludovic@chabant.com>
parents:
437
diff
changeset
|
577 if failed_installs: |
487
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("----------------------------------") |
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
580 print("ERROR: There were failed installs!") |
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
581 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
|
582 print("ERROR: failed to install '%s'." % name) |
487
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
583 print("ERROR: %s" % ex_info[1]) |
5bbc05a69f4c
Improvements to installation script.
Ludovic Chabant <ludovic@chabant.com>
parents:
479
diff
changeset
|
584 traceback.print_exception(*ex_info) |
407
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 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
587 def _get_install_func_priority(func_info): |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
588 func = func_info[1] |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
589 return getattr(func, '__dotfiles_priority__', 0) |
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 |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
592 if __name__ == '__main__': |
c6da0c9f40ae
Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
593 main() |