commitctx: create the ChangingFiles object directly in the various case
No need to compute all data then create the object, we can create it early and
directly store data in it. We start simple by moving create higher in the
function, but the end goal is to eventually move the creation inside the
`_process_files` function to take advantage of the object there.
# extension to emulate invoking 'patch.internalpatch()' at the time
# specified by '[fakepatchtime] fakenow'
from __future__ import absolute_import
from mercurial import (
extensions,
patch as patchmod,
registrar,
)
from mercurial.utils import dateutil
configtable = {}
configitem = registrar.configitem(configtable)
configitem(
b'fakepatchtime', b'fakenow', default=None,
)
def internalpatch(
orig,
ui,
repo,
patchobj,
strip,
prefix=b'',
files=None,
eolmode=b'strict',
similarity=0,
):
if files is None:
files = set()
r = orig(
ui,
repo,
patchobj,
strip,
prefix=prefix,
files=files,
eolmode=eolmode,
similarity=similarity,
)
fakenow = ui.config(b'fakepatchtime', b'fakenow')
if fakenow:
# parsing 'fakenow' in YYYYmmddHHMM format makes comparison between
# 'fakenow' value and 'touch -t YYYYmmddHHMM' argument easy
fakenow = dateutil.parsedate(fakenow, [b'%Y%m%d%H%M'])[0]
for f in files:
repo.wvfs.utime(f, (fakenow, fakenow))
return r
def extsetup(ui):
extensions.wrapfunction(patchmod, 'internalpatch', internalpatch)