]> git.ipfire.org Git - pakfire.git/commitdiff
Fix download information.
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 21 Jul 2011 13:44:10 +0000 (15:44 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 21 Jul 2011 13:44:10 +0000 (15:44 +0200)
pakfire/builder.py
pakfire/packages/util.py
pakfire/transaction.py
pakfire/util.py
po/pakfire.pot

index 72fdd9093ea35d9a0b4d3d553f0f74d9869ccb51..b25f2f631638793f07fe4125f533254eb53e15a2 100644 (file)
@@ -77,8 +77,7 @@ class Builder(object):
                        self.log.info(line % logdata)
 
                # Create pakfire instance.
-               self.pakfire = base.Pakfire("builder", distro_config=distro_config,
-                       **pakfire_args)
+               self.pakfire = base.Pakfire(distro_config=distro_config, **pakfire_args)
                self.distro = self.pakfire.distro
                self.path = self.pakfire.path
 
index 4a00630d1ff5eb0e1d47056f8968fc7dfc93a29c..bee2ccce41b40334b04d451dac5979f112ead37b 100644 (file)
@@ -71,14 +71,20 @@ def text_wrap(s, length=65):
        return [" ".join(l) for l in t]
 
 def format_size(s):
-       units = ("B", "k", "M", "G", "T")
+       units = (" ", "k", "M", "G", "T")
        unit = 0
 
        while s >= 1024 and unit < len(units):
                s /= 1024
                unit += 1
 
-       return "%d%s" % (int(s), units[unit])
+       return "%d %s" % (int(s), units[unit])
+
+def format_time(s):
+       return "%02d:%02d" % (s // 60, s % 60)
+
+def format_speed(s):
+       return "%sB/s" % format_size(s)
 
 def calc_hash1(filename=None, data=None):
        h = hashlib.sha1()
index 60d785eb528099f5e3ffb4f9cc88b21f4dd87799..79f767e9915a33d30ba395b63a85c19bab39887b 100644 (file)
@@ -4,6 +4,7 @@ import logging
 import os
 import progressbar
 import sys
+import time
 
 import packages
 import satsolver
@@ -204,13 +205,46 @@ class Transaction(object):
                return [a for a in self.actions if a.needs_download]
 
        def download(self):
-               downloads = self.downloads
+               # Get all download actions as a list.
+               downloads = [d for d in self.downloads]
+               downloads.sort()
+
+               # If there are no downloads, we can just stop here.
+               if not downloads:
+                       return
+
+               logging.info(_("Downloading packages:"))
+               time_start = time.time()
+
+               # Calculate downloadsize.
+               download_size = 0
+               for action in downloads:
+                       download_size += action.pkg.size
 
                i = 0
-               for action in self.actions:
+               for action in downloads:
                        i += 1
-
-                       action.download(text="(%02d/%02d): " % (i, len(downloads)))
+                       action.download(text="(%d/%d): " % (i, len(downloads)))
+
+               # Write an empty line to the console when there have been any downloads.
+               width, height = util.terminal_size()
+
+               # Print a nice line.
+               logging.info("-" * width)
+
+               # Format and calculate download information.
+               time_stop = time.time()
+               download_time = time_stop - time_start
+               download_speed = download_size / download_time
+               download_speed = util.format_speed(download_speed)
+               download_size = util.format_size(download_size)
+               download_time = util.format_time(download_time)
+
+               line = _("%s | %-5sB     %s     ") % \
+                       (download_speed, download_size, download_time)
+               line = " " * (width - len(line)) + line
+               logging.info(line)
+               logging.info("")
 
        def dump_pkg(self, pkg):
                ret = []
index d452f20d5460bde9f95e962f8f7883b8961df839..2c263a8ff07ae10c2d4c0b421508a0c3272f24ab 100644 (file)
@@ -1,15 +1,18 @@
 #!/usr/bin/python
 
+import fcntl
 import os
 import progressbar
 import random
 import shutil
 import string
+import struct
 import sys
+import termios
 import time
 
 from errors import Error
-from packages.util import calc_hash1, format_size
+from packages.util import calc_hash1, format_size, format_speed, format_time
 from i18n import _
 
 def cli_is_interactive():
@@ -92,3 +95,30 @@ def rm(path, *args, **kargs):
                                os.system("chattr -R -i %s" % path)
                        else:
                                raise
+
+def ioctl_GWINSZ(fd):
+       try:
+               cr = struct.unpack("hh", fcntl.ioctl(fd, termios.TIOCGWINSZ, "1234"))
+       except:
+               return None
+
+       return cr
+
+def terminal_size():
+       cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
+
+       if not cr:
+               try:
+                       fd = os.open(os.ctermid(), os.O_RDONLY)
+                       cr = ioctl_GWINSZ(fd)
+                       os.close(fd)
+               except:
+                       pass
+
+       if not cr:
+               try:
+                       cr = (os.environ['LINES'], os.environ['COLUMNS'])
+               except:
+                       cr = (25, 80)
+
+       return int(cr[1]), int(cr[0])
index d91bbcd5f6c740f85caccadd68ecb271b0109970..6c597ecb13f9e094b25a32c9a9114c282c3c293c 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-07-21 14:50+0200\n"
+"POT-Creation-Date: 2011-07-21 15:40+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../pakfire/builder.py:247
+#: ../pakfire/builder.py:246
 #, python-format
 msgid "Extracting: %s (source)"
 msgstr ""
@@ -130,7 +130,7 @@ msgstr ""
 msgid "Cleanup all temporary files."
 msgstr ""
 
-#: ../pakfire/cli.py:234 ../pakfire/transaction.py:248
+#: ../pakfire/cli.py:234 ../pakfire/transaction.py:281
 msgid "Repository"
 msgstr ""
 
@@ -238,11 +238,11 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
-#: ../pakfire/packages/base.py:70 ../pakfire/transaction.py:247
+#: ../pakfire/packages/base.py:70 ../pakfire/transaction.py:280
 msgid "Arch"
 msgstr ""
 
-#: ../pakfire/packages/base.py:71 ../pakfire/transaction.py:247
+#: ../pakfire/packages/base.py:71 ../pakfire/transaction.py:280
 msgid "Version"
 msgstr ""
 
@@ -250,7 +250,7 @@ msgstr ""
 msgid "Release"
 msgstr ""
 
-#: ../pakfire/packages/base.py:73 ../pakfire/transaction.py:248
+#: ../pakfire/packages/base.py:73 ../pakfire/transaction.py:281
 msgid "Size"
 msgstr ""
 
@@ -318,78 +318,87 @@ msgstr ""
 msgid "Loading installed packages"
 msgstr ""
 
-#: ../pakfire/transaction.py:103
+#: ../pakfire/transaction.py:104
 #, python-format
 msgid "Extracting: %s"
 msgstr ""
 
-#: ../pakfire/transaction.py:106
+#: ../pakfire/transaction.py:107
 #, python-format
 msgid "Installing: %s"
 msgstr ""
 
-#: ../pakfire/transaction.py:108
+#: ../pakfire/transaction.py:109
 #, python-format
 msgid "Reinstalling: %s"
 msgstr ""
 
-#: ../pakfire/transaction.py:110
+#: ../pakfire/transaction.py:111
 #, python-format
 msgid "Updating: %s"
 msgstr ""
 
-#: ../pakfire/transaction.py:112
+#: ../pakfire/transaction.py:113
 #, python-format
 msgid "Downgrading: %s"
 msgstr ""
 
-#: ../pakfire/transaction.py:129
+#: ../pakfire/transaction.py:130
 #, python-format
 msgid "Removing: %s"
 msgstr ""
 
-#: ../pakfire/transaction.py:247
+#: ../pakfire/transaction.py:216
+msgid "Downloading packages:"
+msgstr ""
+
+#: ../pakfire/transaction.py:243
+#, python-format
+msgid "%s | %-5sB     %s     "
+msgstr ""
+
+#: ../pakfire/transaction.py:280
 msgid "Package"
 msgstr ""
 
-#: ../pakfire/transaction.py:252
+#: ../pakfire/transaction.py:285
 msgid "Installing:"
 msgstr ""
 
-#: ../pakfire/transaction.py:253
+#: ../pakfire/transaction.py:286
 msgid "Reinstalling:"
 msgstr ""
 
-#: ../pakfire/transaction.py:254
+#: ../pakfire/transaction.py:287
 msgid "Updating:"
 msgstr ""
 
-#: ../pakfire/transaction.py:255
+#: ../pakfire/transaction.py:288
 msgid "Downgrading:"
 msgstr ""
 
-#: ../pakfire/transaction.py:256
+#: ../pakfire/transaction.py:289
 msgid "Removing:"
 msgstr ""
 
-#: ../pakfire/transaction.py:262
+#: ../pakfire/transaction.py:295
 msgid "Transaction Summary"
 msgstr ""
 
-#: ../pakfire/transaction.py:269
+#: ../pakfire/transaction.py:302
 msgid "package"
 msgstr ""
 
-#: ../pakfire/transaction.py:275
+#: ../pakfire/transaction.py:308
 #, python-format
 msgid "Total download size: %s"
 msgstr ""
 
-#: ../pakfire/transaction.py:284
+#: ../pakfire/transaction.py:317
 msgid "Is this okay?"
 msgstr ""
 
-#: ../pakfire/util.py:36
+#: ../pakfire/util.py:39
 #, python-format
 msgid "%s [y/N]"
 msgstr ""