Show More
@@ -132,41 +132,7 b' def commitctx(repo, ctx, error=False, or' | |||
|
132 | 132 | filesremoved = removed |
|
133 | 133 | |
|
134 | 134 | files = touched |
|
135 | md = None | |
|
136 | if not files: | |
|
137 | # if no "files" actually changed in terms of the changelog, | |
|
138 | # try hard to detect unmodified manifest entry so that the | |
|
139 | # exact same commit can be reproduced later on convert. | |
|
140 | md = m1.diff(m, scmutil.matchfiles(repo, ctx.files())) | |
|
141 | if not files and md: | |
|
142 | repo.ui.debug( | |
|
143 | b'not reusing manifest (no file change in ' | |
|
144 | b'changelog, but manifest differs)\n' | |
|
145 | ) | |
|
146 | if files or md: | |
|
147 | repo.ui.note(_(b"committing manifest\n")) | |
|
148 | # we're using narrowmatch here since it's already applied at | |
|
149 | # other stages (such as dirstate.walk), so we're already | |
|
150 | # ignoring things outside of narrowspec in most cases. The | |
|
151 | # one case where we might have files outside the narrowspec | |
|
152 | # at this point is merges, and we already error out in the | |
|
153 | # case where the merge has files outside of the narrowspec, | |
|
154 | # so this is safe. | |
|
155 | mn = mctx.write( | |
|
156 | tr, | |
|
157 | linkrev, | |
|
158 | p1.manifestnode(), | |
|
159 | p2.manifestnode(), | |
|
160 | added, | |
|
161 | drop, | |
|
162 | match=repo.narrowmatch(), | |
|
163 | ) | |
|
164 | else: | |
|
165 | repo.ui.debug( | |
|
166 | b'reusing manifest from p1 (listed files ' | |
|
167 | b'actually unchanged)\n' | |
|
168 | ) | |
|
169 | mn = p1.manifestnode() | |
|
135 | mn = _commit_manifest(tr, linkrev, ctx, mctx, files, added, drop) | |
|
170 | 136 | |
|
171 | 137 | if writecopiesto == b'changeset-only': |
|
172 | 138 | # If writing only to changeset extras, use None to indicate that |
@@ -349,3 +315,65 b' def _filecommit(' | |||
|
349 | 315 | else: |
|
350 | 316 | fnode = fparent1 |
|
351 | 317 | return fnode, touched |
|
318 | ||
|
319 | ||
|
320 | def _commit_manifest(tr, linkrev, ctx, mctx, files, added, drop): | |
|
321 | """make a new manifest entry (or reuse a new one) | |
|
322 | ||
|
323 | given an initialised manifest context and precomputed list of | |
|
324 | - files: files affected by the commit | |
|
325 | - added: new entries in the manifest | |
|
326 | - drop: entries present in parents but absent of this one | |
|
327 | ||
|
328 | Create a new manifest revision, reuse existing ones if possible. | |
|
329 | ||
|
330 | Return the nodeid of the manifest revision. | |
|
331 | """ | |
|
332 | repo = ctx.repo() | |
|
333 | ||
|
334 | md = None | |
|
335 | ||
|
336 | # all this is cached, so it is find to get them all from the ctx. | |
|
337 | p1 = ctx.p1() | |
|
338 | p2 = ctx.p2() | |
|
339 | m1ctx = p1.manifestctx() | |
|
340 | ||
|
341 | m1 = m1ctx.read() | |
|
342 | ||
|
343 | manifest = mctx.read() | |
|
344 | ||
|
345 | if not files: | |
|
346 | # if no "files" actually changed in terms of the changelog, | |
|
347 | # try hard to detect unmodified manifest entry so that the | |
|
348 | # exact same commit can be reproduced later on convert. | |
|
349 | md = m1.diff(manifest, scmutil.matchfiles(repo, ctx.files())) | |
|
350 | if not files and md: | |
|
351 | repo.ui.debug( | |
|
352 | b'not reusing manifest (no file change in ' | |
|
353 | b'changelog, but manifest differs)\n' | |
|
354 | ) | |
|
355 | if files or md: | |
|
356 | repo.ui.note(_(b"committing manifest\n")) | |
|
357 | # we're using narrowmatch here since it's already applied at | |
|
358 | # other stages (such as dirstate.walk), so we're already | |
|
359 | # ignoring things outside of narrowspec in most cases. The | |
|
360 | # one case where we might have files outside the narrowspec | |
|
361 | # at this point is merges, and we already error out in the | |
|
362 | # case where the merge has files outside of the narrowspec, | |
|
363 | # so this is safe. | |
|
364 | mn = mctx.write( | |
|
365 | tr, | |
|
366 | linkrev, | |
|
367 | p1.manifestnode(), | |
|
368 | p2.manifestnode(), | |
|
369 | added, | |
|
370 | drop, | |
|
371 | match=repo.narrowmatch(), | |
|
372 | ) | |
|
373 | else: | |
|
374 | repo.ui.debug( | |
|
375 | b'reusing manifest from p1 (listed files ' b'actually unchanged)\n' | |
|
376 | ) | |
|
377 | mn = p1.manifestnode() | |
|
378 | ||
|
379 | return mn |
General Comments 0
You need to be logged in to leave comments.
Login now