annotate hgext/lfs/__init__.py @ 41069:70ca0e846d25

exthelper: reintroduce the ability to register templates Same mechanism as revsets earlier in this series. The LFS extension is updated to provide test coverage. This also seems to make the test failure around issue6033 mentioned in 0a7f582f6f1f much less regular on Windows.
author Matt Harbison <matt_harbison@yahoo.com>
date Thu, 27 Dec 2018 21:55:22 -0500
parents 84d61fdcefa5
children 8f40e21ca842
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
37564
31a4ea773369 lfs: infer the blob store URL from an explicit push dest or default-push
Matt Harbison <matt_harbison@yahoo.com>
parents: 37562
diff changeset
90 # if unset, lfs will assume the remote repository also handles blob storage
31a4ea773369 lfs: infer the blob store URL from an explicit push dest or default-push
Matt Harbison <matt_harbison@yahoo.com>
parents: 37562
diff changeset
91 # for http(s) URLs. Otherwise, lfs will prompt to set this when it must
31a4ea773369 lfs: infer the blob store URL from an explicit push dest or default-push
Matt Harbison <matt_harbison@yahoo.com>
parents: 37562
diff changeset
92 # use this value.
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
93 # (default: unset)
35768
60a6ab7bcda7 lfs: expand the user facing documentation
Matt Harbison <matt_harbison@yahoo.com>
parents: 35741
diff changeset
94 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
95
35618
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
96 # 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
97 # 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
98 # 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
99 # 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
100 # 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
101 #
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
102 # Some examples:
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
103 # - all() # everything
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
104 # - none() # nothing
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
105 # - 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
106 # - !**.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
107 # - **.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
108 # - 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
109 # - (**.php & size(">2MB")) | (**.js & size(">5MB")) | **.tar.gz
35741
73432eee0ac4 fileset: add kind:pat operator
Yuya Nishihara <yuya@tcha.org>
parents: 35735
diff changeset
110 # | (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
111 # (default: none())
35665
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
112 #
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
113 # 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
114 # 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
115 track = size(">10M")
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
116
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
117 # 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
118 retry = 5
35280
8e72f9152c4d lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35214
diff changeset
119
8e72f9152c4d lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35214
diff changeset
120 # 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
121 # 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
122 usercache = /path/to/global/cache
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
123 """
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
124
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
125 from __future__ import absolute_import
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
126
40268
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
127 import sys
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
128
35099
b8e5fb8d2389 lfs: quiesce check-module-import warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 35098
diff changeset
129 from mercurial.i18n import _
b8e5fb8d2389 lfs: quiesce check-module-import warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 35098
diff changeset
130
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
131 from mercurial import (
35665
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
132 config,
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,
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
136 exthelper,
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
137 filelog,
38805
b9162ea1b815 fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 38800
diff changeset
138 filesetlang,
35175
e0a1b9ee93cd lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents: 35100
diff changeset
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,
39851
1f7b3b980af8 lfs: add repository feature denoting the use of LFS
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38805
diff changeset
144 repository,
35098
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,
36921
32f9b7e3f056 templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents: 36598
diff changeset
147 templateutil,
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 )
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
150
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
151 from . import (
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
152 blobstore,
37147
a2566597acb5 lfs: add basic routing for the server side wire protocol processing
Matt Harbison <matt_harbison@yahoo.com>
parents: 37138
diff changeset
153 wireprotolfsserver,
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
154 wrapper,
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
155 )
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
156
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
157 # 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
158 # 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
159 # 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
160 # leave the attribute unspecified.
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
161 testedwith = 'ships-with-hg-core'
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
162
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
163 eh = exthelper.exthelper()
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
164 eh.merge(wrapper.eh)
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
165 eh.merge(wireprotolfsserver.eh)
35100
07e97998d385 lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents: 35099
diff changeset
166
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
167 cmdtable = eh.cmdtable
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
168 configtable = eh.configtable
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
169 extsetup = eh.finalextsetup
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
170 uisetup = eh.finaluisetup
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
171 reposetup = eh.finalreposetup
41069
70ca0e846d25 exthelper: reintroduce the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents: 41048
diff changeset
172 templatekeyword = eh.templatekeyword
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
173
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
174 eh.configitem('experimental', 'lfs.serve',
37248
dfb38c4850a9 lfs: add an experimental knob to disable blob serving
Matt Harbison <matt_harbison@yahoo.com>
parents: 37165
diff changeset
175 default=True,
dfb38c4850a9 lfs: add an experimental knob to disable blob serving
Matt Harbison <matt_harbison@yahoo.com>
parents: 37165
diff changeset
176 )
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
177 eh.configitem('experimental', 'lfs.user-agent',
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 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
179 )
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
180 eh.configitem('experimental', 'lfs.disableusercache',
37562
e5cd8d1a094d lfs: special case the null:// usercache instead of treating it as a url
Matt Harbison <matt_harbison@yahoo.com>
parents: 37518
diff changeset
181 default=False,
e5cd8d1a094d lfs: special case the null:// usercache instead of treating it as a url
Matt Harbison <matt_harbison@yahoo.com>
parents: 37518
diff changeset
182 )
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
183 eh.configitem('experimental', 'lfs.worker-enable',
35732
10e62d5efa73 lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents: 35731
diff changeset
184 default=False,
10e62d5efa73 lfs: default to not using workers for upload/download
Matt Harbison <matt_harbison@yahoo.com>
parents: 35731
diff changeset
185 )
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
186
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
187 eh.configitem('lfs', 'url',
35614
6d6d20658cce lfs: drop deprecated remote store config options
Matt Harbison <matt_harbison@yahoo.com>
parents: 35506
diff changeset
188 default=None,
35100
07e97998d385 lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents: 35099
diff changeset
189 )
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
190 eh.configitem('lfs', 'usercache',
35280
8e72f9152c4d lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35214
diff changeset
191 default=None,
8e72f9152c4d lfs: introduce a user level cache for lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35214
diff changeset
192 )
35618
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
193 # Deprecated
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
194 eh.configitem('lfs', 'threshold',
35100
07e97998d385 lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents: 35099
diff changeset
195 default=None,
07e97998d385 lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents: 35099
diff changeset
196 )
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
197 eh.configitem('lfs', 'track',
35618
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
198 default='none()',
c780e0649e41 lfs: migrate most file filtering from threshold to custom filter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35614
diff changeset
199 )
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
200 eh.configitem('lfs', 'retry',
35100
07e97998d385 lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents: 35099
diff changeset
201 default=5,
07e97998d385 lfs: register config options
Matt Harbison <matt_harbison@yahoo.com>
parents: 35099
diff changeset
202 )
35990
eefb5d603482 lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35924
diff changeset
203 filesetpredicate = registrar.filesetpredicate()
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
204
40268
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
205 lfsprocessor = (
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
206 wrapper.readfromstore,
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
207 wrapper.writetostore,
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
208 wrapper.bypasscheckhash,
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
209 )
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
210
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
211 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
212 # 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
213 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
214
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
215 @eh.uisetup
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
216 def _uisetup(ui):
37135
ecac0006b90e localrepo: move featuresetupfuncs out of localrepository class (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37132
diff changeset
217 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
218
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
219 @eh.reposetup
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
220 def _reposetup(ui, repo):
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
221 # 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
222 if not repo.local():
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
223 return
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
224
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
225 repo.svfs.lfslocalblobstore = blobstore.local(repo)
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
226 repo.svfs.lfsremoteblobstore = blobstore.remote(repo)
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
227
35665
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
228 class lfsrepo(repo.__class__):
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
229 @localrepo.unfilteredmethod
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
230 def commitctx(self, ctx, error=False):
35880
6bd2846a82e8 lfs: drop an unused function parameter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35807
diff changeset
231 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
232 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
233
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
234 repo.__class__ = lfsrepo
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
235
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 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
237 def checkrequireslfs(ui, repo, **kwargs):
40131
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
238 if 'lfs' in repo.requirements:
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
239 return 0
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
240
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
241 last = kwargs.get(r'node_last')
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
242 _bin = node.bin
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
243 if last:
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
244 s = repo.set('%n:%n', _bin(kwargs[r'node']), _bin(last))
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
245 else:
535fc8a22365 lfs: avoid a potential variable reference before assignment error in cmdserver
Matt Harbison <matt_harbison@yahoo.com>
parents: 38689
diff changeset
246 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
247 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
248 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
249 # 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
250 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
251 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
252 repo.requirements.add('lfs')
39851
1f7b3b980af8 lfs: add repository feature denoting the use of LFS
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38805
diff changeset
253 repo.features.add(repository.REPO_FEATURE_LFS)
35175
e0a1b9ee93cd lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents: 35100
diff changeset
254 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
255 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
256 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
257
e0a1b9ee93cd lfs: add a repo requirement for this extension once an lfs file is committed
Matt Harbison <matt_harbison@yahoo.com>
parents: 35100
diff changeset
258 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
259 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
260 else:
693e3bcae19e lfs: defer registering the pre-push hook until blobs are committed
Matt Harbison <matt_harbison@yahoo.com>
parents: 35732
diff changeset
261 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
262
35880
6bd2846a82e8 lfs: drop an unused function parameter
Matt Harbison <matt_harbison@yahoo.com>
parents: 35807
diff changeset
263 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
264 """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
265 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
266 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
267 # 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
268 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
269
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
270 # 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
271 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
272 if threshold:
38805
b9162ea1b815 fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 38800
diff changeset
273 filesetlang.parse(trackspec) # make sure syntax errors are confined
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
274 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
275
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
276 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
277
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
278 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
279 if not data:
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
280 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
281
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
282 # 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
283 # and line number.
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
284 cfg = config.config()
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
285 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
286
35665
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
287 try:
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
288 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
289 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
290 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
291 # 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
292 # .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
293
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
294 # 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
295 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
296
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
297 def _match(path, size):
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
298 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
299 if pat(path, size):
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
300 return rule(path, size)
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
301
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
302 return False
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
303
1ad1e59b405e lfs: control tracked file selection via a tracked file
Matt Harbison <matt_harbison@yahoo.com>
parents: 35664
diff changeset
304 return _match
35664
3c838bdc57b6 lfs: move the tracked file function creation to a method
Matt Harbison <matt_harbison@yahoo.com>
parents: 35663
diff changeset
305
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
306 # Called by remotefilelog
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
307 def wrapfilelog(filelog):
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
308 wrapfunction = extensions.wrapfunction
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
309
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
310 wrapfunction(filelog, 'addrevision', wrapper.filelogaddrevision)
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
311 wrapfunction(filelog, 'renamed', wrapper.filelogrenamed)
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
312 wrapfunction(filelog, 'size', wrapper.filelogsize)
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
313
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
314 @eh.wrapfunction(localrepo, 'resolverevlogstorevfsoptions')
40268
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
315 def _resolverevlogstorevfsoptions(orig, ui, requirements, features):
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
316 opts = orig(ui, requirements, features)
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
317 for name, module in extensions.extensions(ui):
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
318 if module is sys.modules[__name__]:
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
319 if revlog.REVIDX_EXTSTORED in opts[b'flagprocessors']:
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
320 msg = (_(b"cannot register multiple processors on flag '%#x'.")
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
321 % revlog.REVIDX_EXTSTORED)
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
322 raise error.Abort(msg)
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
323
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
324 opts[b'flagprocessors'][revlog.REVIDX_EXTSTORED] = lfsprocessor
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
325 break
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
326
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
327 return opts
9c4cbbb0fc51 lfs: register the flag processors per repository
Matt Harbison <matt_harbison@yahoo.com>
parents: 39868
diff changeset
328
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
329 @eh.extsetup
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
330 def _extsetup(ui):
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
331 wrapfilelog(filelog.filelog)
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
332
36138
a991fcc48222 lfs: migrate to the fileprefetch callback mechanism
Matt Harbison <matt_harbison@yahoo.com>
parents: 36000
diff changeset
333 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
334
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
335 # 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
336 # "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
337 # "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
338 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
339
38800
7790cd70842a lfs: remove callstatus property from 'lfs()' fileset
Yuya Nishihara <yuya@tcha.org>
parents: 38689
diff changeset
340 @filesetpredicate('lfs()')
35990
eefb5d603482 lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35924
diff changeset
341 def lfsfileset(mctx, x):
eefb5d603482 lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35924
diff changeset
342 """File that uses LFS storage."""
eefb5d603482 lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35924
diff changeset
343 # i18n: "lfs" is a keyword
38805
b9162ea1b815 fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 38800
diff changeset
344 filesetlang.getargs(x, 0, 0, _("lfs takes no arguments"))
38689
ff5b6fca1082 fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 37785
diff changeset
345 ctx = mctx.ctx
ff5b6fca1082 fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 37785
diff changeset
346 def lfsfilep(f):
ff5b6fca1082 fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 37785
diff changeset
347 return wrapper.pointerfromctx(ctx, f, removed=True) is not None
ff5b6fca1082 fileset: rewrite predicates to return matcher not closed to subset (API) (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 37785
diff changeset
348 return mctx.predicate(lfsfilep, predrepr='<lfs>')
35990
eefb5d603482 lfs: add a fileset for detecting lfs files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35924
diff changeset
349
41069
70ca0e846d25 exthelper: reintroduce the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents: 41048
diff changeset
350 @eh.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
351 def lfsfiles(context, mapping):
35999
8c7d5e90e6bd lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35990
diff changeset
352 """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
353 changeset."""
36598
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36519
diff changeset
354 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
355
35999
8c7d5e90e6bd lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35990
diff changeset
356 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
357 files = sorted(pointers.keys())
8580e5898cb7 lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents: 35618
diff changeset
358
35769
f00edef84c3b lfs: rename {lfsattrs} to {pointer}
Matt Harbison <matt_harbison@yahoo.com>
parents: 35768
diff changeset
359 def pointer(v):
35731
f58245b9e3ea lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents: 35665
diff changeset
360 # 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
361 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
362 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
363 return util.sortdict(items)
f58245b9e3ea lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
Matt Harbison <matt_harbison@yahoo.com>
parents: 35665
diff changeset
364
35657
8580e5898cb7 lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents: 35618
diff changeset
365 makemap = lambda v: {
8580e5898cb7 lfs: convert '{lfs_files}' keyword to a hybrid list
Matt Harbison <matt_harbison@yahoo.com>
parents: 35618
diff changeset
366 'file': v,
35999
8c7d5e90e6bd lfs: teach '{lfs_files}' to handle removed files
Matt Harbison <matt_harbison@yahoo.com>
parents: 35990
diff changeset
367 '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
368 '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
369 }
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 # 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
372 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
373 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
374
41048
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
375 @eh.command('debuglfsupload',
84d61fdcefa5 lfs: convert to using exthelper to wrap functions
Matt Harbison <matt_harbison@yahoo.com>
parents: 40313
diff changeset
376 [('r', 'rev', [], _('upload large files introduced by REV'))])
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
377 def debuglfsupload(ui, repo, **opts):
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
378 """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
379 revs = opts.get(r'rev', [])
35098
66c5a8cf2868 lfs: import the Facebook git-lfs client extension
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
380 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
381 wrapper.uploadblobs(repo, pointers)