@@ -86,26 +86,38 @@ def generate_tree(self):
86
86
def _generate_tree (self , directory , prefix , depth , visited ):
87
87
if depth >= self .max_depth :
88
88
return
89
-
89
+
90
90
entries = sorted (directory .iterdir (), key = lambda x : (x .is_file (), x .name .lower ()))
91
91
92
92
for i , entry in enumerate (entries ):
93
93
if self .should_ignore (entry ):
94
94
continue
95
-
95
+
96
96
is_last = i == len (entries ) - 1
97
- current_prefix = "└── " if is_last else "├── "
97
+ current_prefix = self . _get_current_prefix ( is_last )
98
98
print (f"{ prefix } { current_prefix } { entry .name } " )
99
-
99
+
100
100
if entry .is_dir () and not entry .is_symlink ():
101
- canonical_path = entry .resolve ()
102
- if canonical_path in visited :
103
- print (f"{ prefix } { ' ' if is_last else '│ ' } [Cyclic reference to { entry .name } ]" )
104
- continue
105
-
106
- new_prefix = prefix + (" " if is_last else "│ " )
107
- new_visited = visited .union ({canonical_path })
108
- self ._generate_tree (entry , new_prefix , depth + 1 , new_visited )
101
+ self ._handle_directory (entry , prefix , is_last , depth , visited )
102
+
103
+ def _get_current_prefix (self , is_last ):
104
+ return "└── " if is_last else "├── "
105
+
106
+ def _handle_directory (self , entry , prefix , is_last , depth , visited ):
107
+ canonical_path = entry .resolve ()
108
+ if canonical_path in visited :
109
+ self ._print_cyclic_reference (prefix , entry .name , is_last )
110
+ return
111
+
112
+ new_prefix = self ._get_new_prefix (prefix , is_last )
113
+ new_visited = visited .union ({canonical_path })
114
+ self ._generate_tree (entry , new_prefix , depth + 1 , new_visited )
115
+
116
+ def _print_cyclic_reference (self , prefix , name , is_last ):
117
+ print (f"{ prefix } { ' ' if is_last else '│ ' } [Cyclic reference to { name } ]" )
118
+
119
+ def _get_new_prefix (self , prefix , is_last ):
120
+ return prefix + (" " if is_last else "│ " )
109
121
110
122
def main ():
111
123
parser = argparse .ArgumentParser (description = "Generate a directory tree." )
0 commit comments