Switched to a new branch 'master'
M	git/ext/gitdb
branch 'master' set up to track 'origin/master'.
HEAD is now at d1297f65 Merge pull request #1198 from RyaxTech/replace-password-in-uri-by-stars
HEAD is now at d906f31a remove comment
HEAD is now at 6643a9fe Merge pull request #1202 from Yobmod/main
HEAD is now at 141cd651 adjust changelog prior to release
Submodule 'smmap' (https://github.com/gitpython-developers/smmap.git) registered for path 'git/ext/gitdb/gitdb/ext/smmap'
Cloning into '/build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap'...
Submodule path 'git/ext/gitdb/gitdb/ext/smmap': checked out '334ef84a05c953ed5dbec7b9c6d4310879eeab5a'
============================= test session starts ==============================
platform linux -- Python 3.10.9, pytest-7.2.1, pluggy-1.0.0 -- /usr/bin/python
cachedir: .pytest_cache
rootdir: /dev, configfile: null
collecting ... collected 522 items / 20 deselected / 502 selected

../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_buf.py::TestBuf::test_basics PASSED [  0%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_mman.py::TestMMan::test_cursor PASSED [  0%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_mman.py::TestMMan::test_memman_operation PASSED [  0%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_mman.py::TestMMan::test_memory_manager PASSED [  0%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_tutorial.py::TestTutorial::test_example PASSED [  0%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_util.py::TestMMan::test_region PASSED [  1%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_util.py::TestMMan::test_region_list PASSED [  1%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_util.py::TestMMan::test_util PASSED [  1%]
../../../../dev/git/ext/gitdb/gitdb/ext/smmap/smmap/test/test_util.py::TestMMan::test_window PASSED [  1%]
../../../../dev/git/ext/gitdb/gitdb/test/test_pack.py::TestPack::test_pack PASSED [  1%]
../../../../dev/git/ext/gitdb/gitdb/test/test_pack.py::TestPack::test_pack_64 SKIPPED [  2%]
../../../../dev/git/ext/gitdb/gitdb/test/test_pack.py::TestPack::test_pack_entity PASSED [  2%]
../../../../dev/git/ext/gitdb/gitdb/test/test_pack.py::TestPack::test_pack_index PASSED [  2%]
../../../../dev/git/ext/gitdb/gitdb/test/test_stream.py::TestStream::test_compressed_writer PASSED [  2%]
../../../../dev/git/ext/gitdb/gitdb/test/test_stream.py::TestStream::test_decompress_reader PASSED [  2%]
../../../../dev/git/ext/gitdb/gitdb/test/test_stream.py::TestStream::test_decompress_reader_special_case PASSED [  3%]
../../../../dev/git/ext/gitdb/gitdb/test/test_stream.py::TestStream::test_sha_writer PASSED [  3%]
../../../../dev/git/ext/gitdb/gitdb/test/test_util.py::TestUtils::test_basics PASSED [  3%]
../../../../dev/git/ext/gitdb/gitdb/test/test_util.py::TestUtils::test_lockedfd PASSED [  3%]
../../../../dev/git/ext/gitdb/gitdb/test/db/test_loose.py::TestLooseDB::test_basics PASSED [  3%]
../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack.py::TestPackedDBPerformance::test_correctness FAILED [  4%]
../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack.py::TestPackedDBPerformance::test_loose_correctness FAILED [  4%]
../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack.py::TestPackedDBPerformance::test_pack_random_access FAILED [  4%]
../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack_streaming.py::TestPackStreamingPerformance::test_pack_writing FAILED [  4%]
../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack_streaming.py::TestPackStreamingPerformance::test_stream_reading FAILED [  4%]
../../../../dev/git/ext/gitdb/gitdb/test/performance/test_stream.py::TestObjDBPerformance::test_large_data_streaming PASSED [  5%]
../../../../dev/test/test_actor.py::TestActor::test_from_string_should_handle_just_name PASSED [  5%]
../../../../dev/test/test_actor.py::TestActor::test_from_string_should_separate_name_and_email PASSED [  5%]
../../../../dev/test/test_actor.py::TestActor::test_should_display_representation PASSED [  5%]
../../../../dev/test/test_actor.py::TestActor::test_str_should_alias_name PASSED [  5%]
../../../../dev/test/test_blob.py::TestBlob::test_mime_type_should_return_mime_type_for_known_types PASSED [  6%]
../../../../dev/test/test_blob.py::TestBlob::test_mime_type_should_return_text_plain_for_unknown_types PASSED [  6%]
../../../../dev/test/test_blob.py::TestBlob::test_nodict PASSED          [  6%]
../../../../dev/test/test_blob_filter.py::test_blob_filter[paths0-path0-True] PASSED [  6%]
../../../../dev/test/test_blob_filter.py::test_blob_filter[paths1-path1-True] PASSED [  6%]
../../../../dev/test/test_blob_filter.py::test_blob_filter[paths2-path2-False] PASSED [  7%]
../../../../dev/test/test_blob_filter.py::test_blob_filter[paths3-path3-True] PASSED [  7%]
../../../../dev/test/test_clone.py::TestClone::test_checkout_in_non_empty_dir PASSED [  7%]
../../../../dev/test/test_commit.py::TestCommit::test_ambiguous_arg_iteration PASSED [  7%]
../../../../dev/test/test_commit.py::TestCommit::test_bake PASSED        [  7%]
../../../../dev/test/test_commit.py::TestCommit::test_commit_co_authors PASSED [  8%]
../../../../dev/test/test_commit.py::TestCommit::test_count PASSED       [  8%]
../../../../dev/test/test_commit.py::TestCommit::test_datetimes PASSED   [  8%]
../../../../dev/test/test_commit.py::TestCommit::test_equality PASSED    [  8%]
../../../../dev/test/test_commit.py::TestCommit::test_gpgsig PASSED      [  8%]
../../../../dev/test/test_commit.py::TestCommit::test_invalid_commit PASSED [  9%]
../../../../dev/test/test_commit.py::TestCommit::test_iter_items PASSED  [  9%]
../../../../dev/test/test_commit.py::TestCommit::test_iter_parents PASSED [  9%]
../../../../dev/test/test_commit.py::TestCommit::test_iteration PASSED   [  9%]
../../../../dev/test/test_commit.py::TestCommit::test_list PASSED        [  9%]
../../../../dev/test/test_commit.py::TestCommit::test_name_rev PASSED    [ 10%]
../../../../dev/test/test_commit.py::TestCommit::test_replace_invalid_attribute PASSED [ 10%]
../../../../dev/test/test_commit.py::TestCommit::test_replace_new_sha PASSED [ 10%]
../../../../dev/test/test_commit.py::TestCommit::test_replace_no_changes PASSED [ 10%]
../../../../dev/test/test_commit.py::TestCommit::test_repr PASSED        [ 10%]
../../../../dev/test/test_commit.py::TestCommit::test_rev_list_bisect_all PASSED [ 11%]
../../../../dev/test/test_commit.py::TestCommit::test_serialization PASSED [ 11%]
../../../../dev/test/test_commit.py::TestCommit::test_serialization_unicode_support PASSED [ 11%]
../../../../dev/test/test_commit.py::TestCommit::test_stats PASSED       [ 11%]
../../../../dev/test/test_commit.py::TestCommit::test_str PASSED         [ 11%]
../../../../dev/test/test_commit.py::TestCommit::test_trailers PASSED    [ 12%]
../../../../dev/test/test_commit.py::TestCommit::test_traversal PASSED   [ 12%]
../../../../dev/test/test_commit.py::TestCommit::test_unicode_actor PASSED [ 12%]
../../../../dev/test/test_config.py::TestBase::test_add_to_multiple PASSED [ 12%]
../../../../dev/test/test_config.py::TestBase::test_complex_aliases PASSED [ 12%]
../../../../dev/test/test_config.py::TestBase::test_conditional_includes_from_branch_name PASSED [ 13%]
../../../../dev/test/test_config.py::TestBase::test_conditional_includes_from_branch_name_error PASSED [ 13%]
../../../../dev/test/test_config.py::TestBase::test_conditional_includes_from_git_dir PASSED [ 13%]
../../../../dev/test/test_config.py::TestBase::test_config_include PASSED [ 13%]
../../../../dev/test/test_config.py::TestBase::test_empty_config_value PASSED [ 13%]
../../../../dev/test/test_config.py::TestBase::test_includes_order SKIPPED [ 14%]
../../../../dev/test/test_config.py::TestBase::test_lock_reentry PASSED  [ 14%]
../../../../dev/test/test_config.py::TestBase::test_multi_line_config PASSED [ 14%]
../../../../dev/test/test_config.py::TestBase::test_multiple_to_single PASSED [ 14%]
../../../../dev/test/test_config.py::TestBase::test_multiple_values PASSED [ 14%]
../../../../dev/test/test_config.py::TestBase::test_multiple_values_rename PASSED [ 15%]
../../../../dev/test/test_config.py::TestBase::test_read_write PASSED    [ 15%]
../../../../dev/test/test_config.py::TestBase::test_rename PASSED        [ 15%]
../../../../dev/test/test_config.py::TestBase::test_setlast PASSED       [ 15%]
../../../../dev/test/test_config.py::TestBase::test_single_to_multiple PASSED [ 15%]
../../../../dev/test/test_diff.py::TestDiff::test_binary_diff_1 PASSED   [ 16%]
../../../../dev/test/test_diff.py::TestDiff::test_binary_diff_2 PASSED   [ 16%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_file_with_colon PASSED [ 16%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_index PASSED      [ 16%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_index_raw_format PASSED [ 16%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_initial_commit PASSED [ 17%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_interface PASSED  [ 17%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_of_modified_files_not_added_to_the_index PASSED [ 17%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_patch_format PASSED [ 17%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_submodule PASSED  [ 17%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_unsafe_paths PASSED [ 18%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_with_change_in_type PASSED [ 18%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_with_copied_file PASSED [ 18%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_with_rename PASSED [ 18%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_with_spaces PASSED [ 18%]
../../../../dev/test/test_diff.py::TestDiff::test_diff_with_staged_file PASSED [ 19%]
../../../../dev/test/test_diff.py::TestDiff::test_empty_diff PASSED      [ 19%]
../../../../dev/test/test_diff.py::TestDiff::test_list_from_string_new_mode PASSED [ 19%]
../../../../dev/test/test_docs.py::Tutorials::test_add_file_and_commit PASSED [ 19%]
../../../../dev/test/test_docs.py::Tutorials::test_init_repo_object PASSED [ 19%]
../../../../dev/test/test_docs.py::Tutorials::test_references_and_objects PASSED [ 20%]
../../../../dev/test/test_docs.py::Tutorials::test_submodules PASSED     [ 20%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_001____cmd______None__None___None_ PASSED [ 20%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_002____cmd______None__None____steram__ PASSED [ 20%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_003____cmd______None__None____ομορφο_stream__ PASSED [ 20%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_004____cmd______7___exit_code_7_____None_ PASSED [ 21%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_005____cmd______7___exit_code_7______steram__ PASSED [ 21%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_006____cmd______7___exit_code_7______ομορφο_stream__ PASSED [ 21%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_007____cmd_______Some_string_____Some_string_____None_ PASSED [ 21%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_008____cmd_______Some_string_____Some_string______steram__ PASSED [ 21%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_009____cmd_______Some_string_____Some_string______ομορφο_stream__ PASSED [ 22%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_010____cmd_______παλιο_string_____παλιο_string_____None_ PASSED [ 22%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_011____cmd_______παλιο_string_____παλιο_string______steram__ PASSED [ 22%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_012____cmd_______παλιο_string_____παλιο_string______ομορφο_stream__ PASSED [ 22%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_013 PASSED [ 22%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_014 PASSED [ 23%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_015 PASSED [ 23%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_016 PASSED [ 23%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_017 PASSED [ 23%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_018 PASSED [ 23%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_019 PASSED [ 24%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_020 PASSED [ 24%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_021 PASSED [ 24%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_022____θνιψοδε______None__None___None_ PASSED [ 24%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_023____θνιψοδε______None__None____steram__ PASSED [ 24%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_024____θνιψοδε______None__None____ομορφο_stream__ PASSED [ 25%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_025____θνιψοδε______7___exit_code_7_____None_ PASSED [ 25%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_026____θνιψοδε______7___exit_code_7______steram__ PASSED [ 25%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_027____θνιψοδε______7___exit_code_7______ομορφο_stream__ PASSED [ 25%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_028____θνιψοδε_______Some_string_____Some_string_____None_ PASSED [ 25%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_029____θνιψοδε_______Some_string_____Some_string______steram__ PASSED [ 26%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_030____θνιψοδε_______Some_string_____Some_string______ομορφο_stream__ PASSED [ 26%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_031____θνιψοδε_______παλιο_string_____παλιο_string_____None_ PASSED [ 26%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_032____θνιψοδε_______παλιο_string_____παλιο_string______steram__ PASSED [ 26%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_033____θνιψοδε_______παλιο_string_____παλιο_string______ομορφο_stream__ PASSED [ 26%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_034 PASSED [ 27%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_035 PASSED [ 27%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_036 PASSED [ 27%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_037 PASSED [ 27%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_038 PASSED [ 27%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_039 PASSED [ 28%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_040 PASSED [ 28%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_041 PASSED [ 28%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_042 PASSED [ 28%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_043____θνιψοδε____normal____argvs_____None__None___None_ PASSED [ 28%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_044____θνιψοδε____normal____argvs_____None__None____steram__ PASSED [ 29%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_045____θνιψοδε____normal____argvs_____None__None____ομορφο_stream__ PASSED [ 29%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_046____θνιψοδε____normal____argvs_____7___exit_code_7_____None_ PASSED [ 29%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_047____θνιψοδε____normal____argvs_____7___exit_code_7______steram__ PASSED [ 29%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_048____θνιψοδε____normal____argvs_____7___exit_code_7______ομορφο_stream__ PASSED [ 29%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_049____θνιψοδε____normal____argvs______Some_string_____Some_string_____None_ PASSED [ 30%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_050____θνιψοδε____normal____argvs______Some_string_____Some_string______steram__ PASSED [ 30%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_051____θνιψοδε____normal____argvs______Some_string_____Some_string______ομορφο_stream__ PASSED [ 30%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_052____θνιψοδε____normal____argvs______παλιο_string_____παλιο_string_____None_ PASSED [ 30%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_053____θνιψοδε____normal____argvs______παλιο_string_____παλιο_string______steram__ PASSED [ 30%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_054____θνιψοδε____normal____argvs______παλιο_string_____παλιο_string______ομορφο_stream__ PASSED [ 31%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_055 PASSED [ 31%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_056 PASSED [ 31%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_057 PASSED [ 31%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_058 PASSED [ 31%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_059 PASSED [ 32%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_060 PASSED [ 32%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_061 PASSED [ 32%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_062 PASSED [ 32%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_063 PASSED [ 32%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_064____cmd____ελληνικα____args_____None__None___None_ PASSED [ 33%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_065____cmd____ελληνικα____args_____None__None____steram__ PASSED [ 33%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_066____cmd____ελληνικα____args_____None__None____ομορφο_stream__ PASSED [ 33%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_067____cmd____ελληνικα____args_____7___exit_code_7_____None_ PASSED [ 33%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_068____cmd____ελληνικα____args_____7___exit_code_7______steram__ PASSED [ 33%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_069____cmd____ελληνικα____args_____7___exit_code_7______ομορφο_stream__ PASSED [ 34%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_070____cmd____ελληνικα____args______Some_string_____Some_string_____None_ PASSED [ 34%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_071____cmd____ελληνικα____args______Some_string_____Some_string______steram__ PASSED [ 34%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_072____cmd____ελληνικα____args______Some_string_____Some_string______ομορφο_stream__ PASSED [ 34%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_073____cmd____ελληνικα____args______παλιο_string_____παλιο_string_____None_ PASSED [ 34%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_074____cmd____ελληνικα____args______παλιο_string_____παλιο_string______steram__ PASSED [ 35%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_075____cmd____ελληνικα____args______παλιο_string_____παλιο_string______ομορφο_stream__ PASSED [ 35%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_076 PASSED [ 35%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_077 PASSED [ 35%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_078 PASSED [ 35%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_079 PASSED [ 36%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_080 PASSED [ 36%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_081 PASSED [ 36%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_082 PASSED [ 36%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_083 PASSED [ 36%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_084 PASSED [ 37%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_085____θνιψοδε____κι____αλλα____strange____args_____None__None___None_ PASSED [ 37%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_086____θνιψοδε____κι____αλλα____strange____args_____None__None____steram__ PASSED [ 37%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_087____θνιψοδε____κι____αλλα____strange____args_____None__None____ομορφο_stream__ PASSED [ 37%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_088____θνιψοδε____κι____αλλα____strange____args_____7___exit_code_7_____None_ PASSED [ 37%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_089____θνιψοδε____κι____αλλα____strange____args_____7___exit_code_7______steram__ PASSED [ 38%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_090____θνιψοδε____κι____αλλα____strange____args_____7___exit_code_7______ομορφο_stream__ PASSED [ 38%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_091____θνιψοδε____κι____αλλα____strange____args______Some_string_____Some_string_____None_ PASSED [ 38%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_092____θνιψοδε____κι____αλλα____strange____args______Some_string_____Some_string______steram__ PASSED [ 38%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_093____θνιψοδε____κι____αλλα____strange____args______Some_string_____Some_string______ομορφο_stream__ PASSED [ 38%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_094____θνιψοδε____κι____αλλα____strange____args______παλιο_string_____παλιο_string_____None_ PASSED [ 39%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_095____θνιψοδε____κι____αλλα____strange____args______παλιο_string_____παλιο_string______steram__ PASSED [ 39%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_096____θνιψοδε____κι____αλλα____strange____args______παλιο_string_____παλιο_string______ομορφο_stream__ PASSED [ 39%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_097 PASSED [ 39%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_098 PASSED [ 39%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_099 PASSED [ 40%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_100 PASSED [ 40%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_101 PASSED [ 40%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_102 PASSED [ 40%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_103 PASSED [ 40%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_104 PASSED [ 41%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_105 PASSED [ 41%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_106____θνιψοδε____κι____αλλα____non_unicode____args_____None__None___None_ PASSED [ 41%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_107____θνιψοδε____κι____αλλα____non_unicode____args_____None__None____steram__ PASSED [ 41%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_108____θνιψοδε____κι____αλλα____non_unicode____args_____None__None____ομορφο_stream__ PASSED [ 41%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_109____θνιψοδε____κι____αλλα____non_unicode____args_____7___exit_code_7_____None_ PASSED [ 42%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_110____θνιψοδε____κι____αλλα____non_unicode____args_____7___exit_code_7______steram__ PASSED [ 42%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_111____θνιψοδε____κι____αλλα____non_unicode____args_____7___exit_code_7______ομορφο_stream__ PASSED [ 42%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_112____θνιψοδε____κι____αλλα____non_unicode____args______Some_string_____Some_string_____None_ PASSED [ 42%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_113____θνιψοδε____κι____αλλα____non_unicode____args______Some_string_____Some_string______steram__ PASSED [ 42%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_114____θνιψοδε____κι____αλλα____non_unicode____args______Some_string_____Some_string______ομορφο_stream__ PASSED [ 43%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_115____θνιψοδε____κι____αλλα____non_unicode____args______παλιο_string_____παλιο_string_____None_ PASSED [ 43%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_116____θνιψοδε____κι____αλλα____non_unicode____args______παλιο_string_____παλιο_string______steram__ PASSED [ 43%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_117____θνιψοδε____κι____αλλα____non_unicode____args______παλιο_string_____παλιο_string______ομορφο_stream__ PASSED [ 43%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_118 PASSED [ 43%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_119 PASSED [ 44%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_120 PASSED [ 44%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_121 PASSED [ 44%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_122 PASSED [ 44%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_123 PASSED [ 44%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_124 PASSED [ 45%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_125 PASSED [ 45%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_126 PASSED [ 45%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_127____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo_____None__None___None_ PASSED [ 45%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_128____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo_____None__None____steram__ PASSED [ 45%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_129____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo_____None__None____ομορφο_stream__ PASSED [ 46%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_130____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo_____7___exit_code_7_____None_ PASSED [ 46%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_131____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo_____7___exit_code_7______steram__ PASSED [ 46%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_132____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo_____7___exit_code_7______ομορφο_stream__ PASSED [ 46%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_133____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo______Some_string_____Some_string_____None_ PASSED [ 46%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_134____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo______Some_string_____Some_string______steram__ PASSED [ 47%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_135____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo______Some_string_____Some_string______ομορφο_stream__ PASSED [ 47%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_136____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo______παλιο_string_____παλιο_string_____None_ PASSED [ 47%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_137____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo______παλιο_string_____παλιο_string______steram__ PASSED [ 47%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_138____git____clone_____v____https___fakeuser_fakepassword1234_fakerepo_example_com_testrepo______παλιο_string_____παλιο_string______ομορφο_stream__ PASSED [ 47%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_139 PASSED [ 48%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_140 PASSED [ 48%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_141 PASSED [ 48%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_142 PASSED [ 48%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_143 PASSED [ 48%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_144 PASSED [ 49%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_145 PASSED [ 49%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_146 PASSED [ 49%]
../../../../dev/test/test_exc.py::TExc::test_CommandError_unicode_147 PASSED [ 49%]
../../../../dev/test/test_exc.py::TExc::test_ExceptionsHaveBaseClass PASSED [ 49%]
../../../../dev/test/test_exc.py::TExc::test_GitCommandError_1____cmd1____None_ PASSED [ 50%]
../../../../dev/test/test_exc.py::TExc::test_GitCommandError_2____cmd1_____some_cause__ PASSED [ 50%]
../../../../dev/test/test_exc.py::TExc::test_GitCommandError_3 PASSED    [ 50%]
../../../../dev/test/test_exc.py::TExc::test_GitCommandNotFound_1____cmd1____None_ PASSED [ 50%]
../../../../dev/test/test_exc.py::TExc::test_GitCommandNotFound_2____cmd1_____some_cause__ PASSED [ 50%]
../../../../dev/test/test_exc.py::TExc::test_GitCommandNotFound_3 PASSED [ 50%]
../../../../dev/test/test_exc.py::TExc::test_HookExecutionError_1____cmd1____None_ PASSED [ 51%]
../../../../dev/test/test_exc.py::TExc::test_HookExecutionError_2____cmd1_____some_cause__ PASSED [ 51%]
../../../../dev/test/test_exc.py::TExc::test_HookExecutionError_3 PASSED [ 51%]
../../../../dev/test/test_fun.py::TestFun::test_aggressive_tree_merge PASSED [ 51%]
../../../../dev/test/test_fun.py::TestFun::test_linked_worktree_traversal PASSED [ 51%]
../../../../dev/test/test_fun.py::TestFun::test_stat_mode_to_index_mode PASSED [ 52%]
../../../../dev/test/test_fun.py::TestFun::test_three_way_merge PASSED   [ 52%]
../../../../dev/test/test_fun.py::TestFun::test_tree_entries_from_data_with_failing_name_decode_py3 PASSED [ 52%]
../../../../dev/test/test_fun.py::TestFun::test_tree_traversal PASSED    [ 52%]
../../../../dev/test/test_fun.py::TestFun::test_tree_traversal_single PASSED [ 52%]
../../../../dev/test/test_git.py::TestGit::test_call_process_calls_execute PASSED [ 53%]
../../../../dev/test/test_git.py::TestGit::test_call_unpack_args PASSED  [ 53%]
../../../../dev/test/test_git.py::TestGit::test_call_unpack_args_unicode PASSED [ 53%]
../../../../dev/test/test_git.py::TestGit::test_change_to_transform_kwargs_does_not_break_command_options PASSED [ 53%]
../../../../dev/test/test_git.py::TestGit::test_cmd_override PASSED      [ 53%]
../../../../dev/test/test_git.py::TestGit::test_env_vars_passed_to_git PASSED [ 54%]
../../../../dev/test/test_git.py::TestGit::test_environment PASSED       [ 54%]
../../../../dev/test/test_git.py::TestGit::test_handle_process_output PASSED [ 54%]
../../../../dev/test/test_git.py::TestGit::test_insert_after_kwarg_raises PASSED [ 54%]
../../../../dev/test/test_git.py::TestGit::test_it_accepts_environment_variables PASSED [ 54%]
../../../../dev/test/test_git.py::TestGit::test_it_accepts_stdin PASSED  [ 55%]
../../../../dev/test/test_git.py::TestGit::test_it_executes_git_to_shell_and_returns_result PASSED [ 55%]
../../../../dev/test/test_git.py::TestGit::test_it_ignores_false_kwargs PASSED [ 55%]
../../../../dev/test/test_git.py::TestGit::test_it_raises_errors PASSED  [ 55%]
../../../../dev/test/test_git.py::TestGit::test_it_raises_proper_exception_with_output_stream PASSED [ 55%]
../../../../dev/test/test_git.py::TestGit::test_it_transforms_kwargs_into_git_command_arguments PASSED [ 56%]
../../../../dev/test/test_git.py::TestGit::test_options_are_passed_to_git PASSED [ 56%]
../../../../dev/test/test_git.py::TestGit::test_persistent_cat_file_command PASSED [ 56%]
../../../../dev/test/test_git.py::TestGit::test_persistent_options PASSED [ 56%]
../../../../dev/test/test_git.py::TestGit::test_refresh PASSED           [ 56%]
../../../../dev/test/test_git.py::TestGit::test_single_char_git_options_are_passed_to_git PASSED [ 57%]
../../../../dev/test/test_git.py::TestGit::test_version PASSED           [ 57%]
../../../../dev/test/test_index.py::TestIndex::test__to_relative_path_at_root PASSED [ 57%]
../../../../dev/test/test_index.py::TestIndex::test_add_a_file_with_wildcard_chars PASSED [ 57%]
../../../../dev/test/test_index.py::TestIndex::test_add_utf8P_path PASSED [ 57%]
../../../../dev/test/test_index.py::TestIndex::test_commit_msg_hook_fail PASSED [ 58%]
../../../../dev/test/test_index.py::TestIndex::test_commit_msg_hook_success PASSED [ 58%]
../../../../dev/test/test_index.py::TestIndex::test_compare_write_tree PASSED [ 58%]
../../../../dev/test/test_index.py::TestIndex::test_index_add_pathlike PASSED [ 58%]
../../../../dev/test/test_index.py::TestIndex::test_index_bare_add PASSED [ 58%]
../../../../dev/test/test_index.py::TestIndex::test_index_file_base PASSED [ 59%]
../../../../dev/test/test_index.py::TestIndex::test_index_file_diffing PASSED [ 59%]
../../../../dev/test/test_index.py::TestIndex::test_index_file_from_tree PASSED [ 59%]
../../../../dev/test/test_index.py::TestIndex::test_index_lock_handling PASSED [ 59%]
../../../../dev/test/test_index.py::TestIndex::test_index_merge_tree PASSED [ 59%]
../../../../dev/test/test_index.py::TestIndex::test_index_mutation PASSED [ 60%]
../../../../dev/test/test_index.py::TestIndex::test_index_new PASSED     [ 60%]
../../../../dev/test/test_index.py::TestIndex::test_index_single_addremove PASSED [ 60%]
../../../../dev/test/test_index.py::TestIndex::test_pre_commit_hook_fail PASSED [ 60%]
../../../../dev/test/test_index.py::TestIndex::test_pre_commit_hook_success PASSED [ 60%]
../../../../dev/test/test_installation.py::TestInstallation::test_installation PASSED [ 61%]
../../../../dev/test/test_reflog.py::TestRefLog::test_reflogentry PASSED [ 61%]
../../../../dev/test/test_refs.py::TestRefs::test_dereference_recursive PASSED [ 61%]
../../../../dev/test/test_refs.py::TestRefs::test_from_path PASSED       [ 61%]
../../../../dev/test/test_refs.py::TestRefs::test_head_checkout_detached_head PASSED [ 61%]
../../../../dev/test/test_refs.py::TestRefs::test_head_reset PASSED      [ 62%]
../../../../dev/test/test_refs.py::TestRefs::test_heads PASSED           [ 62%]
../../../../dev/test/test_refs.py::TestRefs::test_is_valid PASSED        [ 62%]
../../../../dev/test/test_refs.py::TestRefs::test_orig_head PASSED       [ 62%]
../../../../dev/test/test_refs.py::TestRefs::test_reflog PASSED          [ 62%]
../../../../dev/test/test_refs.py::TestRefs::test_refs PASSED            [ 63%]
../../../../dev/test/test_refs.py::TestRefs::test_tag_base PASSED        [ 63%]
../../../../dev/test/test_refs.py::TestRefs::test_tag_message PASSED     [ 63%]
../../../../dev/test/test_refs.py::TestRefs::test_tags PASSED            [ 63%]
../../../../dev/test/test_refs.py::TestRefs::test_tags_author PASSED     [ 63%]
../../../../dev/test/test_remote.py::TestRemote::test_add_unsafe_url PASSED [ 64%]
../../../../dev/test/test_remote.py::TestRemote::test_add_unsafe_url_allowed PASSED [ 64%]
../../../../dev/test/test_remote.py::TestRemote::test_create_remote_unsafe_url PASSED [ 64%]
../../../../dev/test/test_remote.py::TestRemote::test_create_remote_unsafe_url_allowed PASSED [ 64%]
../../../../dev/test/test_remote.py::TestRemote::test_creation_and_removal PASSED [ 64%]
../../../../dev/test/test_remote.py::TestRemote::test_fetch_error PASSED [ 65%]
../../../../dev/test/test_remote.py::TestRemote::test_fetch_info PASSED  [ 65%]
../../../../dev/test/test_remote.py::TestRemote::test_fetch_unsafe_options PASSED [ 65%]
../../../../dev/test/test_remote.py::TestRemote::test_fetch_unsafe_options_allowed PASSED [ 65%]
../../../../dev/test/test_remote.py::TestRemote::test_fetch_unsafe_url PASSED [ 65%]
../../../../dev/test/test_remote.py::TestRemote::test_fetch_unsafe_url_allowed PASSED [ 66%]
../../../../dev/test/test_remote.py::TestRemote::test_multiple_urls PASSED [ 66%]
../../../../dev/test/test_remote.py::TestRemote::test_pull_unsafe_options PASSED [ 66%]
../../../../dev/test/test_remote.py::TestRemote::test_pull_unsafe_options_allowed PASSED [ 66%]
../../../../dev/test/test_remote.py::TestRemote::test_pull_unsafe_url PASSED [ 66%]
../../../../dev/test/test_remote.py::TestRemote::test_pull_unsafe_url_allowed PASSED [ 67%]
../../../../dev/test/test_remote.py::TestRemote::test_push_error PASSED  [ 67%]
../../../../dev/test/test_remote.py::TestRemote::test_push_unsafe_options PASSED [ 67%]
../../../../dev/test/test_remote.py::TestRemote::test_push_unsafe_options_allowed PASSED [ 67%]
../../../../dev/test/test_remote.py::TestRemote::test_push_unsafe_url PASSED [ 67%]
../../../../dev/test/test_remote.py::TestRemote::test_push_unsafe_url_allowed PASSED [ 68%]
../../../../dev/test/test_remote.py::TestRemote::test_set_unsafe_url PASSED [ 68%]
../../../../dev/test/test_remote.py::TestRemote::test_set_unsafe_url_allowed PASSED [ 68%]
../../../../dev/test/test_remote.py::TestRemote::test_uncommon_branch_names PASSED [ 68%]
../../../../dev/test/test_remote.py::TestTimeouts::test_timeout_funcs PASSED [ 68%]
../../../../dev/test/test_repo.py::TestRepo::test_alternates PASSED      [ 69%]
../../../../dev/test/test_repo.py::TestRepo::test_archive PASSED         [ 69%]
../../../../dev/test/test_repo.py::TestRepo::test_bare_property PASSED   [ 69%]
../../../../dev/test/test_repo.py::TestRepo::test_blame_accepts_rev_opts PASSED [ 69%]
../../../../dev/test/test_repo.py::TestRepo::test_blame_complex_revision PASSED [ 69%]
../../../../dev/test/test_repo.py::TestRepo::test_blame_incremental PASSED [ 70%]
../../../../dev/test/test_repo.py::TestRepo::test_blame_real PASSED      [ 70%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_command_injection PASSED [ 70%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_command_injection PASSED [ 70%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_keeps_env PASSED [ 70%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_pathlib PASSED [ 71%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_pathlib_withConfig PASSED [ 71%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_safe_options PASSED [ 71%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_unsafe_options PASSED [ 71%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_unsafe_options_allowed PASSED [ 71%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_unsafe_procol PASSED [ 72%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_unsafe_procol_allowed PASSED [ 72%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_from_with_path_contains_unicode PASSED [ 72%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_safe_options PASSED [ 72%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_unsafe_options PASSED [ 72%]
../../../../dev/test/test_repo.py::TestRepo::test_clone_unsafe_options_allowed PASSED [ 73%]
../../../../dev/test/test_repo.py::TestRepo::test_commit_from_revision PASSED [ 73%]
../../../../dev/test/test_repo.py::TestRepo::test_commits PASSED         [ 73%]
../../../../dev/test/test_repo.py::TestRepo::test_comparison_and_hash PASSED [ 73%]
../../../../dev/test/test_repo.py::TestRepo::test_config_level_paths PASSED [ 73%]
../../../../dev/test/test_repo.py::TestRepo::test_config_reader PASSED   [ 74%]
../../../../dev/test/test_repo.py::TestRepo::test_config_writer PASSED   [ 74%]
../../../../dev/test/test_repo.py::TestRepo::test_creation_deletion PASSED [ 74%]
../../../../dev/test/test_repo.py::TestRepo::test_daemon_export PASSED   [ 74%]
../../../../dev/test/test_repo.py::TestRepo::test_date_format PASSED     [ 74%]
../../../../dev/test/test_repo.py::TestRepo::test_description PASSED     [ 75%]
../../../../dev/test/test_repo.py::TestRepo::test_do_not_strip_newline_in_stdout PASSED [ 75%]
../../../../dev/test/test_repo.py::TestRepo::test_empty_repo PASSED      [ 75%]
../../../../dev/test/test_repo.py::TestRepo::test_file_handle_leaks PASSED [ 75%]
../../../../dev/test/test_repo.py::TestRepo::test_git_cmd PASSED         [ 75%]
../../../../dev/test/test_repo.py::TestRepo::test_git_file PASSED        [ 76%]
../../../../dev/test/test_repo.py::TestRepo::test_git_work_tree_dotgit PASSED [ 76%]
../../../../dev/test/test_repo.py::TestRepo::test_git_work_tree_env PASSED [ 76%]
../../../../dev/test/test_repo.py::TestRepo::test_head PASSED            [ 76%]
../../../../dev/test/test_repo.py::TestRepo::test_heads_should_populate_head_data PASSED [ 76%]
../../../../dev/test/test_repo.py::TestRepo::test_heads_should_return_array_of_head_objects PASSED [ 77%]
../../../../dev/test/test_repo.py::TestRepo::test_index PASSED           [ 77%]
../../../../dev/test/test_repo.py::TestRepo::test_init PASSED            [ 77%]
../../../../dev/test/test_repo.py::TestRepo::test_is_ancestor PASSED     [ 77%]
../../../../dev/test/test_repo.py::TestRepo::test_is_dirty PASSED        [ 77%]
../../../../dev/test/test_repo.py::TestRepo::test_is_dirty_pathspec PASSED [ 78%]
../../../../dev/test/test_repo.py::TestRepo::test_is_dirty_with_bare_repository PASSED [ 78%]
../../../../dev/test/test_repo.py::TestRepo::test_is_dirty_with_path PASSED [ 78%]
../../../../dev/test/test_repo.py::TestRepo::test_is_valid_object PASSED [ 78%]
../../../../dev/test/test_repo.py::TestRepo::test_leaking_password_in_clone_logs PASSED [ 78%]
../../../../dev/test/test_repo.py::TestRepo::test_max_chunk_size PASSED  [ 79%]
../../../../dev/test/test_repo.py::TestRepo::test_merge_base PASSED      [ 79%]
../../../../dev/test/test_repo.py::TestRepo::test_new_should_raise_on_invalid_repo_location PASSED [ 79%]
../../../../dev/test/test_repo.py::TestRepo::test_new_should_raise_on_non_existent_path PASSED [ 79%]
../../../../dev/test/test_repo.py::TestRepo::test_pickleable PASSED      [ 79%]
../../../../dev/test/test_repo.py::TestRepo::test_rebasing PASSED        [ 80%]
../../../../dev/test/test_repo.py::TestRepo::test_remote_method PASSED   [ 80%]
../../../../dev/test/test_repo.py::TestRepo::test_repo_creation_from_different_paths PASSED [ 80%]
../../../../dev/test/test_repo.py::TestRepo::test_repo_creation_pathlib PASSED [ 80%]
../../../../dev/test/test_repo.py::TestRepo::test_repo_odbtype PASSED    [ 80%]
../../../../dev/test/test_repo.py::TestRepo::test_repr PASSED            [ 81%]
../../../../dev/test/test_repo.py::TestRepo::test_rev_parse PASSED       [ 81%]
../../../../dev/test/test_repo.py::TestRepo::test_rw_rev_parse PASSED    [ 81%]
../../../../dev/test/test_repo.py::TestRepo::test_should_display_blame_information PASSED [ 81%]
../../../../dev/test/test_repo.py::TestRepo::test_submodule_update PASSED [ 81%]
../../../../dev/test/test_repo.py::TestRepo::test_submodules PASSED      [ 82%]
../../../../dev/test/test_repo.py::TestRepo::test_tag PASSED             [ 82%]
../../../../dev/test/test_repo.py::TestRepo::test_tag_to_full_tag_path PASSED [ 82%]
../../../../dev/test/test_repo.py::TestRepo::test_tilde_and_env_vars_in_repo_path PASSED [ 82%]
../../../../dev/test/test_repo.py::TestRepo::test_tree_from_revision PASSED [ 82%]
../../../../dev/test/test_repo.py::TestRepo::test_trees PASSED           [ 83%]
../../../../dev/test/test_repo.py::TestRepo::test_untracked_files PASSED [ 83%]
../../../../dev/test/test_stats.py::TestStats::test_list_from_string PASSED [ 83%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_add_clone_multi_options_argument PASSED [ 83%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_add_empty_repo PASSED [ 83%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_add_no_clone_multi_options_argument PASSED [ 84%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_branch_renames PASSED [ 84%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_depth SKIPPED [ 84%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_first_submodule PASSED [ 84%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_git_submodule_compatibility PASSED [ 84%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_git_submodules_and_add_sm_with_new_commit FAILED [ 85%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_list_only_valid_submodules FAILED [ 85%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_remove_norefs PASSED [ 85%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_rename PASSED [ 85%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_root_module PASSED [ 85%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_add_unsafe_options PASSED [ 86%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_add_unsafe_options_allowed PASSED [ 86%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_add_unsafe_url PASSED [ 86%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_add_unsafe_url_allowed PASSED [ 86%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_update_unsafe_options PASSED [ 86%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_update_unsafe_options_allowed PASSED [ 87%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_update_unsafe_url PASSED [ 87%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_submodule_update_unsafe_url_allowed PASSED [ 87%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_to_relative_path_with_super_at_root_drive SKIPPED [ 87%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_update_clone_multi_options_argument PASSED [ 87%]
../../../../dev/test/test_submodule.py::TestSubmodule::test_update_no_clone_multi_options_argument PASSED [ 88%]
../../../../dev/test/test_tree.py::TestTree::test_serializable PASSED    [ 88%]
../../../../dev/test/test_tree.py::TestTree::test_traverse PASSED        [ 88%]
../../../../dev/test/test_util.py::TestUtils::test_actor PASSED          [ 88%]
../../../../dev/test/test_util.py::TestUtils::test_actor_from_string PASSED [ 88%]
../../../../dev/test/test_util.py::TestUtils::test_actor_get_uid_laziness_called PASSED [ 89%]
../../../../dev/test/test_util.py::TestUtils::test_actor_get_uid_laziness_not_called PASSED [ 89%]
../../../../dev/test/test_util.py::TestUtils::test_blocking_lock_file PASSED [ 89%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_invalids_1_C_ SKIPPED [ 89%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_invalids_2_C_Relative SKIPPED [ 89%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_invalids_3_D_Apps_123 SKIPPED [ 90%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_invalids_4_D_Apps_123 SKIPPED [ 90%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_invalids_5_____a_rel SKIPPED [ 90%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_invalids_6___share_a_rel SKIPPED [ 90%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_norm_ok_1_____bar____bar__ SKIPPED [ 90%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_norm_ok_2______bar____bar__ SKIPPED [ 91%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_norm_ok_3______bar_______bar__ SKIPPED [ 91%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_norm_ok_4_______bar_______bar__ SKIPPED [ 91%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_norm_ok_5______bar____foo____chu_______bar_chu__ SKIPPED [ 91%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_01___foo__bar____foo_bar__ SKIPPED [ 91%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_02___foo_bar____foo_bar__ SKIPPED [ 92%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_03___C___Users_____cygdrive_c_Users__ SKIPPED [ 92%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_04___C___d_e_____cygdrive_c_d_e__ SKIPPED [ 92%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_05___C________cygdrive_c___ SKIPPED [ 92%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_06_______server__C___Users______server_C__Users__ SKIPPED [ 92%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_07_______server__C_______server_C___ SKIPPED [ 93%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_08_______server__c_________server_c____ SKIPPED [ 93%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_09_______server__BAR_______server_BAR___ SKIPPED [ 93%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_10___D__Apps_____cygdrive_d_Apps__ SKIPPED [ 93%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_11___D__Apps__fOO_____cygdrive_d_Apps_fOO__ SKIPPED [ 93%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_12___D___Apps_123_____cygdrive_d_Apps_123__ SKIPPED [ 94%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_13__________a___com_____cygdrive_a_com__ SKIPPED [ 94%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_14__________a__com_____cygdrive_a_com__ SKIPPED [ 94%]
../../../../dev/test/test_util.py::TestUtils::test_cygpath_ok_15__________UNC__server__D___Apps______server_D__Apps__ SKIPPED [ 94%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_01___foo__bar____foo_bar__ SKIPPED [ 94%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_02___foo_bar____foo_bar__ SKIPPED [ 95%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_03___C___Users_____cygdrive_c_Users__ SKIPPED [ 95%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_04___C___d_e_____cygdrive_c_d_e__ SKIPPED [ 95%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_05___C________cygdrive_c___ SKIPPED [ 95%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_06_______server__C___Users______server_C__Users__ SKIPPED [ 95%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_07_______server__C_______server_C___ SKIPPED [ 96%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_08_______server__c_________server_c____ SKIPPED [ 96%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_09_______server__BAR_______server_BAR___ SKIPPED [ 96%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_10___D__Apps_____cygdrive_d_Apps__ SKIPPED [ 96%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_11___D__Apps__fOO_____cygdrive_d_Apps_fOO__ SKIPPED [ 96%]
../../../../dev/test/test_util.py::TestUtils::test_decygpath_12___D___Apps_123_____cygdrive_d_Apps_123__ SKIPPED [ 97%]
../../../../dev/test/test_util.py::TestUtils::test_from_timestamp PASSED [ 97%]
../../../../dev/test/test_util.py::TestUtils::test_it_should_dashify PASSED [ 97%]
../../../../dev/test/test_util.py::TestUtils::test_iterable_list_1___name______ PASSED [ 97%]
../../../../dev/test/test_util.py::TestUtils::test_iterable_list_2___name____prefix___ PASSED [ 97%]
../../../../dev/test/test_util.py::TestUtils::test_lock_file PASSED      [ 98%]
../../../../dev/test/test_util.py::TestUtils::test_parse_date PASSED     [ 98%]
../../../../dev/test/test_util.py::TestUtils::test_pickle_tzoffset PASSED [ 98%]
../../../../dev/test/test_util.py::TestUtils::test_remove_password_from_command_line PASSED [ 98%]
../../../../dev/test/test_util.py::TestUtils::test_user_id PASSED        [ 98%]
../../../../dev/test/performance/test_commit.py::TestPerformance::test_commit_iteration PASSED [ 99%]
../../../../dev/test/performance/test_commit.py::TestPerformance::test_commit_serialization PASSED [ 99%]
../../../../dev/test/performance/test_commit.py::TestPerformance::test_commit_traversal PASSED [ 99%]
../../../../dev/test/performance/test_commit.py::TestPerformance::test_iteration PASSED [ 99%]
../../../../dev/test/performance/test_odb.py::TestObjDBPerformance::test_random_access PASSED [ 99%]
../../../../dev/test/performance/test_streams.py::TestObjDBPerformance::test_large_data_streaming PASSED [100%]

=================================== FAILURES ===================================
___________________ TestPackedDBPerformance.test_correctness ___________________

self = <gitdb.test.performance.test_pack.TestPackedDBPerformance testMethod=test_correctness>

    def test_correctness(self):
        pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack"))
        # disabled for now as it used to work perfectly, checking big repositories takes a long time
        print("Endurance run: verify streaming of objects (crc and sha)", file=sys.stderr)
        for crc in range(2):
            count = 0
            st = time()
>           for entity in pdb.entities():

git/ext/gitdb/gitdb/test/performance/test_pack.py:112: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
git/ext/gitdb/gitdb/db/pack.py:179: in entities
    return [item[1] for item in self._entities]
git/ext/gitdb/gitdb/util.py:253: in __getattr__
    self._set_cache_(attr)
git/ext/gitdb/gitdb/db/pack.py:54: in _set_cache_
    self.update_cache(force=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <gitdb.db.pack.PackedDB object at 0x7f1b85aef430>, force = True

    def update_cache(self, force=False):
        """
        Update our cache with the actually existing packs on disk. Add new ones,
        and remove deleted ones. We keep the unchanged ones
    
        :param force: If True, the cache will be updated even though the directory
            does not appear to have changed according to its modification timestamp.
        :return: True if the packs have been updated so there is new information,
            False if there was no change to the pack database"""
>       stat = os.stat(self.root_path())
E       NotADirectoryError: [Errno 20] Not a directory: '/build/python-gitpython/src/gitpython/git/ext/gitdb/.git/objects/pack'

git/ext/gitdb/gitdb/db/pack.py:141: NotADirectoryError
----------------------------- Captured stderr call -----------------------------
Endurance run: verify streaming of objects (crc and sha)
________________ TestPackedDBPerformance.test_loose_correctness ________________

self = <gitdb.test.performance.test_pack.TestPackedDBPerformance testMethod=test_loose_correctness>

    def test_loose_correctness(self):
        """based on the pack(s) of our packed object DB, we will just copy and verify all objects in the back
        into the loose object db (memory).
        This should help finding dormant issues like this one https://github.com/gitpython-developers/GitPython/issues/220
        faster
        :note: It doesn't seem this test can find the issue unless the given pack contains highly compressed
        data files, like archives."""
        from gitdb.util import bin_to_hex
        pdb = GitDB(os.path.join(self.gitrepopath, 'objects'))
        mdb = MemoryDB()
>       for c, sha in enumerate(pdb.sha_iter()):

git/ext/gitdb/gitdb/test/performance/test_pack.py:89: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
git/ext/gitdb/gitdb/db/base.py:220: in sha_iter
    return chain(*(db.sha_iter() for db in self._dbs))
git/ext/gitdb/gitdb/util.py:253: in __getattr__
    self._set_cache_(attr)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <gitdb.db.git.GitDB object at 0x7f1b866a1000>, attr = '_dbs'

    def _set_cache_(self, attr):
        if attr == '_dbs' or attr == '_loose_db':
            self._dbs = list()
            loose_db = None
            for subpath, dbcls in ((self.packs_dir, self.PackDBCls),
                                   (self.loose_dir, self.LooseDBCls),
                                   (self.alternates_dir, self.ReferenceDBCls)):
                path = self.db_path(subpath)
                if os.path.exists(path):
                    self._dbs.append(dbcls(path))
                    if dbcls is self.LooseDBCls:
                        loose_db = self._dbs[-1]
                    # END remember loose db
                # END check path exists
            # END for each db type
    
            # should have at least one subdb
            if not self._dbs:
>               raise InvalidDBRoot(self.root_path())
E               gitdb.exc.InvalidDBRoot: /build/python-gitpython/src/gitpython/git/ext/gitdb/.git/objects

git/ext/gitdb/gitdb/db/git.py:62: InvalidDBRoot
_______________ TestPackedDBPerformance.test_pack_random_access ________________

self = <gitdb.test.performance.test_pack.TestPackedDBPerformance testMethod=test_pack_random_access>

    def test_pack_random_access(self):
        pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack"))
    
        # sha lookup
        st = time()
>       sha_list = list(pdb.sha_iter())

git/ext/gitdb/gitdb/test/performance/test_pack.py:32: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
git/ext/gitdb/gitdb/db/pack.py:106: in sha_iter
    for entity in self.entities():
git/ext/gitdb/gitdb/db/pack.py:179: in entities
    return [item[1] for item in self._entities]
git/ext/gitdb/gitdb/util.py:253: in __getattr__
    self._set_cache_(attr)
git/ext/gitdb/gitdb/db/pack.py:54: in _set_cache_
    self.update_cache(force=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <gitdb.db.pack.PackedDB object at 0x7f1b85aeea10>, force = True

    def update_cache(self, force=False):
        """
        Update our cache with the actually existing packs on disk. Add new ones,
        and remove deleted ones. We keep the unchanged ones
    
        :param force: If True, the cache will be updated even though the directory
            does not appear to have changed according to its modification timestamp.
        :return: True if the packs have been updated so there is new information,
            False if there was no change to the pack database"""
>       stat = os.stat(self.root_path())
E       NotADirectoryError: [Errno 20] Not a directory: '/build/python-gitpython/src/gitpython/git/ext/gitdb/.git/objects/pack'

git/ext/gitdb/gitdb/db/pack.py:141: NotADirectoryError
________________ TestPackStreamingPerformance.test_pack_writing ________________

self = <gitdb.test.performance.test_pack_streaming.TestPackStreamingPerformance testMethod=test_pack_writing>

    def test_pack_writing(self):
        # see how fast we can write a pack from object streams.
        # This will not be fast, as we take time for decompressing the streams as well
        ostream = CountedNullStream()
        pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack"))
    
        ni = 1000
        count = 0
        st = time()
>       for sha in pdb.sha_iter():

git/ext/gitdb/gitdb/test/performance/test_pack_streaming.py:44: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
git/ext/gitdb/gitdb/db/pack.py:106: in sha_iter
    for entity in self.entities():
git/ext/gitdb/gitdb/db/pack.py:179: in entities
    return [item[1] for item in self._entities]
git/ext/gitdb/gitdb/util.py:253: in __getattr__
    self._set_cache_(attr)
git/ext/gitdb/gitdb/db/pack.py:54: in _set_cache_
    self.update_cache(force=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <gitdb.db.pack.PackedDB object at 0x7f1b867b7910>, force = True

    def update_cache(self, force=False):
        """
        Update our cache with the actually existing packs on disk. Add new ones,
        and remove deleted ones. We keep the unchanged ones
    
        :param force: If True, the cache will be updated even though the directory
            does not appear to have changed according to its modification timestamp.
        :return: True if the packs have been updated so there is new information,
            False if there was no change to the pack database"""
>       stat = os.stat(self.root_path())
E       NotADirectoryError: [Errno 20] Not a directory: '/build/python-gitpython/src/gitpython/git/ext/gitdb/.git/objects/pack'

git/ext/gitdb/gitdb/db/pack.py:141: NotADirectoryError
_______________ TestPackStreamingPerformance.test_stream_reading _______________

self = <gitdb.test.performance.test_pack_streaming.TestPackStreamingPerformance testMethod=test_stream_reading>

    def test_stream_reading(self):
        # raise SkipTest()
        pdb = PackedDB(os.path.join(self.gitrepopath, "objects/pack"))
    
        # streaming only, meant for --with-profile runs
        ni = 5000
        count = 0
        pdb_stream = pdb.stream
        total_size = 0
        st = time()
>       for sha in pdb.sha_iter():

git/ext/gitdb/gitdb/test/performance/test_pack_streaming.py:71: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
git/ext/gitdb/gitdb/db/pack.py:106: in sha_iter
    for entity in self.entities():
git/ext/gitdb/gitdb/db/pack.py:179: in entities
    return [item[1] for item in self._entities]
git/ext/gitdb/gitdb/util.py:253: in __getattr__
    self._set_cache_(attr)
git/ext/gitdb/gitdb/db/pack.py:54: in _set_cache_
    self.update_cache(force=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <gitdb.db.pack.PackedDB object at 0x7f1b854cc1c0>, force = True

    def update_cache(self, force=False):
        """
        Update our cache with the actually existing packs on disk. Add new ones,
        and remove deleted ones. We keep the unchanged ones
    
        :param force: If True, the cache will be updated even though the directory
            does not appear to have changed according to its modification timestamp.
        :return: True if the packs have been updated so there is new information,
            False if there was no change to the pack database"""
>       stat = os.stat(self.root_path())
E       NotADirectoryError: [Errno 20] Not a directory: '/build/python-gitpython/src/gitpython/git/ext/gitdb/.git/objects/pack'

git/ext/gitdb/gitdb/db/pack.py:141: NotADirectoryError
_________ TestSubmodule.test_git_submodules_and_add_sm_with_new_commit _________

self = <test.test_submodule.TestSubmodule testMethod=test_git_submodules_and_add_sm_with_new_commit>
rwdir = '/tmp/test_git_submodules_and_add_sm_with_new_commitdpo6fo89'

    @skipIf(
        HIDE_WINDOWS_KNOWN_ERRORS,
        """FIXME on cygwin: File "C:\\projects\\gitpython\\git\\cmd.py", line 671, in execute
                raise GitCommandError(command, status, stderr_value, stdout_value)
            GitCommandError: Cmd('git') failed due to: exit code(128)
              cmdline: git add 1__Xava verbXXten 1_test _myfile 1_test_other_file 1_XXava-----verbXXten
              stderr: 'fatal: pathspec '"1__çava verböten"' did not match any files'
             FIXME on appveyor: see https://ci.appveyor.com/project/Byron/gitpython/build/1.0.185
                """,
    )
    @with_rw_directory
    def test_git_submodules_and_add_sm_with_new_commit(self, rwdir):
        parent = git.Repo.init(osp.join(rwdir, "parent"))
>       parent.git.submodule("add", self._small_repo_url(), "module")

test/test_submodule.py:742: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
git/cmd.py:741: in <lambda>
    return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
git/cmd.py:1315: in _call_process
    return self.execute(call, **exec_kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <git.cmd.Git object at 0x7f1b857fd300>
command = ['/usr/bin/git', 'submodule', 'add', '/build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap', 'module']
istream = None, with_extended_output = False, with_exceptions = True
as_process = False, output_stream = None, stdout_as_string = True
kill_after_timeout = None, with_stdout = True, universal_newlines = False
shell = None
env = {'BUILDTOOL': 'devtools', 'BUILDTOOLVER': '20230105-1-any', 'CFLAGS': '-march=x86-64 -mtune=generic -O2 -pipe -fno-plt...refix-map=/build/python-gitpython/src=/usr/src/debug/python-gitpython -flto=auto', 'CHOST': 'x86_64-pc-linux-gnu', ...}
max_chunk_size = 8192, strip_newline_in_stdout = True, subprocess_kwargs = {}
redacted_command = ['/usr/bin/git', 'submodule', 'add', '/build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap', 'module']
cwd = '/tmp/test_git_submodules_and_add_sm_with_new_commitdpo6fo89/parent'
inline_env = None, cmd_not_found_exception = <class 'FileNotFoundError'>
stdout_sink = -1, istream_ok = 'None'
proc = <Popen: returncode: 128 args: ['/usr/bin/git', 'submodule', 'add', '/build/p...>

    def execute(
        self,
        command: Union[str, Sequence[Any]],
        istream: Union[None, BinaryIO] = None,
        with_extended_output: bool = False,
        with_exceptions: bool = True,
        as_process: bool = False,
        output_stream: Union[None, BinaryIO] = None,
        stdout_as_string: bool = True,
        kill_after_timeout: Union[None, float] = None,
        with_stdout: bool = True,
        universal_newlines: bool = False,
        shell: Union[None, bool] = None,
        env: Union[None, Mapping[str, str]] = None,
        max_chunk_size: int = io.DEFAULT_BUFFER_SIZE,
        strip_newline_in_stdout: bool = True,
        **subprocess_kwargs: Any,
    ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], AutoInterrupt]:
        """Handles executing the command on the shell and consumes and returns
        the returned information (stdout)
    
        :param command:
            The command argument list to execute.
            It should be a string, or a sequence of program arguments. The
            program to execute is the first item in the args sequence or string.
    
        :param istream:
            Standard input filehandle passed to subprocess.Popen.
    
        :param with_extended_output:
            Whether to return a (status, stdout, stderr) tuple.
    
        :param with_exceptions:
            Whether to raise an exception when git returns a non-zero status.
    
        :param as_process:
            Whether to return the created process instance directly from which
            streams can be read on demand. This will render with_extended_output and
            with_exceptions ineffective - the caller will have
            to deal with the details himself.
            It is important to note that the process will be placed into an AutoInterrupt
            wrapper that will interrupt the process once it goes out of scope. If you
            use the command in iterators, you should pass the whole process instance
            instead of a single stream.
    
        :param output_stream:
            If set to a file-like object, data produced by the git command will be
            output to the given stream directly.
            This feature only has any effect if as_process is False. Processes will
            always be created with a pipe due to issues with subprocess.
            This merely is a workaround as data will be copied from the
            output pipe to the given output stream directly.
            Judging from the implementation, you shouldn't use this flag !
    
        :param stdout_as_string:
            if False, the commands standard output will be bytes. Otherwise, it will be
            decoded into a string using the default encoding (usually utf-8).
            The latter can fail, if the output contains binary data.
    
        :param env:
            A dictionary of environment variables to be passed to `subprocess.Popen`.
    
        :param max_chunk_size:
            Maximum number of bytes in one chunk of data passed to the output_stream in
            one invocation of write() method. If the given number is not positive then
            the default value is used.
    
        :param subprocess_kwargs:
            Keyword arguments to be passed to subprocess.Popen. Please note that
            some of the valid kwargs are already set by this method, the ones you
            specify may not be the same ones.
    
        :param with_stdout: If True, default True, we open stdout on the created process
        :param universal_newlines:
            if True, pipes will be opened as text, and lines are split at
            all known line endings.
        :param shell:
            Whether to invoke commands through a shell (see `Popen(..., shell=True)`).
            It overrides :attr:`USE_SHELL` if it is not `None`.
        :param kill_after_timeout:
            To specify a timeout in seconds for the git command, after which the process
            should be killed. This will have no effect if as_process is set to True. It is
            set to None by default and will let the process run until the timeout is
            explicitly specified. This feature is not supported on Windows. It's also worth
            noting that kill_after_timeout uses SIGKILL, which can have negative side
            effects on a repository. For example, stale locks in case of git gc could
            render the repository incapable of accepting changes until the lock is manually
            removed.
        :param strip_newline_in_stdout:
            Whether to strip the trailing `\n` of the command stdout.
        :return:
            * str(output) if extended_output = False (Default)
            * tuple(int(status), str(stdout), str(stderr)) if extended_output = True
    
            if output_stream is True, the stdout value will be your output stream:
            * output_stream if extended_output = False
            * tuple(int(status), output_stream, str(stderr)) if extended_output = True
    
            Note git is executed with LC_MESSAGES="C" to ensure consistent
            output regardless of system language.
    
        :raise GitCommandError:
    
        :note:
           If you add additional keyword arguments to the signature of this method,
           you must update the execute_kwargs tuple housed in this module."""
        # Remove password for the command if present
        redacted_command = remove_password_if_present(command)
        if self.GIT_PYTHON_TRACE and (self.GIT_PYTHON_TRACE != "full" or as_process):
            log.info(" ".join(redacted_command))
    
        # Allow the user to have the command executed in their working dir.
        try:
            cwd = self._working_dir or os.getcwd()  # type: Union[None, str]
            if not os.access(str(cwd), os.X_OK):
                cwd = None
        except FileNotFoundError:
            cwd = None
    
        # Start the process
        inline_env = env
        env = os.environ.copy()
        # Attempt to force all output to plain ascii english, which is what some parsing code
        # may expect.
        # According to stackoverflow (http://goo.gl/l74GC8), we are setting LANGUAGE as well
        # just to be sure.
        env["LANGUAGE"] = "C"
        env["LC_ALL"] = "C"
        env.update(self._environment)
        if inline_env is not None:
            env.update(inline_env)
    
        if is_win:
            cmd_not_found_exception = OSError
            if kill_after_timeout is not None:
                raise GitCommandError(
                    redacted_command,
                    '"kill_after_timeout" feature is not supported on Windows.',
                )
        else:
            cmd_not_found_exception = FileNotFoundError  # NOQA # exists, flake8 unknown @UndefinedVariable
        # end handle
    
        stdout_sink = PIPE if with_stdout else getattr(subprocess, "DEVNULL", None) or open(os.devnull, "wb")
        istream_ok = "None"
        if istream:
            istream_ok = "<valid stream>"
        log.debug(
            "Popen(%s, cwd=%s, universal_newlines=%s, shell=%s, istream=%s)",
            redacted_command,
            cwd,
            universal_newlines,
            shell,
            istream_ok,
        )
        try:
            proc = Popen(
                command,
                env=env,
                cwd=cwd,
                bufsize=-1,
                stdin=istream or DEVNULL,
                stderr=PIPE,
                stdout=stdout_sink,
                shell=shell is not None and shell or self.USE_SHELL,
                close_fds=is_posix,  # unsupported on windows
                universal_newlines=universal_newlines,
                creationflags=PROC_CREATIONFLAGS,
                **subprocess_kwargs,
            )
    
        except cmd_not_found_exception as err:
            raise GitCommandNotFound(redacted_command, err) from err
        else:
            # replace with a typeguard for Popen[bytes]?
            proc.stdout = cast(BinaryIO, proc.stdout)
            proc.stderr = cast(BinaryIO, proc.stderr)
    
        if as_process:
            return self.AutoInterrupt(proc, command)
    
        def _kill_process(pid: int) -> None:
            """Callback method to kill a process."""
            p = Popen(
                ["ps", "--ppid", str(pid)],
                stdout=PIPE,
                creationflags=PROC_CREATIONFLAGS,
            )
            child_pids = []
            if p.stdout is not None:
                for line in p.stdout:
                    if len(line.split()) > 0:
                        local_pid = (line.split())[0]
                        if local_pid.isdigit():
                            child_pids.append(int(local_pid))
            try:
                # Windows does not have SIGKILL, so use SIGTERM instead
                sig = getattr(signal, "SIGKILL", signal.SIGTERM)
                os.kill(pid, sig)
                for child_pid in child_pids:
                    try:
                        os.kill(child_pid, sig)
                    except OSError:
                        pass
                kill_check.set()  # tell the main routine that the process was killed
            except OSError:
                # It is possible that the process gets completed in the duration after timeout
                # happens and before we try to kill the process.
                pass
            return
    
        # end
    
        if kill_after_timeout is not None:
            kill_check = threading.Event()
            watchdog = threading.Timer(kill_after_timeout, _kill_process, args=(proc.pid,))
    
        # Wait for the process to return
        status = 0
        stdout_value: Union[str, bytes] = b""
        stderr_value: Union[str, bytes] = b""
        newline = "\n" if universal_newlines else b"\n"
        try:
            if output_stream is None:
                if kill_after_timeout is not None:
                    watchdog.start()
                stdout_value, stderr_value = proc.communicate()
                if kill_after_timeout is not None:
                    watchdog.cancel()
                    if kill_check.is_set():
                        stderr_value = 'Timeout: the command "%s" did not complete in %d ' "secs." % (
                            " ".join(redacted_command),
                            kill_after_timeout,
                        )
                        if not universal_newlines:
                            stderr_value = stderr_value.encode(defenc)
                # strip trailing "\n"
                if stdout_value.endswith(newline) and strip_newline_in_stdout:  # type: ignore
                    stdout_value = stdout_value[:-1]
                if stderr_value.endswith(newline):  # type: ignore
                    stderr_value = stderr_value[:-1]
    
                status = proc.returncode
            else:
                max_chunk_size = max_chunk_size if max_chunk_size and max_chunk_size > 0 else io.DEFAULT_BUFFER_SIZE
                stream_copy(proc.stdout, output_stream, max_chunk_size)
                stdout_value = proc.stdout.read()
                stderr_value = proc.stderr.read()
                # strip trailing "\n"
                if stderr_value.endswith(newline):  # type: ignore
                    stderr_value = stderr_value[:-1]
                status = proc.wait()
            # END stdout handling
        finally:
            proc.stdout.close()
            proc.stderr.close()
    
        if self.GIT_PYTHON_TRACE == "full":
            cmdstr = " ".join(redacted_command)
    
            def as_text(stdout_value: Union[bytes, str]) -> str:
                return not output_stream and safe_decode(stdout_value) or "<OUTPUT_STREAM>"
    
            # end
    
            if stderr_value:
                log.info(
                    "%s -> %d; stdout: '%s'; stderr: '%s'",
                    cmdstr,
                    status,
                    as_text(stdout_value),
                    safe_decode(stderr_value),
                )
            elif stdout_value:
                log.info("%s -> %d; stdout: '%s'", cmdstr, status, as_text(stdout_value))
            else:
                log.info("%s -> %d", cmdstr, status)
        # END handle debug printing
    
        if with_exceptions and status != 0:
>           raise GitCommandError(redacted_command, status, stderr_value, stdout_value)
E           git.exc.GitCommandError: Cmd('/usr/bin/git') failed due to: exit code(128)
E             cmdline: /usr/bin/git submodule add /build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap module
E             stderr: 'Cloning into '/tmp/test_git_submodules_and_add_sm_with_new_commitdpo6fo89/parent/module'...
E           fatal: transport 'file' not allowed
E           fatal: clone of '/build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap' into submodule path '/tmp/test_git_submodules_and_add_sm_with_new_commitdpo6fo89/parent/module' failed'

git/cmd.py:1109: GitCommandError
________________ TestSubmodule.test_list_only_valid_submodules _________________

self = <test.test_submodule.TestSubmodule testMethod=test_list_only_valid_submodules>
rwdir = '/tmp/test_list_only_valid_submodulesclw3mq1f'

    @with_rw_directory
    def test_list_only_valid_submodules(self, rwdir):
        repo_path = osp.join(rwdir, "parent")
        repo = git.Repo.init(repo_path)
>       repo.git.submodule("add", self._small_repo_url(), "module")

test/test_submodule.py:715: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
git/cmd.py:741: in <lambda>
    return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
git/cmd.py:1315: in _call_process
    return self.execute(call, **exec_kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <git.cmd.Git object at 0x7f1b855855a0>
command = ['/usr/bin/git', 'submodule', 'add', '/build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap', 'module']
istream = None, with_extended_output = False, with_exceptions = True
as_process = False, output_stream = None, stdout_as_string = True
kill_after_timeout = None, with_stdout = True, universal_newlines = False
shell = None
env = {'BUILDTOOL': 'devtools', 'BUILDTOOLVER': '20230105-1-any', 'CFLAGS': '-march=x86-64 -mtune=generic -O2 -pipe -fno-plt...refix-map=/build/python-gitpython/src=/usr/src/debug/python-gitpython -flto=auto', 'CHOST': 'x86_64-pc-linux-gnu', ...}
max_chunk_size = 8192, strip_newline_in_stdout = True, subprocess_kwargs = {}
redacted_command = ['/usr/bin/git', 'submodule', 'add', '/build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap', 'module']
cwd = '/tmp/test_list_only_valid_submodulesclw3mq1f/parent', inline_env = None
cmd_not_found_exception = <class 'FileNotFoundError'>, stdout_sink = -1
istream_ok = 'None'
proc = <Popen: returncode: 128 args: ['/usr/bin/git', 'submodule', 'add', '/build/p...>

    def execute(
        self,
        command: Union[str, Sequence[Any]],
        istream: Union[None, BinaryIO] = None,
        with_extended_output: bool = False,
        with_exceptions: bool = True,
        as_process: bool = False,
        output_stream: Union[None, BinaryIO] = None,
        stdout_as_string: bool = True,
        kill_after_timeout: Union[None, float] = None,
        with_stdout: bool = True,
        universal_newlines: bool = False,
        shell: Union[None, bool] = None,
        env: Union[None, Mapping[str, str]] = None,
        max_chunk_size: int = io.DEFAULT_BUFFER_SIZE,
        strip_newline_in_stdout: bool = True,
        **subprocess_kwargs: Any,
    ) -> Union[str, bytes, Tuple[int, Union[str, bytes], str], AutoInterrupt]:
        """Handles executing the command on the shell and consumes and returns
        the returned information (stdout)
    
        :param command:
            The command argument list to execute.
            It should be a string, or a sequence of program arguments. The
            program to execute is the first item in the args sequence or string.
    
        :param istream:
            Standard input filehandle passed to subprocess.Popen.
    
        :param with_extended_output:
            Whether to return a (status, stdout, stderr) tuple.
    
        :param with_exceptions:
            Whether to raise an exception when git returns a non-zero status.
    
        :param as_process:
            Whether to return the created process instance directly from which
            streams can be read on demand. This will render with_extended_output and
            with_exceptions ineffective - the caller will have
            to deal with the details himself.
            It is important to note that the process will be placed into an AutoInterrupt
            wrapper that will interrupt the process once it goes out of scope. If you
            use the command in iterators, you should pass the whole process instance
            instead of a single stream.
    
        :param output_stream:
            If set to a file-like object, data produced by the git command will be
            output to the given stream directly.
            This feature only has any effect if as_process is False. Processes will
            always be created with a pipe due to issues with subprocess.
            This merely is a workaround as data will be copied from the
            output pipe to the given output stream directly.
            Judging from the implementation, you shouldn't use this flag !
    
        :param stdout_as_string:
            if False, the commands standard output will be bytes. Otherwise, it will be
            decoded into a string using the default encoding (usually utf-8).
            The latter can fail, if the output contains binary data.
    
        :param env:
            A dictionary of environment variables to be passed to `subprocess.Popen`.
    
        :param max_chunk_size:
            Maximum number of bytes in one chunk of data passed to the output_stream in
            one invocation of write() method. If the given number is not positive then
            the default value is used.
    
        :param subprocess_kwargs:
            Keyword arguments to be passed to subprocess.Popen. Please note that
            some of the valid kwargs are already set by this method, the ones you
            specify may not be the same ones.
    
        :param with_stdout: If True, default True, we open stdout on the created process
        :param universal_newlines:
            if True, pipes will be opened as text, and lines are split at
            all known line endings.
        :param shell:
            Whether to invoke commands through a shell (see `Popen(..., shell=True)`).
            It overrides :attr:`USE_SHELL` if it is not `None`.
        :param kill_after_timeout:
            To specify a timeout in seconds for the git command, after which the process
            should be killed. This will have no effect if as_process is set to True. It is
            set to None by default and will let the process run until the timeout is
            explicitly specified. This feature is not supported on Windows. It's also worth
            noting that kill_after_timeout uses SIGKILL, which can have negative side
            effects on a repository. For example, stale locks in case of git gc could
            render the repository incapable of accepting changes until the lock is manually
            removed.
        :param strip_newline_in_stdout:
            Whether to strip the trailing `\n` of the command stdout.
        :return:
            * str(output) if extended_output = False (Default)
            * tuple(int(status), str(stdout), str(stderr)) if extended_output = True
    
            if output_stream is True, the stdout value will be your output stream:
            * output_stream if extended_output = False
            * tuple(int(status), output_stream, str(stderr)) if extended_output = True
    
            Note git is executed with LC_MESSAGES="C" to ensure consistent
            output regardless of system language.
    
        :raise GitCommandError:
    
        :note:
           If you add additional keyword arguments to the signature of this method,
           you must update the execute_kwargs tuple housed in this module."""
        # Remove password for the command if present
        redacted_command = remove_password_if_present(command)
        if self.GIT_PYTHON_TRACE and (self.GIT_PYTHON_TRACE != "full" or as_process):
            log.info(" ".join(redacted_command))
    
        # Allow the user to have the command executed in their working dir.
        try:
            cwd = self._working_dir or os.getcwd()  # type: Union[None, str]
            if not os.access(str(cwd), os.X_OK):
                cwd = None
        except FileNotFoundError:
            cwd = None
    
        # Start the process
        inline_env = env
        env = os.environ.copy()
        # Attempt to force all output to plain ascii english, which is what some parsing code
        # may expect.
        # According to stackoverflow (http://goo.gl/l74GC8), we are setting LANGUAGE as well
        # just to be sure.
        env["LANGUAGE"] = "C"
        env["LC_ALL"] = "C"
        env.update(self._environment)
        if inline_env is not None:
            env.update(inline_env)
    
        if is_win:
            cmd_not_found_exception = OSError
            if kill_after_timeout is not None:
                raise GitCommandError(
                    redacted_command,
                    '"kill_after_timeout" feature is not supported on Windows.',
                )
        else:
            cmd_not_found_exception = FileNotFoundError  # NOQA # exists, flake8 unknown @UndefinedVariable
        # end handle
    
        stdout_sink = PIPE if with_stdout else getattr(subprocess, "DEVNULL", None) or open(os.devnull, "wb")
        istream_ok = "None"
        if istream:
            istream_ok = "<valid stream>"
        log.debug(
            "Popen(%s, cwd=%s, universal_newlines=%s, shell=%s, istream=%s)",
            redacted_command,
            cwd,
            universal_newlines,
            shell,
            istream_ok,
        )
        try:
            proc = Popen(
                command,
                env=env,
                cwd=cwd,
                bufsize=-1,
                stdin=istream or DEVNULL,
                stderr=PIPE,
                stdout=stdout_sink,
                shell=shell is not None and shell or self.USE_SHELL,
                close_fds=is_posix,  # unsupported on windows
                universal_newlines=universal_newlines,
                creationflags=PROC_CREATIONFLAGS,
                **subprocess_kwargs,
            )
    
        except cmd_not_found_exception as err:
            raise GitCommandNotFound(redacted_command, err) from err
        else:
            # replace with a typeguard for Popen[bytes]?
            proc.stdout = cast(BinaryIO, proc.stdout)
            proc.stderr = cast(BinaryIO, proc.stderr)
    
        if as_process:
            return self.AutoInterrupt(proc, command)
    
        def _kill_process(pid: int) -> None:
            """Callback method to kill a process."""
            p = Popen(
                ["ps", "--ppid", str(pid)],
                stdout=PIPE,
                creationflags=PROC_CREATIONFLAGS,
            )
            child_pids = []
            if p.stdout is not None:
                for line in p.stdout:
                    if len(line.split()) > 0:
                        local_pid = (line.split())[0]
                        if local_pid.isdigit():
                            child_pids.append(int(local_pid))
            try:
                # Windows does not have SIGKILL, so use SIGTERM instead
                sig = getattr(signal, "SIGKILL", signal.SIGTERM)
                os.kill(pid, sig)
                for child_pid in child_pids:
                    try:
                        os.kill(child_pid, sig)
                    except OSError:
                        pass
                kill_check.set()  # tell the main routine that the process was killed
            except OSError:
                # It is possible that the process gets completed in the duration after timeout
                # happens and before we try to kill the process.
                pass
            return
    
        # end
    
        if kill_after_timeout is not None:
            kill_check = threading.Event()
            watchdog = threading.Timer(kill_after_timeout, _kill_process, args=(proc.pid,))
    
        # Wait for the process to return
        status = 0
        stdout_value: Union[str, bytes] = b""
        stderr_value: Union[str, bytes] = b""
        newline = "\n" if universal_newlines else b"\n"
        try:
            if output_stream is None:
                if kill_after_timeout is not None:
                    watchdog.start()
                stdout_value, stderr_value = proc.communicate()
                if kill_after_timeout is not None:
                    watchdog.cancel()
                    if kill_check.is_set():
                        stderr_value = 'Timeout: the command "%s" did not complete in %d ' "secs." % (
                            " ".join(redacted_command),
                            kill_after_timeout,
                        )
                        if not universal_newlines:
                            stderr_value = stderr_value.encode(defenc)
                # strip trailing "\n"
                if stdout_value.endswith(newline) and strip_newline_in_stdout:  # type: ignore
                    stdout_value = stdout_value[:-1]
                if stderr_value.endswith(newline):  # type: ignore
                    stderr_value = stderr_value[:-1]
    
                status = proc.returncode
            else:
                max_chunk_size = max_chunk_size if max_chunk_size and max_chunk_size > 0 else io.DEFAULT_BUFFER_SIZE
                stream_copy(proc.stdout, output_stream, max_chunk_size)
                stdout_value = proc.stdout.read()
                stderr_value = proc.stderr.read()
                # strip trailing "\n"
                if stderr_value.endswith(newline):  # type: ignore
                    stderr_value = stderr_value[:-1]
                status = proc.wait()
            # END stdout handling
        finally:
            proc.stdout.close()
            proc.stderr.close()
    
        if self.GIT_PYTHON_TRACE == "full":
            cmdstr = " ".join(redacted_command)
    
            def as_text(stdout_value: Union[bytes, str]) -> str:
                return not output_stream and safe_decode(stdout_value) or "<OUTPUT_STREAM>"
    
            # end
    
            if stderr_value:
                log.info(
                    "%s -> %d; stdout: '%s'; stderr: '%s'",
                    cmdstr,
                    status,
                    as_text(stdout_value),
                    safe_decode(stderr_value),
                )
            elif stdout_value:
                log.info("%s -> %d; stdout: '%s'", cmdstr, status, as_text(stdout_value))
            else:
                log.info("%s -> %d", cmdstr, status)
        # END handle debug printing
    
        if with_exceptions and status != 0:
>           raise GitCommandError(redacted_command, status, stderr_value, stdout_value)
E           git.exc.GitCommandError: Cmd('/usr/bin/git') failed due to: exit code(128)
E             cmdline: /usr/bin/git submodule add /build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap module
E             stderr: 'Cloning into '/tmp/test_list_only_valid_submodulesclw3mq1f/parent/module'...
E           fatal: transport 'file' not allowed
E           fatal: clone of '/build/python-gitpython/src/gitpython/git/ext/gitdb/gitdb/ext/smmap' into submodule path '/tmp/test_list_only_valid_submodulesclw3mq1f/parent/module' failed'

git/cmd.py:1109: GitCommandError
=============================== warnings summary ===============================
test/test_remote.py:43
  /build/python-gitpython/src/gitpython/test/test_remote.py:43: PytestCollectionWarning: cannot collect test class 'TestRemoteProgress' because it has a __init__ constructor (from: test/test_remote.py)
    class TestRemoteProgress(RemoteProgress):

test/test_submodule.py:34
  /build/python-gitpython/src/gitpython/test/test_submodule.py:34: PytestCollectionWarning: cannot collect test class 'TestRootProgress' because it has a __init__ constructor (from: test/test_submodule.py)
    class TestRootProgress(RootUpdateProgress):

test/test_util.py:66
  /build/python-gitpython/src/gitpython/test/test_util.py:66: PytestCollectionWarning: cannot collect test class 'TestIterableMember' because it has a __init__ constructor (from: test/test_util.py)
    class TestIterableMember(object):

../../../../usr/lib/python3.10/site-packages/_pytest/cacheprovider.py:433
  /usr/lib/python3.10/site-packages/_pytest/cacheprovider.py:433: PytestCacheWarning: could not create cache path /dev/.pytest_cache/v/cache/nodeids
    config.cache.set("cache/nodeids", sorted(self.cached_nodeids))

../../../../usr/lib/python3.10/site-packages/_pytest/cacheprovider.py:387
  /usr/lib/python3.10/site-packages/_pytest/cacheprovider.py:387: PytestCacheWarning: could not create cache path /dev/.pytest_cache/v/cache/lastfailed
    config.cache.set("cache/lastfailed", self.lastfailed)

../../../../usr/lib/python3.10/site-packages/_pytest/stepwise.py:56
  /usr/lib/python3.10/site-packages/_pytest/stepwise.py:56: PytestCacheWarning: could not create cache path /dev/.pytest_cache/v/cache/stepwise
    session.config.cache.set(STEPWISE_CACHE_DIR, [])

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED ../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack.py::TestPackedDBPerformance::test_correctness
FAILED ../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack.py::TestPackedDBPerformance::test_loose_correctness
FAILED ../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack.py::TestPackedDBPerformance::test_pack_random_access
FAILED ../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack_streaming.py::TestPackStreamingPerformance::test_pack_writing
FAILED ../../../../dev/git/ext/gitdb/gitdb/test/performance/test_pack_streaming.py::TestPackStreamingPerformance::test_stream_reading
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_git_submodules_and_add_sm_with_new_commit
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_list_only_valid_submodules
==== 7 failed, 453 passed, 42 skipped, 20 deselected, 6 warnings in 47.15s =====
[1m[31m==> ERROR:[m[1m A failure occurred in check().[m
[1m    Aborting...[m
