-
Notifications
You must be signed in to change notification settings - Fork 123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multimanifest prep #266
Merged
carlescufi
merged 15 commits into
zephyrproject-rtos:master
from
mbolivar:multimanifest-prep
May 20, 2019
Merged
Multimanifest prep #266
Changes from 6 commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
41fbf25
tests: flatten the hierarchy
mbolivar-nordic 8d329be
tests: remove empty_config.py
mbolivar-nordic 884170e
tests: don't test pre-unification features
mbolivar-nordic 1cb9be1
tests: fixture setup optimizations
mbolivar-nordic 6dd7b53
main: fix CalledProcessError handling
mbolivar-nordic 18408dd
main.py: don't throw away tracebacks
mbolivar-nordic f98b719
manifest: demote Project remote to a kwarg
mbolivar-nordic f87254a
manifest: support explicit project URLs
mbolivar-nordic 58ee6de
manifest: demote defaults to a kwarg
mbolivar-nordic a774380
tests: add test cases for explicit project URLs
mbolivar-nordic 0d07974
manifest: project names must be unique
mbolivar-nordic ebae08f
util: add canon_path()
mbolivar-nordic 0fcdc25
tests: fix test_config.py on windows
mbolivar-nordic 781ac46
tests: conftest: use command strings exactly on Windows
mbolivar-nordic 2df535a
tests: fix test_project.py on Windows
mbolivar-nordic File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,6 +19,7 @@ | |
import shutil | ||
import sys | ||
from subprocess import CalledProcessError | ||
import tempfile | ||
import textwrap | ||
import traceback | ||
|
||
|
@@ -522,6 +523,15 @@ def get_extension_commands(): | |
return extensions | ||
|
||
|
||
def dump_traceback(): | ||
# Save the current exception to a file and return its path. | ||
fd, name = tempfile.mkstemp(prefix='west-exc-', suffix='.txt') | ||
os.close(fd) # traceback has no use for the fd | ||
with open(name, 'w') as f: | ||
traceback.print_exc(file=f) | ||
return name | ||
|
||
|
||
def main(argv=None): | ||
# Makes ANSI color escapes work on Windows, and strips them when | ||
# stdout/stderr isn't a terminal | ||
|
@@ -550,34 +560,33 @@ def main(argv=None): | |
argv = sys.argv[1:] | ||
args, unknown = parse_args(argv, extensions, topdir) | ||
|
||
for_stack_trace = 'run as "west -v {}" for a stack trace'.format( | ||
quote_sh_list(argv)) | ||
try: | ||
args.handler(args, unknown) | ||
except KeyboardInterrupt: | ||
sys.exit(0) | ||
except CalledProcessError as cpe: | ||
log.err('command exited with status {}: {}'.format( | ||
cpe.args[0], quote_sh_list(cpe.args[1]))) | ||
log.err('command exited with status {}: {}'. | ||
format(cpe.returncode, quote_sh_list(cpe.cmd))) | ||
if args.verbose: | ||
traceback.print_exc() | ||
else: | ||
log.inf(for_stack_trace) | ||
sys.exit(cpe.returncode) | ||
except ExtensionCommandError as ece: | ||
log.err('extension command', args.command, | ||
'was improperly defined and could not be run{}'. | ||
format(': ' + ece.hint if ece.hint else '')) | ||
msg = 'extension command "{}" could not be run{}.'.format( | ||
args.command, ': ' + ece.hint if ece.hint else '') | ||
if args.verbose: | ||
log.err(msg) | ||
traceback.print_exc() | ||
else: | ||
log.inf(for_stack_trace) | ||
log.err(msg, 'See {} for a traceback.'.format(dump_traceback())) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice, I like this. |
||
sys.exit(ece.returncode) | ||
except CommandContextError as cce: | ||
log.err('command', args.command, 'cannot be run in this context:', | ||
*cce.args) | ||
log.err('see {} for a traceback.'.format(dump_traceback())) | ||
sys.exit(cce.returncode) | ||
except CommandError as ce: | ||
# No need to dump_traceback() here. The command is responsible | ||
# for logging its own errors. | ||
sys.exit(ce.returncode) | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can guarantee this worked, I tested it explicitly. That said, this is the right way to do this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm confused. This change is what we discussed in previous PRs, so that users who initialize CalledProcessError with kwargs instead of positionals don't get faced with an IndexError when we try to access
cpe.args
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IOW: I know you're not asking for a change here, but you specifically asked for this change earlier :). Even though it "works" if you properly initialize CalledProcessError as the python subprocess module does, users who make their own instances won't always, as we discovered.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The change is required and I am completely happy with it. I am just saying that this old code actually worked, to my amazement :)