@@ -1005,8 +1005,10 @@ def _validate_docs(self):
1005
1005
# This is the normal case
1006
1006
self ._validate_docs_schema (doc , doc_schema (self .object_name .split ('.' )[0 ]), 'DOCUMENTATION' , 305 )
1007
1007
1008
- self ._check_version_added (doc )
1009
- self ._check_for_new_args (doc , metadata )
1008
+ add_fragments (doc , self .object_path , fragment_loader = fragment_loader )
1009
+
1010
+ existing_doc = self ._check_for_new_args (doc , metadata )
1011
+ self ._check_version_added (doc , existing_doc )
1010
1012
1011
1013
if not bool (doc_info ['EXAMPLES' ]['value' ]):
1012
1014
self .reporter .error (
@@ -1082,19 +1084,29 @@ def _validate_docs(self):
1082
1084
1083
1085
return doc_info , doc
1084
1086
1085
- def _check_version_added (self , doc ):
1086
- if not self ._is_new_module ():
1087
- return
1088
-
1087
+ def _check_version_added (self , doc , existing_doc ):
1088
+ version_added_raw = doc .get ('version_added' )
1089
1089
try :
1090
1090
version_added = StrictVersion (str (doc .get ('version_added' , '0.0' ) or '0.0' ))
1091
1091
except ValueError :
1092
1092
version_added = doc .get ('version_added' , '0.0' )
1093
+ if self ._is_new_module () or version_added != 'historical' :
1094
+ self .reporter .error (
1095
+ path = self .object_path ,
1096
+ code = 306 ,
1097
+ msg = 'version_added is not a valid version number: %r' % version_added
1098
+ )
1099
+ return
1100
+
1101
+ if existing_doc and version_added_raw != existing_doc .get ('version_added' ):
1093
1102
self .reporter .error (
1094
1103
path = self .object_path ,
1095
- code = 306 ,
1096
- msg = 'version_added is not a valid version number: %r' % version_added
1104
+ code = 307 ,
1105
+ msg = 'version_added should be %r. Currently %r' % (existing_doc .get ('version_added' ),
1106
+ version_added_raw )
1097
1107
)
1108
+
1109
+ if not self ._is_new_module ():
1098
1110
return
1099
1111
1100
1112
should_be = '.' .join (ansible_version .split ('.' )[:2 ])
@@ -1105,7 +1117,7 @@ def _check_version_added(self, doc):
1105
1117
self .reporter .error (
1106
1118
path = self .object_path ,
1107
1119
code = 307 ,
1108
- msg = 'version_added should be %s . Currently %s ' % (should_be , version_added )
1120
+ msg = 'version_added should be %r . Currently %r ' % (should_be , version_added_raw )
1109
1121
)
1110
1122
1111
1123
def _validate_ansible_module_call (self , docs ):
@@ -1377,6 +1389,19 @@ def _check_for_new_args(self, doc, metadata):
1377
1389
continue
1378
1390
1379
1391
if any (name in existing_options for name in names ):
1392
+ for name in names :
1393
+ existing_version = existing_options .get (name , {}).get ('version_added' )
1394
+ if existing_version :
1395
+ break
1396
+ current_version = details .get ('version_added' )
1397
+ if current_version != existing_version :
1398
+ self .reporter .error (
1399
+ path = self .object_path ,
1400
+ code = 309 ,
1401
+ msg = ('version_added for new option (%s) should '
1402
+ 'be %r. Currently %r' %
1403
+ (option , existing_version , current_version ))
1404
+ )
1380
1405
continue
1381
1406
1382
1407
try :
@@ -1406,10 +1431,12 @@ def _check_for_new_args(self, doc, metadata):
1406
1431
path = self .object_path ,
1407
1432
code = 309 ,
1408
1433
msg = ('version_added for new option (%s) should '
1409
- 'be %s . Currently %s ' %
1434
+ 'be %r . Currently %r ' %
1410
1435
(option , should_be , version_added ))
1411
1436
)
1412
1437
1438
+ return existing_doc
1439
+
1413
1440
@staticmethod
1414
1441
def is_blacklisted (path ):
1415
1442
base_name = os .path .basename (path )
0 commit comments