Mercurial > public > mercurial-scm > hg
comparison mercurial/localrepo.py @ 40324:6637b079ae45
lfs: autoload the extension when cloning from repo with lfs enabled
This is based on a patch by Gregory Szorc. I made small adjustments to
clean up the messaging when the server has the extension enabled, but the
client has it disabled (to prevent autoloading). Additionally, I added
a second server capability to distinguish between the server having the
extension enabled, and the server having LFS commits. This helps prevent
unnecessary requirement propagation- the client shouldn't add a requirement
that the server doesn't have, just because the server had the extension
loaded. The TODO I had about advertising a capability when the server can
natively serve up blobs isn't relevant anymore (we've had 2 releases that
support this), so I dropped it.
Currently, we lazily add the "lfs" requirement to a repo when we first
encounter LFS data. Due to a pretxnchangegroup hook that looks for LFS
data, this can happen at the end of clone.
Now that we have more control over how repositories are created, we can
do better.
This commit adds a repo creation option to add the "lfs" requirement.
hg.clone() sets this creation option if the remote peer is advertising
lfs usage (as opposed to just support needed to push).
So, what this change effectively does is have cloned repos
automatically inherit the "lfs" requirement.
Differential Revision: https://phab.mercurial-scm.org/D5130
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 20 Sep 2018 17:27:01 -0700 |
parents | e787d97e90ad |
children | a2ebdca4d10e |
comparison
equal
deleted
inserted
replaced
40323:2c0aa02ecd5a | 40324:6637b079ae45 |
---|---|
2893 requirements.add('internal-phase') | 2893 requirements.add('internal-phase') |
2894 | 2894 |
2895 if createopts.get('narrowfiles'): | 2895 if createopts.get('narrowfiles'): |
2896 requirements.add(repository.NARROW_REQUIREMENT) | 2896 requirements.add(repository.NARROW_REQUIREMENT) |
2897 | 2897 |
2898 if createopts.get('lfs'): | |
2899 requirements.add('lfs') | |
2900 | |
2898 return requirements | 2901 return requirements |
2899 | 2902 |
2900 def filterknowncreateopts(ui, createopts): | 2903 def filterknowncreateopts(ui, createopts): |
2901 """Filters a dict of repo creation options against options that are known. | 2904 """Filters a dict of repo creation options against options that are known. |
2902 | 2905 |
2911 Extensions can wrap this function to filter out creation options | 2914 Extensions can wrap this function to filter out creation options |
2912 they know how to handle. | 2915 they know how to handle. |
2913 """ | 2916 """ |
2914 known = { | 2917 known = { |
2915 'backend', | 2918 'backend', |
2919 'lfs', | |
2916 'narrowfiles', | 2920 'narrowfiles', |
2917 'sharedrepo', | 2921 'sharedrepo', |
2918 'sharedrelative', | 2922 'sharedrelative', |
2919 'shareditems', | 2923 'shareditems', |
2920 } | 2924 } |
2929 | 2933 |
2930 The following keys for ``createopts`` are recognized: | 2934 The following keys for ``createopts`` are recognized: |
2931 | 2935 |
2932 backend | 2936 backend |
2933 The storage backend to use. | 2937 The storage backend to use. |
2938 lfs | |
2939 Repository will be created with ``lfs`` requirement. The lfs extension | |
2940 will automatically be loaded when the repository is accessed. | |
2934 narrowfiles | 2941 narrowfiles |
2935 Set up repository to support narrow file storage. | 2942 Set up repository to support narrow file storage. |
2936 sharedrepo | 2943 sharedrepo |
2937 Repository object from which storage should be shared. | 2944 Repository object from which storage should be shared. |
2938 sharedrelative | 2945 sharedrelative |