Exemplo n.º 1
0
 def short_desc(self):
     """
     Return a short one-line description of the chain,
     suitable for log messages.
     """
     return "[%s]-[%s]" % (dup_time.timetopretty(self.start_time),
                           dup_time.timetopretty(self.end_time))
Exemplo n.º 2
0
    def __str__(self):
        """
        Return string representation, for testing purposes
        """
        set_schema = "%20s   %30s   %15s"
        l = ["-------------------------",
             _("Chain start time: ") + dup_time.timetopretty(self.start_time),
             _("Chain end time: ") + dup_time.timetopretty(self.end_time),
             _("Number of contained backup sets: %d") %
             (len(self.incset_list)+1,),
             _("Total number of contained volumes: %d") %
             (self.get_num_volumes(),),
             set_schema % (_("Type of backup set:"), _("Time:"), _("Num volumes:"))]

        for s in self.get_all_sets():
            if s.time:
                type = _("Full")
                time = s.time
            else:
                type = _("Incremental")
                time = s.end_time
            l.append(set_schema % (type, dup_time.timetopretty(time), len(s)))

        l.append("-------------------------")
        return "\n".join(l)
Exemplo n.º 3
0
 def add_inc(self, incset):
     u"""
     Add incset to self.  Return False if incset does not match
     """
     if self.end_time == incset.start_time:
         self.incset_list.append(incset)
     else:
         if (self.incset_list
                 and incset.start_time == self.incset_list[-1].start_time
                 and incset.end_time > self.incset_list[-1].end_time):
             log.Info(_(u"Preferring Backupset over previous one!"))
             self.incset_list[-1] = incset
         else:
             log.Info(
                 _(u"Ignoring incremental Backupset (start_time: %s; needed: %s)"
                   ) % (dup_time.timetopretty(incset.start_time),
                        dup_time.timetopretty(self.end_time)))
             return False
     self.end_time = incset.end_time
     log.Info(
         _(u"Added incremental Backupset (start_time: %s / end_time: %s)") %
         (dup_time.timetopretty(
             incset.start_time), dup_time.timetopretty(incset.end_time)))
     assert self.end_time
     return True
Exemplo n.º 4
0
 def short_desc(self):
     """
     Return a short one-line description of the chain,
     suitable for log messages.
     """
     return "[%s]-[%s]" % (dup_time.timetopretty(self.start_time),
                   dup_time.timetopretty(self.end_time))
Exemplo n.º 5
0
    def __str__(self):
        """
        Return string representation, for testing purposes
        """
        set_schema = "%20s   %30s   %15s"
        l = ["-------------------------",
             _("Chain start time: ") + dup_time.timetopretty(self.start_time),
             _("Chain end time: ") + dup_time.timetopretty(self.end_time),
             _("Number of contained backup sets: %d") %
             (len(self.incset_list) + 1,),
             _("Total number of contained volumes: %d") %
             (self.get_num_volumes(),),
             set_schema % (_("Type of backup set:"), _("Time:"), _("Num volumes:"))]

        for s in self.get_all_sets():
            if s.time:
                type = _("Full")
                time = s.time
            else:
                type = _("Incremental")
                time = s.end_time
            l.append(set_schema % (type, dup_time.timetopretty(time), len(s)))

        l.append("-------------------------")
        return "\n".join(l)
Exemplo n.º 6
0
 def add_inc(self, incset):
     """
     Add incset to self.  Return False if incset does not match
     """
     if self.end_time == incset.start_time:
         self.incset_list.append(incset)
     else:
         if (
             self.incset_list
             and incset.start_time == self.incset_list[-1].start_time
             and incset.end_time > self.incset_list[-1]
         ):
             log.Info(_("Preferring Backupset over previous one!"))
             self.incset_list[-1] = incset
         else:
             log.Info(
                 _("Ignoring incremental Backupset (start_time: %s; needed: %s)")
                 % (dup_time.timetopretty(incset.start_time), dup_time.timetopretty(self.end_time))
             )
             return False
     self.end_time = incset.end_time
     log.Info(
         _("Added incremental Backupset (start_time: %s / end_time: %s)")
         % (dup_time.timetopretty(incset.start_time), dup_time.timetopretty(incset.end_time))
     )
     assert self.end_time
     return True
Exemplo n.º 7
0
    def get_signature_chain_at_time(self, time):
        """
        Return signature chain covering specified time

        Tries to find the signature chain covering the given time.  If
        there is none, return the earliest chain before, and failing
        that, the earliest chain.
        """
        if not self.all_sig_chains:
            raise CollectionsError("No signature chains found")

        covering_chains = [c for c in self.all_sig_chains
                           if c.start_time <= time <= c.end_time]
        if covering_chains:
            return covering_chains[-1]  # prefer local if multiple sig chains

        old_chains = [c for c in self.all_sig_chains if c.end_time < time]
        if old_chains:
            return old_chains[-1]
        else:
            # no chains are old enough, give oldest and warn user
            oldest = self.all_sig_chains[0]
            if time < oldest.start_time:
                log.Warn(_("No signature chain for the requested time. "
                           "Using oldest available chain, starting at time %s.") %
                         dup_time.timetopretty(oldest.start_time),
                         log.WarningCode.no_sig_for_time,
                         dup_time.timetostring(oldest.start_time))
            return oldest
Exemplo n.º 8
0
 def get_timestats_string(self):
     u"""Return portion of statistics string dealing with time"""
     timelist = []
     if self.StartTime is not None:
         timelist.append(u"StartTime %.2f (%s)\n" %
                         (self.StartTime, dup_time.timetopretty(self.StartTime)))
     if self.EndTime is not None:
         timelist.append(u"EndTime %.2f (%s)\n" %
                         (self.EndTime, dup_time.timetopretty(self.EndTime)))
     if self.ElapsedTime or (self.StartTime is not None and
                             self.EndTime is not None):
         if self.ElapsedTime is None:
             self.ElapsedTime = self.EndTime - self.StartTime
         timelist.append(u"ElapsedTime %.2f (%s)\n" %
                         (self.ElapsedTime, dup_time.inttopretty(self.ElapsedTime)))
     return u"".join(timelist)
Exemplo n.º 9
0
    def get_signature_chain_at_time(self, time):
        """
        Return signature chain covering specified time

        Tries to find the signature chain covering the given time.  If
        there is none, return the earliest chain before, and failing
        that, the earliest chain.
        """
        if not self.all_sig_chains:
            raise CollectionsError("No signature chains found")

        covering_chains = [c for c in self.all_sig_chains
                           if c.start_time <= time <= c.end_time]
        if covering_chains:
            return covering_chains[-1]  # prefer local if multiple sig chains

        old_chains = [c for c in self.all_sig_chains if c.end_time < time]
        if old_chains:
            return old_chains[-1]
        else:
            # no chains are old enough, give oldest and warn user
            oldest = self.all_sig_chains[0]
            if time < oldest.start_time:
                log.Warn(_("No signature chain for the requested time. "
                           "Using oldest available chain, starting at time %s.") %
                         dup_time.timetopretty(oldest.start_time),
                         log.WarningCode.no_sig_for_time,
                         dup_time.timetostring(oldest.start_time))
            return oldest
Exemplo n.º 10
0
 def get_timestats_string(self):
     """Return portion of statistics string dealing with time"""
     timelist = []
     if self.StartTime is not None:
         timelist.append("StartTime %.2f (%s)\n" %
                         (self.StartTime, dup_time.timetopretty(self.StartTime)))
     if self.EndTime is not None:
         timelist.append("EndTime %.2f (%s)\n" %
                         (self.EndTime, dup_time.timetopretty(self.EndTime)))
     if self.ElapsedTime or (self.StartTime is not None and
                             self.EndTime is not None):
         if self.ElapsedTime is None:
             self.ElapsedTime = self.EndTime - self.StartTime
         timelist.append("ElapsedTime %.2f (%s)\n" %
                         (self.ElapsedTime, dup_time.inttopretty(self.ElapsedTime)))
     return "".join(timelist)
Exemplo n.º 11
0
 def get_timestats_string(self):
     u"""Return portion of statistics string dealing with time"""
     timelist = []
     if self.StartTime is not None:
         timelist.append(
             u"StartTime %.2f (%s)\n" %  # pylint: disable=bad-string-format-type
             (self.StartTime, dup_time.timetopretty(self.StartTime)))
     if self.EndTime is not None:
         timelist.append(
             u"EndTime %.2f (%s)\n" %  # pylint: disable=bad-string-format-type
             (self.EndTime, dup_time.timetopretty(self.EndTime)))
     if self.ElapsedTime or (self.StartTime is not None and  # pylint:disable=access-member-before-definition
                             self.EndTime is not None):
         if self.ElapsedTime is None:  # pylint:disable=access-member-before-definition
             self.ElapsedTime = self.EndTime - self.StartTime
         timelist.append(
             u"ElapsedTime %.2f (%s)\n" %
             (self.ElapsedTime, dup_time.inttopretty(self.ElapsedTime)))
     return u"".join(timelist)
Exemplo n.º 12
0
    def __str__(self):
        set_schema = u"%20s   %30s  %20s"
        l = [u"-------------------------",
             _(u"File: %s") % (self.filepath),
             _(u"Total number of backup: %d") % len(self.fileinfo_list),
             set_schema % (_(u"Type of backup set:"), _(u"Time:"), _(u"Type of file change:"))]

        for s in self.fileinfo_list:
            backup_type = s[0]
            backup_set = s[1]
            if backup_set.time:
                type = _(u"Full")  # pylint: disable=redefined-builtin
            else:
                type = _(u"Incremental")
            l.append(set_schema % (type, dup_time.timetopretty(backup_set.get_time()), backup_type.title()))

        l.append(u"-------------------------")
        return u"\n".join(l)
Exemplo n.º 13
0
    def __unicode__(self):
        set_schema = "%20s   %30s  %20s"
        l = ["-------------------------",
             _("File: %s") % (self.filepath),
             _("Total number of backup: %d") % len(self.fileinfo_list),
             set_schema % (_("Type of backup set:"), _("Time:"), _("Type of file change:"))]

        for s in self.fileinfo_list:
            backup_type = s[0]
            backup_set = s[1]
            if backup_set.time:
                type = _("Full")
            else:
                type = _("Incremental")
            l.append(set_schema % (type, dup_time.timetopretty(backup_set.get_time()), backup_type.title()))

        l.append("-------------------------")
        return "\n".join(l)
Exemplo n.º 14
0
    def __unicode__(self):
        set_schema = "%20s   %30s  %20s"
        l = ["-------------------------",
             _("File: %s") % (self.filepath),
             _("Total number of backup: %d") % len(self.fileinfo_list),
             set_schema % (_("Type of backup set:"), _("Time:"), _("Type of file change:"))]

        for s in self.fileinfo_list:
            backup_type = s[0]
            backup_set = s[1]
            if backup_set.time:
                type = _("Full")
            else:
                type = _("Incremental")
            l.append(set_schema % (type, dup_time.timetopretty(backup_set.get_time()), backup_type.title()))

        l.append("-------------------------")
        return "\n".join(l)
Exemplo n.º 15
0
 def get_timestr(self):
     """
     Return time string suitable for log statements
     """
     return dup_time.timetopretty(self.time or self.end_time)
Exemplo n.º 16
0
    def compare_verbose(self, other, include_data = 0):
        """Compare ROPaths like __eq__, but log reason if different

        This is placed in a separate function from __eq__ because
        __eq__ should be very time sensitive, and logging statements
        would slow it down.  Used when verifying.

        If include_data is true, also read all the data of regular
        files and see if they differ.

        """
        def log_diff(log_string):
            log_str = _("Difference found:") + " " + log_string
            log.Notice(log_str % (self.get_relative_path(),))

        if not self.type and not other.type:
            return 1
        if not self.stat and other.stat:
            log_diff(_("New file %s"))
            return 0
        if not other.stat and self.stat:
            log_diff(_("File %s is missing"))
            return 0
        if self.type != other.type:
            log_diff(_("File %%s has type %s, expected %s") %
                     (other.type, self.type))
            return 0

        if self.isreg() or self.isdir() or self.isfifo():
            if not self.perms_equal(other):
                log_diff(_("File %%s has permissions %s, expected %s") %
                         (other.getperms(), self.getperms()))
                return 0
            if ((int(self.stat.st_mtime) != int(other.stat.st_mtime)) and
                (self.stat.st_mtime > 0 or other.stat.st_mtime > 0)):
                log_diff(_("File %%s has mtime %s, expected %s") %
                         (dup_time.timetopretty(int(other.stat.st_mtime)),
                          dup_time.timetopretty(int(self.stat.st_mtime))))
                return 0
            if self.isreg() and include_data:
                if self.compare_data(other):
                    return 1
                else:
                    log_diff(_("Data for file %s is different"))
                    return 0
            else:
                return 1
        elif self.issym():
            if self.symtext == other.symtext:
                return 1
            else:
                log_diff(_("Symlink %%s points to %s, expected %s") %
                         (other.symtext, self.symtext))
                return 0
        elif self.isdev():
            if not self.perms_equal(other):
                log_diff(_("File %%s has permissions %s, expected %s") %
                         (other.getperms(), self.getperms()))
                return 0
            if self.devnums != other.devnums:
                log_diff(_("Device file %%s has numbers %s, expected %s")
                         % (other.devnums, self.devnums))
                return 0
            return 1
        assert 0
Exemplo n.º 17
0
    def compare_verbose(self, other, include_data=0):
        """Compare ROPaths like __eq__, but log reason if different

        This is placed in a separate function from __eq__ because
        __eq__ should be very time sensitive, and logging statements
        would slow it down.  Used when verifying.

        Only run if include_data is true.

        """
        def log_diff(log_string):
            log_str = _("Difference found:") + u" " + log_string
            log.Notice(log_str % (util.ufn(self.get_relative_path())))

        if include_data is False:
            return True

        if not self.type and not other.type:
            return 1
        if not self.stat and other.stat:
            log_diff(_("New file %s"))
            return 0
        if not other.stat and self.stat:
            log_diff(_("File %s is missing"))
            return 0
        if self.type != other.type:
            log_diff(
                _("File %%s has type %s, expected %s") %
                (other.type, self.type))
            return 0

        if self.isreg() or self.isdir() or self.isfifo():
            if not self.perms_equal(other):
                log_diff(
                    _("File %%s has permissions %s, expected %s") %
                    (other.getperms(), self.getperms()))
                return 0
            if ((int(self.stat.st_mtime) != int(other.stat.st_mtime))
                    and (self.stat.st_mtime > 0 or other.stat.st_mtime > 0)):
                log_diff(
                    _("File %%s has mtime %s, expected %s") %
                    (dup_time.timetopretty(int(other.stat.st_mtime)),
                     dup_time.timetopretty(int(self.stat.st_mtime))))
                return 0
            if self.isreg():
                if self.compare_data(other):
                    return 1
                else:
                    log_diff(_("Data for file %s is different"))
                    return 0
            else:
                return 1
        elif self.issym():
            if self.symtext == other.symtext:
                return 1
            else:
                log_diff(
                    _("Symlink %%s points to %s, expected %s") %
                    (other.symtext, self.symtext))
                return 0
        elif self.isdev():
            if not self.perms_equal(other):
                log_diff(
                    _("File %%s has permissions %s, expected %s") %
                    (other.getperms(), self.getperms()))
                return 0
            if self.devnums != other.devnums:
                log_diff(
                    _("Device file %%s has numbers %s, expected %s") %
                    (other.devnums, self.devnums))
                return 0
            return 1
        assert 0
Exemplo n.º 18
0
 def get_timestr(self):
     """
     Return time string suitable for log statements
     """
     return dup_time.timetopretty(self.time or self.end_time)