4040import sphinx
4141from sphinx .util .docutils import switch_source_input
4242from sphinx .util import logging
43+ from pprint import pformat
4344
4445srctree = os .path .abspath (os .environ ["srctree" ])
4546sys .path .insert (0 , os .path .join (srctree , "scripts/lib/kdoc" ))
4950
5051__version__ = '1.0'
5152kfiles = None
52- logger = logging .getLogger ('kerneldoc' )
53+ logger = logging .getLogger (__name__ )
5354
5455def cmd_str (cmd ):
5556 """
@@ -190,46 +191,31 @@ def handle_args(self):
190191
191192 return cmd
192193
193- def run_cmd (self ):
194+ def run_cmd (self , cmd ):
194195 """
195196 Execute an external kernel-doc command.
196197 """
197198
198199 env = self .state .document .settings .env
199- cmd = self .handle_args ()
200-
201- if self .verbose >= 1 :
202- print (cmd_str (cmd ))
203-
204200 node = nodes .section ()
205201
206- try :
207- logger .verbose ("calling kernel-doc '%s'" % (" " .join (cmd )))
208-
209- p = subprocess .Popen (cmd , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
210- out , err = p .communicate ()
211-
212- out , err = codecs .decode (out , 'utf-8' ), codecs .decode (err , 'utf-8' )
202+ p = subprocess .Popen (cmd , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
203+ out , err = p .communicate ()
213204
214- if p .returncode != 0 :
215- sys .stderr .write (err )
205+ out , err = codecs .decode (out , 'utf-8' ), codecs .decode (err , 'utf-8' )
216206
217- logger .warning ("kernel-doc '%s' failed with return code %d"
218- % (" " .join (cmd ), p .returncode ))
219- return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
220- elif env .config .kerneldoc_verbosity > 0 :
221- sys .stderr .write (err )
207+ if p .returncode != 0 :
208+ sys .stderr .write (err )
222209
223- except Exception as e : # pylint: disable=W0703
224- logger .warning ("kernel-doc '%s' processing failed with: %s" %
225- (" " .join (cmd ), str (e )))
210+ logger .warning ("kernel-doc '%s' failed with return code %d"
211+ % (" " .join (cmd ), p .returncode ))
226212 return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
213+ elif env .config .kerneldoc_verbosity > 0 :
214+ sys .stderr .write (err )
227215
228216 filenames = self .parse_args ["file_list" ]
229217 for filename in filenames :
230- ret = self .parse_msg (filename , node , out , cmd )
231- if ret :
232- return ret
218+ self .parse_msg (filename , node , out , cmd )
233219
234220 return node .children
235221
@@ -240,40 +226,31 @@ def parse_msg(self, filename, node, out, cmd):
240226
241227 env = self .state .document .settings .env
242228
243- try :
244- lines = statemachine .string2lines (out , self .tab_width ,
245- convert_whitespace = True )
246- result = ViewList ()
247-
248- lineoffset = 0 ;
249- line_regex = re .compile (r"^\.\. LINENO ([0-9]+)$" )
250- for line in lines :
251- match = line_regex .search (line )
252- if match :
253- # sphinx counts lines from 0
254- lineoffset = int (match .group (1 )) - 1
255- # we must eat our comments since the upset the markup
256- else :
257- doc = str (env .srcdir ) + "/" + env .docname + ":" + str (self .lineno )
258- result .append (line , doc + ": " + filename , lineoffset )
259- lineoffset += 1
260-
261- self .do_parse (result , node )
262-
263- except Exception as e : # pylint: disable=W0703
264- logger .warning ("kernel-doc '%s' processing failed with: %s" %
265- (cmd_str (cmd ), str (e )))
266- return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
229+ lines = statemachine .string2lines (out , self .tab_width ,
230+ convert_whitespace = True )
231+ result = ViewList ()
232+
233+ lineoffset = 0 ;
234+ line_regex = re .compile (r"^\.\. LINENO ([0-9]+)$" )
235+ for line in lines :
236+ match = line_regex .search (line )
237+ if match :
238+ # sphinx counts lines from 0
239+ lineoffset = int (match .group (1 )) - 1
240+ # we must eat our comments since the upset the markup
241+ else :
242+ doc = str (env .srcdir ) + "/" + env .docname + ":" + str (self .lineno )
243+ result .append (line , doc + ": " + filename , lineoffset )
244+ lineoffset += 1
267245
268- return None
246+ self . do_parse ( result , node )
269247
270- def run_kdoc (self , kfiles ):
248+ def run_kdoc (self , cmd , kfiles ):
271249 """
272250 Execute kernel-doc classes directly instead of running as a separate
273251 command.
274252 """
275253
276- cmd = self .handle_args ()
277254 env = self .state .document .settings .env
278255
279256 node = nodes .section ()
@@ -282,22 +259,27 @@ def run_kdoc(self, kfiles):
282259 filenames = self .parse_args ["file_list" ]
283260
284261 for filename , out in kfiles .msg (** self .msg_args , filenames = filenames ):
285- if self .verbose >= 1 :
286- print (cmd_str (cmd ))
287-
288- ret = self .parse_msg (filename , node , out , cmd )
289- if ret :
290- return ret
262+ self .parse_msg (filename , node , out , cmd )
291263
292264 return node .children
293265
294266 def run (self ):
295267 global kfiles
296268
297- if kfiles :
298- return self .run_kdoc (kfiles )
299- else :
300- return self .run_cmd ()
269+ cmd = self .handle_args ()
270+ if self .verbose >= 1 :
271+ logger .info (cmd_str (cmd ))
272+
273+ try :
274+ if kfiles :
275+ return self .run_kdoc (cmd , kfiles )
276+ else :
277+ return self .run_cmd (cmd )
278+
279+ except Exception as e : # pylint: disable=W0703
280+ logger .warning ("kernel-doc '%s' processing failed with: %s" %
281+ (cmd_str (cmd ), pformat (e )))
282+ return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
301283
302284 def do_parse (self , result , node ):
303285 with switch_source_input (self .state , result ):
0 commit comments