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