~noizyland/duplicity/fix-progress

« back to all changes in this revision

Viewing changes to duplicity/collections.py

  • Committer: Kenneth Loafman
  • Date: 2015-05-08 12:28:47 UTC
  • Revision ID: kenneth@loafman.com-20150508122847-z6dxdm3qqgumugef
* Added ability to get single file status from collection-status with
  patch from jitao (bug 1044715), like so:
  $ duplicity collection-status --file-changed c1 file://./foo

Show diffs side-by-side

added added

removed removed

Lines of Context:
60
60
        self.end_time = None  # will be set if inc
61
61
        self.partial = False  # true if a partial backup
62
62
        self.encrypted = False  # true if an encrypted backup
 
63
        self.files_changed = []
63
64
 
64
65
    def is_complete(self):
65
66
        """
123
124
        self.encrypted = bool(pr.encrypted)
124
125
        self.info_set = True
125
126
 
 
127
    def set_files_changed(self):
 
128
        mf = self.get_manifest()
 
129
        self.files_changed = mf.get_files_changed()
 
130
 
126
131
    def set_manifest(self, remote_filename):
127
132
        """
128
133
        Add local and remote manifest filenames to backup set
140
145
                    and pr.end_time == self.end_time):
141
146
                self.local_manifest_path = \
142
147
                    globals.archive_dir.append(local_filename)
 
148
 
 
149
                self.set_files_changed()
143
150
                break
144
151
 
145
152
    def delete(self):
272
279
            return self.end_time
273
280
        assert 0, "Neither self.time nor self.end_time set"
274
281
 
 
282
    def get_files_changed(self):
 
283
        return self.files_changed
 
284
 
275
285
    def __len__(self):
276
286
        """
277
287
        Return the number of volumes in the set
1153
1163
            old_sets = filter(lambda s: s.get_time() < t, chain.get_all_sets())
1154
1164
            result_sets.extend(old_sets)
1155
1165
        return self.sort_sets(result_sets)
 
1166
 
 
1167
    def get_file_changed_record(self, filepath):
 
1168
        """
 
1169
        Returns time line of specified file changed
 
1170
        """
 
1171
        if not self.matched_chain_pair:
 
1172
            return ""
 
1173
 
 
1174
        all_backup_set = self.matched_chain_pair[1].get_all_sets()
 
1175
        specified_file_backup_set = []
 
1176
        specified_file_backup_type = []
 
1177
 
 
1178
        for bs in all_backup_set:
 
1179
            filelist = [fileinfo[1] for fileinfo in bs.get_files_changed()]
 
1180
            if filepath in filelist:
 
1181
                specified_file_backup_set.append(bs)
 
1182
                index = filelist.index(filepath)
 
1183
                specified_file_backup_type.append(bs.get_files_changed()[index][0])
 
1184
 
 
1185
        return FileChangedStatus(filepath, list(zip(specified_file_backup_type, specified_file_backup_set)))
 
1186
 
 
1187
 
 
1188
class FileChangedStatus:
 
1189
    def __init__(self, filepath, fileinfo_list):
 
1190
        self.filepath = filepath
 
1191
        self.fileinfo_list = fileinfo_list
 
1192
 
 
1193
    def __unicode__(self):
 
1194
        set_schema = "%20s   %30s  %20s"
 
1195
        l = ["-------------------------",
 
1196
             _("File: %s") % (self.filepath),
 
1197
             _("Total number of backup: %d") % len(self.fileinfo_list),
 
1198
             set_schema % (_("Type of backup set:"), _("Time:"), _("Type of file change:"))]
 
1199
 
 
1200
        for s in self.fileinfo_list:
 
1201
            backup_type = s[0]
 
1202
            backup_set = s[1]
 
1203
            if backup_set.time:
 
1204
                type = _("Full")
 
1205
            else:
 
1206
                type = _("Incremental")
 
1207
            l.append(set_schema % (type, dup_time.timetopretty(backup_set.get_time()), backup_type.title()))
 
1208
 
 
1209
        l.append("-------------------------")
 
1210
        return "\n".join(l)