mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 15:57:43 +03:00
d4b7db6294
git patches may require copies to be handled out-of-order. For instance, take the following sequence: * modify a * copy a into b Here, we have to generate b from a before its modification. To do so, applydiff() was scanning for copy metadata and performing the copies before processing the other changes in-order. While smart and efficient, this approach complicates things by handling file copies and file creations at different places and times. While a new file must not exist before being patched a copied file already exists before applying the first hunk. Instead of copying the files at their final destination before patching, we store them in a temporary file location and retrieve them when patching. The filestore always stores file content in real files but nothing prevents adding a cache layer. The filestore class was kept separate from fsbackend for at least two reasons: - This class is likely to be reused as a temporary result store for a future repository patching call (entries just have to be extended to contain copy sources). - Delegating this role to backends might be more efficient in a repository backend case: the source files are already available in the repository itself and do not need to be copied again. It also means that third-parties backend would have to implement two other methods. If we ever decide to merge the filestore feature into backend, a minimalistic approach would be to compose with filestore directly. Keep in mind this copy overhead only applies for copy/rename sources, and may even be reduced to copy sources which have to handled ahead of time. |
||
---|---|---|
.. | ||
convert | ||
highlight | ||
inotify | ||
zeroconf | ||
__init__.py | ||
acl.py | ||
bugzilla.py | ||
children.py | ||
churn.py | ||
color.py | ||
eol.py | ||
extdiff.py | ||
fetch.py | ||
gpg.py | ||
graphlog.py | ||
hgcia.py | ||
hgk.py | ||
interhg.py | ||
keyword.py | ||
mq.py | ||
notify.py | ||
pager.py | ||
patchbomb.py | ||
progress.py | ||
purge.py | ||
rebase.py | ||
record.py | ||
relink.py | ||
schemes.py | ||
share.py | ||
transplant.py | ||
win32mbcs.py | ||
win32text.py |