##// END OF EJS Templates
add utils.submodule
MinRK -
Show More
@@ -0,0 +1,92 b''
1 """utilities for checking submodule status"""
2
3 #-----------------------------------------------------------------------------
4 # Copyright (C) 2013 The IPython Development Team
5 #
6 # Distributed under the terms of the BSD License. The full license is in
7 # the file COPYING, distributed as part of this software.
8 #-----------------------------------------------------------------------------
9
10 #-----------------------------------------------------------------------------
11 # Imports
12 #-----------------------------------------------------------------------------
13
14 import os
15 import subprocess
16 import sys
17
18 #-----------------------------------------------------------------------------
19 # Globals
20 #-----------------------------------------------------------------------------
21
22 pjoin = os.path.join
23
24 #-----------------------------------------------------------------------------
25 # Code
26 #-----------------------------------------------------------------------------
27
28 def ipython_parent():
29 """return IPython's parent (i.e. root if run from git)"""
30 from IPython.utils.path import get_ipython_package_dir
31 return os.path.abspath(os.path.dirname(get_ipython_package_dir()))
32
33 def ipython_submodules(root):
34 """return IPython submodules relative to root"""
35 return [
36 pjoin(root, 'IPython', 'frontend', 'html', 'notebook', 'static', 'components'),
37 ]
38
39 def is_repo(d):
40 """is d a git repo?"""
41 return os.path.exists(pjoin(d, '.git'))
42
43 def check_submodule_status(root=None):
44 """check submodule status
45
46 Has three return values:
47
48 'missing' - submodules are absent
49 'unclean' - submodules have unstaged changes
50 'clean' - all submodules are up to date
51 """
52
53 if hasattr(sys, "frozen"):
54 # frozen via py2exe or similar, don't bother
55 return 'clean'
56
57 if not root:
58 root = ipython_parent()
59
60 submodules = ipython_submodules(root)
61
62 for submodule in submodules:
63 if not os.path.exists(submodule):
64 return 'missing'
65
66 if not is_repo(root):
67 # not in git, assume clean
68 return 'clean'
69
70 # check with git submodule status
71 proc = subprocess.Popen('git submodule status',
72 stdout=subprocess.PIPE,
73 stderr=subprocess.PIPE,
74 shell=True,
75 cwd=root,
76 )
77 status, _ = proc.communicate()
78 status = status.decode("ascii")
79
80 for line in status.splitlines():
81 if status.startswith('-'):
82 return 'missing'
83 elif status.startswith('+'):
84 return 'unclean'
85
86 return 'clean'
87
88 def update_submodules(repo_dir):
89 """update submodules in a repo"""
90 subprocess.Popen("git submodule init", cwd=repo_dir, shell=True)
91 subprocess.Popen("git submodule update", cwd=repo_dir, shell=True)
92
General Comments 0
You need to be logged in to leave comments. Login now