Merge pull request #87 from bjackman/localconnection-glob
Enhancements for LocalConnection
diff --git a/devlib/host.py b/devlib/host.py
index d830a5e..121e5b4 100644
--- a/devlib/host.py
+++ b/devlib/host.py
@@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+from glob import iglob
import os
import shutil
import subprocess
@@ -41,7 +42,12 @@
def pull(self, source, dest, timeout=None, as_root=False): # pylint: disable=unused-argument
self.logger.debug('cp {} {}'.format(source, dest))
- shutil.copy(source, dest)
+ if ('*' in source or '?' in source) and os.path.isdir(dest):
+ # Pull all files matching a wildcard expression
+ for each_source in iglob(source):
+ shutil.copy(each_source, dest)
+ else:
+ shutil.copy(source, dest)
def execute(self, command, timeout=None, check_exit_code=True, as_root=False):
self.logger.debug(command)
@@ -54,7 +60,9 @@
try:
return check_output(command, shell=True, timeout=timeout, ignore=ignore)[0]
except subprocess.CalledProcessError as e:
- raise TargetError(e)
+ message = 'Got exit code {}\nfrom: {}\nOUTPUT: {}'.format(
+ e.returncode, command, e.output)
+ raise TargetError(message)
def background(self, command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, as_root=False):
if as_root:
diff --git a/doc/connection.rst b/doc/connection.rst
index 888f626..1fd2fb5 100644
--- a/doc/connection.rst
+++ b/doc/connection.rst
@@ -25,15 +25,17 @@
Transfer a file from the host machine to the connected device.
:param source: path of to the file on the host
- :param dest: path of to the file on the connected
+ :param dest: path of to the file on the connected device.
:param timeout: timeout (in seconds) for the transfer; if the transfer does
not complete within this period, an exception will be raised.
.. method:: pull(self, source, dest, timeout=None)
- Transfer a file from the connected device to the host machine.
+ Transfer a file, or files matching a glob pattern, from the connected device
+ to the host machine.
- :param source: path of to the file on the connected device
+ :param source: path of to the file on the connected device. If ``dest`` is a
+ directory, may be a glob pattern.
:param dest: path of to the file on the host
:param timeout: timeout (in seconds) for the transfer; if the transfer does
not complete within this period, an exception will be raised.