comparison tests/test-narrow-merge.t @ 48716:f1eb77dceb36

narrow: allow merging non-conflicting change outside of the narrow spec We use the mergestate to carry information about these merge action and reprocess them at commit time to apply the necessary update. The dirstate itself is never affected and remains "pure", with content only in the narrow-spec. This file involved in such merge are therefor not listed in `hg status`. The current testing is based on a modification of the previous testing, that refused to do such merges. As a result it is a bit simple and more extensive code and testing testing will have to be introduced later. I am planning to do this extra testing, soon. In addition, this only works for flat manifest. Support for tree manifest will need more work. I am not currently planning to do this work. Differential Revision: https://phab.mercurial-scm.org/D12119
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 03 Feb 2022 18:14:11 +0100
parents 8e855e9984a6
children 7e5be4a7cda7
comparison
equal deleted inserted replaced
48715:7d073df49a54 48716:f1eb77dceb36
81 $ hg commit -m 'merge inside/f1' 81 $ hg commit -m 'merge inside/f1'
82 82
83 TODO: Can merge non-conflicting changes outside narrow spec 83 TODO: Can merge non-conflicting changes outside narrow spec
84 84
85 $ hg update -q 'desc("modify inside/f1")' 85 $ hg update -q 'desc("modify inside/f1")'
86
87 #if flat
88
86 $ hg merge 'desc("modify outside/f1")' 89 $ hg merge 'desc("modify outside/f1")'
87 abort: merge affects file 'outside/f1' outside narrow, which is not yet supported (flat !) 90 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
91 (branch merge, don't forget to commit)
92
93 status should be clean
94
95 $ hg status
96 ? inside/f1.orig
97
98 file out of the spec should still not be in the dirstate at all
99
100 $ hg debugdirstate | grep outside/f1
101 [1]
102
103 Commit that merge
104
105 $ hg ci -m 'merge from outside to inside'
106
107 status should be clean
108
109 $ hg status
110 ? inside/f1.orig
111
112 file out of the spec should not be in the mergestate anymore
113
114 $ hg debugmergestate | grep outside/f1
115 [1]
116
117 file out of the spec should still not be in the dirstate at all
118
119 $ hg debugdirstate | grep outside/f1
120 [1]
121
122 The filenode used should come from p2
123
124 $ hg manifest --debug --rev . | grep outside/f1
125 83cd11431a3b2aff8a3995e5f27bcf33cdb5be98 644 outside/f1
126 $ hg manifest --debug --rev 'p1(.)' | grep outside/f1
127 c6b956c48be2cd4fa94be16002aba311143806fa 644 outside/f1
128 $ hg manifest --debug --rev 'p2(.)' | grep outside/f1
129 83cd11431a3b2aff8a3995e5f27bcf33cdb5be98 644 outside/f1
130
131
132 remove the commit to get in the previous situation again
133
134 $ hg debugstrip -r .
135 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
136 saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/48eb25338b19-a1bb8350-backup.hg
137
138 #else
139
140 $ hg merge 'desc("modify outside/f1")'
88 abort: merge affects file 'outside/' outside narrow, which is not yet supported (tree !) 141 abort: merge affects file 'outside/' outside narrow, which is not yet supported (tree !)
89 (merging in the other direction may work) 142 (merging in the other direction may work)
90 [255] 143 [255]
144
145 #endif
91 146
92 $ hg update -q 'desc("modify outside/f1")' 147 $ hg update -q 'desc("modify outside/f1")'
93 $ hg merge 'desc("modify inside/f1")' 148 $ hg merge 'desc("modify inside/f1")'
94 1 files updated, 0 files merged, 0 files removed, 0 files unresolved 149 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
95 (branch merge, don't forget to commit) 150 (branch merge, don't forget to commit)