summaryrefslogtreecommitdiffstats
path: root/native_client_sdk
diff options
context:
space:
mode:
authorsbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-26 02:34:17 +0000
committersbc@chromium.org <sbc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-26 02:34:17 +0000
commita84f903a92e5f3dfeed702b39048fbb362f79ac1 (patch)
tree9ea17869ef351e791848154212ff40d909fbb809 /native_client_sdk
parentcd5c280ae002a723ee6bd8a6ef0103af0ac9c77d (diff)
downloadchromium_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')
-rwxr-xr-xnative_client_sdk/src/build_tools/build_projects.py5
-rwxr-xr-xnative_client_sdk/src/build_tools/build_sdk.py5
-rwxr-xr-xnative_client_sdk/src/build_tools/buildbot_run.py5
-rw-r--r--native_client_sdk/src/build_tools/sdk_tools/download.py36
-rwxr-xr-xnative_client_sdk/src/build_tools/sdk_tools/sdk_update.py5
-rwxr-xr-xnative_client_sdk/src/build_tools/sdk_tools/sdk_update_main.py3
-rwxr-xr-xnative_client_sdk/src/build_tools/test_sdk.py5
-rwxr-xr-xnative_client_sdk/src/tools/create_nmf.py9
-rwxr-xr-xnative_client_sdk/src/tools/oshelpers.py11
-rwxr-xr-xnative_client_sdk/src/tools/tests/oshelpers_test.py1
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')