diff options
-rw-r--r-- | morphlib/stagingarea.py | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/morphlib/stagingarea.py b/morphlib/stagingarea.py index 63d145c3..ba6fd53a 100644 --- a/morphlib/stagingarea.py +++ b/morphlib/stagingarea.py @@ -252,8 +252,8 @@ class StagingArea(object): builddir = self.builddir(source) destdir = self.destdir(source) - self.builddirname = self.relative(builddir).lstrip('/') - self.destdirname = self.relative(destdir).lstrip('/') + self.builddirname = builddir + self.destdirname = destdir self.do_mounts(setup_mounts) @@ -279,36 +279,38 @@ class StagingArea(object): kwargs['env'].update(kwargs['extra_env']) del kwargs['extra_env'] - if self.use_chroot: - cwd = kwargs.get('cwd') or '/' - if 'cwd' in kwargs: - cwd = kwargs['cwd'] - del kwargs['cwd'] - else: - cwd = '/' + cwd = kwargs.get('cwd') or '/' + if 'cwd' in kwargs: + cwd = kwargs['cwd'] + del kwargs['cwd'] + else: + cwd = '/' - do_not_mount_dirs = [os.path.join(self.dirname, d) - for d in (self.builddirname, - self.destdirname, - 'dev', 'proc', 'tmp')] + chroot_dir = self.dirname if self.use_chroot else '/' - real_argv = ['linux-user-chroot', '--chdir', cwd] - for d in morphlib.fsutils.invert_paths(os.walk(self.dirname), - do_not_mount_dirs): - if not os.path.islink(d): - real_argv += ['--mount-readonly', self.relative(d)] - real_argv += [self.dirname] + do_not_mount_dirs = [os.path.join(self.dirname, d) + for d in (self.builddirname, + self.destdirname, + 'dev', 'proc', 'tmp')] - real_argv += argv + logging.debug("Not mounting dirs %r" % do_not_mount_dirs) - try: - return self._app.runcmd(real_argv, **kwargs) - except cliapp.AppException as e: - raise cliapp.AppException('In staging area %s: running ' - 'command \'%s\' failed.' % - (self.dirname, ' '.join(argv))) - else: - return self._app.runcmd(argv, **kwargs) + real_argv = ['linux-user-chroot', '--chdir', cwd] + for d in morphlib.fsutils.invert_paths(os.walk(chroot_dir), + do_not_mount_dirs): + if not os.path.islink(d): + real_argv += ['--mount-readonly', self.relative(d)] + + real_argv += [chroot_dir] + + real_argv += argv + + try: + return self._app.runcmd(real_argv, **kwargs) + except cliapp.AppException as e: + raise cliapp.AppException('In staging area %s: running ' + 'command \'%s\' failed.' % + (self.dirname, ' '.join(argv))) def abort(self): # pragma: no cover '''Handle what to do with a staging area in the case of failure. |