diff -r ee616196227c -r ba5d89774db6 mercurial/sparse.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/sparse.py Thu Jul 06 12:14:03 2017 -0700 @@ -0,0 +1,48 @@ +# sparse.py - functionality for sparse checkouts +# +# Copyright 2014 Facebook, Inc. +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +from __future__ import absolute_import + +from .i18n import _ +from . import ( + error, +) + +def parseconfig(ui, raw): + """Parse sparse config file content. + + Returns a tuple of includes, excludes, and profiles. + """ + includes = set() + excludes = set() + current = includes + profiles = [] + for line in raw.split('\n'): + line = line.strip() + if not line or line.startswith('#'): + # empty or comment line, skip + continue + elif line.startswith('%include '): + line = line[9:].strip() + if line: + profiles.append(line) + elif line == '[include]': + if current != includes: + # TODO pass filename into this API so we can report it. + raise error.Abort(_('sparse config cannot have includes ' + + 'after excludes')) + continue + elif line == '[exclude]': + current = excludes + elif line: + if line.strip().startswith('/'): + ui.warn(_('warning: sparse profile cannot use' + + ' paths starting with /, ignoring %s\n') % line) + continue + current.add(line) + + return includes, excludes, profiles