@@ -672,7 +672,7 @@ def download_file_finalize(job):
672
672
shutil .rmtree (temp_dir )
673
673
674
674
675
- def download_diffs_async (mc , project_directory , file_path , version_from , version_to ):
675
+ def download_diffs_async (mc , project_directory , file_path , versions ):
676
676
"""
677
677
Starts background download project file diffs for specified versions.
678
678
Returns handle to the pending download.
@@ -681,20 +681,16 @@ def download_diffs_async(mc, project_directory, file_path, version_from, version
681
681
mc (MerginClient): MerginClient instance.
682
682
project_directory (str): local project directory.
683
683
file_path (str): file path relative to Mergin project root.
684
- version_from (str): starting project version tag for getting diff, for example 'v3'.
685
- version_to (str): ending project version tag for getting diff.
684
+ versions (list): list of versions to download diffs for, e.g. ['v1', 'v2'].
686
685
687
686
Returns:
688
687
PullJob/None: a handle for the pending download.
689
688
"""
690
689
mp = MerginProject (project_directory )
691
690
project_path = mp .metadata ["name" ]
692
691
file_history = mc .project_file_history_info (project_path , file_path )
693
- versions_to_fetch = get_versions_with_file_changes (
694
- mc , project_path , file_path , version_from = version_from , version_to = version_to , file_history = file_history
695
- )
696
692
mp .log .info (f"--- version: { mc .user_agent_info ()} " )
697
- mp .log .info (f"--- start download diffs for { file_path } of { project_path } , versions: { [v for v in versions_to_fetch ]} " )
693
+ mp .log .info (f"--- start download diffs for { file_path } of { project_path } , versions: { [v for v in versions ]} " )
698
694
699
695
try :
700
696
server_info = mc .project_info (project_path )
@@ -709,7 +705,7 @@ def download_diffs_async(mc, project_directory, file_path, version_from, version
709
705
os .makedirs (download_dir , exist_ok = True )
710
706
fetch_files = []
711
707
712
- for version in versions_to_fetch [ 1 :] :
708
+ for version in versions :
713
709
version_data = file_history ["history" ][version ]
714
710
diff_data = copy .deepcopy (version_data )
715
711
diff_data ['version' ] = version
@@ -721,7 +717,7 @@ def download_diffs_async(mc, project_directory, file_path, version_from, version
721
717
total_size = 0
722
718
for file in fetch_files :
723
719
items = _download_items (file , download_dir , diff_only = True )
724
- dest_file_path = os .path .normpath (os .path .join (download_dir , file ["version" ] + "-" + os . path . basename ( file ['diff' ]['path' ]) ))
720
+ dest_file_path = os .path .normpath (os .path .join (download_dir , file ["version" ] + "-" + file ['diff' ]['path' ]))
725
721
if os .path .exists (dest_file_path ):
726
722
continue
727
723
files_to_merge .append (FileToMerge (dest_file_path , items ))
@@ -744,8 +740,12 @@ def download_diffs_async(mc, project_directory, file_path, version_from, version
744
740
return job
745
741
746
742
747
- def download_diffs_finalize (job , output_diff , keep_diffs = False ):
748
- """ To be called after download_diffs_async """
743
+ def download_diffs_finalize (job ):
744
+ """ To be called after download_diffs_async
745
+
746
+ Returns:
747
+ diffs: list of downloaded diffs (their actual locations on disk)
748
+ """
749
749
750
750
job .executor .shutdown (wait = True )
751
751
@@ -757,34 +757,17 @@ def download_diffs_finalize(job, output_diff, keep_diffs=False):
757
757
raise future .exception ()
758
758
759
759
job .mp .log .info ("finalizing diffs pull" )
760
+ diffs = []
760
761
761
762
# merge downloaded chunks
762
763
try :
763
764
for file_to_merge in job .files_to_merge :
764
765
file_to_merge .merge ()
766
+ diffs .append (file_to_merge .dest_file )
765
767
except ClientError as err :
766
768
job .mp .log .error ("Error merging chunks of downloaded file: " + str (err ))
767
769
job .mp .log .info ("--- diffs pull aborted" )
768
770
raise
769
771
770
772
job .mp .log .info ("--- diffs pull finished" )
771
-
772
- # Collect and finally concatenate diffs, if needed
773
- diffs = []
774
- for file_to_merge in job .files_to_merge :
775
- diffs .append (file_to_merge .dest_file )
776
-
777
- output_dir = os .path .dirname (output_diff )
778
- temp_dir = None
779
- if len (diffs ) >= 1 :
780
- os .makedirs (output_dir , exist_ok = True )
781
- temp_dir = os .path .dirname (diffs [0 ])
782
- if len (diffs ) > 1 :
783
- job .mp .geodiff .concat_changes (diffs , output_diff )
784
- elif len (diffs ) == 1 :
785
- shutil .copy (diffs [0 ], output_diff )
786
-
787
- if not keep_diffs :
788
- # remove the diffs download temporary directory
789
- if temp_dir is not None :
790
- shutil .rmtree (temp_dir )
773
+ return diffs
0 commit comments