diff options
author | Brian C. Lane <bcl@redhat.com> | 2012-11-01 14:21:49 -0700 |
---|---|---|
committer | Brian C. Lane <bcl@redhat.com> | 2012-11-02 09:18:46 -0700 |
commit | 3150af197f436e53a4bf256fac0dee03820c7f87 (patch) | |
tree | 6727779c05c7a85256c0d0c815da669e3409e5a1 /pyanaconda/packaging/livepayload.py | |
parent | c41d3ed4719cdba4ace604ce657018fc880f5a4c (diff) | |
download | anaconda-3150af197f436e53a4bf256fac0dee03820c7f87.tar.gz anaconda-3150af197f436e53a4bf256fac0dee03820c7f87.tar.xz anaconda-3150af197f436e53a4bf256fac0dee03820c7f87.zip |
Add progress percentage info to liveinst
This adds a thread that uses os.statvfs to monitor the amount data
that has been copied to the destination mountpoints.
Diffstat (limited to 'pyanaconda/packaging/livepayload.py')
-rw-r--r-- | pyanaconda/packaging/livepayload.py | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/pyanaconda/packaging/livepayload.py b/pyanaconda/packaging/livepayload.py index e47f46f78..8de325870 100644 --- a/pyanaconda/packaging/livepayload.py +++ b/pyanaconda/packaging/livepayload.py @@ -31,6 +31,8 @@ """ import os import stat +from time import sleep +from threading import Lock from pyanaconda import isys from . import * @@ -46,6 +48,7 @@ log = logging.getLogger("anaconda") from pyanaconda.errors import * from pyanaconda import progress from pyanaconda.storage.size import Size +from pyanaconda.threads import threadMgr, AnacondaThread import gettext _ = lambda x: gettext.ldgettext("anaconda", x) @@ -66,10 +69,34 @@ class LiveImagePayload(ImagePayload): def preInstall(self, packages=None, groups=None): """ Perform pre-installation tasks. """ super(LiveImagePayload, self).preInstall(packages=packages, groups=groups) - progress.send_message(_("Installing software")) + progress.send_message(_("Installing software") + (" %d%%") % (0,)) + + def progress(self): + """Monitor the amount of disk space used on the target and source and + update the hub's progress bar. + """ + source = os.statvfs(INSTALL_TREE) + source_size = source.f_frsize * (source.f_blocks - source.f_bfree) + mountpoints = self.storage.mountpoints.copy() + while self.pct < 100: + dest_size = 0 + for mnt in mountpoints: + mnt_stat = os.statvfs(ROOT_PATH+mnt) + dest_size += mnt_stat.f_frsize * (mnt_stat.f_blocks - mnt_stat.f_bfree) + + with self.pct_lock: + self.pct = int(100 * dest_size / source_size) + + progress.send_message(_("Installing software") + (" %d%%") % (min(100,self.pct),)) + sleep(0.777) def install(self): """ Install the payload. """ + self.pct_lock = Lock() + self.pct = 0 + threadMgr.add(AnacondaThread(name="AnaLiveProgressThread", + target=self.progress)) + cmd = "rsync" # preserve: permissions, owners, groups, ACL's, xattrs, times, # symlinks, hardlinks @@ -91,8 +118,16 @@ class LiveImagePayload(ImagePayload): if errorHandler.cb(exn) == ERROR_RAISE: raise exn + # Wait for progress thread to finish + with self.pct_lock: + self.pct = 100 + progressThread = threadMgr.get("AnaLiveProgressThread") + if progressThread: + progressThread.join() + def postInstall(self): """ Perform post-installation tasks. """ + progress.send_message(_("Performing post-install setup tasks")) isys.umount(INSTALL_TREE, removeDir=True) super(LiveImagePayload, self).postInstall() |