Show More
@@ -132,41 +132,7 b' def commitctx(repo, ctx, error=False, or' | |||||
132 | filesremoved = removed |
|
132 | filesremoved = removed | |
133 |
|
133 | |||
134 | files = touched |
|
134 | files = touched | |
135 | md = None |
|
135 | mn = _commit_manifest(tr, linkrev, ctx, mctx, files, added, drop) | |
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() |
|
|||
170 |
|
136 | |||
171 | if writecopiesto == b'changeset-only': |
|
137 | if writecopiesto == b'changeset-only': | |
172 | # If writing only to changeset extras, use None to indicate that |
|
138 | # If writing only to changeset extras, use None to indicate that | |
@@ -349,3 +315,65 b' def _filecommit(' | |||||
349 | else: |
|
315 | else: | |
350 | fnode = fparent1 |
|
316 | fnode = fparent1 | |
351 | return fnode, touched |
|
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