|  | 
| 1 | 1 | from io import BytesIO | 
| 2 |  | -from stat import S_IFDIR, S_IFREG, S_IFLNK | 
|  | 2 | +from stat import S_IFDIR, S_IFREG, S_IFLNK, S_IXUSR | 
| 3 | 3 | from os import stat | 
| 4 | 4 | import os.path as osp | 
| 5 | 5 | from unittest import SkipTest | 
| 6 | 6 | 
 | 
| 7 | 7 | from git import Git | 
| 8 | 8 | from git.index import IndexFile | 
| 9 | 9 | from git.index.fun import ( | 
| 10 |  | -    aggressive_tree_merge | 
|  | 10 | +    aggressive_tree_merge, | 
|  | 11 | +    stat_mode_to_index_mode, | 
| 11 | 12 | ) | 
| 12 | 13 | from git.objects.fun import ( | 
| 13 | 14 |     traverse_tree_recursive, | 
| @@ -206,6 +207,16 @@ def assert_entries(entries, num_entries, has_conflict=False): | 
| 206 | 207 |             assert_entries(aggressive_tree_merge(odb, trees), 2, True) | 
| 207 | 208 |         # END handle ours, theirs | 
| 208 | 209 | 
 | 
|  | 210 | +    def test_stat_mode_to_index_mode(self): | 
|  | 211 | +        modes = ( | 
|  | 212 | +            0o600, 0o611, 0o640, 0o641, 0o644, 0o650, 0o651, | 
|  | 213 | +            0o700, 0o711, 0o740, 0o744, 0o750, 0o751, 0o755, | 
|  | 214 | +        ) | 
|  | 215 | +        for mode in modes: | 
|  | 216 | +            expected_mode = S_IFREG | (mode & S_IXUSR and 0o755 or 0o644) | 
|  | 217 | +            assert stat_mode_to_index_mode(mode) == expected_mode | 
|  | 218 | +        # END for each mode | 
|  | 219 | + | 
| 209 | 220 |     def _assert_tree_entries(self, entries, num_trees): | 
| 210 | 221 |         for entry in entries: | 
| 211 | 222 |             assert len(entry) == num_trees | 
|  | 
0 commit comments