|
5 | 5 | # the BSD License: http://www.opensource.org/licenses/bsd-license.php
|
6 | 6 |
|
7 | 7 | import os, sys
|
| 8 | +import tempfile |
8 | 9 | from util import (
|
9 | 10 | LazyMixin,
|
10 | 11 | stream_copy
|
@@ -234,7 +235,15 @@ def _set_cache_(self, attr):
|
234 | 235 | if attr == '_version_info':
|
235 | 236 | # We only use the first 4 numbers, as everthing else could be strings in fact (on windows)
|
236 | 237 | version_numbers = self._call_process('version').split(' ')[2]
|
237 |
| - self._version_info = tuple(int(n) for n in version_numbers.split('.')[:4]) |
| 238 | + ver_list = version_numbers.split('.') |
| 239 | + version_info = list() |
| 240 | + for n_str in ver_list: |
| 241 | + try: |
| 242 | + n_int = int(n_str) |
| 243 | + version_info.append(n_int) |
| 244 | + except ValueError: |
| 245 | + pass |
| 246 | + self._version_info = tuple(n for n in version_info) |
238 | 247 | else:
|
239 | 248 | super(Git, self)._set_cache_(attr)
|
240 | 249 | #END handle version info
|
@@ -328,19 +337,30 @@ def execute(self, command,
|
328 | 337 | cwd = os.getcwd()
|
329 | 338 | else:
|
330 | 339 | cwd=self._working_dir
|
331 |
| - |
| 340 | + |
| 341 | + if as_process: |
| 342 | + temp_file_err = tempfile.TemporaryFile() |
| 343 | + temp_file_out = tempfile.TemporaryFile() |
| 344 | + stderr_pipe=temp_file_err.fileno() |
| 345 | + stdout_pipe=temp_file_out.fileno() |
| 346 | + else: |
| 347 | + stderr_pipe=PIPE |
| 348 | + stdout_pipe=PIPE |
| 349 | + |
332 | 350 | # Start the process
|
333 | 351 | proc = Popen(command,
|
334 |
| - cwd=cwd, |
335 |
| - stdin=istream, |
336 |
| - stderr=PIPE, |
337 |
| - stdout=PIPE, |
338 |
| - close_fds=(os.name=='posix'),# unsupported on linux |
339 |
| - **subprocess_kwargs |
340 |
| - ) |
| 352 | + cwd=cwd, |
| 353 | + stdin=istream, |
| 354 | + stderr=stderr_pipe, |
| 355 | + stdout=stdout_pipe, |
| 356 | + close_fds=(os.name=='posix'),# unsupported on linux |
| 357 | + **subprocess_kwargs |
| 358 | + ) |
341 | 359 | if as_process:
|
| 360 | + proc.stderr = temp_file_err |
| 361 | + proc.stdout = temp_file_out |
342 | 362 | return self.AutoInterrupt(proc, command)
|
343 |
| - |
| 363 | + |
344 | 364 | # Wait for the process to return
|
345 | 365 | status = 0
|
346 | 366 | stdout_value = ''
|
|
0 commit comments