Example #1
0
def compare_and_save_fs_db(repo, fs_dir, do_checksum):
    if not os.path.exists(fs_dir):
        log.critical("Path '{}' does not exist.".format(fs_dir))
        return

    if not common.db_length(repo.db_file):
        log.critical("Database is empty.")
        return
    
    status_files = {fname: open(repo.get_status_fname(fname), "w+")
                    for fname, descr in config.STATUS_FILES_DESC.items()}

    lists_of_files = compare_fs_db(repo, fs_dir, do_checksum)
        
    log.warn("Done, {} files compared.".format(sum(map(len, lists_of_files.values()))))

    for fname, flist in lists_of_files.items():
        log.info("{}: {}".format(config.STATUS_FILES_DESC[fname], len(flist)))
        status_f = status_files[fname]

        for entry in flist:
            relpath, info = entry
                
            
            common.print_a_file(relpath, info, status_f)
        
    for status_file in status_files.values():
        status_file.close()
Example #2
0
def progress_on_fs_and_db(repo, fs_dir, do_checksum):
    total_len = common.db_length(repo.db_file)

    count = 0
    db = common.browse_db(repo.db_file)
    fs = common.browse_filesystem(fs_dir, do_checksum)
    state = FileState.OK

    while True:
        if state in (FileState.OK, FileState.DIFFERENT):
            fs_entry = next(fs)
                
            if fs_entry is not None:
                # not a new directory
                db_entry = next(db)

        elif fs_entry is False or state is FileState.MISSING_IN_FS:
            db_entry = next(db)
            
        elif db_entry is False or state is FileState.MISSING_ON_DB:
            fs_entry = next(fs)
            
        else:
            assert False # should not come here
                
        if fs_entry is None:
            # new directory
            continue 
            
        if fs_entry is False and db_entry is False:
            common.progress(total_len, total_len)
            print("")
            
            raise StopIteration()
        
        if fs_entry is False: # no more fs entries
            state = FileState.MISSING_IN_FS # so file cannot be on fs
            
        elif db_entry is False: # no more db entries
            state = FileState.MISSING_ON_DB # so file cannot be on db
            
        else:
            # returns None if could compare,
            #      or db_fullpath > fs_fullpath
            state, diff = compare_entries(fs_dir, fs_entry, db_entry, do_checksum)

        common.progress(count, total_len)
        count += 1
        
        yield state, diff, db_entry, fs_entry