(version, name)
| 451 | release = None |
| 452 | for id, text in reChangesSectionHREF.findall(s): |
| 453 | if text.lower().startswith('release '): |
| 454 | release = text[8:].strip() |
| 455 | seenText.clear() |
| 456 | releaseTuple = versionToTuple(release, name) |
| 457 | if releaseTuple > currentVersionTuple: |
| 458 | raise RuntimeError('Future release %s is greater than %s in %s' % (release, version, name)) |
| 459 | if id in seenIDs: |
| 460 | raise RuntimeError('%s has duplicate section "%s" under release "%s"' % (name, text, release)) |
| 461 | seenIDs.add(id) |
| 462 | if text in seenText: |
| 463 | raise RuntimeError('%s has duplicate section "%s" under release "%s"' % (name, text, release)) |
| 464 | seenText.add(text) |
| 465 | |
| 466 | |
| 467 | reVersion = re.compile(r'(\d+)\.(\d+)(?:\.(\d+))?\s*(-alpha|-beta|final|RC\d+)?\s*(?:\[.*\])?', re.IGNORECASE) |
| 468 | |
| 469 | |
| 470 | def versionToTuple(version, name): |
| 471 | versionMatch = reVersion.match(version) |
no test coverage detected
searching dependent graphs…