def test_nbmerge_app_null_base(filespath): afn = os.path.join(filespath, "multilevel-test-base.ipynb") bfn = os.path.join(filespath, "multilevel-test-local.ipynb") # Two identical files added (null base) args = nbmergeapp._build_arg_parser().parse_args( [EXPLICIT_MISSING_FILE, afn, afn]) assert 0 == main_merge(args) # Two conflicting files added (null base) args = nbmergeapp._build_arg_parser().parse_args( [EXPLICIT_MISSING_FILE, afn, bfn]) assert 1 == main_merge(args)
def test_nbmerge_app_null_base(filespath, reset_log): afn = os.path.join(filespath, "multilevel-test-base.ipynb") bfn = os.path.join(filespath, "multilevel-test-local.ipynb") # Two identical files added (null base) args = nbmergeapp._build_arg_parser().parse_args([ EXPLICIT_MISSING_FILE, afn, afn]) assert 0 == main_merge(args) # Two conflicting files added (null base) args = nbmergeapp._build_arg_parser().parse_args([ EXPLICIT_MISSING_FILE, afn, bfn]) assert 1 == main_merge(args)
def test_nbmerge_app(tempfiles, capsys): bfn = os.path.join(tempfiles, "multilevel-test-base.ipynb") lfn = os.path.join(tempfiles, "multilevel-test-local.ipynb") rfn = os.path.join(tempfiles, "multilevel-test-remote.ipynb") ofn = os.path.join(tempfiles, "output.ipynb") args = nbmergeapp._build_arg_parser().parse_args( [bfn, lfn, rfn, '--log-level=DEBUG']) assert args.log_level == 'DEBUG' assert nbdime.log.logger.level == logging.DEBUG assert 0 == main_merge(args) nb_stdout, err = capsys.readouterr() assert 0 == nbmergeapp.main([bfn, lfn, rfn, '--out', ofn]) out, err = capsys.readouterr() # no stdout when sending output to file assert out == '' assert os.path.exists(ofn) with io.open(ofn, 'r', encoding='utf8') as f: nb_file = f.read() assert nb_stdout == nb_file
def test_nbmerge_app(tempfiles, capsys): p = tempfiles bfn = os.path.join(p, "multilevel-test-base.ipynb") lfn = os.path.join(p, "multilevel-test-local.ipynb") rfn = os.path.join(p, "multilevel-test-remote.ipynb") ofn = os.path.join(p, "output.ipynb") args = nbmergeapp._build_arg_parser().parse_args([bfn, lfn, rfn, '--log-level=DEBUG']) assert args.log_level == 'DEBUG' assert nbdime.log.logger.level == logging.DEBUG assert 0 == main_merge(args) nb_stdout, err = capsys.readouterr() assert 0 == nbmergeapp.main([bfn, lfn, rfn, '-o', ofn]) out, err = capsys.readouterr() # no stdout when sending output to file assert out == '' assert os.path.exists(ofn) with io.open(ofn, 'r', encoding='utf8') as f: nb_file = f.read() assert nb_stdout == nb_file
def test_nbmerge_app(): p = filespath() bfn = os.path.join(p, "multilevel-test-base.ipynb") lfn = os.path.join(p, "multilevel-test-local.ipynb") rfn = os.path.join(p, "multilevel-test-remote.ipynb") # When filename is omitted, will print to console instead mfn = "" # os.path.join(temppath, "multilevel-test-merged.ipynb") assert 0 == main_merge(bfn, lfn, rfn, mfn)
def test_nbmerge_app_null_side(filespath): afn = os.path.join(filespath, "multilevel-test-base.ipynb") bfn = os.path.join(filespath, "multilevel-test-local.ipynb") # Local deleted, remote modified args = nbmergeapp._build_arg_parser().parse_args( [afn, EXPLICIT_MISSING_FILE, bfn]) assert 1 == main_merge(args) # Remote deleted, local modified args = nbmergeapp._build_arg_parser().parse_args( [afn, bfn, EXPLICIT_MISSING_FILE]) assert 1 == main_merge(args) # Both deleted args = nbmergeapp._build_arg_parser().parse_args( [afn, EXPLICIT_MISSING_FILE, EXPLICIT_MISSING_FILE]) assert 0 == main_merge(args)
def test_nbmerge_app_no_colors(filespath): # Simply check that the --color-words argument is accepted, not behavior bfn = os.path.join(filespath, "multilevel-test-base.ipynb") lfn = os.path.join(filespath, "multilevel-test-local.ipynb") rfn = os.path.join(filespath, "multilevel-test-remote.ipynb") args = nbmergeapp._build_arg_parser().parse_args( [bfn, lfn, rfn, '--no-color']) assert 0 == main_merge(args)
def test_nbmerge_app_null_side(filespath, reset_log): afn = os.path.join(filespath, "multilevel-test-base.ipynb") bfn = os.path.join(filespath, "multilevel-test-local.ipynb") # Local deleted, remote modified args = nbmergeapp._build_arg_parser().parse_args([ afn, EXPLICIT_MISSING_FILE, bfn]) assert 1 == main_merge(args) # Remote deleted, local modified args = nbmergeapp._build_arg_parser().parse_args([ afn, bfn, EXPLICIT_MISSING_FILE]) assert 1 == main_merge(args) # Both deleted args = nbmergeapp._build_arg_parser().parse_args([ afn, EXPLICIT_MISSING_FILE, EXPLICIT_MISSING_FILE]) assert 0 == main_merge(args)
def test_nbmerge_app(): p = filespath() bfn = os.path.join(p, "multilevel-test-base.ipynb") lfn = os.path.join(p, "multilevel-test-local.ipynb") rfn = os.path.join(p, "multilevel-test-remote.ipynb") # When filename is omitted, will print to console instead #mfn = "" # os.path.join(temppath, "multilevel-test-merged.ipynb") args = nbdime.nbmergeapp._build_arg_parser().parse_args([bfn, lfn, rfn]) assert 0 == main_merge(args)
def main(args=None): if args is None: args = sys.argv[1:] parser = argparse.ArgumentParser( 'git-nbmergedriver', description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, ) subparsers = parser.add_subparsers(dest='subcommand') merge_parser = subparsers.add_parser( 'merge', description= "The actual entrypoint for the merge tool. Git will call this.") add_generic_args(parser) add_diff_args(merge_parser) add_merge_args(merge_parser) # Argument list, we are given base, local, remote add_filename_args(merge_parser, ["base", "local", "remote"]) # TODO: support git-config-specified conflict markers inside sources merge_parser.add_argument('marker') merge_parser.add_argument('out', nargs='?') # "The merge driver can learn the pathname in which the merged result will # be stored via placeholder %P" # - NOTE: This is not where the driver should store its output, see below! add_git_config_subcommand( subparsers, enable, disable, subparser_help= "Configure git to use nbdime for notebooks in `git merge`", enable_help="enable nbdime merge driver via git config", disable_help="disable nbdime merge driver via git config") opts = parser.parse_args(args) if opts.subcommand == 'merge': # "The merge driver is expected to leave the result of the merge in the # file named with %A by overwriting it, and exit with zero status if it # managed to merge them cleanly, or non-zero if there were conflicts." opts.out = opts.local # mergeapp expects an additional decisions arg: opts.decisions = False return nbmergeapp.main_merge(opts) elif opts.subcommand == 'config': opts.config_func(opts.scope) return 0 else: parser.print_help() return 1
def main(args=None): if args is None: args = sys.argv[1:] parser = ConfigBackedParser('git-nbmergedriver', description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, ) subparsers = parser.add_subparsers(dest='subcommand') merge_parser = subparsers.add_parser('merge', description="The actual entrypoint for the merge tool. Git will call this." ) add_generic_args(parser) add_diff_args(merge_parser) add_merge_args(merge_parser) # Argument list, we are given base, local, remote add_filename_args(merge_parser, ["base", "local", "remote"]) # TODO: support git-config-specified conflict markers inside sources merge_parser.add_argument('marker') merge_parser.add_argument('out', nargs='?') # "The merge driver can learn the pathname in which the merged result will # be stored via placeholder %P" # - NOTE: This is not where the driver should store its output, see below! add_git_config_subcommand( subparsers, enable, disable, subparser_help="Configure git to use nbdime for notebooks in `git merge`", enable_help="enable nbdime merge driver via git config", disable_help="disable nbdime merge driver via git config") opts = parser.parse_args(args) if opts.subcommand == 'merge': # "The merge driver is expected to leave the result of the merge in the # file named with %A by overwriting it, and exit with zero status if it # managed to merge them cleanly, or non-zero if there were conflicts." opts.out = opts.local # mergeapp expects an additional decisions arg: opts.decisions = False return nbmergeapp.main_merge(opts) elif opts.subcommand == 'config': opts.config_func(opts.scope) return 0 else: parser.print_help() return 1
def main(args=None): if args is None: args = sys.argv[1:] parser = argparse.ArgumentParser('hg-nbmerge', description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, ) add_generic_args(parser) add_diff_args(parser) add_merge_args(parser) # Argument list, we are given base, local, remote add_filename_args(parser, ["base", "local", "remote", "merged"]) opts = parser.parse_args(args) # mergeapp expects an additional decisions arg: opts.decisions = False opts.out = opts.merged del opts.merged return nbmergeapp.main_merge(opts)
def main(args=None): if args is None: args = sys.argv[1:] parser = ConfigBackedParser('hg-nbmerge', description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, ) add_generic_args(parser) add_diff_args(parser) add_merge_args(parser) # Argument list, we are given base, local, remote add_filename_args(parser, ["base", "local", "remote", "merged"]) opts = parser.parse_args(args) # mergeapp expects an additional decisions arg: opts.decisions = False opts.out = opts.merged del opts.merged return nbmergeapp.main_merge(opts)