Mercurial > hg
annotate hgext/lfs/__init__.py @ 35924:d857cad588e4
lfs: prefetch lfs blobs during revert
The revert command oddly prints out what it will do before requesting the files
to be prefetched. But the 'need to transfer' line indicates the blobs are being
grouped.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 04 Feb 2018 00:33:28 -0500 |
parents | 0b79f99fd7b0 |
children | eefb5d603482 |
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, |
35922
0b79f99fd7b0
lfs: prefetch lfs blobs when applying merge updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
35880
diff
changeset
|
140 merge, |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
141 minifileset, |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
142 node, |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
143 pycompat, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
144 registrar, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
145 revlog, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
146 scmutil, |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
147 templatekw, |
35346
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
148 upgrade, |
35731
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
149 util, |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
150 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
|
151 wireproto, |
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, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
156 wrapper, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
157 ) |
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 # 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
|
160 # 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
|
161 # 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
|
162 # leave the attribute unspecified. |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
163 testedwith = 'ships-with-hg-core' |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
164 |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
165 configtable = {} |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
166 configitem = registrar.configitem(configtable) |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
167 |
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
|
168 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
|
169 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
|
170 ) |
35732
10e62d5efa73
lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents:
35731
diff
changeset
|
171 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
|
172 default=False, |
10e62d5efa73
lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents:
35731
diff
changeset
|
173 ) |
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
|
174 |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
175 configitem('lfs', 'url', |
35614
6d6d20658cce
lfs: drop deprecated remote store config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35506
diff
changeset
|
176 default=None, |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
177 ) |
35280
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
178 configitem('lfs', 'usercache', |
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
179 default=None, |
8e72f9152c4d
lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents:
35214
diff
changeset
|
180 ) |
35618
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
181 # Deprecated |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
182 configitem('lfs', 'threshold', |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
183 default=None, |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
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 configitem('lfs', 'track', |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
186 default='none()', |
c780e0649e41
lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35614
diff
changeset
|
187 ) |
35100
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
188 configitem('lfs', 'retry', |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
189 default=5, |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
190 ) |
07e97998d385
lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents:
35099
diff
changeset
|
191 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
192 cmdtable = {} |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
193 command = registrar.command(cmdtable) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
194 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
195 templatekeyword = registrar.templatekeyword() |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
196 |
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
|
197 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
|
198 # 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
|
199 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
|
200 |
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
|
201 def uisetup(ui): |
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 localrepo.localrepository.featuresetupfuncs.add(featuresetup) |
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 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
204 def reposetup(ui, repo): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
205 # 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
|
206 if not repo.local(): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
207 return |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
208 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
209 repo.svfs.lfslocalblobstore = blobstore.local(repo) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
210 repo.svfs.lfsremoteblobstore = blobstore.remote(repo) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
211 |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
212 class lfsrepo(repo.__class__): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
213 @localrepo.unfilteredmethod |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
214 def commitctx(self, ctx, error=False): |
35880
6bd2846a82e8
lfs: drop an unused function parameter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35807
diff
changeset
|
215 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
|
216 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
|
217 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
218 repo.__class__ = lfsrepo |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
219 |
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
|
220 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
|
221 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
|
222 if 'lfs' not in repo.requirements: |
35504
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
223 last = kwargs.get('node_last') |
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
224 _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
|
225 if last: |
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
226 s = repo.set('%n:%n', _bin(kwargs['node']), _bin(last)) |
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
227 else: |
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
228 s = repo.set('%n', _bin(kwargs['node'])) |
6bb940de4c4c
lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs
Matt Harbison <matt_harbison@yahoo.com>
parents:
35452
diff
changeset
|
229 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
|
230 # TODO: is there a way to just walk the files in the commit? |
35452
488634db5928
lfs: fix committing deleted files caused by e0a1b9ee93cd
Jun Wu <quark@fb.com>
parents:
35440
diff
changeset
|
231 if any(ctx[f].islfs() for f in ctx.files() if f in ctx): |
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 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
|
233 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
|
234 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
|
235 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
|
236 |
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 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
|
238 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
|
239 else: |
693e3bcae19e
lfs: defer registering the pre-push hook until blobs are committed
Matt Harbison <matt_harbison@yahoo.com>
parents:
35732
diff
changeset
|
240 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
|
241 |
35880
6bd2846a82e8
lfs: drop an unused function parameter
Matt Harbison <matt_harbison@yahoo.com>
parents:
35807
diff
changeset
|
242 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
|
243 """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
|
244 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
|
245 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
|
246 # 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
|
247 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
|
248 |
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
|
249 # 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 |
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
|
255 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
|
256 |
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
|
257 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
|
258 if not data: |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
259 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
|
260 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
261 # 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
|
262 # and line number. |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
263 cfg = config.config() |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
264 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
|
265 |
35665
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
266 try: |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
267 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
|
268 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
|
269 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
|
270 # 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
|
271 # .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
|
272 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
273 # 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
|
274 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
|
275 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
276 def _match(path, size): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
277 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
|
278 if pat(path, size): |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
279 return rule(path, size) |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
280 |
1ad1e59b405e
lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents:
35664
diff
changeset
|
281 return False |
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 return _match |
35664
3c838bdc57b6
lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents:
35663
diff
changeset
|
284 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
285 def wrapfilelog(filelog): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
286 wrapfunction = extensions.wrapfunction |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
287 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
288 wrapfunction(filelog, 'addrevision', wrapper.filelogaddrevision) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
289 wrapfunction(filelog, 'renamed', wrapper.filelogrenamed) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
290 wrapfunction(filelog, 'size', wrapper.filelogsize) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
291 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
292 def extsetup(ui): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
293 wrapfilelog(filelog.filelog) |
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 = 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
|
296 |
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
|
297 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
|
298 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
|
299 |
35363
b0ba1539af01
lfs: restore the local blob store after a repo upgrade
Matt Harbison <matt_harbison@yahoo.com>
parents:
35346
diff
changeset
|
300 wrapfunction(upgrade, '_finishdatamigration', |
b0ba1539af01
lfs: restore the local blob store after a repo upgrade
Matt Harbison <matt_harbison@yahoo.com>
parents:
35346
diff
changeset
|
301 wrapper.upgradefinishdatamigration) |
b0ba1539af01
lfs: restore the local blob store after a repo upgrade
Matt Harbison <matt_harbison@yahoo.com>
parents:
35346
diff
changeset
|
302 |
35346
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
303 wrapfunction(upgrade, 'preservedrequirements', |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
304 wrapper.upgraderequirements) |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
305 |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
306 wrapfunction(upgrade, 'supporteddestrequirements', |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
307 wrapper.upgraderequirements) |
9eb19b13e92a
lfs: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents:
35280
diff
changeset
|
308 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
309 wrapfunction(changegroup, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
310 'supportedoutgoingversions', |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
311 wrapper.supportedoutgoingversions) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
312 wrapfunction(changegroup, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
313 'allsupportedversions', |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
314 wrapper.allsupportedversions) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
315 |
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
|
316 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
|
317 wrapfunction(wireproto, '_capabilities', wrapper._capabilities) |
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
|
318 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
319 wrapfunction(context.basefilectx, 'cmp', wrapper.filectxcmp) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
320 wrapfunction(context.basefilectx, 'isbinary', wrapper.filectxisbinary) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
321 context.basefilectx.islfs = wrapper.filectxislfs |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
322 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
323 revlog.addflagprocessor( |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
324 revlog.REVIDX_EXTSTORED, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
325 ( |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
326 wrapper.readfromstore, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
327 wrapper.writetostore, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
328 wrapper.bypasscheckhash, |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
329 ), |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
330 ) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
331 |
35213
24aa4853c031
lfs: enable the extension locally after cloning a repo with 'lfs' requirement
Matt Harbison <matt_harbison@yahoo.com>
parents:
35178
diff
changeset
|
332 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
|
333 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
|
334 |
35922
0b79f99fd7b0
lfs: prefetch lfs blobs when applying merge updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
35880
diff
changeset
|
335 wrapfunction(merge, 'applyupdates', wrapper.mergemodapplyupdates) |
35924
d857cad588e4
lfs: prefetch lfs blobs during revert
Matt Harbison <matt_harbison@yahoo.com>
parents:
35922
diff
changeset
|
336 wrapfunction(cmdutil, '_prefetchfiles', wrapper.cmdutilprefetchfiles) |
35922
0b79f99fd7b0
lfs: prefetch lfs blobs when applying merge updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
35880
diff
changeset
|
337 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
338 # 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
|
339 # "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
|
340 # "packed1". Using "packed1" with lfs will likely cause trouble. |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
341 names = [k for k, v in exchange._bundlespeccgversions.items() if v == '02'] |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
342 for k in names: |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
343 exchange._bundlespeccgversions[k] = '03' |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
344 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
345 # 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
|
346 # 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
|
347 wrapfunction(vfsmod.readonlyvfs, '__init__', wrapper.vfsinit) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
348 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
349 # 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
|
350 wrapfunction(bundle2, 'writenewbundle', wrapper.writenewbundle) |
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 @templatekeyword('lfs_files') |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
353 def lfsfiles(repo, ctx, **args): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
354 """List of strings. LFS files added or modified by the changeset.""" |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
355 args = pycompat.byteskwargs(args) |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
356 |
35098
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
357 pointers = wrapper.pointersfromctx(ctx) # {path: pointer} |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
358 files = sorted(pointers.keys()) |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
359 |
35769
f00edef84c3b
lfs: rename {lfsattrs} to {pointer}
Matt Harbison <matt_harbison@yahoo.com>
parents:
35768
diff
changeset
|
360 def pointer(v): |
35731
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
361 # 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
|
362 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
|
363 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
|
364 return util.sortdict(items) |
f58245b9e3ea
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents:
35665
diff
changeset
|
365 |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
366 makemap = lambda v: { |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
367 'file': v, |
35798
97bdbcb43ebf
lfs: rename {oid} to {lfsoid}
Matt Harbison <matt_harbison@yahoo.com>
parents:
35797
diff
changeset
|
368 'lfsoid': pointers[v].oid(), |
35797
76cb752af07a
lfs: rename {pointer} to {lfspointer}
Matt Harbison <matt_harbison@yahoo.com>
parents:
35769
diff
changeset
|
369 'lfspointer': templatekw.hybriddict(pointer(v)), |
35657
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
370 } |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
371 |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
372 # TODO: make the separator ', '? |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
373 f = templatekw._showlist('lfs_file', files, args) |
8580e5898cb7
lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents:
35618
diff
changeset
|
374 return templatekw._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
|
375 |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
376 @command('debuglfsupload', |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
377 [('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
|
378 def debuglfsupload(ui, repo, **opts): |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
379 """upload lfs blobs added by the working copy parent or given revisions""" |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
380 revs = opts.get('rev', []) |
66c5a8cf2868
lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff
changeset
|
381 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
|
382 wrapper.uploadblobs(repo, pointers) |