mirror of
				https://github.com/ARM-software/devlib.git
				synced 2025-11-04 16:01:20 +00:00 
			
		
		
		
	@@ -4,6 +4,7 @@ import time
 | 
			
		||||
import logging
 | 
			
		||||
import posixpath
 | 
			
		||||
import subprocess
 | 
			
		||||
import tarfile
 | 
			
		||||
import tempfile
 | 
			
		||||
import threading
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
@@ -281,6 +282,33 @@ class Target(object):
 | 
			
		||||
    def pull(self, source, dest, timeout=None):
 | 
			
		||||
        return self.conn.pull(source, dest, timeout=timeout)
 | 
			
		||||
 | 
			
		||||
    def get_directory(self, source_dir, dest):
 | 
			
		||||
        """ Pull a directory from the device, after compressing dir """
 | 
			
		||||
        # Create all file names
 | 
			
		||||
        tar_file_name = source_dir.lstrip(self.path.sep).replace(self.path.sep, '.')
 | 
			
		||||
        # Host location of dir
 | 
			
		||||
        outdir = os.path.join(dest, tar_file_name)
 | 
			
		||||
        # Host location of archive
 | 
			
		||||
        tar_file_name  = '{}.tar'.format(tar_file_name)
 | 
			
		||||
        tempfile = os.path.join(dest, tar_file_name)
 | 
			
		||||
 | 
			
		||||
        # Does the folder exist?
 | 
			
		||||
        self.execute('ls -la {}'.format(source_dir))
 | 
			
		||||
        # Try compressing the folder
 | 
			
		||||
        try:
 | 
			
		||||
            self.execute('{} tar -cvf {} {}'.format(self.busybox, tar_file_name,
 | 
			
		||||
                                                     source_dir))
 | 
			
		||||
        except TargetError:
 | 
			
		||||
            self.logger.debug('Failed to run tar command on target! ' \
 | 
			
		||||
                              'Not pulling directory {}'.format(source_dir))
 | 
			
		||||
        # Pull the file
 | 
			
		||||
        os.mkdir(outdir)
 | 
			
		||||
        self.pull(tar_file_name, tempfile )
 | 
			
		||||
        # Decompress
 | 
			
		||||
        f = tarfile.open(tempfile, 'r')
 | 
			
		||||
        f.extractall(outdir)
 | 
			
		||||
        os.remove(tempfile)
 | 
			
		||||
 | 
			
		||||
    # execution
 | 
			
		||||
 | 
			
		||||
    def execute(self, command, timeout=None, check_exit_code=True, as_root=False):
 | 
			
		||||
 
 | 
			
		||||
@@ -442,11 +442,14 @@ class Gem5Connection(TelnetConnection):
 | 
			
		||||
        filename = os.path.basename(source)
 | 
			
		||||
 | 
			
		||||
        logger.debug("pull_file {} {}".format(source, filename))
 | 
			
		||||
        # writefile needs the file to be copied to be in the current working
 | 
			
		||||
        # directory so if needed, copy to the working directory
 | 
			
		||||
        # We don't check the exit code here because it is non-zero if the source
 | 
			
		||||
        # and destination are the same. The ls below will cause an error if the
 | 
			
		||||
        # file was not where we expected it to be.
 | 
			
		||||
        if os.path.dirname(source) != os.getcwd():
 | 
			
		||||
            self._gem5_shell("cat '{}' > '{}'".format(source, filename))
 | 
			
		||||
        if os.path.isabs(source):
 | 
			
		||||
            if os.path.dirname(source) != self.execute('pwd',check_exit_code=False):
 | 
			
		||||
                self._gem5_shell("cat '{}' > '{}'".format(source, filename))
 | 
			
		||||
        self._gem5_shell("sync")
 | 
			
		||||
        self._gem5_shell("ls -la {}".format(filename))
 | 
			
		||||
        logger.debug('Finished the copy in the simulator')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user