mercurial/sparse.py
changeset 33297 ba5d89774db6
child 33298 f41a99c45956
--- /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