15 subset of files for the revision. This allows specific files or |
15 subset of files for the revision. This allows specific files or |
16 directories to be explicitly included or excluded. Many repository |
16 directories to be explicitly included or excluded. Many repository |
17 operations have performance proportional to the number of files in |
17 operations have performance proportional to the number of files in |
18 the working directory. So only realizing a subset of files in the |
18 the working directory. So only realizing a subset of files in the |
19 working directory can improve performance. |
19 working directory can improve performance. |
|
20 |
|
21 Sparse Config Files |
|
22 ------------------- |
|
23 |
|
24 The set of files that are part of a sparse checkout are defined by |
|
25 a sparse config file. The file defines 3 things: includes (files to |
|
26 include in the sparse checkout), excludes (files to exclude from the |
|
27 sparse checkout), and profiles (links to other config files). |
|
28 |
|
29 The file format is newline delimited. Empty lines and lines beginning |
|
30 with ``#`` are ignored. |
|
31 |
|
32 Lines beginning with ``%include `` denote another sparse config file |
|
33 to include. e.g. ``%include tests.sparse``. The filename is relative |
|
34 to the repository root. |
|
35 |
|
36 The special lines ``[include]`` and ``[exclude]`` denote the section |
|
37 for includes and excludes that follow, respectively. It is illegal to |
|
38 have ``[include]`` after ``[exclude]``. If no sections are defined, |
|
39 entries are assumed to be in the ``[include]`` section. |
|
40 |
|
41 Non-special lines resemble file patterns to be added to either includes |
|
42 or excludes. The syntax of these lines is documented by :hg:`help patterns`. |
|
43 Patterns are interpreted as ``glob:`` by default and match against the |
|
44 root of the repository. |
|
45 |
|
46 Exclusion patterns take precedence over inclusion patterns. So even |
|
47 if a file is explicitly included, an ``[exclude]`` entry can remove it. |
|
48 |
|
49 For example, say you have a repository with 3 directories, ``frontend/``, |
|
50 ``backend/``, and ``tools/``. ``frontend/`` and ``backend/`` correspond |
|
51 to different projects and it is uncommon for someone working on one |
|
52 to need the files for the other. But ``tools/`` contains files shared |
|
53 between both projects. Your sparse config files may resemble:: |
|
54 |
|
55 # frontend.sparse |
|
56 frontend/** |
|
57 tools/** |
|
58 |
|
59 # backend.sparse |
|
60 backend/** |
|
61 tools/** |
|
62 |
|
63 Say the backend grows in size. Or there's a directory with thousands |
|
64 of files you wish to exclude. You can modify the profile to exclude |
|
65 certain files:: |
|
66 |
|
67 [include] |
|
68 backend/** |
|
69 tools/** |
|
70 |
|
71 [exclude] |
|
72 tools/tests/** |
20 """ |
73 """ |
21 |
74 |
22 from __future__ import absolute_import |
75 from __future__ import absolute_import |
23 |
76 |
24 import collections |
77 import collections |