Index: third_party/logilab/common/shellutils.py |
diff --git a/third_party/logilab/common/shellutils.py b/third_party/logilab/common/shellutils.py |
index 4e689560bb10b19a3475a7b094ba678a4be4a84f..c713913502d145d1ad4858d62118443f7d80e1bc 100644 |
--- a/third_party/logilab/common/shellutils.py |
+++ b/third_party/logilab/common/shellutils.py |
@@ -1,4 +1,4 @@ |
-# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
+# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
# |
# This file is part of logilab-common. |
@@ -18,9 +18,6 @@ |
"""shell/term utilities, useful to write some python scripts instead of shell |
scripts. |
""" |
- |
-from __future__ import print_function |
- |
__docformat__ = "restructuredtext en" |
import os |
@@ -34,15 +31,11 @@ import fnmatch |
import errno |
import string |
import random |
-import subprocess |
from os.path import exists, isdir, islink, basename, join |
-from six import string_types |
-from six.moves import range, input as raw_input |
- |
from logilab.common import STD_BLACKLIST, _handle_blacklist |
+from logilab.common.compat import raw_input |
from logilab.common.compat import str_to_bytes |
-from logilab.common.deprecation import deprecated |
try: |
from logilab.common.proc import ProcInfo, NoSuchProcess |
@@ -120,7 +113,7 @@ def mv(source, destination, _action=shutil.move): |
destination = join(destination, basename(source)) |
try: |
_action(source, destination) |
- except OSError as ex: |
+ except OSError, ex: |
raise OSError('Unable to move %r to %r (%s)' % ( |
source, destination, ex)) |
@@ -166,7 +159,7 @@ def find(directory, exts, exclude=False, blacklist=STD_BLACKLIST): |
:return: |
the list of all matching files |
""" |
- if isinstance(exts, string_types): |
+ if isinstance(exts, basestring): |
exts = (exts,) |
if exclude: |
def match(filename, exts): |
@@ -231,19 +224,20 @@ def unzip(archive, destdir): |
outfile.write(zfobj.read(name)) |
outfile.close() |
- |
class Execute: |
"""This is a deadlock safe version of popen2 (no stdin), that returns |
an object with errorlevel, out and err. |
""" |
def __init__(self, command): |
- cmd = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
- self.out, self.err = cmd.communicate() |
- self.status = os.WEXITSTATUS(cmd.returncode) |
- |
-Execute = deprecated('Use subprocess.Popen instead')(Execute) |
- |
+ outfile = tempfile.mktemp() |
+ errfile = tempfile.mktemp() |
+ self.status = os.system("( %s ) >%s 2>%s" % |
+ (command, outfile, errfile)) >> 8 |
+ self.out = open(outfile, "r").read() |
+ self.err = open(errfile, "r").read() |
+ os.remove(outfile) |
+ os.remove(errfile) |
def acquire_lock(lock_file, max_try=10, delay=10, max_delay=3600): |
"""Acquire a lock represented by a file on the file system |
@@ -259,7 +253,7 @@ def acquire_lock(lock_file, max_try=10, delay=10, max_delay=3600): |
os.write(fd, str_to_bytes(str(os.getpid())) ) |
os.close(fd) |
return True |
- except OSError as e: |
+ except OSError, e: |
if e.errno == errno.EEXIST: |
try: |
fd = open(lock_file, "r") |
@@ -321,22 +315,9 @@ class ProgressBar(object): |
text = property(_get_text, _set_text, _del_text) |
- def update(self, offset=1, exact=False): |
- """Move FORWARD to new cursor position (cursor will never go backward). |
- |
- :offset: fraction of ``size`` |
- |
- :exact: |
- |
- - False: offset relative to current cursor position if True |
- - True: offset as an asbsolute position |
- |
- """ |
- if exact: |
- self._current = offset |
- else: |
- self._current += offset |
- |
+ def update(self): |
+ """Update the progression bar.""" |
+ self._current += 1 |
progress = int((float(self._current)/float(self._total))*self._size) |
if progress > self._progress: |
self._progress = progress |
@@ -344,7 +325,7 @@ class ProgressBar(object): |
def refresh(self): |
"""Refresh the progression bar display.""" |
- self._stream.write(self._fstr % ('=' * min(self._progress, self._size)) ) |
+ self._stream.write(self._fstr % ('.' * min(self._progress, self._size)) ) |
if self._last_text_write_size or self._current_text: |
template = ' %%-%is' % (self._last_text_write_size) |
text = self._current_text |
@@ -431,7 +412,7 @@ class RawInput(object): |
if self._print: |
self._print(msg) |
else: |
- print(msg) |
+ print msg |
tries -= 1 |
raise Exception('unable to get a sensible answer') |
@@ -457,6 +438,6 @@ def getlogin(): |
def generate_password(length=8, vocab=string.ascii_letters + string.digits): |
"""dumb password generation function""" |
pwd = '' |
- for i in range(length): |
+ for i in xrange(length): |
pwd += random.choice(vocab) |
return pwd |