summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThom Smith <thom@thomthesmith.com>2021-09-22 14:13:40 -0400
committerThom Smith <thom@thomthesmith.com>2021-09-22 14:13:40 -0400
commit5855254e834b7f250dd346007117630305e0d2b8 (patch)
tree44dedbeaf103af55ca242b026852de1625419f0a
parentf8e89b3fefbda11932a2344fa1069a40b8c3726d (diff)
downloadpyyaml-git-override-anchor-6.0.tar.gz
Don't error on duplicate anchor namesoverride-anchor-6.0
-rw-r--r--lib/yaml/composer.py5
-rw-r--r--tests/data/duplicate-anchor-1.loader-error3
-rw-r--r--tests/data/override-anchor-1.code1
-rw-r--r--tests/data/override-anchor-1.data4
-rw-r--r--tests/data/override-anchor-2.code1
-rw-r--r--tests/data/override-anchor-2.data (renamed from tests/data/duplicate-anchor-2.loader-error)0
-rw-r--r--yaml/_yaml.pyx13
7 files changed, 6 insertions, 21 deletions
diff --git a/lib/yaml/composer.py b/lib/yaml/composer.py
index 6d15cb4..a034c5f 100644
--- a/lib/yaml/composer.py
+++ b/lib/yaml/composer.py
@@ -70,11 +70,6 @@ class Composer:
return self.anchors[anchor]
event = self.peek_event()
anchor = event.anchor
- if anchor is not None:
- if anchor in self.anchors:
- raise ComposerError("found duplicate anchor %r; first occurrence"
- % anchor, self.anchors[anchor].start_mark,
- "second occurrence", event.start_mark)
self.descend_resolver(parent, index)
if self.check_event(ScalarEvent):
node = self.compose_scalar_node(anchor)
diff --git a/tests/data/duplicate-anchor-1.loader-error b/tests/data/duplicate-anchor-1.loader-error
deleted file mode 100644
index 906cf29..0000000
--- a/tests/data/duplicate-anchor-1.loader-error
+++ /dev/null
@@ -1,3 +0,0 @@
-- &foo bar
-- &bar bar
-- &foo bar
diff --git a/tests/data/override-anchor-1.code b/tests/data/override-anchor-1.code
new file mode 100644
index 0000000..ea27518
--- /dev/null
+++ b/tests/data/override-anchor-1.code
@@ -0,0 +1 @@
+(['bar', 'bar', 'baz', 'baz'])
diff --git a/tests/data/override-anchor-1.data b/tests/data/override-anchor-1.data
new file mode 100644
index 0000000..a97f71e
--- /dev/null
+++ b/tests/data/override-anchor-1.data
@@ -0,0 +1,4 @@
+- &foo bar
+- *foo
+- &foo baz
+- *foo
diff --git a/tests/data/override-anchor-2.code b/tests/data/override-anchor-2.code
new file mode 100644
index 0000000..12bae17
--- /dev/null
+++ b/tests/data/override-anchor-2.code
@@ -0,0 +1 @@
+[1, 2, 3, 4]
diff --git a/tests/data/duplicate-anchor-2.loader-error b/tests/data/override-anchor-2.data
index 62b4389..62b4389 100644
--- a/tests/data/duplicate-anchor-2.loader-error
+++ b/tests/data/override-anchor-2.data
diff --git a/yaml/_yaml.pyx b/yaml/_yaml.pyx
index ff4efe8..77c0109 100644
--- a/yaml/_yaml.pyx
+++ b/yaml/_yaml.pyx
@@ -754,19 +754,6 @@ cdef class CParser:
elif self.parsed_event.type == YAML_MAPPING_START_EVENT \
and self.parsed_event.data.mapping_start.anchor != NULL:
anchor = PyUnicode_FromString(self.parsed_event.data.mapping_start.anchor)
- if anchor is not None:
- if anchor in self.anchors:
- mark = Mark(self.stream_name,
- self.parsed_event.start_mark.index,
- self.parsed_event.start_mark.line,
- self.parsed_event.start_mark.column,
- None, None)
- if PY_MAJOR_VERSION < 3:
- raise ComposerError("found duplicate anchor; first occurrence",
- self.anchors[anchor].start_mark, "second occurrence", mark)
- else:
- raise ComposerError(u"found duplicate anchor; first occurrence",
- self.anchors[anchor].start_mark, u"second occurrence", mark)
self.descend_resolver(parent, index)
if self.parsed_event.type == YAML_SCALAR_EVENT:
node = self._compose_scalar_node(anchor)