devtool / recipetool: use common code for launching editor

Looking at Chris Larson's code for starting the user's editor for
"recipetool newappend" it was slightly better than what I wrote for
"devtool edit-recipe" in that it checks VISUAL as well as EDITOR and
defaults to vi if neither are set, so break this out to its own function
and call it from both places. The broken out version passes shell=True
however in case it's a more complicated command rather than just a name
of an executable.

(From OE-Core rev: 184a256931e8cdc7bea97a905c4e67a435964de0)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2016-02-19 22:38:50 +13:00 committed by Richard Purdie
parent dd35f69340
commit e54f9c159d
3 changed files with 19 additions and 17 deletions

View File

@ -24,6 +24,7 @@ import tempfile
import logging
import argparse
import subprocess
import scriptutils
from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError
from devtool import parse_recipe
@ -48,17 +49,7 @@ def edit_recipe(args, config, basepath, workspace):
raise DevtoolError("Recipe file for %s is not under the workspace" %
args.recipename)
editor = os.environ.get('EDITOR', None)
if not editor:
raise DevtoolError("EDITOR environment variable not set")
import subprocess
try:
subprocess.check_call('%s "%s"' % (editor, recipefile), shell=True)
except subprocess.CalledProcessError as e:
return e.returncode
return 0
return scriptutils.run_editor(recipefile)
def configure_help(args, config, basepath, workspace):

View File

@ -27,6 +27,7 @@ import os
import re
import subprocess
import sys
import scriptutils
logger = logging.getLogger('recipetool')
@ -96,12 +97,7 @@ def newappend(args):
return 1
if args.edit:
editor = os.getenv('VISUAL', os.getenv('EDITOR', 'vi'))
try:
return subprocess.check_call([editor, append_path, recipe_path])
except OSError as exc:
logger.error("Execution of editor '%s' failed: %s", editor, exc)
return 1
return scriptutils.run_editor([append_path, recipe_path])
else:
print(append_path)

View File

@ -20,6 +20,7 @@ import os
import logging
import glob
import argparse
import subprocess
def logger_create(name):
logger = logging.getLogger(name)
@ -101,3 +102,17 @@ def fetch_uri(d, uri, destdir, srcrev=None):
os.chdir(olddir)
return ret
def run_editor(fn):
if isinstance(fn, basestring):
params = '"%s"' % fn
else:
params = ''
for fnitem in fn:
params += ' "%s"' % fnitem
editor = os.getenv('VISUAL', os.getenv('EDITOR', 'vi'))
try:
return subprocess.check_call('%s %s' % (editor, params), shell=True)
except OSError as exc:
logger.error("Execution of editor '%s' failed: %s", editor, exc)
return 1