コード例 #1
0
def run_backup(repo_name: str, prefix: str, paths: List[str],
               verify=True,
               verbose=False) -> None:
    """Perform a backup to the repository of all dirs/files in the list.

    Make sure we have an unlocked DDU repository. Process all items in
    'paths'. If an item is '-', read path names from stdin.
    """
    logging.info(f"backup list: {paths}")
    logging.info(f"backup repo: {repo_name}")
    print(f"Backing up to {repo_name} with prefix '{prefix}'.")
    repos = Repo(repo_name)
    if repos.lock():
        bkup = Backup(repo_name, prefix, verbose=verbose)
        for g in paths:
            if g == '-':
                for f in sys.stdin:
                    if not f:
                        continue
                    f = f.rstrip()
                    if os.path.isfile(f) or os.path.isdir(f):
                        bkup.backup_object(f)
                    else:
                        util.warning(f'{f} is not a file or directory')
            else:
                if util.os_is_windows:
                    # You have to use globbing on Windows. Shell is too stupid.
                    path_list = glob.glob(g)
                    if path_list == []:
                        util.warning(f'File/dir {g} not found.')
                    else:
                        for f in glob.glob(g):
                            bkup.backup_object(f)
                else:
                    bkup.backup_object(g)
        bkup.finish()
        repos.unlock()
        if verify:
            repos.verify_backups(only=bkup.bk_name)
    else:
        util.fatal(f'repo {repo_name} is LOCKED')