Mercurial > hg
annotate hgext/lfs/__init__.py @ 37248:dfb38c4850a9
lfs: add an experimental knob to disable blob serving
The use case here is the server admin may want to store the blobs elsewhere. As
it stands now, the `lfs.url` config on the client side is all that enforces this
(the web.allow-* permissions aren't able to block LFS blobs without also
blocking normal hg traffic). The real solution to this is to implement the
'verify' action on the client and server, but that's not a near term goal.
Whether this is useful in its own right, and should be promoted out of
experimental at some point is TBD.
Since the other two tests that deal with LFS and `hg serve` are already complex
and have #testcases, this seems like a good time to start a new test dedicated
to access checks against the server. Instead of conditionally wrapping the
wire protocol handler, I put this in the handler because I'd still like to bring
the annotations in from the evolve extension in order to set up the wrapping.
The 400 status probably isn't great, but that's what it would be for existing
`hg serve` instances without support for serving blobs.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 31 Mar 2018 15:20:43 -0400 |
parents | 6c7a6b04b274 |
children | 092eff6833a7 |
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 |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
56 .hglfs:: |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
57 |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
58 The extension reads its configuration from a versioned ``.hglfs`` |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
59 configuration file found in the root of the working directory. The |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
60 ``.hglfs`` file uses the same syntax as all other Mercurial |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
61 configuration files. It uses a single section, ``[track]``. |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
62 |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
63 The ``[track]`` section specifies which files are stored as LFS (or |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
64 not). Each line is keyed by a file pattern, with a predicate value. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
65 The first file pattern match is used, so put more specific patterns |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
66 first. The available predicates are ``all()``, ``none()``, and |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
67 ``size()``. See "hg help filesets.size" for the latter. |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
68 |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
69 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
|
70 |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
71 [track] |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
72 # No Makefile or python file, anywhere, will be LFS |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
73 **Makefile = none() |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
74 **.py = none() |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
75 |
35768
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
76 **.zip = all() |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
77 **.exe = size(">1MB") |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
78 |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
79 # Catchall for everything not matched above |
60a6ab7bcda7
lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents:
35741
diff
changeset
|
80 ** = size(">10MB") |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
81 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
82 Configs:: |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
83 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
84 [lfs] |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
85 # Remote endpoint. Multiple protocols are supported: |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
86 # - 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
|
87 # git-lfs endpoint |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
88 # - file:///tmp/path |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
89 # local filesystem, usually for testing |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
90 # if unset, lfs will prompt setting this when it must use this value. |
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 from __future__ import absolute_import |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
124 |
35099
b8e5fb8d2389
lfs: quiesce check-module-import warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
35098
diff
changeset
|
125 from mercurial.i18n import _ |
b8e5fb8d2389
lfs: quiesce check-module-import warnings
Matt Harbison <matt_harbison@yahoo.com>
parents:
35098
diff
changeset
|
126 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
127 from mercurial import ( |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
128 bundle2, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
129 changegroup, |
35663
a985834961f7
lfs: allow the pointer file to be viewed with `hg cat -T '{rawdata}'`
Matt Harbison <matt_harbison@yahoo.com>
parents:
35658
diff
changeset
|
130 cmdutil, |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
131 config, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
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 exchange, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
135 extensions, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
136 filelog, |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
137 fileset, |
35213
24aa4853c031
lfs: enable the extension locally after cloning a repo with 'lfs' requirement
Matt Harbison <matt_harbison@yahoo.com>
parents:
35178
diff
changeset
|
138 hg, |
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
|
139 localrepo, |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
140 minifileset, |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
141 node, |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
142 pycompat, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
143 registrar, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
144 revlog, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
145 scmutil, |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36598
diff
changeset
|
146 templateutil, |
35346
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
147 upgrade, |
35731
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
148 util, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
149 vfs as vfsmod, |
35506
fa865878a849
lfs: show a friendly message when pushing lfs to a server without lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
35504
diff
changeset
|
150 wireproto, |
37147
a2566597acb5
lfs: add basic routing for the server side wire protocol processing
Matt Harbison <matt_harbison@yahoo.com>
parents:
37138
diff
changeset
|
151 wireprotoserver, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
152 ) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
153 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
154 from . import ( |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
155 blobstore, |
37147
a2566597acb5
lfs: add basic routing for the server side wire protocol processing
Matt Harbison <matt_harbison@yahoo.com>
parents:
37138
diff
changeset
|
156 wireprotolfsserver, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
157 wrapper, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
158 ) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
159 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
160 # 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
|
161 # 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
|
162 # 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
|
163 # leave the attribute unspecified. |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
164 testedwith = 'ships-with-hg-core' |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
165 |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
166 configtable = {} |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
167 configitem = registrar.configitem(configtable) |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
168 |
37248
dfb38c4850a9
lfs: add an experimental knob to disable blob serving
Matt Harbison <matt_harbison@yahoo.com>
parents:
37165
diff
changeset
|
169 configitem('experimental', 'lfs.serve', |
dfb38c4850a9
lfs: add an experimental knob to disable blob serving
Matt Harbison <matt_harbison@yahoo.com>
parents:
37165
diff
changeset
|
170 default=True, |
dfb38c4850a9
lfs: add an experimental knob to disable blob serving
Matt Harbison <matt_harbison@yahoo.com>
parents:
37165
diff
changeset
|
171 ) |
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
|
172 configitem('experimental', 'lfs.user-agent', |
e333d27514b0
lfs: add an experimental config to override User-Agent for the blob transfer
Matt Harbison <matt_harbison@yahoo.com>
parents:
35363
diff
changeset
|
173 default=None, |
e333d27514b0
lfs: add an experimental config to override User-Agent for the blob transfer
Matt Harbison <matt_harbison@yahoo.com>
parents:
35363
diff
changeset
|
174 ) |
35732
10e62d5efa73
lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents:
35731
diff
changeset
|
175 configitem('experimental', 'lfs.worker-enable', |
10e62d5efa73
lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents:
35731
diff
changeset
|
176 default=False, |
10e62d5efa73
lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents:
35731
diff
changeset
|
177 ) |
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
|
178 |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
179 configitem('lfs', 'url', |
35614
6d6d20658cce
lfs: drop deprecated remote store config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35506
diff
changeset
|
180 default=None, |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
181 ) |
35280
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
182 configitem('lfs', 'usercache', |
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
183 default=None, |
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
184 ) |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
185 # Deprecated |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
186 configitem('lfs', 'threshold', |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
187 default=None, |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
188 ) |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
189 configitem('lfs', 'track', |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
190 default='none()', |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
191 ) |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
192 configitem('lfs', 'retry', |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
193 default=5, |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
194 ) |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
195 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
196 cmdtable = {} |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
197 command = registrar.command(cmdtable) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
198 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
199 templatekeyword = registrar.templatekeyword() |
35990
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
200 filesetpredicate = registrar.filesetpredicate() |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
201 |
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
|
202 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
|
203 # don't die on seeing a repo with the lfs requirement |
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
|
204 supported |= {'lfs'} |
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
|
205 |
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
|
206 def uisetup(ui): |
37135
ecac0006b90e
localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37132
diff
changeset
|
207 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
|
208 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
209 def reposetup(ui, repo): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
210 # 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
|
211 if not repo.local(): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
212 return |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
213 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
214 repo.svfs.lfslocalblobstore = blobstore.local(repo) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
215 repo.svfs.lfsremoteblobstore = blobstore.remote(repo) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
216 |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
217 class lfsrepo(repo.__class__): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
218 @localrepo.unfilteredmethod |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
219 def commitctx(self, ctx, error=False): |
35880
6bd2846a82e8
lfs: drop an unused function parameter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35807
diff
changeset
|
220 repo.svfs.options['lfstrack'] = _trackedmatcher(self) |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
221 return super(lfsrepo, self).commitctx(ctx, error) |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
222 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
223 repo.__class__ = lfsrepo |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
224 |
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
|
225 if 'lfs' not in repo.requirements: |
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
|
226 def checkrequireslfs(ui, repo, **kwargs): |
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
|
227 if 'lfs' not in repo.requirements: |
36400
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36142
diff
changeset
|
228 last = kwargs.get(r'node_last') |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
229 _bin = node.bin |
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
230 if last: |
36400
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36142
diff
changeset
|
231 s = repo.set('%n:%n', _bin(kwargs[r'node']), _bin(last)) |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
232 else: |
36400
7b86aa31b004
py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36142
diff
changeset
|
233 s = repo.set('%n', _bin(kwargs[r'node'])) |
37138
4d63f3bc1e1a
lfs: respect narrowmatcher when testing to add 'lfs' requirement (issue5794)
Matt Harbison <matt_harbison@yahoo.com>
parents:
37135
diff
changeset
|
234 match = repo.narrowmatch() |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
235 for ctx in s: |
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
|
236 # TODO: is there a way to just walk the files in the commit? |
37138
4d63f3bc1e1a
lfs: respect narrowmatcher when testing to add 'lfs' requirement (issue5794)
Matt Harbison <matt_harbison@yahoo.com>
parents:
37135
diff
changeset
|
237 if any(ctx[f].islfs() for f in ctx.files() |
4d63f3bc1e1a
lfs: respect narrowmatcher when testing to add 'lfs' requirement (issue5794)
Matt Harbison <matt_harbison@yahoo.com>
parents:
37135
diff
changeset
|
238 if f in ctx and match(f)): |
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
|
239 repo.requirements.add('lfs') |
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
|
240 repo._writerequirements() |
35735
693e3bcae19e
lfs: defer registering the pre-push hook until blobs are committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35732
diff
changeset
|
241 repo.prepushoutgoinghooks.add('lfs', wrapper.prepush) |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
242 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
|
243 |
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
|
244 ui.setconfig('hooks', 'commit.lfs', checkrequireslfs, 'lfs') |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
245 ui.setconfig('hooks', 'pretxnchangegroup.lfs', checkrequireslfs, 'lfs') |
35735
693e3bcae19e
lfs: defer registering the pre-push hook until blobs are committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35732
diff
changeset
|
246 else: |
693e3bcae19e
lfs: defer registering the pre-push hook until blobs are committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35732
diff
changeset
|
247 repo.prepushoutgoinghooks.add('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
|
248 |
35880
6bd2846a82e8
lfs: drop an unused function parameter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35807
diff
changeset
|
249 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
|
250 """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
|
251 track a given file with lfs.""" |
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
|
252 if not repo.wvfs.exists('.hglfs'): |
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
|
253 # No '.hglfs' in wdir. Fallback to config for now. |
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
|
254 trackspec = repo.ui.config('lfs', 'track') |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
255 |
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
|
256 # deprecated config: lfs.threshold |
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
|
257 threshold = repo.ui.configbytes('lfs', 'threshold') |
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
|
258 if threshold: |
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
|
259 fileset.parse(trackspec) # make sure syntax errors are confined |
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
|
260 trackspec = "(%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
|
261 |
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
|
262 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
|
263 |
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
|
264 data = repo.wvfs.tryread('.hglfs') |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
265 if not data: |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
266 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
|
267 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
268 # 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
|
269 # and line number. |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
270 cfg = config.config() |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
271 cfg.parse('.hglfs', data) |
35664
3c838bdc57b6
lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents:
35663
diff
changeset
|
272 |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
273 try: |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
274 rules = [(minifileset.compile(pattern), minifileset.compile(rule)) |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
275 for pattern, rule in cfg.items('track')] |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
276 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
|
277 # 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
|
278 # .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
|
279 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
280 # TODO: See if the line number of the file can be made available. |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
281 raise error.Abort(_('parse error in .hglfs: %s') % e) |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
282 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
283 def _match(path, size): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
284 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
|
285 if pat(path, size): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
286 return rule(path, size) |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
287 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
288 return False |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
289 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
290 return _match |
35664
3c838bdc57b6
lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents:
35663
diff
changeset
|
291 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
292 def wrapfilelog(filelog): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
293 wrapfunction = extensions.wrapfunction |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
294 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
295 wrapfunction(filelog, 'addrevision', wrapper.filelogaddrevision) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
296 wrapfunction(filelog, 'renamed', wrapper.filelogrenamed) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
297 wrapfunction(filelog, 'size', wrapper.filelogsize) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
298 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
299 def extsetup(ui): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
300 wrapfilelog(filelog.filelog) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
301 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
302 wrapfunction = extensions.wrapfunction |
35178
f8f939a2926c
lfs: add a repo requirement for this extension when converting to lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35175
diff
changeset
|
303 |
35663
a985834961f7
lfs: allow the pointer file to be viewed with `hg cat -T '{rawdata}'`
Matt Harbison <matt_harbison@yahoo.com>
parents:
35658
diff
changeset
|
304 wrapfunction(cmdutil, '_updatecatformatter', wrapper._updatecatformatter) |
35178
f8f939a2926c
lfs: add a repo requirement for this extension when converting to lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35175
diff
changeset
|
305 wrapfunction(scmutil, 'wrapconvertsink', wrapper.convertsink) |
f8f939a2926c
lfs: add a repo requirement for this extension when converting to lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35175
diff
changeset
|
306 |
35363
b0ba1539af01
lfs: restore the local blob store after a repo upgrade
Matt Harbison <matt_harbison@yahoo.com>
parents:
35346
diff
changeset
|
307 wrapfunction(upgrade, '_finishdatamigration', |
b0ba1539af01
lfs: restore the local blob store after a repo upgrade
Matt Harbison <matt_harbison@yahoo.com>
parents:
35346
diff
changeset
|
308 wrapper.upgradefinishdatamigration) |
b0ba1539af01
lfs: restore the local blob store after a repo upgrade
Matt Harbison <matt_harbison@yahoo.com>
parents:
35346
diff
changeset
|
309 |
35346
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
310 wrapfunction(upgrade, 'preservedrequirements', |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
311 wrapper.upgraderequirements) |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
312 |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
313 wrapfunction(upgrade, 'supporteddestrequirements', |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
314 wrapper.upgraderequirements) |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
315 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
316 wrapfunction(changegroup, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
317 'allsupportedversions', |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
318 wrapper.allsupportedversions) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
319 |
35506
fa865878a849
lfs: show a friendly message when pushing lfs to a server without lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
35504
diff
changeset
|
320 wrapfunction(exchange, 'push', wrapper.push) |
fa865878a849
lfs: show a friendly message when pushing lfs to a server without lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
35504
diff
changeset
|
321 wrapfunction(wireproto, '_capabilities', wrapper._capabilities) |
37147
a2566597acb5
lfs: add basic routing for the server side wire protocol processing
Matt Harbison <matt_harbison@yahoo.com>
parents:
37138
diff
changeset
|
322 wrapfunction(wireprotoserver, 'handlewsgirequest', |
a2566597acb5
lfs: add basic routing for the server side wire protocol processing
Matt Harbison <matt_harbison@yahoo.com>
parents:
37138
diff
changeset
|
323 wireprotolfsserver.handlewsgirequest) |
35506
fa865878a849
lfs: show a friendly message when pushing lfs to a server without lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
35504
diff
changeset
|
324 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
325 wrapfunction(context.basefilectx, 'cmp', wrapper.filectxcmp) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
326 wrapfunction(context.basefilectx, 'isbinary', wrapper.filectxisbinary) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
327 context.basefilectx.islfs = wrapper.filectxislfs |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
328 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
329 revlog.addflagprocessor( |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
330 revlog.REVIDX_EXTSTORED, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
331 ( |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
332 wrapper.readfromstore, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
333 wrapper.writetostore, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
334 wrapper.bypasscheckhash, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
335 ), |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
336 ) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
337 |
35213
24aa4853c031
lfs: enable the extension locally after cloning a repo with 'lfs' requirement
Matt Harbison <matt_harbison@yahoo.com>
parents:
35178
diff
changeset
|
338 wrapfunction(hg, 'clone', wrapper.hgclone) |
35214
a8c778b2a689
lfs: enable the extension locally after sharing a repo with 'lfs' requirement
Matt Harbison <matt_harbison@yahoo.com>
parents:
35213
diff
changeset
|
339 wrapfunction(hg, 'postshare', wrapper.hgpostshare) |
35213
24aa4853c031
lfs: enable the extension locally after cloning a repo with 'lfs' requirement
Matt Harbison <matt_harbison@yahoo.com>
parents:
35178
diff
changeset
|
340 |
36138
a991fcc48222
lfs: migrate to the fileprefetch callback mechanism
Matt Harbison <matt_harbison@yahoo.com>
parents:
36000
diff
changeset
|
341 scmutil.fileprefetchhooks.add('lfs', wrapper._prefetchfiles) |
35922
0b79f99fd7b0
lfs: prefetch lfs blobs when applying merge updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
35880
diff
changeset
|
342 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
343 # 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
|
344 # "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
|
345 # "packed1". Using "packed1" with lfs will likely cause trouble. |
37165
6c7a6b04b274
bundlespec: move computing the bundle contentops in parsebundlespec
Boris Feld <boris.feld@octobus.net>
parents:
37147
diff
changeset
|
346 exchange._bundlespeccontentopts["v2"]["cg.version"] = "03" |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
347 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
348 # bundlerepo uses "vfsmod.readonlyvfs(othervfs)", we need to make sure lfs |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
349 # options and blob stores are passed from othervfs to the new readonlyvfs. |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
350 wrapfunction(vfsmod.readonlyvfs, '__init__', wrapper.vfsinit) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
351 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
352 # when writing a bundle via "hg bundle" command, upload related LFS blobs |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
353 wrapfunction(bundle2, 'writenewbundle', wrapper.writenewbundle) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
354 |
36000
91aac8e6604d
lfs: teach the 'lfs()' fileset to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35999
diff
changeset
|
355 @filesetpredicate('lfs()', callstatus=True) |
35990
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
356 def lfsfileset(mctx, x): |
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
357 """File that uses LFS storage.""" |
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
358 # i18n: "lfs" is a keyword |
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
359 fileset.getargs(x, 0, 0, _("lfs takes no arguments")) |
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
360 return [f for f in mctx.subset |
36000
91aac8e6604d
lfs: teach the 'lfs()' fileset to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35999
diff
changeset
|
361 if wrapper.pointerfromctx(mctx.ctx, f, removed=True) is not None] |
35990
eefb5d603482
lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35924
diff
changeset
|
362 |
37068
aa97e06a1912
templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents:
36921
diff
changeset
|
363 @templatekeyword('lfs_files', requires={'ctx'}) |
36598
c3f9d0c303e8
templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents:
36519
diff
changeset
|
364 def lfsfiles(context, mapping): |
35999
8c7d5e90e6bd
lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35990
diff
changeset
|
365 """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
|
366 changeset.""" |
36598
c3f9d0c303e8
templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents:
36519
diff
changeset
|
367 ctx = context.resource(mapping, 'ctx') |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
368 |
35999
8c7d5e90e6bd
lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35990
diff
changeset
|
369 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
|
370 files = sorted(pointers.keys()) |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
371 |
35769
f00edef84c3b
lfs: rename {lfsattrs} to {pointer}
Matt Harbison <matt_harbison@yahoo.com>
parents:
35768
diff
changeset
|
372 def pointer(v): |
35731
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
373 # In the file spec, version is first and the other keys are sorted. |
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
374 sortkeyfunc = lambda x: (x[0] != 'version', x) |
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
375 items = sorted(pointers[v].iteritems(), key=sortkeyfunc) |
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
376 return util.sortdict(items) |
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
377 |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
378 makemap = lambda v: { |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
379 'file': v, |
35999
8c7d5e90e6bd
lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35990
diff
changeset
|
380 'lfsoid': pointers[v].oid() if pointers[v] else None, |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36598
diff
changeset
|
381 '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
|
382 } |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
383 |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
384 # TODO: make the separator ', '? |
37068
aa97e06a1912
templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents:
36921
diff
changeset
|
385 f = templateutil._showcompatlist(context, mapping, 'lfs_file', files) |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36598
diff
changeset
|
386 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
|
387 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
388 @command('debuglfsupload', |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
389 [('r', 'rev', [], _('upload large files introduced by REV'))]) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
390 def debuglfsupload(ui, repo, **opts): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
391 """upload lfs blobs added by the working copy parent or given revisions""" |
36456
9ff5cbfbc26a
py3: fix more keyword arguments handling
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36400
diff
changeset
|
392 revs = opts.get(r'rev', []) |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
393 pointers = wrapper.extractpointers(repo, scmutil.revrange(repo, revs)) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
394 wrapper.uploadblobs(repo, pointers) |