def validate_tree(src_id, dest_id): rmrf(b'restore-src') rmrf(b'restore-dest') mkdir(b'restore-src') mkdir(b'restore-dest') commit_env = merge_dict(environ, {b'GIT_COMMITTER_DATE': b'2014-01-01 01:01'}) # Create a commit so the archive contents will have matching timestamps. src_c = exo((b'git', b'--git-dir', b'get-src', b'commit-tree', b'-m', b'foo', src_id), env=commit_env).out.strip() dest_c = exo((b'git', b'--git-dir', b'get-dest', b'commit-tree', b'-m', b'foo', dest_id), env=commit_env).out.strip() exr = verify_rcz(b'git --git-dir get-src archive %s | tar xvf - -C restore-src' % bquote(src_c), shell=True) if exr.rc != 0: return False exr = verify_rcz(b'git --git-dir get-dest archive %s | tar xvf - -C restore-dest' % bquote(dest_c), shell=True) if exr.rc != 0: return False # git archive doesn't include an entry for ./. unlink(b'restore-src/pax_global_header') unlink(b'restore-dest/pax_global_header') ex((b'touch', b'-r', b'restore-src', b'restore-dest')) verify_trees_match(b'restore-src/', b'restore-dest/') rmrf(b'restore-src') rmrf(b'restore-dest')
def _gitenv(repo_dir=None): if not repo_dir: repo_dir = repo() return merge_dict(environ, {b'GIT_DIR': os.path.abspath(repo_dir)})
if not cmd_module: subcmd[0] = os.path.join(cmdpath, b'bup-' + subcmd_name) if not os.path.exists(subcmd[0]): usage('error: unknown command "%s"' % path_msg(subcmd_name)) already_fixed = int(environ.get(b'BUP_FORCE_TTY', 0)) if subcmd_name in [b'mux', b'ftp', b'help']: already_fixed = True fix_stdout = not already_fixed and os.isatty(1) fix_stderr = not already_fixed and os.isatty(2) if fix_stdout or fix_stderr: tty_env = merge_dict(environ, {b'BUP_FORCE_TTY': (b'%d' % ((fix_stdout and 1 or 0) + (fix_stderr and 2 or 0))), b'BUP_TTY_WIDTH': b'%d' % _tty_width(), }) else: tty_env = environ sep_rx = re.compile(br'([\r\n])') def print_clean_line(dest, content, width, sep=None): """Write some or all of content, followed by sep, to the dest fd after padding the content with enough spaces to fill the current terminal width or truncating it to the terminal width if sep is a carriage return.""" global sep_rx assert sep in (b'\r', b'\n', None)
return sp subcmd[0] = subpath(subcmd_name) if not os.path.exists(subcmd[0]): usage('error: unknown command "%s"' % subcmd_name) already_fixed = atoi(os.environ.get('BUP_FORCE_TTY')) if subcmd_name in ['mux', 'ftp', 'help']: already_fixed = True fix_stdout = not already_fixed and os.isatty(1) fix_stderr = not already_fixed and os.isatty(2) if fix_stdout or fix_stderr: tty_env = merge_dict(os.environ, { 'BUP_FORCE_TTY': str((fix_stdout and 1 or 0) + (fix_stderr and 2 or 0)) }) else: tty_env = os.environ sep_rx = re.compile(br'([\r\n])') def print_clean_line(dest, content, width, sep=None): """Write some or all of content, followed by sep, to the dest fd after padding the content with enough spaces to fill the current terminal width or truncating it to the terminal width if sep is a carriage return.""" global sep_rx assert sep in (b'\r', b'\n', None) if not content: