def main(args=None): if args is None: args = sys.argv[1:] options = parse_args(args) setup_logging(options) # Determine available backups backup_list = set(x for x in os.listdir('.') if re.match(r'^\d{4}-\d\d-\d\d_\d\d:\d\d:\d\d$', x)) if not os.path.exists(options.state) and len(backup_list) > 1: if not options.reconstruct_state: raise QuietError( 'Found more than one backup but no state file! Aborting.') log.warning('Trying to reconstruct state file..') state = upgrade_to_state(backup_list) if not options.n: log.info('Saving reconstructed state..') with open(options.state, 'wb') as fh: fh.write(freeze_basic_mapping(state)) elif not os.path.exists(options.state): log.warning('Creating state file..') state = dict() else: log.info('Reading state...') # Older versions used pickle to store state... with open(options.state, 'rb') as fh: proto = fh.read(2) fh.seek(0) if proto == b'\x80\x02': state = pickle.load(fh) else: state = thaw_basic_mapping(fh.read()) to_delete = process_backups(backup_list, state, options.cycles) for x in to_delete: log.info('Backup %s is no longer needed, removing...', x) if not options.n: if options.use_s3qlrm: s3qlrm([x]) else: shutil.rmtree(x) if options.n: log.info('Dry run, not saving state.') else: log.info('Saving state..') with open(options.state, 'wb') as fh: fh.write(freeze_basic_mapping(state))
def main(args=None): if args is None: args = sys.argv[1:] options = parse_args(args) setup_logging(options) # Determine available backups backup_list = set(x for x in os.listdir('.') if re.match(r'^\d{4}-\d\d-\d\d_\d\d:\d\d:\d\d$', x)) if not os.path.exists(options.state) and len(backup_list) > 1: if not options.reconstruct_state: raise QuietError('Found more than one backup but no state file! Aborting.') log.warning('Trying to reconstruct state file..') state = upgrade_to_state(backup_list) if not options.n: log.info('Saving reconstructed state..') with open(options.state, 'wb') as fh: fh.write(freeze_basic_mapping(state)) elif not os.path.exists(options.state): log.warning('Creating state file..') state = dict() else: log.info('Reading state...') # Older versions used pickle to store state... with open(options.state, 'rb') as fh: proto = fh.read(2) fh.seek(0) if proto == b'\x80\x02': state = pickle.load(fh) else: state = thaw_basic_mapping(fh.read()) to_delete = process_backups(backup_list, state, options.cycles) for x in to_delete: log.info('Backup %s is no longer needed, removing...', x) if not options.n: if options.use_s3qlrm: s3qlrm([x]) else: shutil.rmtree(x) if options.n: log.info('Dry run, not saving state.') else: log.info('Saving state..') with open(options.state, 'wb') as fh: fh.write(freeze_basic_mapping(state))
def main(args=None): if args is None: args = sys.argv[1:] options = parse_args(args) setup_logging(options) # Determine available backups backup_list = set(x for x in os.listdir('.') if re.match(r'^\d{4}-\d\d-\d\d_\d\d:\d\d:\d\d$', x)) if not os.path.exists(options.state) and len(backup_list) > 1: if not options.reconstruct_state: raise QuietError( 'Found more than one backup but no state file! Aborting.') log.warning('Trying to reconstruct state file..') state = upgrade_to_state(backup_list) if not options.n: log.info('Saving reconstructed state..') pickle.dump(state, open(options.state, 'wb'), PICKLE_PROTOCOL) elif not os.path.exists(options.state): log.warning('Creating state file..') state = dict() else: log.info('Reading state...') state = pickle.load(open(options.state, 'rb')) to_delete = process_backups(backup_list, state, options.cycles) for x in to_delete: log.info('Backup %s is no longer needed, removing...', x) if not options.n: if options.use_s3qlrm: s3qlrm([x]) else: shutil.rmtree(x) if options.n: log.info('Dry run, not saving state.') else: log.info('Saving state..') pickle.dump(state, open(options.state, 'wb'), PICKLE_PROTOCOL)
def main(args=None): if args is None: args = sys.argv[1:] options = parse_args(args) setup_logging(options) # Determine available backups backup_list = set(x for x in os.listdir('.') if re.match(r'^\d{4}-\d\d-\d\d_\d\d:\d\d:\d\d$', x)) if not os.path.exists(options.state) and len(backup_list) > 1: if not options.reconstruct_state: raise QuietError('Found more than one backup but no state file! Aborting.') log.warn('Trying to reconstruct state file..') state = upgrade_to_state(backup_list) if not options.n: log.info('Saving reconstructed state..') pickle.dump(state, open(options.state, 'wb'), pickle.HIGHEST_PROTOCOL) elif not os.path.exists(options.state): log.warn('Creating state file..') state = dict() else: log.info('Reading state...') state = pickle.load(open(options.state, 'rb')) to_delete = process_backups(backup_list, state, options.cycles) for x in to_delete: log.info('Backup %s is no longer needed, removing...', x) if not options.n: if options.use_s3qlrm: s3qlrm([x]) else: shutil.rmtree(x) if options.n: log.info('Dry run, not saving state.') else: log.info('Saving state..') pickle.dump(state, open(options.state, 'wb'), pickle.HIGHEST_PROTOCOL)