hgext/sparse.py
changeset 33294 a5921ad2eb99
parent 33293 c9cbf4de27ba
child 33295 c72e9c61d2b1
equal deleted inserted replaced
33293:c9cbf4de27ba 33294:a5921ad2eb99
    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