Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: appengine/swarming/tools/start_bot.py

Issue 1390773002: Add an assert to ensure UTF-8 locale when handling file paths. (Closed) Base URL: git@github.com:luci/luci-py.git@master
Patch Set: More fixes Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « appengine/swarming/swarming_bot/main_test.py ('k') | appengine/swarming/tools/start_servers.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Swarming Authors. All rights reserved. 2 # Copyright 2015 The Swarming Authors. All rights reserved.
3 # Use of this source code is governed by the Apache v2.0 license that can be 3 # Use of this source code is governed by the Apache v2.0 license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Starts a local bot to connect to a local server.""" 6 """Starts a local bot to connect to a local server."""
7 7
8 import glob 8 import glob
9 import os 9 import os
10 import signal 10 import signal
11 import shutil
12 import socket 11 import socket
13 import sys 12 import sys
14 import tempfile 13 import tempfile
15 import urllib 14 import urllib
16 15
17 16
18 THIS_DIR = os.path.dirname(os.path.abspath(__file__)) 17 THIS_DIR = os.path.dirname(os.path.abspath(__file__))
19 CLIENT_DIR = os.path.join(THIS_DIR, '..', '..', '..', 'client') 18 CLIENT_DIR = os.path.join(THIS_DIR, '..', '..', '..', 'client')
20 sys.path.insert(0, CLIENT_DIR) 19 sys.path.insert(0, CLIENT_DIR)
20 from third_party.depot_tools import fix_encoding
21 from utils import file_path
21 from utils import subprocess42 22 from utils import subprocess42
22 sys.path.pop(0) 23 sys.path.pop(0)
23 24
24 25
25 class LocalBot(object): 26 class LocalBot(object):
26 """A local running Swarming bot. 27 """A local running Swarming bot.
27 28
28 It creates its own temporary directory to download the zip and run tasks 29 It creates its own temporary directory to download the zip and run tasks
29 locally. 30 locally.
30 """ 31 """
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 # TODO(maruel): SIGKILL after N seconds. 72 # TODO(maruel): SIGKILL after N seconds.
72 self._proc.wait() 73 self._proc.wait()
73 except OSError: 74 except OSError:
74 pass 75 pass
75 exit_code = self._proc.returncode 76 exit_code = self._proc.returncode
76 if self._tmpdir: 77 if self._tmpdir:
77 for i in sorted(glob.glob(os.path.join(self._tmpdir, 'logs', '*.log'))): 78 for i in sorted(glob.glob(os.path.join(self._tmpdir, 'logs', '*.log'))):
78 self._read_log(i) 79 self._read_log(i)
79 if not leak: 80 if not leak:
80 try: 81 try:
81 shutil.rmtree(self._tmpdir) 82 file_path.rmtree(self._tmpdir)
82 except OSError: 83 except OSError:
83 print >> sys.stderr, 'Leaking %s' % self._tmpdir 84 print >> sys.stderr, 'Leaking %s' % self._tmpdir
84 self._tmpdir = None 85 self._tmpdir = None
85 self._proc = None 86 self._proc = None
86 return exit_code 87 return exit_code
87 88
88 def poll(self): 89 def poll(self):
89 """Polls the process to know if it exited.""" 90 """Polls the process to know if it exited."""
90 self._proc.poll() 91 self._proc.poll()
91 92
(...skipping 22 matching lines...) Expand all
114 115
115 def _read_log(self, path): 116 def _read_log(self, path):
116 try: 117 try:
117 with open(path, 'rb') as f: 118 with open(path, 'rb') as f:
118 self._logs[os.path.basename(path)] = f.read() 119 self._logs[os.path.basename(path)] = f.read()
119 except (IOError, OSError): 120 except (IOError, OSError):
120 pass 121 pass
121 122
122 123
123 def main(): 124 def main():
125 fix_encoding.fix_encoding()
124 if len(sys.argv) != 2: 126 if len(sys.argv) != 2:
125 print >> sys.stderr, 'Specify url to Swarming server' 127 print >> sys.stderr, 'Specify url to Swarming server'
126 return 1 128 return 1
127 bot = LocalBot(sys.argv[1], False) 129 bot = LocalBot(sys.argv[1], False)
128 try: 130 try:
129 bot.start() 131 bot.start()
130 bot.wait() 132 bot.wait()
131 bot.dump_log() 133 bot.dump_log()
132 except KeyboardInterrupt: 134 except KeyboardInterrupt:
133 print >> sys.stderr, '<Ctrl-C> received; stopping bot' 135 print >> sys.stderr, '<Ctrl-C> received; stopping bot'
134 finally: 136 finally:
135 exit_code = bot.stop(False) 137 exit_code = bot.stop(False)
136 return exit_code 138 return exit_code
137 139
138 140
139 if __name__ == '__main__': 141 if __name__ == '__main__':
140 sys.exit(main()) 142 sys.exit(main())
OLDNEW
« no previous file with comments | « appengine/swarming/swarming_bot/main_test.py ('k') | appengine/swarming/tools/start_servers.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698