annotate install.py @ 431:e0bb52007402

Add installation of homebrew stuff on Mac.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 01 Apr 2018 22:57:57 -0700
parents 350f7a55ff33
children 06a551d3fbb2
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
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 import sys
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 import stat
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
5 import shutil
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 import argparse
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 import functools
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 import subprocess
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 import configparser
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 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
13
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 is_nix = True
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
15 is_mac = False
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 is_windows = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 if sys.platform == "win32":
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 is_nix = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 is_windows = True
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
20 if sys.platform == 'darwin':
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
21 is_mac = True
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
24 def _p(*paths, force_unix=False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
25 res = os.path.join(dotfiles_dir, *paths)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
26 if force_unix:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
27 res = res.replace('\\', '/')
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
28 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
29 res = res.replace('/', os.sep)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
30 return res
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 def nixslash(path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 return path.replace('\\', '/')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 def ensure_dir(path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 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
39 if not os.path.isdir(full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 os.makedirs(full_path, mode=0o700)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 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
44 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
45 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
46 if os.path.islink(link_full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 print("Unlinking %s" % link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 os.unlink(link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 elif os.path.exists(link_full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 print("Removing %s" % link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 os.remove(link_full_path)
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 print("%s -> %s" % (link_full_path, orig_full_path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 os.symlink(orig_full_path, link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 if mode is not None:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 os.chmod(link_full_path, mode)
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 writelines(path, lines):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 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
61 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
62 with open(full_path, 'w') as fp:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 for l in lines:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 fp.write(l)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 fp.write('\n')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 def only_on_nix(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 @functools.wraps(f)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 def decorator(*args, **kwargs):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 if is_nix:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 return f(*args, **kwargs)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 return decorator
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
76 def only_on_mac(f):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
77 @functools.wraps(f)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
78 def decorator(*args, **kwargs):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
79 if is_mac:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
80 return f(*args, **kwargs)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
81 return decorator
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
82
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
83
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 def only_on_win(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 @functools.wraps(f)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 def decorator(*args, **kwargs):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 return f(*args, **kwargs)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 return decorator
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
92 def supports_forcing(f):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
93 f.__dotfiles_supports_forcing__ = True
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
94 return f
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
95
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
96
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 def needs_config(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 f.__dotfiles_needs_config__ = True
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 return f
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 def run_priority(prio):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 def wrapper(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 f.__dotfiles_priority__ = prio
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 return f
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 return wrapper
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 def install_bash():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 mklink('bashrc/bashrc', '.bashrc')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 mklink('bashrc/bash_profile', '.bash_profile')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 def install_fish():
425
350f7a55ff33 Improve fish configuration.
Ludovic Chabant <ludovic@chabant.com>
parents: 417
diff changeset
117 ensure_dir('~/.config/fish')
350f7a55ff33 Improve fish configuration.
Ludovic Chabant <ludovic@chabant.com>
parents: 417
diff changeset
118 writelines('~/.config/fish/config.fish',
350f7a55ff33 Improve fish configuration.
Ludovic Chabant <ludovic@chabant.com>
parents: 417
diff changeset
119 ['source %s' % _p('fish', 'config.fish')])
407
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
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 def install_vim():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123 vimrc_path = '~/.vimrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 vimrc_path = '~/_vimrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 writelines(vimrc_path, [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 'set runtimepath+=%s' % nixslash(_p('vim')),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 'source %s' % nixslash(_p('vim', 'vimrc'))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 ])
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 @run_priority(2) # Needs to run before `fish`.
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 def install_mercurial():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 hgrc_path = '~/.hgrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 hgrc_path = '~/mercurial.ini'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 writelines(hgrc_path, [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 '%%include %s' % _p('hgrc/hgrc'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 '[ui]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 'ignore = %s' % _p('hgrc/hgignore'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 '[subrepos]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 'git:allowed = true',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 '[extensions]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 'hggit = %s' % _p('lib/hg/hg-git/hggit/'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 'onsub = %s' % _p('lib/hg/onsub/onsub.py'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 'allpaths = %s' % _p('lib/hg/allpaths/mercurial_all_paths.py'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147 'prompt = %s' % _p('lib/hg/hg-prompt/prompt.py'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 'evolve = %s' % _p('lib/hg/mutable-history/hgext3rd/evolve'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 'terse-status = %s' % _p('lib/hg/terse-status/terse-status.py')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 if is_nix:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152 print("Building fast-hg-prompt...")
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 compile_ok = True
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154 try:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 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
156 except subprocess.CalledProcessError:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 compile_ok = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 for n in ['bookmark', 'remote', 'status']:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 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
161 if compile_ok:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 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
163 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
164 elif os.path.islink(link_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165 os.unlink(link_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 elif os.path.exists(link_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 os.remove(link_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170 def install_git():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 writelines('~/.gitconfig', [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172 '[include]',
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
173 'path = %s' % _p('git/gitconfig', force_unix=True)
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 subprocess.check_call(
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 ['setx', 'GIT_SSH',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178 '%USERPROFILE%\\Dropbox\\Utilities\\plink.exe'],
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 shell=True)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 def install_tmux():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 mklink('tmux/tmux.conf', '~/.tmux.conf')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
188 def install_weechat():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189 mklink('weechat', '~/.weechat')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 def install_mutt():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 writelines('~/.muttrc', [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195 'source "gpg2 -dq %s |"' % _p('mutt/variables.gpg'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196 'source "%s"' % _p('mutt/muttrc'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197 'source "%s"' % _p('lib/mutt/mutt-colors-solarized/'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198 'mutt-colors-solarized-dark-256.muttrc')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 ])
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
200
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
201
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
202 def _on_error_try_make_readable(func, path, exc_info):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
203 if not os.access(path, os.W_OK):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
204 os.chmod(path, stat.S_IWUSR)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
205 func(path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
206 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
207 raise
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
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
210 def clone_git(url, path, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
211 if os.path.isdir(path):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
212 if not force:
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
213 print("git pull origin master %s" % path)
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
214 subprocess.check_call(['git', 'pull', 'origin', 'master'],
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
215 cwd=path)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
216 return
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
217 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
218 print("Deleting existing: %s" % path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
219 shutil.rmtree(path, onerror=_on_error_try_make_readable)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
220
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
221 print("git clone %s %s" % (url, path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
222 ensure_dir(os.path.dirname(path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
223 subprocess.check_call(['git', 'clone', url, path])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
224
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
225
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
226 def clone_hg(url, path, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
227 if os.path.isdir(path):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
228 if not force:
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
229 print("hg pull -u %s" % path)
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
230 subprocess.check_call(['hg', 'pull', '-u'], cwd=path)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
231 return
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
232 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
233 print("Deleting existing: %s" % path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
234 shutil.rmtree(path, onerror=_on_error_try_make_readable)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
235
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
236 print("hg clone %s %s" % (url, path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
237 ensure_dir(os.path.dirname(path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
238 env = dict(os.environ)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
239 env.update({'HGPLAIN': '1'})
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
240 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
241
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
242
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
243 @needs_config
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
244 @supports_forcing
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
245 @run_priority(100)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
246 def install_subrepos(cfg, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
247 if not cfg.has_section('subrepos'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
248 return
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
249
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
250 for path, url in cfg.items('subrepos'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
251 full_path = _p(path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
252 if url.startswith('[git]'):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
253 clone_git(url[len('[git]'):], full_path, force=force)
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
254 else:
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
255 clone_hg(url, full_path, force=force)
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
256
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
257
431
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
258 @only_on_mac
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
259 @run_priority(210)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
260 def install_xcode():
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
261 if shutil.which('xcodebuild') is None:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
262 print("Installing XCode")
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
263 subprocess.check_call(['xcode-select', '--install'])
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
264 subprocess.check_call(['sudo', 'xcodebuild', '-license', 'accept'])
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
265
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
266
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
267 @only_on_mac
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
268 @run_priority(209)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
269 def install_homebrew():
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
270 if shutil.which('brew') is None:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
271 print("Installing Homebrew and Homebrew Cask")
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
272 subprocess.check_call([
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
273 '/usr/bin/ruby', '-e',
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
274 "$(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
275 subprocess.check_call(['brew', 'tap', 'caskroom/fonts'])
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
276
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
277
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
278 @only_on_mac
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
279 @needs_config
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
280 @supports_forcing
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
281 @run_priority(208)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
282 def install_mactools(cfg, force=False):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
283 if not cfg.has_section('mactools'):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
284 return
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
285
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
286 for name, _ in cfg.items('mactools'):
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
287 args = ['brew', 'install', name]
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
288 if force:
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
289 args.append('--force')
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
290 subprocess.check_call(args)
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
291
e0bb52007402 Add installation of homebrew stuff on Mac.
Ludovic Chabant <ludovic@chabant.com>
parents: 425
diff changeset
292
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
293 def main():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
294 print("dotfiles installer")
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
295 print("python %s" % sys.version)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
296 print("on %s" % sys.platform)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
297 print('')
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 cfg = configparser.ConfigParser()
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
300 cfg.read(_p('install.cfg'))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
301
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
302 # 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
303 mod_names = ['all']
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
304 this_mod = sys.modules[__name__]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
305 for an in dir(this_mod):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
306 if not an.startswith('install_'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
307 continue
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
308
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
309 name = an[len('install_'):]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
310 mod_names.append(name)
417
6dbef23ca6bd Update subrepos if they're already cloned.
Ludovic Chabant <ludovic@chabant.com>
parents: 416
diff changeset
311
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
312 # See if we have any local install script.
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
313 local_mod = None
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
314 local_install_py = os.path.join(dotfiles_dir, 'local',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
315 'local_install.py')
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
316 if os.path.isfile(local_install_py):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
317 import importlib.util
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
318 spec = importlib.util.spec_from_file_location('local_install',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
319 local_install_py)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
320 local_mod = importlib.util.module_from_spec(spec)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
321 spec.loader.exec_module(local_mod)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
322 sys.modules['local_install'] = local_mod
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
323
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
324 # 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
325 parser = argparse.ArgumentParser()
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
326 parser.add_argument(
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
327 'module', nargs='*',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
328 choices=mod_names,
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
329 help="Which module(s) to install. Defaults to all modules.")
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
330 parser.add_argument(
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
331 '-f', '--force', action='store_true',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
332 help="Force installation by overwriting things.")
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
333 args = parser.parse_args()
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
334
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
335 # Get the list of methods to run.
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
336 funcs = []
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
337 selected_mods = set(args.module)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
338 if 'all' in selected_mods:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
339 selected_mods = set(mod_names)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
340 selected_mods.remove('all')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
341 for mn in selected_mods:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
342 func = getattr(this_mod, 'install_%s' % mn)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
343 funcs.append((mn, func))
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
344 # See if there's a local method too for this.
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
345 if local_mod is not None:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
346 local_func = getattr(local_mod, 'install_%s' % mn, None)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
347 if local_func is not None:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
348 lmn = '%s (local)' % mn
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
349 funcs.append((lmn, local_func))
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 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
352 for name, func in funcs:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
353 print("Installing %s" % name)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
354
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
355 f_args = []
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
356 f_kwargs = {}
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
357 if getattr(func, '__dotfiles_needs_config__', False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
358 f_args.append(cfg)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
359 if getattr(func, '__dotfiles_supports_forcing__', False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
360 f_kwargs['force'] = args.force
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
361
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
362 try:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
363 func(*f_args, **f_kwargs)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
364 except Exception as ex:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
365 print("ERROR: %s" % ex)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
366 print("Aborting install.")
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
367
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
368
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
369 def _get_install_func_priority(func_info):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
370 func = func_info[1]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
371 return getattr(func, '__dotfiles_priority__', 0)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
372
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 if __name__ == '__main__':
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
375 main()