From 693a93d116e27ca174514682bd08c4737ea1105e Mon Sep 17 00:00:00 2001 From: Andrew Olsen Date: Tue, 16 Nov 2021 11:02:04 +1300 Subject: [PATCH] Build custom pygit2 and libgit2 on windows Split spatial-filtered partial clone test into a few parts - - can we perform a spatial filtered partial clone (we can't on windows) - do we support a support an existing spatial filtered partial clone (this should work on all platforms) - can we fetch missing features (disappointingly, this also doesn't work on windows) --- tests/data/polygons-spatial-filtered.tgz | Bin 0 -> 54473 bytes tests/test_spatial_filters.py | 109 ++++++++++++++++++----- vendor/makefile.vc | 19 ++-- 3 files changed, 101 insertions(+), 27 deletions(-) create mode 100644 tests/data/polygons-spatial-filtered.tgz diff --git a/tests/data/polygons-spatial-filtered.tgz b/tests/data/polygons-spatial-filtered.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1eb1f191618dca1bc49a6fa4fbb7ffaaf6a21f7d GIT binary patch literal 54473 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 CBuQuh literal 0 HcmV?d00001 diff --git a/tests/test_spatial_filters.py b/tests/test_spatial_filters.py index b74fcda87..2fe6005bf 100644 --- a/tests/test_spatial_filters.py +++ b/tests/test_spatial_filters.py @@ -10,7 +10,7 @@ INVALID_OPERATION, SPATIAL_FILTER_PK_CONFLICT, ) -from kart.promisor_utils import FetchPromisedBlobsProcess +from kart.promisor_utils import FetchPromisedBlobsProcess, LibgitSubcode from kart.repo import KartRepo H = pytest.helpers.helpers() @@ -188,20 +188,7 @@ def test_init_with_invalid_spatial_filter(cli_runner, tmp_path): @pytest.mark.skipif(is_windows, reason=SKIP_REASON) -def test_clone_with_spatial_filter( - data_archive, cli_runner, tmp_path, insert, monkeypatch -): - # Keep track of how many features we fetch lazily after the partial clone. - orig_fetch_func = FetchPromisedBlobsProcess.fetch - fetch_count = 0 - - def _fetch(*args, **kwargs): - nonlocal fetch_count - fetch_count += 1 - return orig_fetch_func(*args, **kwargs) - - monkeypatch.setattr(FetchPromisedBlobsProcess, "fetch", _fetch) - +def test_clone_with_spatial_filter(data_archive, cli_runner, tmp_path): geom = SPATIAL_FILTER_GEOMETRY["polygons"] crs = SPATIAL_FILTER_CRS["polygons"] @@ -255,13 +242,94 @@ def _fetch(*args, **kwargs): with repo3.working_copy.session() as sess: assert H.row_count(sess, H.POLYGONS.LAYER) == 44 + finally: + del os.environ["X_KART_SPATIAL_FILTERED_CLONE"] + + # The next test delves further into testing how spatial-filtered clones behave, but + # it loads the same spatially filtered repo from the test data folder so that we can + # test spatially filtered cloning separately from spatially filtered clone behaviour. + + +def test_spatially_filtered_partial_clone(data_archive, cli_runner): + crs = SPATIAL_FILTER_CRS["polygons"] + + with data_archive("polygons-with-s2index") as repo1_path: + repo1_url = f"file://{repo1_path.resolve()}" + + with data_archive("polygons-spatial-filtered") as repo2_path: + repo2 = KartRepo(repo2_path) + repo2.config["remote.origin.url"] = repo1_url + + assert repo2.config["kart.spatialfilter.geometry"].startswith( + "POLYGON ((174.879 -37.8277," + ) + assert repo2.config["kart.spatialfilter.crs"] == crs + ds = repo2.datasets()[H.POLYGONS.LAYER] + + local_feature_count = local_features(ds) + assert local_feature_count != H.POLYGONS.ROWCOUNT + assert local_feature_count == 52 + + r = cli_runner.invoke(["-C", repo2_path, "create-workingcopy"]) + assert r.exit_code == 0, r.stderr + + with repo2.working_copy.session() as sess: + assert H.row_count(sess, H.POLYGONS.LAYER) == 44 + + def _get_key_error(ds, pk): + try: + ds.get_feature(pk) + return None + except KeyError as e: + return e + + assert _get_key_error(ds, 1424927) is None + assert _get_key_error(ds, 9999999).subcode == LibgitSubcode.ENOSUCHPATH + assert _get_key_error(ds, 1443053).subcode == LibgitSubcode.EOBJECTPROMISED + + +# Fetch also doesn't on spatial filtered repos without custom git. +@pytest.mark.skipif(is_windows, reason=SKIP_REASON) +def test_spatially_filtered_fetch_promised( + data_archive, cli_runner, insert, monkeypatch +): + + # Keep track of how many features we fetch lazily after the partial clone. + orig_fetch_func = FetchPromisedBlobsProcess.fetch + fetch_count = 0 + + def _fetch(*args, **kwargs): + nonlocal fetch_count + fetch_count += 1 + return orig_fetch_func(*args, **kwargs) + + monkeypatch.setattr(FetchPromisedBlobsProcess, "fetch", _fetch) + + with data_archive("polygons-with-s2index") as repo1_path: + repo1_url = f"file://{repo1_path.resolve()}" + + with data_archive("polygons-spatial-filtered") as repo2_path: + repo2 = KartRepo(repo2_path) + repo2.config["remote.origin.url"] = repo1_url + + ds = repo2.datasets()[H.POLYGONS.LAYER] + + local_feature_count = local_features(ds) + assert local_feature_count != H.POLYGONS.ROWCOUNT + assert local_feature_count == 52 + + r = cli_runner.invoke(["-C", repo2_path, "create-workingcopy"]) + assert r.exit_code == 0, r.stderr + + with repo2.working_copy.session() as sess: + assert H.row_count(sess, H.POLYGONS.LAYER) == 44 # Inserting features that are in the dataset, but don't match the spatial filter, # so they are not loaded locally nor written to the working copy. for pk in H.POLYGONS.SAMPLE_PKS: if not is_local_feature(ds, pk): insert(sess, with_pk=pk, commit=False) - r = cli_runner.invoke(["-C", repo3_path, "status"]) + r = cli_runner.invoke(["-C", repo2_path, "status"]) assert r.exit_code == 0, r.stderr # TODO - label pk-conflicts as being different to updates in kart status assert "6 updates" in r.stdout @@ -269,23 +337,20 @@ def _fetch(*args, **kwargs): assert fetch_count == 6 assert local_features(ds) == 58 - with repo3.working_copy.session() as sess: + with repo2.working_copy.session() as sess: sess.execute(f"DROP TABLE {H.POLYGONS.LAYER};") - r = cli_runner.invoke(["-C", repo3_path, "status"]) + r = cli_runner.invoke(["-C", repo2_path, "status"]) assert r.exit_code == 0, r.stderr assert f"{H.POLYGONS.ROWCOUNT} deletes" in r.stdout assert local_features(ds) == 58 - r = cli_runner.invoke(["-C", repo3_path, "diff"]) + r = cli_runner.invoke(["-C", repo2_path, "diff"]) assert r.exit_code == 0, r.stderr # All of the deleted features have now been loaded to show in the diff output: assert local_features(ds) == H.POLYGONS.ROWCOUNT assert fetch_count == H.POLYGONS.ROWCOUNT - 52 - finally: - del os.environ["X_KART_SPATIAL_FILTERED_CLONE"] - def test_clone_with_reference_spatial_filter(data_archive, cli_runner, tmp_path): # TODO - this currently tests that the spatial filter is correctly applied locally after diff --git a/vendor/makefile.vc b/vendor/makefile.vc index fb22b7f03..c2b9ff216 100644 --- a/vendor/makefile.vc +++ b/vendor/makefile.vc @@ -1,9 +1,18 @@ PATH=$(MAKEDIR)\env\Scripts;$(PATH);C:\Program Files\7-zip; GIT_VER=2.29.2 -LIBGIT_REF=v1.1.0 -PYGIT2_REF=da410961f0a426cdecbd36548c2b36dc13c674c2 -PYGIT2_VER=1.3.0 + +# v1.3.0 + koordinates changes +LIBGIT2_REF=bb69c8fa3d30c38e409771e388787d5ea38b7723 +LIBGIT2_REPO=koordinates/libgit2 +LIBGIT2_ARCHIVE=libgit2-$(LIBGIT2_REF).zip + +# v1.7.0 + koordinates changes +PYGIT2_REF=3443cd8fd2cead2de608f51ccb3cdee5167c1fd4 +PYGIT2_REPO=koordinates/pygit2 +PYGIT2_ARCHIVE=pygit2-$(PYGIT2_REF).zip +PYGIT2_VER=1.7.0 + SQLITE_VER=3.31.1 SQLITE_URL=https://www.sqlite.org/2020/sqlite-amalgamation-3310100.zip @@ -150,7 +159,7 @@ wheels: wheelhouse copy /Y wheelhouse\*.whl dist\wheelhouse # Libgit2 -LIBGIT2_URL="https://github.com/libgit2/libgit2/archive/$(LIBGIT_REF).zip" +LIBGIT2_URL="https://github.com/$(LIBGIT2_REPO)/archive/$(LIBGIT2_REF).zip" libgit2_src=libgit2\src libgit2=libgit2\env\bin\git2.dll @@ -181,7 +190,7 @@ $(libgit2): $(libgit2_src) libgit2: $(libgit2) # Pygit2 -PYGIT2_URL="https://github.com/libgit2/pygit2/archive/$(PYGIT2_REF).zip" +PYGIT2_URL="https://github.com/$(PYGIT2_REPO)/archive/$(PYGIT2_REF).zip" pygit2_src=pygit2\src pygit2=dist\wheelhouse\pygit2-$(PYGIT2_VER)-cp37-cp37m-win_amd64.whl