D96: sparse: require [section] in sparse config files (BC)
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Mon Jul 17 22:03:44 UTC 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG1d1779734c99: sparse: require [section] in sparse config files (BC) (authored by indygreg).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D96?vs=180&id=221
REVISION DETAIL
https://phab.mercurial-scm.org/D96
AFFECTED FILES
hgext/sparse.py
mercurial/sparse.py
tests/test-sparse-profiles.t
CHANGE DETAILS
diff --git a/tests/test-sparse-profiles.t b/tests/test-sparse-profiles.t
--- a/tests/test-sparse-profiles.t
+++ b/tests/test-sparse-profiles.t
@@ -10,6 +10,18 @@
> rebase=
> EOF
+Config file without [section] is rejected
+
+ $ cat > bad.sparse <<EOF
+ > *.html
+ > EOF
+
+ $ hg debugsparse --import-rules bad.sparse
+ abort: sparse config entry outside of section: *.html
+ (add an [include] or [exclude] line to declare the entry type)
+ [255]
+ $ rm bad.sparse
+
$ echo a > index.html
$ echo x > data.py
$ echo z > readme.txt
@@ -257,6 +269,7 @@
> EOF
$ touch a b
$ cat > .hgsparse <<EOF
+ > [include]
> a
> EOF
$ hg commit -Aqm 'initial'
diff --git a/mercurial/sparse.py b/mercurial/sparse.py
--- a/mercurial/sparse.py
+++ b/mercurial/sparse.py
@@ -33,8 +33,10 @@
"""
includes = set()
excludes = set()
- current = includes
profiles = set()
+ current = None
+ havesection = False
+
for line in raw.split('\n'):
line = line.strip()
if not line or line.startswith('#'):
@@ -45,14 +47,23 @@
if line:
profiles.add(line)
elif line == '[include]':
- if current != includes:
+ if havesection and current != includes:
# TODO pass filename into this API so we can report it.
raise error.Abort(_('sparse config cannot have includes ' +
'after excludes'))
+ havesection = True
+ current = includes
continue
elif line == '[exclude]':
+ havesection = True
current = excludes
elif line:
+ if current is None:
+ raise error.Abort(_('sparse config entry outside of '
+ 'section: %s') % line,
+ hint=_('add an [include] or [exclude] line '
+ 'to declare the entry type'))
+
if line.strip().startswith('/'):
ui.warn(_('warning: sparse profile cannot use' +
' paths starting with /, ignoring %s\n') % line)
diff --git a/hgext/sparse.py b/hgext/sparse.py
--- a/hgext/sparse.py
+++ b/hgext/sparse.py
@@ -35,8 +35,7 @@
The special lines ``[include]`` and ``[exclude]`` denote the section
for includes and excludes that follow, respectively. It is illegal to
-have ``[include]`` after ``[exclude]``. If no sections are defined,
-entries are assumed to be in the ``[include]`` section.
+have ``[include]`` after ``[exclude]``.
Non-special lines resemble file patterns to be added to either includes
or excludes. The syntax of these lines is documented by :hg:`help patterns`.
EMAIL PREFERENCES
https://phab.mercurial-scm.org/settings/panel/emailpreferences/
To: indygreg, #hg-reviewers, dsp, durin42
Cc: dsp, durham, mercurial-devel
More information about the Mercurial-devel
mailing list