Exemplo n.º 1
0
 def update_total_size(self, bytes_removed):
     """Callback to update the total size cleaned"""
     context_id = self.status_bar.get_context_id('size')
     text = FileUtilities.bytes_to_human(bytes_removed)
     if 0 == bytes_removed:
         text = ""
     self.status_bar.push(context_id, text)
Exemplo n.º 2
0
def fill_memory_linux():
    """Fill unallocated memory"""
    report_free()
    allocbytes = int(physical_free() * 0.4)
    if allocbytes < 1024:
        return
    bytes_str = FileUtilities.bytes_to_human(allocbytes)
    print "info: allocating and wiping %s (%d B) of memory" % (bytes_str, allocbytes)
    try:
        buf = '\x00' * allocbytes
    except MemoryError:
        pass
    else:
        fill_memory_linux()
        print "debug: freeing %s of memory" % bytes_str
        del buf
    report_free()
Exemplo n.º 3
0
def fill_memory_linux():
    """Fill unallocated memory"""
    report_free()
    allocbytes = int(physical_free() * 0.4)
    if allocbytes < 1024:
        return
    bytes_str = FileUtilities.bytes_to_human(allocbytes)
    print "info: allocating and wiping %s (%d B) of memory" % (bytes_str, allocbytes)
    try:
        buf = '\x00' * allocbytes
    except MemoryError:
        pass
    else:
        fill_memory_linux()
        print "debug: freeing %s of memory" % bytes_str
        del buf
    report_free()
Exemplo n.º 4
0
    def run(self):
        """Perform the main cleaning process which has these phases
        1. General cleaning
        2. Deep scan
        3. Memory
        4. Free disk space"""
        self.deepscans = {}
        # prioritize
        self.delayed_ops = []
        for operation in self.operations:
            delayables = ['free_disk_space', 'memory']
            for delayable in delayables:
                if operation not in ('system', '_gui'):
                    continue
                if delayable in self.operations[operation]:
                    i = self.operations[operation].index(delayable)
                    del self.operations[operation][i]
                    priority = 99
                    if 'free_disk_space' == delayable:
                        priority = 100
                    new_op = (priority, {operation: [delayable]})
                    self.delayed_ops.append(new_op)

        # standard operations
        for dummy in self.run_operations(self.operations):
            # yield to GTK+ idle loop
            yield True

        # run deep scan
        if self.deepscans:
            for dummy in self.run_deep_scan():
                yield dummy

        # delayed operations
        for op in sorted(self.delayed_ops):
            operation = op[1].keys()[0]
            for option_id in op[1].values()[0]:
                for ret in self.run_delayed_op(operation, option_id):
                    # yield to GTK+ idle loop
                    yield True

        # print final stats
        bytes_delete = FileUtilities.bytes_to_human(self.total_bytes)
        if self.really_delete:
            # TRANSLATORS: This refers to disk space that was
            # really recovered (in other words, not a preview)
            line = _("Disk space recovered: %s") % bytes_delete
        else:
            # TRANSLATORS: This refers to a preview (no real
            # changes were made yet)
            line = _("Disk space to be recovered: %s") % bytes_delete
        self.ui.append_text("\n%s" % line)
        if self.really_delete:
            # TRANSLATORS: This refers to the number of files really
            # deleted (in other words, not a preview).
            line = _("Files deleted: %d") % self.total_deleted
        else:
            # TRANSLATORS: This refers to the number of files that
            # would be deleted (in other words, simply a preview).
            line = _("Files to be deleted: %d") % self.total_deleted
        self.ui.append_text("\n%s" % line)
        if self.total_special > 0:
            line = _("Special operations: %d") % self.total_special
            self.ui.append_text("\n%s" % line)
        if self.total_errors > 0:
            line = _("Errors: %d") % self.total_errors
            self.ui.append_text("\n%s" % line, 'error')

        if self.really_delete:
            self.ui.update_total_size(self.total_bytes)
        self.ui.worker_done(self, self.really_delete)

        yield False
Exemplo n.º 5
0
 except SystemExit:
     pass
 except Exception, e:
     # 2 = does not exist
     # 13 = permission denied
     from errno import ENOENT, EACCES
     if not (isinstance(e, OSError) and e.errno in (ENOENT, EACCES)):
         traceback.print_exc()
     line = "%s\n" % (str(sys.exc_info()[1]))
     self.total_errors += 1
     self.ui.append_text(line, 'error')
 else:
     if None == ret:
         return
     if isinstance(ret['size'], (int, long)):
         size = FileUtilities.bytes_to_human(ret['size'])
         self.total_bytes += ret['size']
     else:
         size = "?B"
     if ret['path']:
         path = ret['path']
     else:
         path = ''
     path = path.decode('utf8', 'replace')  # for invalid encoding
     line = u"%s %s %s\n" % (ret['label'], size, path)
     self.total_deleted += ret['n_deleted']
     self.total_special += ret['n_special']
     if ret['label']:
         # the label may be a hidden operation
         # (e.g., win.shell.change.notify)
         self.ui.append_text(line)
Exemplo n.º 6
0
def report_free():
    """Report free memory"""
    bytes_free = physical_free()
    bytes_str = FileUtilities.bytes_to_human(bytes_free)
    print "debug: physical free: %s (%d B)" % \
        (bytes_str, bytes_free)
Exemplo n.º 7
0
    def run(self):
        """Perform the main cleaning process which has these phases
        1. General cleaning
        2. Deep scan
        3. Memory
        4. Free disk space"""
        self.deepscans = {}
        # prioritize
        self.delayed_ops = []
        for operation in self.operations:
            delayables = ['free_disk_space', 'memory']
            for delayable in delayables:
                if operation not in ('system', '_gui'):
                    continue
                if delayable in self.operations[operation]:
                    i = self.operations[operation].index(delayable)
                    del self.operations[operation][i]
                    priority = 99
                    if 'free_disk_space' == delayable:
                        priority = 100
                    new_op = (priority, {operation: [delayable]})
                    self.delayed_ops.append(new_op)

        # standard operations
        for dummy in self.run_operations(self.operations):
            # yield to GTK+ idle loop
            yield True

        # run deep scan
        if self.deepscans:
            for dummy in self.run_deep_scan():
                yield dummy

        # delayed operations
        for op in sorted(self.delayed_ops):
            operation = op[1].keys()[0]
            for option_id in op[1].values()[0]:
                for ret in self.run_delayed_op(operation, option_id):
                    # yield to GTK+ idle loop
                    yield True

        # print final stats
        bytes_delete = FileUtilities.bytes_to_human(self.total_bytes)
        if self.really_delete:
            # TRANSLATORS: This refers to disk space that was
            # really recovered (in other words, not a preview)
            line = _("Disk space recovered: %s") % bytes_delete
        else:
            # TRANSLATORS: This refers to a preview (no real
            # changes were made yet)
            line = _("Disk space to be recovered: %s") % bytes_delete
        self.ui.append_text("\n%s" % line)
        if self.really_delete:
            # TRANSLATORS: This refers to the number of files really
            # deleted (in other words, not a preview).
            line = _("Files deleted: %d") % self.total_deleted
        else:
            # TRANSLATORS: This refers to the number of files that
            # would be deleted (in other words, simply a preview).
            line = _("Files to be deleted: %d") % self.total_deleted
        self.ui.append_text("\n%s" % line)
        if self.total_special > 0:
            line = _("Special operations: %d") % self.total_special
            self.ui.append_text("\n%s" % line)
        if self.total_errors > 0:
            line = _("Errors: %d") % self.total_errors
            self.ui.append_text("\n%s" % line, 'error')

        if self.really_delete:
            self.ui.update_total_size(self.total_bytes)
        self.ui.worker_done(self, self.really_delete)

        yield False
Exemplo n.º 8
0
        except SystemExit:
            pass
        except Exception, e:
            # 2 = does not exist
            # 13 = permission denied
            from errno import ENOENT, EACCES
            if not (isinstance(e, OSError) and e.errno in (ENOENT, EACCES)):
                traceback.print_exc()
            line = "%s\n" % (str(sys.exc_info()[1]))
            self.total_errors += 1
            self.ui.append_text(line, 'error')
        else:
            if None == ret:
                return
            if isinstance(ret['size'], (int, long)):
                size = FileUtilities.bytes_to_human(ret['size'])
                self.total_bytes += ret['size']
            else:
                size = "?B"
            if ret['path']:
                path = ret['path']
            else:
                path = ''
            path = path.decode('utf8', 'replace')  # for invalid encoding
            line = u"%s %s %s\n" % (ret['label'], size, path)
            self.total_deleted += ret['n_deleted']
            self.total_special += ret['n_special']
            self.ui.append_text(line)

    def clean_operation(self, operation):
        """Perform a single cleaning operation"""
Exemplo n.º 9
0
            pass
        except Exception, e:
            # 2 = does not exist
            # 13 = permission denied
            from errno import ENOENT, EACCES

            if not (isinstance(e, OSError) and e.errno in (ENOENT, EACCES)):
                traceback.print_exc()
            line = "%s\n" % (str(sys.exc_info()[1]))
            self.total_errors += 1
            self.ui.append_text(line, "error")
        else:
            if None == ret:
                return
            if isinstance(ret["size"], (int, long)):
                size = FileUtilities.bytes_to_human(ret["size"])
                self.total_bytes += ret["size"]
            else:
                size = "?B"
            if ret["path"]:
                path = ret["path"]
            else:
                path = ""
            path = path.decode("utf8", "replace")  # for invalid encoding
            line = u"%s %s %s\n" % (ret["label"], size, path)
            self.total_deleted += ret["n_deleted"]
            self.total_special += ret["n_special"]
            self.ui.append_text(line)

    def clean_operation(self, operation):
        """Perform a single cleaning operation"""
Exemplo n.º 10
0
def report_free():
    """Report free memory"""
    bytes_free = physical_free()
    bytes_str = FileUtilities.bytes_to_human(bytes_free)
    print "debug: physical free: %s (%d B)" % \
        (bytes_str, bytes_free)