##// END OF EJS Templates
commitctx: extract the function that commit a new manifest...
marmoute -
r45789:f0d4d134 default
parent child Browse files
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