@@ -295,7 +295,7 @@ def determine_source_folders(self, source_files: Iterable[Path]) -> FileItems:
295295 raise ValueError (
296296 f"Source file `{ file } ` is not relative to project "
297297 f"directory `{ project_dir } `"
298- )
298+ ) from None
299299 else :
300300 if relative_path .name in self .args .ignore :
301301 continue # Skip this file if the name matches exactly
@@ -356,53 +356,57 @@ def sources_to_remove(
356356 """
357357 to_remove = FileItems ()
358358
359- remove_items = [to_remove .files ]
360- sources_items = [current .files ]
361- if self .args .recursive : # Don't touch folders without `-r`
362- remove_items .append (to_remove .folders )
363- sources_items .append (current .folders )
364-
365359 project_folder = self ._project_file .parent
366360
367- for remove_list , sources_list in zip ( remove_items , sources_items ):
361+ def remove_helper ( remove_list , sources_list ):
368362 for item in sources_list :
369- for target in new_sources . keys () :
363+ for target in new_sources :
370364 if target .is_absolute ():
371365 target = target .relative_to (project_folder )
372366 if item == target or (
373367 self .args .recursive and item .is_relative_to (target )
374368 ): # Exact match without `-r`, also relative with
375369 remove_list .add (item )
376370
371+ remove_helper (to_remove .files , current .files )
372+ if self .args .recursive : # Don't touch folders without `-r`
373+ remove_helper (to_remove .folders , current .folders )
374+
377375 return to_remove
378376
379377 def xml_add_sources (self , sources : FileItems ):
380378 """Modify the files and folders elements in-place."""
381- for ref_elements , ref_set , template in zip (
382- [self ._element_folders , self ._element_files ],
383- [sources .folders , sources .files ],
384- [
385- '<Folder Include="{}"/>' ,
386- '<Compile Include="{}"><SubType>Code</SubType></Compile>' ,
387- ],
388- ): # Repeat for folders and then for files
379+
380+ def add_helper (ref_elements , ref_set , template ):
389381 for item in ref_set :
390382 item_str = self .path_to_str (item )
391383 xml = template .format (item_str )
392384 ref_elements .append (etree .XML (xml ))
393385
386+ add_helper (
387+ self ._element_folders ,
388+ sources .folders ,
389+ '<Folder Include="{}"/>' , # ...
390+ )
391+ add_helper (
392+ self ._element_files ,
393+ sources .files ,
394+ '<Compile Include="{}"><SubType>Code</SubType></Compile>' ,
395+ )
396+
394397 def xml_remove_source (self , to_remove : FileItems ):
395398 """Modify the files and folders elements in-place."""
396- for ref_elements , ref_set in zip (
397- [self ._element_folders , self ._element_files ],
398- [to_remove .folders , to_remove .files ],
399- ): # Repeat for folders and then for files
399+
400+ def remove_helper (ref_elements , ref_set ):
400401 for element in ref_elements :
401402 this_path = Path (PureWindowsPath (element .attrib ["Include" ]))
402403 # Force XML Windows path to native one
403404 if this_path in ref_set :
404405 ref_elements .remove (element )
405406
407+ remove_helper (self ._element_folders , to_remove .folders )
408+ remove_helper (self ._element_files , to_remove .files )
409+
406410 @staticmethod
407411 def path_to_str (path : PurePath ) -> str :
408412 """Turn any path into a windows-path string.
0 commit comments