Skip to content

Commit 1ee9b92

Browse files
varmar05wonder-sk
authored andcommitted
Report warnings for versions which could not be processed
1 parent 625632a commit 1ee9b92

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

mergin/report.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,17 @@ def create_report(mc, directory, since, to, out_file):
176176
since (str): starting project version tag, for example 'v3'.
177177
to (str): ending project version tag, for example 'v6'.
178178
out_file (str): output file to save csv in
179+
180+
Returns:
181+
List of warnings/issues for versions which could not be processed (e.g. broken history with missing diff)
179182
"""
180183
mp = MerginProject(directory)
181184
project = mp.metadata["name"]
182185
mp.log.info(f"--- Creating changesets report for {project} from {since} to {to} versions ----")
183186
versions_map = {v["name"]: v for v in mc.project_versions(project, since, to)}
184187
headers = ["file", "table", "author", "date", "time", "version", "operation", "length", "area", "count"]
185188
records = []
189+
warnings = []
186190
info = mc.project_info(project, since=since)
187191
num_since = int_version(since)
188192
num_to = int_version(to)
@@ -219,6 +223,10 @@ def create_report(mc, directory, since, to, out_file):
219223
# add records for every version (diff) and all tables within geopackage
220224
for version in history_keys:
221225
if "diff" not in f['history'][version]:
226+
if f['history'][version]["change"] == "updated":
227+
warnings.append(f"Missing diff: {f['path']} was overwritten in {version} - broken diff history")
228+
else:
229+
warnings.append(f"Missin diff: {f['path']} was {f['history'][version]['change']} in {version}")
222230
continue
223231

224232
v_diff_file = os.path.join(mp.meta_dir, '.cache',
@@ -252,3 +260,4 @@ def create_report(mc, directory, since, to, out_file):
252260
writer.writeheader()
253261
writer.writerows(records)
254262
mp.log.info(f"--- Report saved to {out_file} ----")
263+
return warnings

mergin/test/test_client.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,7 @@ def test_server_compatibility(mc):
819819
assert mc.is_server_compatible()
820820

821821

822-
def create_versioned_project(mc, project_name, project_dir, updated_file, remove=True):
822+
def create_versioned_project(mc, project_name, project_dir, updated_file, remove=True, overwrite=False):
823823
project = API_USER + '/' + project_name
824824
cleanup(mc, project, [project_dir])
825825

@@ -839,6 +839,12 @@ def create_versioned_project(mc, project_name, project_dir, updated_file, remove
839839
os.remove(os.path.join(project_dir, updated_file))
840840
mc.push_project(project_dir)
841841

842+
# create version with forced overwrite (broken history)
843+
if overwrite:
844+
shutil.move(mp.fpath(updated_file), mp.fpath_meta(updated_file))
845+
shutil.copy(os.path.join(CHANGED_SCHEMA_DIR, 'modified_schema.gpkg'), mp.fpath(updated_file))
846+
shutil.copy(os.path.join(CHANGED_SCHEMA_DIR, 'modified_schema.gpkg-wal'), mp.fpath(updated_file + '-wal'))
847+
mc.push_project(project_dir)
842848
return mp
843849

844850

@@ -1625,7 +1631,7 @@ def test_report(mc):
16251631
project = API_USER + '/' + test_project
16261632
project_dir = os.path.join(TMP_DIR, test_project)
16271633
f_updated = "base.gpkg"
1628-
mp = create_versioned_project(mc, test_project, project_dir, f_updated, remove=False)
1634+
mp = create_versioned_project(mc, test_project, project_dir, f_updated, remove=False, overwrite=True)
16291635

16301636
# create report for between versions 2 and 4
16311637
directory = mp.dir
@@ -1635,8 +1641,9 @@ def test_report(mc):
16351641
report_file = os.path.join(TMP_DIR, "report", f'{proj_name}-{since}-{to}.csv')
16361642
if os.path.exists(report_file):
16371643
os.remove(report_file)
1638-
create_report(mc, directory, since, to, report_file)
1644+
warnings = create_report(mc, directory, since, to, report_file)
16391645
assert os.path.exists(report_file)
1646+
assert not warnings
16401647
# assert headers and content in report file
16411648
with open(report_file, "r") as rf:
16421649
content = rf.read()
@@ -1647,6 +1654,10 @@ def test_report(mc):
16471654
# files not edited are not in reports
16481655
assert "inserted_1_A.gpkg" not in content
16491656

1657+
# do report for v1 with added files and v5 with overwritten file
1658+
warnings = create_report(mc, directory, "v1", "v5", report_file)
1659+
assert warnings
1660+
16501661
# rm local mergin project and try again
16511662
shutil.rmtree(directory)
16521663
with pytest.raises(InvalidProject):

0 commit comments

Comments
 (0)