annotate install.py @ 416:222b477ad678

Install script improvements. - Support a local script that adds more installs. - Add `--force` flag to force certain things.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 19 Jan 2018 09:19:34 -0800
parents c6da0c9f40ae
children 6dbef23ca6bd
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
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 is_windows = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 if sys.platform == "win32":
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 is_nix = False
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 is_windows = True
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
21 def _p(*paths, force_unix=False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
22 res = os.path.join(dotfiles_dir, *paths)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
23 if force_unix:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
24 res = res.replace('\\', '/')
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
25 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
26 res = res.replace('/', os.sep)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
27 return res
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 def nixslash(path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 return path.replace('\\', '/')
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
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 def ensure_dir(path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 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
36 if not os.path.isdir(full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 os.makedirs(full_path, mode=0o700)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 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
41 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
42 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
43 if os.path.islink(link_full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 print("Unlinking %s" % link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 os.unlink(link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 elif os.path.exists(link_full_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 print("Removing %s" % link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 os.remove(link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 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
51 os.symlink(orig_full_path, link_full_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 if mode is not None:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 os.chmod(link_full_path, mode)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 def writelines(path, lines):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 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
58 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
59 with open(full_path, 'w') as fp:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 for l in lines:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 fp.write(l)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 fp.write('\n')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 def only_on_nix(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 @functools.wraps(f)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 def decorator(*args, **kwargs):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 if is_nix:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 return f(*args, **kwargs)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 return decorator
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 def only_on_win(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 @functools.wraps(f)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 def decorator(*args, **kwargs):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 return f(*args, **kwargs)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 return decorator
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
81 def supports_forcing(f):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
82 f.__dotfiles_supports_forcing__ = True
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
83 return f
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
84
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
85
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 def needs_config(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 f.__dotfiles_needs_config__ = True
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 return f
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89
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 def run_priority(prio):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 def wrapper(f):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 f.__dotfiles_priority__ = prio
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 return f
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 return wrapper
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 def install_bash():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 mklink('bashrc/bashrc', '.bashrc')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 mklink('bashrc/bash_profile', '.bash_profile')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 def install_fish():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 ensure_dir('~/.config')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 mklink('fish', '~/.config/fish')
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
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 def install_vim():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 vimrc_path = '~/.vimrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 vimrc_path = '~/_vimrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 writelines(vimrc_path, [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 'set runtimepath+=%s' % nixslash(_p('vim')),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 'source %s' % nixslash(_p('vim', 'vimrc'))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 @run_priority(2) # Needs to run before `fish`.
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 def install_mercurial():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 hgrc_path = '~/.hgrc'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 hgrc_path = '~/mercurial.ini'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 writelines(hgrc_path, [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 '%%include %s' % _p('hgrc/hgrc'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 '[ui]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 'ignore = %s' % _p('hgrc/hgignore'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 '[subrepos]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130 'git:allowed = true',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 '[extensions]',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 'hggit = %s' % _p('lib/hg/hg-git/hggit/'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 'onsub = %s' % _p('lib/hg/onsub/onsub.py'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 '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
135 '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
136 '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
137 '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
138 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 if is_nix:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 print("Building fast-hg-prompt...")
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 compile_ok = True
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 try:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 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
144 except subprocess.CalledProcessError:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 compile_ok = False
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 for n in ['bookmark', 'remote', 'status']:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 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
149 if compile_ok:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 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
151 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
152 elif os.path.islink(link_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 os.unlink(link_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154 elif os.path.exists(link_path):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 os.remove(link_path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158 def install_git():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 writelines('~/.gitconfig', [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 '[include]',
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
161 '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
162 ])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 if is_windows:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164 subprocess.check_call(
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165 ['setx', 'GIT_SSH',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 '%USERPROFILE%\\Dropbox\\Utilities\\plink.exe'],
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 shell=True)
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 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 def install_tmux():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172 mklink('tmux/tmux.conf', '~/.tmux.conf')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173
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 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 def install_weechat():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 mklink('weechat', '~/.weechat')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 @only_on_nix
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 def install_mutt():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 writelines('~/.muttrc', [
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 'source "gpg2 -dq %s |"' % _p('mutt/variables.gpg'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 'source "%s"' % _p('mutt/muttrc'),
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 'source "%s"' % _p('lib/mutt/mutt-colors-solarized/'
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186 'mutt-colors-solarized-dark-256.muttrc')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 ])
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
188
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
189
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
190 def _on_error_try_make_readable(func, path, exc_info):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
191 if not os.access(path, os.W_OK):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
192 os.chmod(path, stat.S_IWUSR)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
193 func(path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
194 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
195 raise
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
198 def clone_git(url, path, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 if os.path.isdir(path):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
200 if not force:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
201 print("Skipping git clone of %s -- directory exists" % path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
202 return
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
203 else:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
204 print("Deleting existing: %s" % path)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
205 shutil.rmtree(path, onerror=_on_error_try_make_readable)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
206
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
207 print("git clone %s %s" % (url, path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
208 ensure_dir(os.path.dirname(path))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
209 subprocess.check_call(['git', 'clone', url, path])
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
210
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
211
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
212 def clone_hg(url, path, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
213 if os.path.isdir(path):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
214 if not force:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
215 print("Skipping hg clone of %s -- directory exists" % path)
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("hg 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 env = dict(os.environ)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
224 env.update({'HGPLAIN': '1'})
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
225 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
226
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
227
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
228 @needs_config
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
229 @supports_forcing
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
230 @run_priority(100)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
231 def install_subrepos(cfg, force=False):
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
232 if not cfg.has_section('subrepos'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
233 return
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
234
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
235 for path, url in cfg.items('subrepos'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
236 full_path = _p(path)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
237 if url.startswith('[git]'):
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
238 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
239 else:
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
240 clone_hg(url, full_path, force=force)
407
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 def main():
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
244 print("dotfiles installer")
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
245 print("python %s" % sys.version)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
246 print("on %s" % sys.platform)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
247 print('')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
248
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
249 cfg = configparser.ConfigParser()
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
250 cfg.read(_p('install.cfg'))
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
251
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
252 # 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
253 mod_names = ['all']
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
254 this_mod = sys.modules[__name__]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
255 for an in dir(this_mod):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
256 if not an.startswith('install_'):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
257 continue
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
258
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
259 name = an[len('install_'):]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
260 mod_names.append(name)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
261
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
262 # See if we have any local install script.
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
263 local_mod = None
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
264 local_install_py = os.path.join(dotfiles_dir, 'local',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
265 'local_install.py')
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
266 if os.path.isfile(local_install_py):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
267 import importlib.util
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
268 spec = importlib.util.spec_from_file_location('local_install',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
269 local_install_py)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
270 local_mod = importlib.util.module_from_spec(spec)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
271 spec.loader.exec_module(local_mod)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
272 sys.modules['local_install'] = local_mod
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
273
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
274 # 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
275 parser = argparse.ArgumentParser()
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
276 parser.add_argument(
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
277 'module', nargs='*',
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
278 choices=mod_names,
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
279 help="Which module(s) to install. Defaults to all modules.")
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
280 parser.add_argument(
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
281 '-f', '--force', action='store_true',
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
282 help="Force installation by overwriting things.")
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
283 args = parser.parse_args()
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
284
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
285 # Get the list of methods to run.
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
286 funcs = []
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
287 selected_mods = set(args.module)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
288 if 'all' in selected_mods:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
289 selected_mods = set(mod_names)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
290 selected_mods.remove('all')
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
291 for mn in selected_mods:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
292 func = getattr(this_mod, 'install_%s' % mn)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
293 funcs.append((mn, func))
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
294 # See if there's a local method too for this.
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
295 if local_mod is not None:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
296 local_func = getattr(local_mod, 'install_%s' % mn, None)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
297 if local_func is not None:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
298 lmn = '%s (local)' % mn
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
299 funcs.append((lmn, local_func))
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
300
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
301 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
302 for name, func in funcs:
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
303 print("Installing %s" % name)
416
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
304
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
305 f_args = []
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
306 f_kwargs = {}
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
307 if getattr(func, '__dotfiles_needs_config__', False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
308 f_args.append(cfg)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
309 if getattr(func, '__dotfiles_supports_forcing__', False):
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
310 f_kwargs['force'] = args.force
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
311
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
312 try:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
313 func(*f_args, **f_kwargs)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
314 except Exception as ex:
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
315 print("ERROR: %s" % ex)
222b477ad678 Install script improvements.
Ludovic Chabant <ludovic@chabant.com>
parents: 407
diff changeset
316 print("Aborting install.")
407
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
317
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
318
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
319 def _get_install_func_priority(func_info):
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
320 func = func_info[1]
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
321 return getattr(func, '__dotfiles_priority__', 0)
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
322
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
323
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
324 if __name__ == '__main__':
c6da0c9f40ae Replace subrepos with an install script. Finally.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
325 main()