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
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
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
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
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
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()