Run GitRepoTests in sparse mode#84
Run GitRepoTests in sparse mode#84derrickstolee merged 20 commits intomicrosoft:masterfrom derrickstolee:sparse
Conversation
Scalar.FunctionalTests/Tests/EnlistmentPerFixture/LooseObjectStepTests.cs
Show resolved
Hide resolved
|
This is harder than anticipated. Looks like CloneVerb needs some work because I'm having non-deterministic failures depending on timing of parallel tests. The logic around mounting and checking out the tip file is not quite working all the time. Will dig deep on this. |
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
jrbriggs
left a comment
There was a problem hiding this comment.
Overall this looks good. A few nits/questions.
Scalar.FunctionalTests/Tests/EnlistmentPerFixture/LooseObjectStepTests.cs
Show resolved
Hide resolved
How much of a perf hit was this on Mac? I'm wondering if we should just do the platform-specific change now so that it can be on during the demo. |
I want to come back immediately after this PR with the isolated change for the untracked cache. It's a decent hit to the |
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
wilbaker
left a comment
There was a problem hiding this comment.
Approved with some minor suggestions
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Resolves #77.
Update the functional tests to initialize a sparse enlistment with
scalar sparse --add-stdinand to test lots of Git commands in that mode versus a vanilla Git repo. Uses the SparseMode checks from microsoft/vfsforgit to verify the contents inside the cone match, but ignores all changes outside the cone.This took a lot longer than anticipated. Here are a few things that happened along the way:
The untracked cache doesn't work correctly on Windows. The functional tests were failing due to quickly running status after every call. This was working correctly on Mac, so maybe we re-enable it on a platform-specific basis later. Reverts Use untracked cache by default #86 until we can revisit.
The clone verb was causing problems. This is due to some timing concerns, mostly: VFS for Git needs a checkout to construct an index before mounting, but we can't checkout before mounting. Since the sparse verb doesn't prefetch before checkout (it doesn't need everything, but needs some things), we needed to change this order. However, the
CloneVerbcode is very convoluted. It required a lot of refactoring to split out that checkout code. Hopefully the new code is cleaner and easier to modify.The input for the cone matches is slightly different for Git: we need
/as the path separator, but the logic for interpreting those paths in the test code uses the platform-specific separator.The parallel test scripts were causing new issues in the
LooseObjectStepTests. Turns out that in Fix LooseObjectStepTests #68, I messed up the base constructor parameters and didn't give that enlistment a local object cache. That meant that other clones had prefetches and loose object downloads causing different numbers in these tests. That's fixed.CloneWithDefaultLocalCacheLocation()was failing on the build machine but not on my laptop. The error appeared to be due to failing to register the mount with the service. Turns out, this test used to use the--no-mountoption, but that was removed in CloneVerb: remove --no-mount option #80. Oops! Maybe we'll put that back as an--internal_use_onlyparameter. OR we can figure out why the service isn't running during that test.