Beispiel #1
0
    def test_get_branch_size(sf):
        #cmd = r'py -m nn_ns.filedir.backup_tools.main get_branch_size -cache ./extra -repos ./repos -name master -oV ./out__branch_size.txt'.split()
        #argv = r'get_branch_size -cache ./extra -repos ./repos -name master'.split()
        dir_name = sf.dir_path.as_posix()
        #bug:argv = fr'get_branch_size -cache {dir_name!s}/extra -repos {dir_name!s}/repos -name master -oV {dir_name!s}/out__branch_size.txt'.split()
        #   dir_name.split() ? contain space?
        _argv = r'get_branch_size -cache {dir_name!s}/extra -repos {dir_name!s}/repos -name master -oV {dir_name!s}/out__branch_size.txt'.split(
        )
        _argv = [s.format(dir_name=dir_name) for s in _argv]
        argv = [
            r'get_branch_size', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-oV',
            fr'{dir_name!s}/out__branch_size.txt'
        ]
        assert argv == _argv

        backup_tools__main(argv)
        result__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path)
        #print_err(result__fsys_mapping_ex)
        sf.assertTrue(
            eqv__fsys_mapping_ex(result__fsys_mapping_ex,
                                 sf.expected__fsys_mapping_ex))

        #double exec: ok?
        with sf.assertRaises((FileExistsError)):
            backup_tools__main(argv)
        backup_tools__main([*argv, '-f'])

        i = argv.index('master')
        argv[i] = 'non_exist_branch_name'
        with sf.assertRaises((FileNotFoundError)):
            backup_tools__main([*argv, '-f'])
        return
Beispiel #2
0
    def test_get_branch_names(sf):
        #cmd = r'py -m nn_ns.filedir.backup_tools.main get_branch_names -cache ./extra -repos ./repos -oV ./out__branch_names.txt'.split()
        #argv = r'get_branch_names -cache ./extra -repos ./repos'.split()
        dir_name = sf.dir_path.as_posix()
        _argv = r'get_branch_names -cache {dir_name!s}/extra -repos {dir_name!s}/repos -oV {dir_name!s}/out__branch_names.txt'.split(
        )
        _argv = [s.format(dir_name=dir_name) for s in _argv]
        argv = [
            r'get_branch_names', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-oV',
            fr'{dir_name!s}/out__branch_names.txt'
        ]
        assert argv == _argv
        backup_tools__main(argv)
        result__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path)
        #print_err(result__fsys_mapping_ex)
        sf.assertTrue(
            eqv__fsys_mapping_ex(result__fsys_mapping_ex,
                                 sf.expected__fsys_mapping_ex))

        #double exec: ok?
        with sf.assertRaises((FileExistsError)):
            backup_tools__main(argv)
        backup_tools__main([*argv, '-f'])
        return
Beispiel #3
0
    def test_init_repository(sf):
        #cmd = r'py -m nn_ns.filedir.backup_tools.main init_repository -cache ./extra -repos ./repos'.split()
        #argv = r'init_repository -cache ./extra -repos ./repos'.split()
        dir_name = sf.dir_path.as_posix()
        _argv = r'init_repository -cache {dir_name!s}/extra -repos {dir_name!s}/repos'.split(
        )
        _argv = [s.format(dir_name=dir_name) for s in _argv]
        argv = [
            r'init_repository', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos'
        ]
        assert argv == _argv
        backup_tools__main(argv)
        result__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path)
        #print_err(result__fsys_mapping_ex)
        sf.assertTrue(
            eqv__fsys_mapping_ex(result__fsys_mapping_ex,
                                 sf.expected__fsys_mapping_ex))

        #double exec: ok
        backup_tools__main(argv)
        return
Beispiel #4
0
    def test_init_branch(sf):
        #cmd = r'py -m nn_ns.filedir.backup_tools.main init_branch -cache ./extra -repos ./repos -name master'.split()
        #argv = r'init_branch -cache ./extra -repos ./repos -name master'.split()
        dir_name = sf.dir_path.as_posix()
        _argv = r'init_branch -cache {dir_name!s}/extra -repos {dir_name!s}/repos -name master'.split(
        )
        _argv = [s.format(dir_name=dir_name) for s in _argv]
        argv = [
            r'init_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master'
        ]
        assert argv == _argv
        backup_tools__main(argv)
        result__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path)
        #print_err(result__fsys_mapping_ex)
        sf.assertTrue(
            eqv__fsys_mapping_ex(result__fsys_mapping_ex,
                                 sf.expected__fsys_mapping_ex))

        #double exec: not ok
        with sf.assertRaises((NotImplementedError, FileExistsError)):
            backup_tools__main(argv)
        return
Beispiel #5
0
    def test_cmp_branch_dir(sf):
        #cmd = r'py -m nn_ns.filedir.backup_tools.main cmp_branch_dir -cache ./extra -repos ./repos -name master -workdir ./src -oX ./out__result_of_dir_cmp__relative__extended.txt'.split()
        dir_name = sf.dir_path.as_posix()
        argv = [
            r'cmp_branch_dir', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{dir_name!s}/src', r'-oX',
            fr'{dir_name!s}/out__result_of_dir_cmp__relative__extended.txt'
        ]

        backup_tools__main(argv)
        result__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path)
        #print_err(result__fsys_mapping_ex)
        sf.assertTrue(
            eqv__fsys_mapping_ex(result__fsys_mapping_ex,
                                 sf.expected__fsys_mapping_ex))

        #double exec: ok?
        with sf.assertRaises((FileExistsError)):
            backup_tools__main(argv)
        backup_tools__main([*argv, '-f'])

        i = argv.index('master')
        argv[i] = 'non_exist_branch_name'
        with sf.assertRaises((FileNotFoundError)):
            backup_tools__main([*argv, '-f'])
        #################################
        #################################
        #################################
        # repos/master ~=~ {}
        # repos/master ~:=~ src = dir_lhs
        argv = [
            r'update_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{dir_name!s}/src', r'-iX',
            fr'{dir_name!s}/out__result_of_dir_cmp__relative__extended.txt'
        ]
        backup_tools__main(argv)
        if 0:  #[01_to_turn_off]
            #problem: non-std, not-unique-answer: mtime-vars, iterdir-unordered
            result2__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
                sf.dir_path)
            print_err(result2__fsys_mapping_ex)
            sf.assertTrue(
                eqv__fsys_mapping_ex(result2__fsys_mapping_ex,
                                     sf.expected2__fsys_mapping_ex))

        #################################
        #################################
        #################################
        # repos/master ~=~ src == dir_lhs
        # src_extract := repos/master ~ src = dir_lhs
        src_extract_dir_basename = 'src_extract'
        src_extract_dir_path = sf.dir_path / src_extract_dir_basename
        src_extract_dir_name = src_extract_dir_path.as_posix()
        assert not src_extract_dir_path.exists()

        argv = [
            r'extract_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{src_extract_dir_name!s}'
        ]
        with sf.assertRaises((FileNotFoundError)):
            backup_tools__main(argv)

        src_extract_dir_path.mkdir()
        assert src_extract_dir_path.exists()
        backup_tools__main(argv)
        result3__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            src_extract_dir_path)
        expected3__fsys_mapping_ex = sf.initial__fsys_mapping_ex['src']
        repos3__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path / 'repos')
        if 0:  #[01_to_turn_off]
            print_err(result3__fsys_mapping_ex)
            print_err(expected3__fsys_mapping_ex)
            #print_err(repos3__fsys_mapping_ex)
        #print(repos3__fsys_mapping_ex)
        #assert repos3__fsys_mapping_ex == sf.repos3__fsys_mapping_ex
        #   useless: since mtime!!

        sf.assertEqual(result3__fsys_mapping_ex, expected3__fsys_mapping_ex)

        #################################
        #################################
        #################################
        # repos/master ~=~ src_extract == src == dir_lhs
        # src := dir_rhs
        # repos/master ~:=~ src == dir_rhs
        # src_extract := repos/master ~ src == dir_rhs
        src_dir_path = sf.dir_path / 'src'
        filedir_remove(src_dir_path, missing_ok=False)
        filedir_remove(src_extract_dir_path, missing_ok=False)
        src_extract_dir_path.mkdir()
        expected4__fsys_mapping_ex = sf._name2fsys_mapping_ex['dir_rhs']
        build_whole_dir_as_fsys_mapping_ex(src_dir_path,
                                           expected4__fsys_mapping_ex)

        argv = [
            r'cmp_branch_dir', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{dir_name!s}/src'
        ]
        if 0:  #[01_to_turn_off]
            #show   "out__result_of_dir_cmp__relative__extended.txt"
            backup_tools__main(argv)

        argv = [
            *argv, r'-oX',
            fr'{dir_name!s}/out__result_of_dir_cmp__relative__extended.txt',
            '-f'
        ]
        backup_tools__main(argv)
        #
        argv = [
            r'update_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{dir_name!s}/src', r'-iX',
            fr'{dir_name!s}/out__result_of_dir_cmp__relative__extended.txt'
        ]
        backup_tools__main(argv)
        #
        argv = [
            r'extract_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{src_extract_dir_name!s}'
        ]
        backup_tools__main(argv)
        #
        result4__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            src_extract_dir_path)
        repos4__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path / 'repos')
        whole4__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            sf.dir_path)
        result_of_dir_cmp__relative__extended__dir_lhs__dir_rhs = whole4__fsys_mapping_ex[
            'out__result_of_dir_cmp__relative__extended.txt']
        if 1:
            dir_lhs = sf._name2fsys_mapping_ex['dir_lhs']
            dir_rhs = sf._name2fsys_mapping_ex['dir_rhs']
            assert expected3__fsys_mapping_ex == dir_lhs
            assert expected4__fsys_mapping_ex == dir_rhs
            if 0:  #[01_to_turn_off]
                print(fr'dir_lhs={dir_lhs}')
                print(fr'dir_rhs={dir_rhs}')
                print(
                    fr'result_of_dir_cmp__relative__extended__dir_lhs__dir_rhs={result_of_dir_cmp__relative__extended__dir_lhs__dir_rhs}'
                )
        assert result_of_dir_cmp__relative__extended__dir_lhs__dir_rhs == b"=====\n('master', 1)\n=====\n[]\n=====\n[(-1, 'diff_dir/a')\n,(1, 'diff_dir/b')\n,(0, 'diff_file')\n,(-2, 'ldir_rfile')\n,(2, 'lfile_rdir')\n,(-1, 'lonly_dir')\n,(-1, 'lonly_file')\n,(1, 'ronly_dir')\n,(1, 'ronly_file')\n,]\n=====\n"
        assert expected3__fsys_mapping_ex == \
            {'same': {'e': {}, 'f': b'', 'g': b'4321', 'h': b'abcd', 'i': {'a': {}}, 'j': {'b': b''}, 'k': {'c': b'4321'}, 'l': {'d': b'abcd'}, 'm': {'e': {}, 'f': b'', 'g': b'4321', 'h': b'abcd'}}, 'diff_dir': {'a': {}}, 'diff_file': b'4321', 'lonly_dir': {'a': {}}, 'lonly_file': b'4321', 'ldir_rfile': {'a': {}}, 'lfile_rdir': b'4321'}
        assert expected4__fsys_mapping_ex == \
            {'same': {'e': {}, 'f': b'', 'g': b'4321', 'h': b'abcd', 'i': {'a': {}}, 'j': {'b': b''}, 'k': {'c': b'4321'}, 'l': {'d': b'abcd'}, 'm': {'e': {}, 'f': b'', 'g': b'4321', 'h': b'abcd'}}, 'diff_dir': {'b': b''}, 'diff_file': b'abcd', 'ronly_dir': {'b': b''}, 'ronly_file': b'abcd', 'ldir_rfile': b'abcd', 'lfile_rdir': {'b': b''}}

        if 0:  #[01_to_turn_off]
            print_err(result4__fsys_mapping_ex)
            print_err(expected4__fsys_mapping_ex)
            #print_err(repos4__fsys_mapping_ex)
            e_sub_r = fsys_mapping_ex_diff__tmay__slow(
                old_fsys_mapping_ex=result4__fsys_mapping_ex,
                new_fsys_mapping_ex=expected4__fsys_mapping_ex)
            r_sub_e = fsys_mapping_ex_diff__tmay__slow(
                old_fsys_mapping_ex=expected4__fsys_mapping_ex,
                new_fsys_mapping_ex=result4__fsys_mapping_ex)
            print_err(e_sub_r)
            print_err(r_sub_e)
        if 0:  #[01_to_turn_off]
            #print(repos4__fsys_mapping_ex)
            repos4sub3__fsys_mapping_ex = fsys_mapping_ex_diff__tmay__slow(
                old_fsys_mapping_ex=repos3__fsys_mapping_ex,
                new_fsys_mapping_ex=repos4__fsys_mapping_ex)
            from pprint import pprint
            print('repos4sub3__fsys_mapping_ex=:')
            pprint(repos4sub3__fsys_mapping_ex)
            #print('repos4__fsys_mapping_ex=:')
            #pprint(repos4__fsys_mapping_ex)
            print('whole4__fsys_mapping_ex=:')
            pprint(whole4__fsys_mapping_ex)
        #assert repos4__fsys_mapping_ex == sf.repos4__fsys_mapping_ex
        #   useless: since mtime!!

        sf.assertEqual(result4__fsys_mapping_ex, expected4__fsys_mapping_ex)

        #################################
        #################################
        #################################
        # repos/master ~=~ src_extract == src == dir_rhs
        #now:
        #   ./repos === master:{0:empty, 1:dir_lhs, 2:dir_rhs}
        #   ./src === dir_rhs
        #   ./src_extract === dir_rhs
        #
        #
        # src_extract := repos/master[2] ~ dir_rhs
        #
        filedir_remove(src_extract_dir_path, missing_ok=False)
        src_extract_dir_path.mkdir()
        #
        argv = [
            r'extract_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-idx', r'2',
            r'-workdir', fr'{src_extract_dir_name!s}'
        ]
        backup_tools__main(argv)
        #
        result4_2__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            src_extract_dir_path)
        sf.assertEqual(result4_2__fsys_mapping_ex, expected4__fsys_mapping_ex)

        # src_extract := repos/master[1] ~ dir_lhs
        #
        filedir_remove(src_extract_dir_path, missing_ok=False)
        src_extract_dir_path.mkdir()
        #
        argv = [
            r'extract_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-idx', r'1',
            r'-workdir', fr'{src_extract_dir_name!s}'
        ]
        backup_tools__main(argv)
        #
        result4_1__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            src_extract_dir_path)
        sf.assertEqual(result4_1__fsys_mapping_ex, expected3__fsys_mapping_ex)

        # src_extract := repos/master[0] ~ {}
        #
        filedir_remove(src_extract_dir_path, missing_ok=False)
        src_extract_dir_path.mkdir()
        #
        argv = [
            r'extract_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-idx', r'0',
            r'-workdir', fr'{src_extract_dir_name!s}'
        ]
        backup_tools__main(argv)
        #
        result4_0__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            src_extract_dir_path)
        sf.assertEqual(result4_0__fsys_mapping_ex, {})

        #-encoding_ignorefile4workdir/--rhs_ignorefile_relative_path_encoding_pairs
        #
        # repos/master ~=~ src == dir_rhs
        # src_extract == {}
        #
        #now:
        #   ./repos === master:{0:empty, 1:dir_lhs, 2:dir_rhs}
        #   ./src === dir_rhs
        #   ./src_extract === {}
        #
        #
        # src := initial5__fsys_mapping_ex
        # repos/master[3] ~:=~ expected5__fsys_mapping_ex <<== src == initial5__fsys_mapping_ex
        # src_extract ~:=~ repos/master[3] ~ expected5__fsys_mapping_ex
        #
        result_of_dir_cmp__relative__extended__path = sf.dir_path / 'out__result_of_dir_cmp__relative__extended.txt'

        filedir_remove(src_dir_path, missing_ok=False)
        ignorefile_rpath = PurePosixPath(
            '__pycache__/___ignorefile4dir_cmp___.txt')
        assert str is (type(ignorefile_rpath.name))
        error5__fsys_mapping_ex = {
            '__pycache__': {
                ignorefile_rpath.name: sf.ignorefile__bytes
            }
        }
        build_whole_dir_as_fsys_mapping_ex(src_dir_path,
                                           error5__fsys_mapping_ex)

        argv = [
            r'cmp_branch_dir', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{dir_name!s}/src', r'-encoding_ignorefile4workdir',
            fr':utf8@{ignorefile_rpath!s}'
        ]
        with sf.assertRaises((ValueError)):
            #from nn_ns.filedir.backup_tools.IRepositorySetting::IRepositorySetting__working_root_dir_path.mk_relative_path2is_ignore::if any(map(dir_cmp__kw__ignore_relative_path, never_ignored_path_set)): raise ValueError(fr'check ignorefile content, not to ignore ignorefile.parents, or move ignorefile to non-ignored location')
            backup_tools__main(argv)

        ignorefile_rpath = PurePosixPath('___ignorefile4dir_cmp___.txt')
        initial5__fsys_mapping_ex = {
            ignorefile_rpath.name: sf.ignorefile__bytes,
            '__pycache__': {
                'skipped_file': b'',
                'skipped_dir': {}
            },
            '.git': {
                'skipped_file': b'',
                'skipped_dir': {}
            },
            'aaaa': {
                '.mypy_cache': b'',
                'bbbb': b''
            },
            **expected4__fsys_mapping_ex
        }
        filedir_remove(src_dir_path, missing_ok=False)
        build_whole_dir_as_fsys_mapping_ex(src_dir_path,
                                           initial5__fsys_mapping_ex)

        expected5__fsys_mapping_ex = {
            ignorefile_rpath.name: sf.ignorefile__bytes,
            'aaaa': {
                'bbbb': b''
            },
            **expected4__fsys_mapping_ex
        }

        argv = [
            r'cmp_branch_dir', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{dir_name!s}/src', r'-encoding_ignorefile4workdir',
            fr':utf8@{ignorefile_rpath!s}', fr':utf8@nonexist_ignorefile_rpath'
        ]
        if 0:  #[01_to_turn_off]
            #show   "out__result_of_dir_cmp__relative__extended.txt"
            backup_tools__main(argv)

        argv = [
            *argv, r'-oX',
            fr'{dir_name!s}/out__result_of_dir_cmp__relative__extended.txt',
            '-f'
        ]
        backup_tools__main(argv)
        #
        if 1:
            #problem: ignorefile_rpath should not be skipped. how? parents should not be ignored
            #problem: some file/dir under new dir not be show. how?  handle at 2nd-phase
            bs = result_of_dir_cmp__relative__extended__path.read_bytes()
            #print(bs)
            assert bs == b"=====\n('master', 2)\n=====\n[('___ignorefile4dir_cmp___.txt', 'utf8'), ('nonexist_ignorefile_rpath', 'utf8')]\n=====\n[(1, '___ignorefile4dir_cmp___.txt')\n,(1, 'aaaa')\n,]\n=====\n"
            #stable ordered
        #
        argv = [
            r'update_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{dir_name!s}/src', r'-iX',
            fr'{dir_name!s}/out__result_of_dir_cmp__relative__extended.txt'
        ]
        backup_tools__main(argv)
        #
        argv = [
            r'extract_branch', r'-cache', fr'{dir_name!s}/extra', r'-repos',
            fr'{dir_name!s}/repos', r'-name', r'master', r'-workdir',
            fr'{src_extract_dir_name!s}'
        ]
        backup_tools__main(argv)
        #
        result5__fsys_mapping_ex = read_whole_dir_as_fsys_mapping_ex(
            src_extract_dir_path)
        sf.assertEqual(result5__fsys_mapping_ex, expected5__fsys_mapping_ex)

        #

        return
Beispiel #6
0
r'''

nn_ns.filedir.backup_tools.__main__
py -m nn_ns.filedir.backup_tools
py -m nn_ns.filedir.backup_tools.__main__
py -m nn_ns.filedir.backup_tools.main
#'''

from nn_ns.filedir.backup_tools.main import main as backup_tools__main
if __name__ == '__main__':
    backup_tools__main()