-
Notifications
You must be signed in to change notification settings - Fork 0
/
install.py
87 lines (82 loc) · 3.27 KB
/
install.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/python3
import platform
import logging
from collections import defaultdict
import os
import enum
import subprocess
messageFormat = "[%(who)s %(count)s回目] %(message)s"
formatter = logging.Formatter(messageFormat)
stdHandler = logging.StreamHandler()
stdHandler.setFormatter(formatter)
logging.basicConfig(level=logging.DEBUG, handlers=[stdHandler])
class ExtensionLogRecord(logging.LogRecord):
counts = defaultdict(int)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
msg = str(self.msg)
self.counts[msg] += 1
self.who = platform.uname().node
self.count = self.counts[msg]
logging.setLogRecordFactory(ExtensionLogRecord)
log = logging.getLogger(__name__)
# os.environ["HOME"]はwindowsに無いので例外が発生する。
# 他のOS環境でも同様の問題が起こりそうなので、ラムダ関数に変更し遅延評価する。
# (文字列にしてeval関数で実行する方法もあるが、補完やIDEアシスト機能が効かなくなるので使いたくない。)
targetFiles = [
{
'fileName': 'javascript.code-snippets',
'windowsPathDir': lambda: os.environ["USERPROFILE"] + "\\AppData\\Roaming\\Code\\User\\snippets"
},
{
'fileName': 'typescript.json',
'windowsPathDir': lambda: os.environ["USERPROFILE"] + "\\AppData\\Roaming\\Code\\User\\snippets"
},
{
'fileName': 'Microsoft.PowerShell_profile.ps1',
'windowsPathDir': lambda: os.environ["USERPROFILE"] + "\\Documents\\WindowsPowerShell"
},
{
'fileName': '.bashrc_aliases',
'linuxPathDir': lambda: os.environ["HOME"]
},
{
'fileName': '.zsh_original',
'linuxPathDir': lambda: os.environ["HOME"]
},
]
currentDir = os.path.dirname(os.path.abspath(__file__))
def main():
pf = platform.system()
if(pf == 'Windows'):
# windTargetDir = [n for n in targetFiles if n.get('windowsPathDir') is not None]
for n in targetFiles:
if (n.get('windowsCommand') is not None):
n.get('windowsCommand')()
log.debug('windowsCommand OK')
elif (n.get('windowsPathDir') is not None):
getPath = n.get('windowsPathDir')
path = getPath()
fileName = n.get('fileName')
# 大半のWin環境はプロファイルディレクトリが無い。無ければ作る。
if not os.path.isdir(path):
os.mkdir(path)
log.debug(currentDir)
os.symlink(os.path.join(currentDir, fileName), os.path.join(path, fileName))
elif(pf == 'Linux'):
for n in targetFiles:
getPath = n.get('linuxPathDir')
isExistAttribute = getPath is not None
if (not isExistAttribute):
continue
path = getPath()
fileName = n.get('fileName')
# 大半のWin環境はプロファイルディレクトリが無い。無ければ作る。
if not os.path.isdir(path):
os.mkdir(path)
log.debug(currentDir)
os.symlink(os.path.join(currentDir, fileName), os.path.join(path, fileName))
else:
pass
if __name__ == "__main__":