|
39 | 39 | import re |
40 | 40 | import kernellog |
41 | 41 |
|
42 | | -from os import path |
43 | | - |
44 | 42 | from docutils import nodes, statemachine |
45 | 43 | from docutils.statemachine import ViewList |
46 | 44 | from docutils.parsers.rst import directives, Directive |
@@ -73,60 +71,26 @@ class KernelCmd(Directive): |
73 | 71 | } |
74 | 72 |
|
75 | 73 | def run(self): |
76 | | - |
77 | 74 | doc = self.state.document |
78 | 75 | if not doc.settings.file_insertion_enabled: |
79 | 76 | raise self.warning("docutils: file insertion disabled") |
80 | 77 |
|
81 | | - env = doc.settings.env |
82 | | - cwd = path.dirname(doc.current_source) |
83 | | - cmd = "get_abi.pl rest --enable-lineno --dir " |
84 | | - cmd += self.arguments[0] |
85 | | - |
86 | | - if 'rst' in self.options: |
87 | | - cmd += " --rst-source" |
| 78 | + srctree = os.path.abspath(os.environ["srctree"]) |
88 | 79 |
|
89 | | - srctree = path.abspath(os.environ["srctree"]) |
| 80 | + args = [ |
| 81 | + os.path.join(srctree, 'scripts/get_abi.pl'), |
| 82 | + 'rest', |
| 83 | + '--enable-lineno', |
| 84 | + '--dir', os.path.join(srctree, 'Documentation', self.arguments[0]), |
| 85 | + ] |
90 | 86 |
|
91 | | - fname = cmd |
92 | | - |
93 | | - # extend PATH with $(srctree)/scripts |
94 | | - path_env = os.pathsep.join([ |
95 | | - srctree + os.sep + "scripts", |
96 | | - os.environ["PATH"] |
97 | | - ]) |
98 | | - shell_env = os.environ.copy() |
99 | | - shell_env["PATH"] = path_env |
100 | | - shell_env["srctree"] = srctree |
| 87 | + if 'rst' in self.options: |
| 88 | + args.append('--rst-source') |
101 | 89 |
|
102 | | - lines = self.runCmd(cmd, shell=True, cwd=cwd, env=shell_env) |
| 90 | + lines = subprocess.check_output(args, cwd=os.path.dirname(doc.current_source)).decode('utf-8') |
103 | 91 | nodeList = self.nestedParse(lines, self.arguments[0]) |
104 | 92 | return nodeList |
105 | 93 |
|
106 | | - def runCmd(self, cmd, **kwargs): |
107 | | - u"""Run command ``cmd`` and return its stdout as unicode.""" |
108 | | - |
109 | | - try: |
110 | | - proc = subprocess.Popen( |
111 | | - cmd |
112 | | - , stdout = subprocess.PIPE |
113 | | - , stderr = subprocess.PIPE |
114 | | - , **kwargs |
115 | | - ) |
116 | | - out, err = proc.communicate() |
117 | | - |
118 | | - out, err = codecs.decode(out, 'utf-8'), codecs.decode(err, 'utf-8') |
119 | | - |
120 | | - if proc.returncode != 0: |
121 | | - raise self.severe( |
122 | | - u"command '%s' failed with return code %d" |
123 | | - % (cmd, proc.returncode) |
124 | | - ) |
125 | | - except OSError as exc: |
126 | | - raise self.severe(u"problems with '%s' directive: %s." |
127 | | - % (self.name, ErrorString(exc))) |
128 | | - return out |
129 | | - |
130 | 94 | def nestedParse(self, lines, fname): |
131 | 95 | env = self.state.document.settings.env |
132 | 96 | content = ViewList() |
|
0 commit comments