Mercurial > hg
annotate hgext/lfs/__init__.py @ 50308:cab3defe6d3b stable
transaction: raise on backup restoration error
A few line above, similar errors in the truncation code result in raising the
associated exception. We should do the same here.
This means the transaction recover is more strict now, which might be a problem
when running `hg recover` in a share different from the one where the
transaction fails. However this has always been a problem and need to be be
addressed independently.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 15 Mar 2023 12:13:08 +0100 |
parents | 1672c5af1271 |
children | dde4b55a0785 |
rev | line source |
---|---|
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
1 # lfs - hash-preserving large file support using Git-LFS protocol |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
2 # |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
3 # Copyright 2017 Facebook, Inc. |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
4 # |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
7 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
8 """lfs - large file support (EXPERIMENTAL) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
9 |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
10 This extension allows large files to be tracked outside of the normal |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
11 repository storage and stored on a centralized server, similar to the |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
12 ``largefiles`` extension. The ``git-lfs`` protocol is used when |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
13 communicating with the server, so existing git infrastructure can be |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
14 harnessed. Even though the files are stored outside of the repository, |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
15 they are still integrity checked in the same manner as normal files. |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
16 |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
17 The files stored outside of the repository are downloaded on demand, |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
18 which reduces the time to clone, and possibly the local disk usage. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
19 This changes fundamental workflows in a DVCS, so careful thought |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
20 should be given before deploying it. :hg:`convert` can be used to |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
21 convert LFS repositories to normal repositories that no longer |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
22 require this extension, and do so without changing the commit hashes. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
23 This allows the extension to be disabled if the centralized workflow |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
24 becomes burdensome. However, the pre and post convert clones will |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
25 not be able to communicate with each other unless the extension is |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
26 enabled on both. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
27 |
35807
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
28 To start a new repository, or to add LFS files to an existing one, just |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
29 create an ``.hglfs`` file as described below in the root directory of |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
30 the repository. Typically, this file should be put under version |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
31 control, so that the settings will propagate to other repositories with |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
32 push and pull. During any commit, Mercurial will consult this file to |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
33 determine if an added or modified file should be stored externally. The |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
34 type of storage depends on the characteristics of the file at each |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
35 commit. A file that is near a size threshold may switch back and forth |
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
36 between LFS and normal storage, as needed. |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
37 |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
38 Alternately, both normal repositories and largefile controlled |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
39 repositories can be converted to LFS by using :hg:`convert` and the |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
40 ``lfs.track`` config option described below. The ``.hglfs`` file |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
41 should then be created and added, to control subsequent LFS selection. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
42 The hashes are also unchanged in this case. The LFS and non-LFS |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
43 repositories can be distinguished because the LFS repository will |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
44 abort any command if this extension is disabled. |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
45 |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
46 Committed LFS files are held locally, until the repository is pushed. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
47 Prior to pushing the normal repository data, the LFS files that are |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
48 tracked by the outgoing commits are automatically uploaded to the |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
49 configured central server. No LFS files are transferred on |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
50 :hg:`pull` or :hg:`clone`. Instead, the files are downloaded on |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
51 demand as they need to be read, if a cached copy cannot be found |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
52 locally. Both committing and downloading an LFS file will link the |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
53 file to a usercache, to speed up future access. See the `usercache` |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
54 config setting described below. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
55 |
43303
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
56 The extension reads its configuration from a versioned ``.hglfs`` |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
57 configuration file found in the root of the working directory. The |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
58 ``.hglfs`` file uses the same syntax as all other Mercurial |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
59 configuration files. It uses a single section, ``[track]``. |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
60 |
43303
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
61 The ``[track]`` section specifies which files are stored as LFS (or |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
62 not). Each line is keyed by a file pattern, with a predicate value. |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
63 The first file pattern match is used, so put more specific patterns |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
64 first. The available predicates are ``all()``, ``none()``, and |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
65 ``size()``. See "hg help filesets.size" for the latter. |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
66 |
43303
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
67 Example versioned ``.hglfs`` file:: |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
68 |
43303
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
69 [track] |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
70 # No Makefile or python file, anywhere, will be LFS |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
71 **Makefile = none() |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
72 **.py = none() |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
73 |
43303
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
74 **.zip = all() |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
75 **.exe = size(">1MB") |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
76 |
43303
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
77 # Catchall for everything not matched above |
26caf96a5fa9
lfs: dedent documentation section about .hglfs file
Denis Laxalde <denis@laxalde.org>
parents:
43105
diff
changeset
|
78 ** = size(">10MB") |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
79 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
80 Configs:: |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
81 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
82 [lfs] |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
83 # Remote endpoint. Multiple protocols are supported: |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
84 # - http(s)://user:pass@example.com/path |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
85 # git-lfs endpoint |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
86 # - file:///tmp/path |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
87 # local filesystem, usually for testing |
37564
31a4ea773369
lfs: infer the blob store URL from an explicit push dest or default-push
Matt Harbison <matt_harbison@yahoo.com>
parents:
37562
diff
changeset
|
88 # if unset, lfs will assume the remote repository also handles blob storage |
31a4ea773369
lfs: infer the blob store URL from an explicit push dest or default-push
Matt Harbison <matt_harbison@yahoo.com>
parents:
37562
diff
changeset
|
89 # for http(s) URLs. Otherwise, lfs will prompt to set this when it must |
31a4ea773369
lfs: infer the blob store URL from an explicit push dest or default-push
Matt Harbison <matt_harbison@yahoo.com>
parents:
37562
diff
changeset
|
90 # use this value. |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
91 # (default: unset) |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
92 url = https://example.com/repo.git/info/lfs |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
93 |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
94 # Which files to track in LFS. Path tests are "**.extname" for file |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
95 # extensions, and "path:under/some/directory" for path prefix. Both |
35741
73432eee0ac4
fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents:
35735
diff
changeset
|
96 # are relative to the repository root. |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
97 # File size can be tested with the "size()" fileset, and tests can be |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
98 # joined with fileset operators. (See "hg help filesets.operators".) |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
99 # |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
100 # Some examples: |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
101 # - all() # everything |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
102 # - none() # nothing |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
103 # - size(">20MB") # larger than 20MB |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
104 # - !**.txt # anything not a *.txt file |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
105 # - **.zip | **.tar.gz | **.7z # some types of compressed files |
35741
73432eee0ac4
fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents:
35735
diff
changeset
|
106 # - path:bin # files under "bin" in the project root |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
107 # - (**.php & size(">2MB")) | (**.js & size(">5MB")) | **.tar.gz |
35741
73432eee0ac4
fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents:
35735
diff
changeset
|
108 # | (path:bin & !path:/bin/README) | size(">1GB") |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
109 # (default: none()) |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
110 # |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
111 # This is ignored if there is a tracked '.hglfs' file, and this setting |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
112 # will eventually be deprecated and removed. |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
113 track = size(">10M") |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
114 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
115 # how many times to retry before giving up on transferring an object |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
116 retry = 5 |
35280
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
117 |
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
118 # the local directory to store lfs files for sharing across local clones. |
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
119 # If not set, the cache is located in an OS specific cache location. |
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
120 usercache = /path/to/global/cache |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
121 """ |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
122 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
123 |
40268
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
124 import sys |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
125 |
35099
b8e5fb8d2389
lfs: quiesce check-module-import warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
35098
diff
changeset
|
126 from mercurial.i18n import _ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
127 from mercurial.node import bin |
35099
b8e5fb8d2389
lfs: quiesce check-module-import warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
35098
diff
changeset
|
128 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
129 from mercurial import ( |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45106
diff
changeset
|
130 bundlecaches, |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
131 config, |
41279
c9e1104e6272
exthelper: drop the addattr() decorator
Matt Harbison <matt_harbison@yahoo.com>
parents:
41230
diff
changeset
|
132 context, |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
133 error, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
134 extensions, |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
135 exthelper, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
136 filelog, |
38805
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38800
diff
changeset
|
137 filesetlang, |
35175
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
138 localrepo, |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46113
diff
changeset
|
139 logcmdutil, |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
140 minifileset, |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
141 pycompat, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
142 revlog, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
143 scmutil, |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36598
diff
changeset
|
144 templateutil, |
35731
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
145 util, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
146 ) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
147 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
148 from mercurial.interfaces import repository |
42813
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42620
diff
changeset
|
149 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
150 from . import ( |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
151 blobstore, |
37147
a2566597acb5
lfs: add basic routing for the server side wire protocol processing
Matt Harbison <matt_harbison@yahoo.com>
parents:
37138
diff
changeset
|
152 wireprotolfsserver, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
153 wrapper, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
154 ) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
155 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
156 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
157 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
158 # be specifying the version(s) of Mercurial they are tested with, or |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
159 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
160 testedwith = b'ships-with-hg-core' |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
161 |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
162 eh = exthelper.exthelper() |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
163 eh.merge(wrapper.eh) |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
164 eh.merge(wireprotolfsserver.eh) |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
165 |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
166 cmdtable = eh.cmdtable |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
167 configtable = eh.configtable |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
168 extsetup = eh.finalextsetup |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
169 uisetup = eh.finaluisetup |
41070
8f40e21ca842
exthelper: reintroduce the ability to register filesets
Matt Harbison <matt_harbison@yahoo.com>
parents:
41069
diff
changeset
|
170 filesetpredicate = eh.filesetpredicate |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
171 reposetup = eh.finalreposetup |
41069
70ca0e846d25
exthelper: reintroduce the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents:
41048
diff
changeset
|
172 templatekeyword = eh.templatekeyword |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
173 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
174 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
175 b'experimental', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
176 b'lfs.serve', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
177 default=True, |
37248
dfb38c4850a9
lfs: add an experimental knob to disable blob serving
Matt Harbison <matt_harbison@yahoo.com>
parents:
37165
diff
changeset
|
178 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
179 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
180 b'experimental', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
181 b'lfs.user-agent', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
182 default=None, |
35440
e333d27514b0
lfs: add an experimental config to override User-Agent for the blob transfer
Matt Harbison <matt_harbison@yahoo.com>
parents:
35363
diff
changeset
|
183 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
184 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
185 b'experimental', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
186 b'lfs.disableusercache', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
187 default=False, |
37562
e5cd8d1a094d
lfs: special case the null:// usercache instead of treating it as a url
Matt Harbison <matt_harbison@yahoo.com>
parents:
37518
diff
changeset
|
188 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
189 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
190 b'experimental', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
191 b'lfs.worker-enable', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
192 default=True, |
35732
10e62d5efa73
lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents:
35731
diff
changeset
|
193 ) |
35440
e333d27514b0
lfs: add an experimental config to override User-Agent for the blob transfer
Matt Harbison <matt_harbison@yahoo.com>
parents:
35363
diff
changeset
|
194 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
195 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
196 b'lfs', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
197 b'url', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
198 default=None, |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
199 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
200 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
201 b'lfs', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
202 b'usercache', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
203 default=None, |
35280
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
204 ) |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
205 # Deprecated |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
206 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
207 b'lfs', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
208 b'threshold', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
209 default=None, |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
210 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
211 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
212 b'lfs', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
213 b'track', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
214 default=b'none()', |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
215 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
216 eh.configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
217 b'lfs', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
218 b'retry', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45784
diff
changeset
|
219 default=5, |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
220 ) |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
221 |
40268
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
222 lfsprocessor = ( |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
223 wrapper.readfromstore, |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
224 wrapper.writetostore, |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
225 wrapper.bypasscheckhash, |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
226 ) |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
227 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
228 |
35175
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
229 def featuresetup(ui, supported): |
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
230 # don't die on seeing a repo with the lfs requirement |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
231 supported |= {b'lfs'} |
35175
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
232 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
233 |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
234 @eh.uisetup |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
235 def _uisetup(ui): |
37135
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37132
diff
changeset
|
236 localrepo.featuresetupfuncs.add(featuresetup) |
35175
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
237 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
238 |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
239 @eh.reposetup |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
240 def _reposetup(ui, repo): |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
241 # Nothing to do with a remote repo |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
242 if not repo.local(): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
243 return |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
244 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
245 repo.svfs.lfslocalblobstore = blobstore.local(repo) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
246 repo.svfs.lfsremoteblobstore = blobstore.remote(repo) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
247 |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
248 class lfsrepo(repo.__class__): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
249 @localrepo.unfilteredmethod |
42620
d98ec36be808
convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
41279
diff
changeset
|
250 def commitctx(self, ctx, error=False, origctx=None): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
251 repo.svfs.options[b'lfstrack'] = _trackedmatcher(self) |
42620
d98ec36be808
convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
41279
diff
changeset
|
252 return super(lfsrepo, self).commitctx(ctx, error, origctx=origctx) |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
253 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
254 repo.__class__ = lfsrepo |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
255 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
256 if b'lfs' not in repo.requirements: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
257 |
35175
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
258 def checkrequireslfs(ui, repo, **kwargs): |
48663
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
259 with repo.lock(): |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
260 if b'lfs' in repo.requirements: |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
261 return 0 |
40131
535fc8a22365
lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents:
38689
diff
changeset
|
262 |
48663
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
263 last = kwargs.get('node_last') |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
264 if last: |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
265 s = repo.set(b'%n:%n', bin(kwargs['node']), bin(last)) |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
266 else: |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
267 s = repo.set(b'%n', bin(kwargs['node'])) |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
268 match = repo._storenarrowmatch |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
269 for ctx in s: |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
270 # TODO: is there a way to just walk the files in the commit? |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
271 if any( |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
272 ctx[f].islfs() |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
273 for f in ctx.files() |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
274 if f in ctx and match(f) |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
275 ): |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
276 repo.requirements.add(b'lfs') |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
277 repo.features.add(repository.REPO_FEATURE_LFS) |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
278 scmutil.writereporequirements(repo) |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
279 repo.prepushoutgoinghooks.add(b'lfs', wrapper.prepush) |
bf424fe4f814
lfs: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48116
diff
changeset
|
280 break |
35175
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
281 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
282 ui.setconfig(b'hooks', b'commit.lfs', checkrequireslfs, b'lfs') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
283 ui.setconfig( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 b'hooks', b'pretxnchangegroup.lfs', checkrequireslfs, b'lfs' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
285 ) |
35735
693e3bcae19e
lfs: defer registering the pre-push hook until blobs are committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35732
diff
changeset
|
286 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
287 repo.prepushoutgoinghooks.add(b'lfs', wrapper.prepush) |
35175
e0a1b9ee93cd
lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35100
diff
changeset
|
288 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
289 |
35880
6bd2846a82e8
lfs: drop an unused function parameter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35807
diff
changeset
|
290 def _trackedmatcher(repo): |
35664
3c838bdc57b6
lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents:
35663
diff
changeset
|
291 """Return a function (path, size) -> bool indicating whether or not to |
3c838bdc57b6
lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents:
35663
diff
changeset
|
292 track a given file with lfs.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
293 if not repo.wvfs.exists(b'.hglfs'): |
35807
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
294 # No '.hglfs' in wdir. Fallback to config for now. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
295 trackspec = repo.ui.config(b'lfs', b'track') |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
296 |
35807
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
297 # deprecated config: lfs.threshold |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
298 threshold = repo.ui.configbytes(b'lfs', b'threshold') |
35807
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
299 if threshold: |
38805
b9162ea1b815
fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38800
diff
changeset
|
300 filesetlang.parse(trackspec) # make sure syntax errors are confined |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
301 trackspec = b"(%s) | size('>%d')" % (trackspec, threshold) |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
302 |
35807
4425790f2373
lfs: don't require the .hglfs file to be tracked to control the policy
Matt Harbison <matt_harbison@yahoo.com>
parents:
35798
diff
changeset
|
303 return minifileset.compile(trackspec) |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
304 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
305 data = repo.wvfs.tryread(b'.hglfs') |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
306 if not data: |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
307 return lambda p, s: False |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
308 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
309 # Parse errors here will abort with a message that points to the .hglfs file |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
310 # and line number. |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
311 cfg = config.config() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
312 cfg.parse(b'.hglfs', data) |
35664
3c838bdc57b6
lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents:
35663
diff
changeset
|
313 |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
314 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
315 rules = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
316 (minifileset.compile(pattern), minifileset.compile(rule)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
317 for pattern, rule in cfg.items(b'track') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
318 ] |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
319 except error.ParseError as e: |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
320 # The original exception gives no indicator that the error is in the |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
321 # .hglfs file, so add that. |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
322 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
323 # TODO: See if the line number of the file can be made available. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
324 raise error.Abort(_(b'parse error in .hglfs: %s') % e) |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
325 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
326 def _match(path, size): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
327 for pat, rule in rules: |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
328 if pat(path, size): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
329 return rule(path, size) |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
330 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
331 return False |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
332 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
333 return _match |
35664
3c838bdc57b6
lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents:
35663
diff
changeset
|
334 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
335 |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
336 # Called by remotefilelog |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
337 def wrapfilelog(filelog): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
338 wrapfunction = extensions.wrapfunction |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
339 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
340 wrapfunction(filelog, 'addrevision', wrapper.filelogaddrevision) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
341 wrapfunction(filelog, 'renamed', wrapper.filelogrenamed) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
342 wrapfunction(filelog, 'size', wrapper.filelogsize) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
343 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
344 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
345 @eh.wrapfunction(localrepo, b'resolverevlogstorevfsoptions') |
40268
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
346 def _resolverevlogstorevfsoptions(orig, ui, requirements, features): |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
347 opts = orig(ui, requirements, features) |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
348 for name, module in extensions.extensions(ui): |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
349 if module is sys.modules[__name__]: |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
350 if revlog.REVIDX_EXTSTORED in opts[b'flagprocessors']: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
351 msg = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
352 _(b"cannot register multiple processors on flag '%#x'.") |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
353 % revlog.REVIDX_EXTSTORED |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
354 ) |
40268
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
355 raise error.Abort(msg) |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
356 |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
357 opts[b'flagprocessors'][revlog.REVIDX_EXTSTORED] = lfsprocessor |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
358 break |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
359 |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
360 return opts |
9c4cbbb0fc51
lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents:
39868
diff
changeset
|
361 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
362 |
41048
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
363 @eh.extsetup |
84d61fdcefa5
lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents:
40313
diff
changeset
|
364 def _extsetup(ui): |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
365 wrapfilelog(filelog.filelog) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
366 |
41279
c9e1104e6272
exthelper: drop the addattr() decorator
Matt Harbison <matt_harbison@yahoo.com>
parents:
41230
diff
changeset
|
367 context.basefilectx.islfs = wrapper.filectxislfs |
c9e1104e6272
exthelper: drop the addattr() decorator
Matt Harbison <matt_harbison@yahoo.com>
parents:
41230
diff
changeset
|
368 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
369 scmutil.fileprefetchhooks.add(b'lfs', wrapper._prefetchfiles) |
35922
0b79f99fd7b0
lfs: prefetch lfs blobs when applying merge updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
35880
diff
changeset
|
370 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
371 # Make bundle choose changegroup3 instead of changegroup2. This affects |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
372 # "hg bundle" command. Note: it does not cover all bundle formats like |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
373 # "packed1". Using "packed1" with lfs will likely cause trouble. |
45784
74271829ddc0
clonebundles: move a bundle of clone bundle related code to a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45106
diff
changeset
|
374 bundlecaches._bundlespeccontentopts[b"v2"][b"cg.version"] = b"03" |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
375 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
376 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 @eh.filesetpredicate(b'lfs()') |
35990
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
378 def lfsfileset(mctx, x): |
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
379 """File that uses LFS storage.""" |
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
380 # i18n: "lfs" is a keyword |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
381 filesetlang.getargs(x, 0, 0, _(b"lfs takes no arguments")) |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
37785
diff
changeset
|
382 ctx = mctx.ctx |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
383 |
38689
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
37785
diff
changeset
|
384 def lfsfilep(f): |
ff5b6fca1082
fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
37785
diff
changeset
|
385 return wrapper.pointerfromctx(ctx, f, removed=True) is not None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
386 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
387 return mctx.predicate(lfsfilep, predrepr=b'<lfs>') |
35990
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
388 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
389 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
390 @eh.templatekeyword(b'lfs_files', requires={b'ctx'}) |
36598
c3f9d0c303e8
templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents:
36519
diff
changeset
|
391 def lfsfiles(context, mapping): |
35999
8c7d5e90e6bd
lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35990
diff
changeset
|
392 """List of strings. All files modified, added, or removed by this |
8c7d5e90e6bd
lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35990
diff
changeset
|
393 changeset.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
394 ctx = context.resource(mapping, b'ctx') |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
395 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
396 pointers = wrapper.pointersfromctx(ctx, removed=True) # {path: pointer} |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
397 files = sorted(pointers.keys()) |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
398 |
35769
f00edef84c3b
lfs: rename {lfsattrs} to {pointer}
Matt Harbison <matt_harbison@yahoo.com>
parents:
35768
diff
changeset
|
399 def pointer(v): |
35731
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
400 # In the file spec, version is first and the other keys are sorted. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
401 sortkeyfunc = lambda x: (x[0] != b'version', x) |
48917
1672c5af1271
lfs: remove pycompat.iteritems()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
402 items = sorted(pointers[v].items(), key=sortkeyfunc) |
35731
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
403 return util.sortdict(items) |
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
404 |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
405 makemap = lambda v: { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
406 b'file': v, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
407 b'lfsoid': pointers[v].oid() if pointers[v] else None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
408 b'lfspointer': templateutil.hybriddict(pointer(v)), |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
409 } |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
410 |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
411 # TODO: make the separator ', '? |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
412 f = templateutil._showcompatlist(context, mapping, b'lfs_file', files) |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36598
diff
changeset
|
413 return templateutil.hybrid(f, files, makemap, pycompat.identity) |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
414 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
415 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
416 @eh.command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
417 b'debuglfsupload', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 [(b'r', b'rev', [], _(b'upload large files introduced by REV'))], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42813
diff
changeset
|
419 ) |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
420 def debuglfsupload(ui, repo, **opts): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
421 """upload lfs blobs added by the working copy parent or given revisions""" |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43303
diff
changeset
|
422 revs = opts.get('rev', []) |
48116
5ced12cfa41b
errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents:
46113
diff
changeset
|
423 pointers = wrapper.extractpointers(repo, logcmdutil.revrange(repo, revs)) |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
424 wrapper.uploadblobs(repo, pointers) |
44071
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
425 |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
426 |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
427 @eh.wrapcommand( |
44072
1a6dd50cd0db
lfs: don't skip locally available blobs when verifying
Matt Harbison <matt_harbison@yahoo.com>
parents:
44071
diff
changeset
|
428 b'verify', |
1a6dd50cd0db
lfs: don't skip locally available blobs when verifying
Matt Harbison <matt_harbison@yahoo.com>
parents:
44071
diff
changeset
|
429 opts=[(b'', b'no-lfs', None, _(b'skip missing lfs blob content'))], |
44071
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
430 ) |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
431 def verify(orig, ui, repo, **opts): |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
432 skipflags = repo.ui.configint(b'verify', b'skipflags') |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
433 no_lfs = opts.pop('no_lfs') |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
434 |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
435 if skipflags: |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
436 # --lfs overrides the config bit, if set. |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
437 if no_lfs is False: |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
438 skipflags &= ~repository.REVISION_FLAG_EXTSTORED |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
439 else: |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
440 skipflags = 0 |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
441 |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
442 if no_lfs is True: |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
443 skipflags |= repository.REVISION_FLAG_EXTSTORED |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
444 |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
445 with ui.configoverride({(b'verify', b'skipflags'): skipflags}): |
34e8305f02bd
lfs: add a switch to `hg verify` to ignore the content of blobs
Matt Harbison <matt_harbison@yahoo.com>
parents:
43506
diff
changeset
|
446 return orig(ui, repo, **opts) |