diff options
author | sbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-26 02:34:17 +0000 |
---|---|---|
committer | sbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-26 02:34:17 +0000 |
commit | a84f903a92e5f3dfeed702b39048fbb362f79ac1 (patch) | |
tree | 9ea17869ef351e791848154212ff40d909fbb809 /native_client_sdk | |
parent | cd5c280ae002a723ee6bd8a6ef0103af0ac9c77d (diff) | |
download | chromium_src-a84f903a92e5f3dfeed702b39048fbb362f79ac1.zip chromium_src-a84f903a92e5f3dfeed702b39048fbb362f79ac1.tar.gz chromium_src-a84f903a92e5f3dfeed702b39048fbb362f79ac1.tar.bz2 |
[NaCl SDK] Add keyboard interrupt handlers for python scripts
This means that users (and developers) who hit ctrl-C
while running out scripts don't see ugly python backtraces
and get exposed to implementation details.
Also, fix inconsisency in download.py regarding the progess
callback.
BUG=None
Review URL: https://chromiumcodereview.appspot.com/16022005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202335 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'native_client_sdk')
10 files changed, 59 insertions, 26 deletions
diff --git a/native_client_sdk/src/build_tools/build_projects.py b/native_client_sdk/src/build_tools/build_projects.py index e84be60..245c40e 100755 --- a/native_client_sdk/src/build_tools/build_projects.py +++ b/native_client_sdk/src/build_tools/build_projects.py @@ -247,4 +247,7 @@ def main(args): if __name__ == '__main__': - sys.exit(main(sys.argv)) + try: + sys.exit(main(sys.argv)) + except KeyboardInterrupt: + buildbot_common.ErrorExit('%s: interrupted' % os.path.basename(sys.argv[0])) diff --git a/native_client_sdk/src/build_tools/build_sdk.py b/native_client_sdk/src/build_tools/build_sdk.py index 1577d1c..5b79353 100755 --- a/native_client_sdk/src/build_tools/build_sdk.py +++ b/native_client_sdk/src/build_tools/build_sdk.py @@ -967,4 +967,7 @@ def main(args): if __name__ == '__main__': - sys.exit(main(sys.argv)) + try: + sys.exit(main(sys.argv)) + except KeyboardInterrupt: + buildbot_common.ErrorExit('build_sdk: interrupted') diff --git a/native_client_sdk/src/build_tools/buildbot_run.py b/native_client_sdk/src/build_tools/buildbot_run.py index cf53bc1..f5e4ba5 100755 --- a/native_client_sdk/src/build_tools/buildbot_run.py +++ b/native_client_sdk/src/build_tools/buildbot_run.py @@ -48,4 +48,7 @@ def main(args): if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) + try: + sys.exit(main(sys.argv[1:])) + except KeyboardInterrupt: + buildbot_common.ErrorExit('buildbot_run: interrupted') diff --git a/native_client_sdk/src/build_tools/sdk_tools/download.py b/native_client_sdk/src/build_tools/sdk_tools/download.py index 4f2cb3b..d3da5bb 100644 --- a/native_client_sdk/src/build_tools/sdk_tools/download.py +++ b/native_client_sdk/src/build_tools/sdk_tools/download.py @@ -25,7 +25,7 @@ def UrlOpen(url): return url_opener.open(request) -def MakeProgressFunction(file_size=0): +def MakeProgressFunction(file_size): # An inner function can only read nonlocal variables, not assign them. We can # work around this by using a list of one element. dots = [0] @@ -33,12 +33,12 @@ def MakeProgressFunction(file_size=0): '''Returns a progress function based on a known file size''' if progress == 0: sys.stdout.write('|%s|\n' % ('=' * 48)) + elif progress == -1: + sys.stdout.write('\n') else: new_dots = progress * 50 / file_size - dots[0] sys.stdout.write('.' * new_dots) dots[0] += new_dots - if progress == file_size: - sys.stdout.write('\n') sys.stdout.flush() return ShowKnownProgress @@ -53,8 +53,9 @@ def DownloadAndComputeHash(from_stream, to_stream=None, progress_func=None): provided. progress_func: [optional] A function used to report download progress. If provided, progress_func is called with progress=0 at the - beginning of the download, periodically with progress=1 - during the download, and progress=100 at the end. + beginning of the download, periodically with progress>0 + (== number of bytes read do far) during the download, and + progress=-1 at the end or if the download was aborted. Return A tuple (sha1, size) where sha1 is a sha1-hash for the archive data and @@ -67,16 +68,17 @@ def DownloadAndComputeHash(from_stream, to_stream=None, progress_func=None): sha1_hash = hashlib.sha1() size = 0 - progress_func(progress=0) - while(1): - data = from_stream.read(32768) - if not data: - break - sha1_hash.update(data) - size += len(data) - if to_stream: - to_stream.write(data) - progress_func(size) - - progress_func(progress=100) + try: + progress_func(progress=0) + while True: + data = from_stream.read(32768) + if not data: + break + sha1_hash.update(data) + size += len(data) + if to_stream: + to_stream.write(data) + progress_func(size) + finally: + progress_func(progress=-1) return sha1_hash.hexdigest(), size diff --git a/native_client_sdk/src/build_tools/sdk_tools/sdk_update.py b/native_client_sdk/src/build_tools/sdk_tools/sdk_update.py index e421d58..4abd47a 100755 --- a/native_client_sdk/src/build_tools/sdk_tools/sdk_update.py +++ b/native_client_sdk/src/build_tools/sdk_tools/sdk_update.py @@ -112,4 +112,7 @@ def main(): if __name__ == '__main__': - sys.exit(main()) + try: + sys.exit(main()) + except KeyboardInterrupt: + sys.exit(1) diff --git a/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py b/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py index f763b26..a707654 100755 --- a/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py +++ b/native_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py @@ -425,3 +425,6 @@ if __name__ == '__main__': except Error as e: logging.error(str(e)) sys.exit(1) + except KeyboardInterrupt: + sys.stderr.write('naclsdk: interrupted\n') + sys.exit(1) diff --git a/native_client_sdk/src/build_tools/test_sdk.py b/native_client_sdk/src/build_tools/test_sdk.py index 34845e7..6c065a7 100755 --- a/native_client_sdk/src/build_tools/test_sdk.py +++ b/native_client_sdk/src/build_tools/test_sdk.py @@ -95,4 +95,7 @@ def main(args): if __name__ == '__main__': - sys.exit(main(sys.argv)) + try: + sys.exit(main(sys.argv)) + except KeyboardInterrupt: + buildbot_common.ErrorExit('test_sdk: interrupted') diff --git a/native_client_sdk/src/tools/create_nmf.py b/native_client_sdk/src/tools/create_nmf.py index 5c9d270..6ca83ab 100755 --- a/native_client_sdk/src/tools/create_nmf.py +++ b/native_client_sdk/src/tools/create_nmf.py @@ -635,6 +635,12 @@ def main(argv): if len(args) < 1: raise Error('No nexe files specified. See --help for more info') + for filename in args: + if not os.path.exists(filename): + raise Error('Input file not found: %s' % filename) + if not os.path.isfile(filename): + raise Error('Input is not a file: %s' % filename) + canonicalized = ParseExtraFiles(options.extra_files, sys.stderr) if canonicalized is None: parser.error('Bad --extra-files (-x) argument syntax') @@ -684,4 +690,7 @@ if __name__ == '__main__': except Error, e: sys.stderr.write('%s: %s\n' % (os.path.basename(__file__), e)) rtn = 1 + except KeyboardInterrupt: + sys.stderr.write('%s: interrupted\n' % os.path.basename(__file__)) + rtn = 1 sys.exit(rtn) diff --git a/native_client_sdk/src/tools/oshelpers.py b/native_client_sdk/src/tools/oshelpers.py index 2ae8c4a..e73f5cf 100755 --- a/native_client_sdk/src/tools/oshelpers.py +++ b/native_client_sdk/src/tools/oshelpers.py @@ -525,12 +525,17 @@ def main(args): print 'No command specified' print 'Available commands: %s' % ' '.join(FuncMap) return 1 - func = FuncMap.get(args[0]) + func_name = args[0] + func = FuncMap.get(func_name) if not func: - print 'Do not recognize command: ' + args[0] + print 'Do not recognize command: %s' % func_name print 'Available commands: %s' % ' '.join(FuncMap) return 1 - return func(args[1:]) + try: + return func(args[1:]) + except KeyboardInterrupt: + print '%s: interrupted' % func_name + return 1 if __name__ == '__main__': sys.exit(main(sys.argv[1:])) diff --git a/native_client_sdk/src/tools/tests/oshelpers_test.py b/native_client_sdk/src/tools/tests/oshelpers_test.py index cb826c8..2d7a07a 100755 --- a/native_client_sdk/src/tools/tests/oshelpers_test.py +++ b/native_client_sdk/src/tools/tests/oshelpers_test.py @@ -82,7 +82,6 @@ class TestZip(unittest.TestCase): def GetZipInfo(self, path): return self.zipfile.getinfo(oshelpers.OSMakeZipPath(path)) - def testNothingToDo(self): self.assertRaises(subprocess.CalledProcessError, self.RunZip, self.zipname, 'nonexistent_file') |