yocto-bsp: add 'edit-git-repo' input line

Add a subclassed edit box that verifies the existence of a
user-specified git repo.

Also adds a verify_git_repo() function that can be used as a basic
sanity check for local git setup.

(From meta-yocto rev: 64f1176d62ed02d7c61d32fdae11dc8b7d365603)

Signed-off-by: Tom Zanussi <tom.zanussi@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Tom Zanussi 2012-12-12 22:56:33 -06:00 committed by Richard Purdie
parent 254bf8c5d9
commit c08a4dc5eb
1 changed files with 76 additions and 0 deletions

View File

@ -37,6 +37,7 @@ from abc import ABCMeta, abstractmethod
from tags import *
import shlex
import json
import subprocess
class Line():
"""
@ -204,6 +205,45 @@ class EditBoxInputLine(InputLine):
return line
class GitRepoEditBoxInputLine(EditBoxInputLine):
"""
Base class for 'editbox' Input lines for user input of remote git
repos. This class verifies the existence and connectivity of the
specified git repo.
props:
name: example - "Load address"
msg: example - "Please enter the load address"
result:
Sets the value of the variable specified by 'name' to
whatever the user typed.
"""
def __init__(self, props, tag, lineno):
EditBoxInputLine.__init__(self, props, tag, lineno)
def gen(self, context = None):
EditBoxInputLine.gen(self, context)
name = self.props["name"]
if not name:
self.parse_error("No input 'name' property found",
self.lineno, self.line)
msg = self.props["msg"]
if not msg:
self.parse_error("No input 'msg' property found",
self.lineno, self.line)
try:
default_choice = self.props["default"]
except KeyError:
default_choice = ""
msg += " [default: " + default_choice + "]"
line = name + " = get_verified_git_repo(\"" + msg + "\"," + name + ")"
return line
class BooleanInputLine(InputLine):
"""
Base class for boolean Input lines.
@ -435,6 +475,40 @@ def default(input_str, name):
return input_str.strip()
def verify_git_repo(giturl):
"""
Verify that the giturl passed in can be connected to. This can be
used as a check for the existence of the given repo and/or basic
git remote connectivity.
Returns True if the connection was successful, fals otherwise
"""
if not giturl:
return False
gitcmd = "git ls-remote %s > /dev/null 2>&1" % (giturl)
rc = subprocess.call(gitcmd, shell=True)
if rc == 0:
return True
return False
def get_verified_git_repo(input_str, name):
"""
Return git repo if verified, otherwise loop forever asking user
for filename.
"""
msg = input_str.strip() + " "
giturl = default(raw_input(msg), name)
while True:
if verify_git_repo(giturl):
return giturl
giturl = default(raw_input(msg), name)
def boolean(input_str, name):
"""
Return lowercase version of first char in string, or value in name.
@ -649,6 +723,8 @@ class SubstrateBase(object):
return BooleanInputLine(props, tag, lineno)
if input_type == "edit":
return EditBoxInputLine(props, tag, lineno)
if input_type == "edit-git-repo":
return GitRepoEditBoxInputLine(props, tag, lineno)
elif input_type == "choicelist":
self.prev_choicelist = ChoicelistInputLine(props, tag, lineno)
return self.prev_choicelist