# HG changeset patch # User Pulkit Goyal # Date 1534857077 -10800 # Node ID 9db85644629855cd1064bfdedf1844db0f981ed9 # Parent c6eb2118f44f6718cf53cf27728a8ac43791f651 sparse: add local files to temporaryfiles if they exist out of sparse We get the f1 from args if it's merge and check that whether that exists in sparse checkout or not. If that does not, we add that for merging. The error comes from very low-level where we try to read data of a working-filectx which does not exists in the working directory. It will be extremely ugly to plug in logic to update sparse copy with new file at such a low level. We already have logic related to updating the checkout with required files in calculateupdates() and let's handle this case there only. calculateupdates() call sparse.filterupdatesactions() and the logic is added into the latter function. To get the exact traceback, this patch can be backed out and test-sparse-merges.t can be run with ui.traceback=True. Differential Revision: https://phab.mercurial-scm.org/D4341 diff -r c6eb2118f44f -r 9db856446298 mercurial/sparse.py --- a/mercurial/sparse.py Tue Aug 21 15:09:22 2018 +0300 +++ b/mercurial/sparse.py Tue Aug 21 16:11:17 2018 +0300 @@ -361,6 +361,11 @@ elif file in wctx: prunedactions[file] = ('r', args, msg) + if branchmerge and type == mergemod.ACTION_MERGE: + f1, f2, fa, move, anc = args + if not sparsematch(f1): + temporaryfiles.append(f1) + if len(temporaryfiles) > 0: repo.ui.status(_('temporarily included %d file(s) in the sparse ' 'checkout for merging\n') % len(temporaryfiles)) diff -r c6eb2118f44f -r 9db856446298 tests/test-sparse-merges.t --- a/tests/test-sparse-merges.t Tue Aug 21 15:09:22 2018 +0300 +++ b/tests/test-sparse-merges.t Tue Aug 21 16:11:17 2018 +0300 @@ -172,10 +172,13 @@ d $ hg merge - abort: $ENOENT$: $TESTTMP/mvtest/a - [255] + temporarily included 1 file(s) in the sparse checkout for merging + merging a and amove to amove + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) $ hg up -C 4 + cleaned up 1 temporarily added file(s) from the sparse checkout 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg merge diff -r c6eb2118f44f -r 9db856446298 tests/test-sparse-profiles.t --- a/tests/test-sparse-profiles.t Tue Aug 21 15:09:22 2018 +0300 +++ b/tests/test-sparse-profiles.t Tue Aug 21 16:11:17 2018 +0300 @@ -119,7 +119,7 @@ Verify conflicting merge pulls in the conflicting changes $ hg merge 1 - temporarily included 1 file(s) in the sparse checkout for merging + temporarily included 2 file(s) in the sparse checkout for merging merging backend.sparse merging data.py warning: conflicts while merging backend.sparse! (edit, then use 'hg resolve --mark') @@ -184,7 +184,7 @@ $ hg rebase -d 2 rebasing 1:a2b1de640a62 "edit profile" - temporarily included 1 file(s) in the sparse checkout for merging + temporarily included 2 file(s) in the sparse checkout for merging merging backend.sparse merging data.py warning: conflicts while merging backend.sparse! (edit, then use 'hg resolve --mark') diff -r c6eb2118f44f -r 9db856446298 tests/test-sparse.t --- a/tests/test-sparse.t Tue Aug 21 15:09:22 2018 +0300 +++ b/tests/test-sparse.t Tue Aug 21 16:11:17 2018 +0300 @@ -189,7 +189,7 @@ $ hg rebase -d 1 -r 2 --config extensions.rebase= rebasing 2:b91df4f39e75 "edit hide" (tip) - temporarily included 1 file(s) in the sparse checkout for merging + temporarily included 2 file(s) in the sparse checkout for merging merging hide warning: conflicts while merging hide! (edit, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) @@ -224,7 +224,7 @@ $ hg up -q 1 $ hg merge -r 2 - temporarily included 1 file(s) in the sparse checkout for merging + temporarily included 2 file(s) in the sparse checkout for merging merging hide warning: conflicts while merging hide! (edit, then use 'hg resolve --mark') 0 files updated, 0 files merged, 0 files removed, 1 files unresolved