)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"719ff932546016e72141eba6539b9a53eedce0d6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"(64 bit value) which may be used to order a set of version data by comparing"},{"line_number":15,"context_line":"values of a single field, which may be useful when the data is persisted in DB"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Needed for Artifacts model"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I33212ea92cca50a143b9141f8147f7db27bb9e7c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3a961159_eb3cad94","line":17,"updated":"2015-01-14 15:41:03.000000000","message":"Should mention: \"Implements: blueprint semver-support\"","commit_id":"29f4b4694b2a76f5c88b3a7df20cde4b8699d77f"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"8298eb3b685a97aa06b60befa963f349b39d636b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"(64 bit value) which may be used to order a set of version data by comparing"},{"line_number":15,"context_line":"values of a single field, which may be useful when the data is persisted in DB"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Needed for Artifacts model"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I33212ea92cca50a143b9141f8147f7db27bb9e7c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"1a930d6b_31f7da8c","line":17,"updated":"2015-01-26 15:25:19.000000000","message":"Please reference the blueprint in the commit message","commit_id":"4f67121ca24b3b30b6dc0406658777e1f8a83809"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3c438c9b80658a350a83c5eae37f148f051c4dd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ina Vasilevskaya \u003civasilevskaya@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-02 21:31:26 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"SemVer utility to store SemVer-compatible object versions in DB"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds an utility which may convert Version objects (provided by semantic_version"},{"line_number":10,"context_line":"library) into a combination of long 64-bit integer value and two preformatted"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"da86d52c_58e672b5","line":7,"updated":"2015-02-03 19:48:49.000000000","message":"50 character maximum","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"efda70dbfea96e82d3f0a995c848ea79b966ed93","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ina Vasilevskaya \u003civasilevskaya@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-02 21:31:26 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"SemVer utility to store SemVer-compatible object versions in DB"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds an utility which may convert Version objects (provided by semantic_version"},{"line_number":10,"context_line":"library) into a combination of long 64-bit integer value and two preformatted"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"da86d52c_7e4f4734","line":7,"in_reply_to":"da86d52c_58e672b5","updated":"2015-02-05 17:53:33.000000000","message":"Done","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3c438c9b80658a350a83c5eae37f148f051c4dd","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds an utility which may convert Version objects (provided by semantic_version"},{"line_number":10,"context_line":"library) into a combination of long 64-bit integer value and two preformatted"},{"line_number":11,"context_line":"strings. If stored in the database these values unambiguously define object"},{"line_number":12,"context_line":"precedence according to semver notation. This may be used for correct ordering"},{"line_number":13,"context_line":"of database queries."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"da86d52c_b8f20e6d","line":11,"updated":"2015-02-03 19:48:49.000000000","message":"72 character maximum","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"efda70dbfea96e82d3f0a995c848ea79b966ed93","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds an utility which may convert Version objects (provided by semantic_version"},{"line_number":10,"context_line":"library) into a combination of long 64-bit integer value and two preformatted"},{"line_number":11,"context_line":"strings. If stored in the database these values unambiguously define object"},{"line_number":12,"context_line":"precedence according to semver notation. This may be used for correct ordering"},{"line_number":13,"context_line":"of database queries."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"da86d52c_be645fb9","line":11,"in_reply_to":"da86d52c_b8f20e6d","updated":"2015-02-05 17:53:33.000000000","message":"Done","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"}],"glance/common/exception.py":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                \" namespace\u003d%(namespace_name)s.\")"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"class InvalidVersion(Invalid):"},{"line_number":440,"context_line":"    message \u003d _(\"Version is invalid: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_597bc627","line":439,"updated":"2015-03-06 14:24:12.000000000","message":"Can you please rename this to ArtifactVersion? It could be confusing to let it be simply version, keeping the user/op guessing version of what?","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"d4a1c0579de8cd624956e508ad0b1c994aa74f2e","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                \" namespace\u003d%(namespace_name)s.\")"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"class InvalidVersion(Invalid):"},{"line_number":440,"context_line":"    message \u003d _(\"Version is invalid: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_efdaec4a","line":439,"in_reply_to":"9a80dd14_597bc627","updated":"2015-03-06 15:05:11.000000000","message":"Well, I think that semver_db is a generic utility, useful not only for artifacts but for anybody who needs to store semver-compatible versions in DB. So, the exceptions thrown by it should be generic as well.","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"}],"glance/common/semver.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"7f631bcb7fc6583de4f9975c2b5a1688fe6aed07","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return 0"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def as_long(self):"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        Forms a long (64 bit) value to store major, minor and patch components"},{"line_number":67,"context_line":"        as a single number"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_18f94180","line":65,"updated":"2014-08-27 20:48:49.000000000","message":"Nit: Docstring should not start with empty line.","commit_id":"0030d115f3b5395a467cc811eee63baf93650ab4"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"7ad28f9f33027477012129668c546bbc5b8ccc46","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                return -1"},{"line_number":62,"context_line":"        return 0"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def as_long(self):"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        Forms a long (64 bit) value to store major, minor and patch components"},{"line_number":67,"context_line":"        as a single number"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_70489787","line":64,"updated":"2014-10-24 04:28:22.000000000","message":"(nit:) As \"from_long\" , I think name this to \"to_long\" is more pertinent.","commit_id":"ceb63692e9bbdbb544840d63899538569fe45dd1"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5e5df2bdfc03ab67ce4db4149d5b6571cfa60a8d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"def parse(value):"},{"line_number":97,"context_line":"    match \u003d expr.match(value)"},{"line_number":98,"context_line":"    if not match:"},{"line_number":99,"context_line":"        raise exception.Invalid(_(\"Not a valid Version String\"))"},{"line_number":100,"context_line":"    major \u003d int(match.group(\u0027major\u0027))"},{"line_number":101,"context_line":"    minor \u003d int(match.group(\u0027minor\u0027) or 0)"},{"line_number":102,"context_line":"    patch \u003d int(match.group(\u0027patch\u0027) or 0)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_e1ffeea9","line":99,"updated":"2014-12-05 05:49:22.000000000","message":"*Might* add an example a valid version string.","commit_id":"8e3b2512bffcb9f1e69401e884552d84859c1611"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"da6029fc6049de9701571fde593bd4a995495109","unresolved":false,"context_lines":[{"line_number":96,"context_line":"def parse(value):"},{"line_number":97,"context_line":"    match \u003d expr.match(value)"},{"line_number":98,"context_line":"    if not match:"},{"line_number":99,"context_line":"        raise exception.Invalid(_(\"Not a valid Version String\"))"},{"line_number":100,"context_line":"    major \u003d int(match.group(\u0027major\u0027))"},{"line_number":101,"context_line":"    minor \u003d int(match.group(\u0027minor\u0027) or 0)"},{"line_number":102,"context_line":"    patch \u003d int(match.group(\u0027patch\u0027) or 0)"}],"source_content_type":"text/x-python","patch_set":19,"id":"da86d52c_75cad3a2","line":99,"in_reply_to":"5a890539_e1ffeea9","updated":"2015-01-31 01:08:09.000000000","message":"Ok, this is now out of scope, as we are not parsing this anymore","commit_id":"8e3b2512bffcb9f1e69401e884552d84859c1611"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5e5df2bdfc03ab67ce4db4149d5b6571cfa60a8d","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if i.isdigit():"},{"line_number":126,"context_line":"            if i.startswith(\u00270\u0027):"},{"line_number":127,"context_line":"                raise exception.Invalid(_(\"Not a valid Version String\"))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _check_limit(value):"},{"line_number":131,"context_line":"    if value \u003e max_component_length:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_a11c0616","line":128,"updated":"2014-12-05 05:49:22.000000000","message":"Same here.","commit_id":"8e3b2512bffcb9f1e69401e884552d84859c1611"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"da6029fc6049de9701571fde593bd4a995495109","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if i.isdigit():"},{"line_number":126,"context_line":"            if i.startswith(\u00270\u0027):"},{"line_number":127,"context_line":"                raise exception.Invalid(_(\"Not a valid Version String\"))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _check_limit(value):"},{"line_number":131,"context_line":"    if value \u003e max_component_length:"}],"source_content_type":"text/x-python","patch_set":19,"id":"da86d52c_b5c36b89","line":128,"in_reply_to":"5a890539_a11c0616","updated":"2015-01-31 01:08:09.000000000","message":"ditto","commit_id":"8e3b2512bffcb9f1e69401e884552d84859c1611"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5e5df2bdfc03ab67ce4db4149d5b6571cfa60a8d","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _check_limit(value):"},{"line_number":131,"context_line":"    if value \u003e max_component_length:"},{"line_number":132,"context_line":"        raise ValueError(_(\"Version component too large\"))"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_c1e032fb","line":132,"updated":"2014-12-05 05:49:22.000000000","message":"Why not take in the name of the version component and provide that in exception message so it is obvious what the problem is without relying on stacktrace?","commit_id":"8e3b2512bffcb9f1e69401e884552d84859c1611"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"da6029fc6049de9701571fde593bd4a995495109","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _check_limit(value):"},{"line_number":131,"context_line":"    if value \u003e max_component_length:"},{"line_number":132,"context_line":"        raise ValueError(_(\"Version component too large\"))"}],"source_content_type":"text/x-python","patch_set":19,"id":"da86d52c_d5c0df7e","line":132,"in_reply_to":"5a890539_c1e032fb","updated":"2015-01-31 01:08:09.000000000","message":"Done","commit_id":"8e3b2512bffcb9f1e69401e884552d84859c1611"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"68a185e34e36ee097d091b5c03ebebc48e337acc","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        pairs \u003d [(self.major, other.major), (self.minor, other.minor),"},{"line_number":56,"context_line":"                 (self.patch, other.patch),"},{"line_number":57,"context_line":"                 (0 if self.is_prerelease() else 1,"},{"line_number":58,"context_line":"                  0 if other.is_prerelease() else 1),"},{"line_number":59,"context_line":"                 (self.label, other.label)]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        for s, o in pairs:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_37cddd66","line":58,"updated":"2014-12-13 19:50:21.000000000","message":"This does not correctly implement the \nsemantic versioning specification prerelease extension\u0027s logic. Prereleases must be ordered alphabetically.","commit_id":"d52ca3dafcdc324471ee2eea40330788bd378f70"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"2a5d4c4221f2cfc088e9d8650f56216dab524565","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        pairs \u003d [(self.major, other.major), (self.minor, other.minor),"},{"line_number":56,"context_line":"                 (self.patch, other.patch),"},{"line_number":57,"context_line":"                 (0 if self.is_prerelease() else 1,"},{"line_number":58,"context_line":"                  0 if other.is_prerelease() else 1),"},{"line_number":59,"context_line":"                 (self.label, other.label)]"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        for s, o in pairs:"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_755813fb","line":58,"in_reply_to":"3a961159_37cddd66","updated":"2015-01-31 01:10:04.000000000","message":"Alphabetical ordering was done by label comparison below. But this does not matter now: we are scoping out parsing and in-memory comparison from this patch","commit_id":"d52ca3dafcdc324471ee2eea40330788bd378f70"}],"glance/common/semver_db.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"cd49372cb31f92149ef82246a1b52fd89a5f638a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class DBVersion(object):"},{"line_number":23,"context_line":"    def __init__(self, components_long, prerelease, build):"},{"line_number":24,"context_line":"        version_string \u003d \u0027%s.%s.%s\u0027 % _long_to_components(components_long)"},{"line_number":25,"context_line":"        if prerelease:"},{"line_number":26,"context_line":"            prerelease \u003d [comp.lstrip(\u00270\u0027) if comp.isdigit() else comp"},{"line_number":27,"context_line":"                          for comp in prerelease.split(\u0027.\u0027)]"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_05ae132e","line":24,"updated":"2015-02-11 23:27:04.000000000","message":"Since these are integers shouldn\u0027t the interpolation value be %d?","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"591338660b2ed684bbf0a27199bde5b286c02ccd","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class DBVersion(object):"},{"line_number":23,"context_line":"    def __init__(self, components_long, prerelease, build):"},{"line_number":24,"context_line":"        version_string \u003d \u0027%s.%s.%s\u0027 % _long_to_components(components_long)"},{"line_number":25,"context_line":"        if prerelease:"},{"line_number":26,"context_line":"            prerelease \u003d [comp.lstrip(\u00270\u0027) if comp.isdigit() else comp"},{"line_number":27,"context_line":"                          for comp in prerelease.split(\u0027.\u0027)]"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_6ef5d081","line":24,"in_reply_to":"da86d52c_05ae132e","updated":"2015-02-12 16:27:00.000000000","message":"Done","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"cd49372cb31f92149ef82246a1b52fd89a5f638a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        return (_version_to_long(self.version),"},{"line_number":48,"context_line":"                \u0027.\u0027.join([c.rjust(m, \u00270\u0027) if c.isdigit()"},{"line_number":49,"context_line":"                          else c for c in self.version.prerelease])"},{"line_number":50,"context_line":"                if self.version.prerelease else None,"},{"line_number":51,"context_line":"                \u0027.\u0027.join(self.version.build)"},{"line_number":52,"context_line":"                if self.version.build else None)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_3f7a7f24","line":50,"updated":"2015-02-11 23:27:04.000000000","message":"So yeah, this needs to be rewritten properly. This is entirely unreadable and there are way too many ternaries here.","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"591338660b2ed684bbf0a27199bde5b286c02ccd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        return (_version_to_long(self.version),"},{"line_number":48,"context_line":"                \u0027.\u0027.join([c.rjust(m, \u00270\u0027) if c.isdigit()"},{"line_number":49,"context_line":"                          else c for c in self.version.prerelease])"},{"line_number":50,"context_line":"                if self.version.prerelease else None,"},{"line_number":51,"context_line":"                \u0027.\u0027.join(self.version.build)"},{"line_number":52,"context_line":"                if self.version.build else None)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_6e6a301b","line":50,"in_reply_to":"da86d52c_3f7a7f24","updated":"2015-02-12 16:27:00.000000000","message":"Well, I like pythonic structures like this, and list comprehension is way more efficient then regular loops.  \nBut well, probably you are right, readability \u003e pythonic code, and the performance probably does not matter that much here. Will rewrite with a loop with conditions","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"d482563fd4ed408b50bda8a9d59d1abf1fa1a8cc","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _check_limit(value):"},{"line_number":63,"context_line":"    if value \u003e max_component_length:"},{"line_number":64,"context_line":"        raise Exception(\"Version component is too large (%s max)\" %"},{"line_number":65,"context_line":"                        max_component_length)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_6786d3ba","line":64,"updated":"2015-02-12 16:12:04.000000000","message":"First, I think we have to make special exception classes in glance/common/exception.py\n\nSecond, messages must be localized with _.","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"591338660b2ed684bbf0a27199bde5b286c02ccd","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def _check_limit(value):"},{"line_number":63,"context_line":"    if value \u003e max_component_length:"},{"line_number":64,"context_line":"        raise Exception(\"Version component is too large (%s max)\" %"},{"line_number":65,"context_line":"                        max_component_length)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_c24ccda0","line":64,"in_reply_to":"da86d52c_6786d3ba","updated":"2015-02-12 16:27:00.000000000","message":"Done","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"cd49372cb31f92149ef82246a1b52fd89a5f638a","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def _validate_prerelease_label(label):"},{"line_number":69,"context_line":"    m \u003d max_numeric_prerelease_length"},{"line_number":70,"context_line":"    if next([component for component in"},{"line_number":71,"context_line":"             label if component.isdigit() and len(component) \u003e m]):"},{"line_number":72,"context_line":"        raise Exception(\"Prerelease numeric component is \""},{"line_number":73,"context_line":"                        \"too large (% characters max)\" %"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_465f3e0f","line":70,"updated":"2015-02-11 23:27:04.000000000","message":"You\u0027re creating an entire list each time? Calling next on a list doesn\u0027t work since next expects an iterator/generator.\n\nIf I understand what you\u0027re attempting to do here, you want to do:\n\n    any(component for component in label\n        if component.isdigit() and len(component) \u003e m)","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"591338660b2ed684bbf0a27199bde5b286c02ccd","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def _validate_prerelease_label(label):"},{"line_number":69,"context_line":"    m \u003d max_numeric_prerelease_length"},{"line_number":70,"context_line":"    if next([component for component in"},{"line_number":71,"context_line":"             label if component.isdigit() and len(component) \u003e m]):"},{"line_number":72,"context_line":"        raise Exception(\"Prerelease numeric component is \""},{"line_number":73,"context_line":"                        \"too large (% characters max)\" %"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_6c095830","line":70,"in_reply_to":"da86d52c_465f3e0f","updated":"2015-02-12 16:27:00.000000000","message":"Done","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"d482563fd4ed408b50bda8a9d59d1abf1fa1a8cc","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    if next([component for component in"},{"line_number":71,"context_line":"             label if component.isdigit() and len(component) \u003e m]):"},{"line_number":72,"context_line":"        raise Exception(\"Prerelease numeric component is \""},{"line_number":73,"context_line":"                        \"too large (% characters max)\" %"},{"line_number":74,"context_line":"                        max_numeric_prerelease_length)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_07b5177d","line":73,"updated":"2015-02-12 16:12:04.000000000","message":"ditto","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"591338660b2ed684bbf0a27199bde5b286c02ccd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    if next([component for component in"},{"line_number":71,"context_line":"             label if component.isdigit() and len(component) \u003e m]):"},{"line_number":72,"context_line":"        raise Exception(\"Prerelease numeric component is \""},{"line_number":73,"context_line":"                        \"too large (% characters max)\" %"},{"line_number":74,"context_line":"                        max_numeric_prerelease_length)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_0243456c","line":73,"in_reply_to":"da86d52c_07b5177d","updated":"2015-02-12 16:27:00.000000000","message":"Done","commit_id":"cbe30c2efedc38550b44d867dec23eb8143362dd"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"9a101368fe1ca15c5556de5f456d9da8b64b54fb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if component.isdigit():"},{"line_number":95,"context_line":"            if len(component) \u003e max_numeric_prerelease_length:"},{"line_number":96,"context_line":"                reason \u003d _(\"Prerelease numeric component is too large \""},{"line_number":97,"context_line":"                           \"(%s characters \""},{"line_number":98,"context_line":"                           \"max)\") % max_numeric_prerelease_length"},{"line_number":99,"context_line":"                raise exception.InvalidVersion(reason\u003dreason)"},{"line_number":100,"context_line":"            res.append(component.rjust(max_numeric_prerelease_length, \u00270\u0027))"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_0ca8a11f","line":97,"updated":"2015-02-13 17:45:26.000000000","message":"%d for integers, no?","commit_id":"3e668e783e792448834a544c95d2d87b1b14856c"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"497bce0187f2405bcff56b1d6fe2fb0bd01ccd51","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if component.isdigit():"},{"line_number":95,"context_line":"            if len(component) \u003e max_numeric_prerelease_length:"},{"line_number":96,"context_line":"                reason \u003d _(\"Prerelease numeric component is too large \""},{"line_number":97,"context_line":"                           \"(%s characters \""},{"line_number":98,"context_line":"                           \"max)\") % max_numeric_prerelease_length"},{"line_number":99,"context_line":"                raise exception.InvalidVersion(reason\u003dreason)"},{"line_number":100,"context_line":"            res.append(component.rjust(max_numeric_prerelease_length, \u00270\u0027))"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_60f7615a","line":97,"in_reply_to":"da86d52c_0ca8a11f","updated":"2015-02-13 18:08:02.000000000","message":"Yup. Will fix. Same above.","commit_id":"3e668e783e792448834a544c95d2d87b1b14856c"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"9a101368fe1ca15c5556de5f456d9da8b64b54fb","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    for component in string_value.split(\u0027.\u0027):"},{"line_number":109,"context_line":"        if component.isdigit():"},{"line_number":110,"context_line":"            val \u003d component.lstrip(\u00270\u0027)"},{"line_number":111,"context_line":"            if len(val) \u003d\u003d 0:  # Corner case: when the component is just \u00270\u0027"},{"line_number":112,"context_line":"                val \u003d \u00270\u0027      # it will be stripped completely, so restore it"},{"line_number":113,"context_line":"            res.append(val)"},{"line_number":114,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_ec718ddf","line":111,"updated":"2015-02-13 17:45:26.000000000","message":"What if the component was several 0s? We\u0027re not preserving the original data at all so we can\u0027t be certain if we\u0027re stripping too many leading 0s","commit_id":"3e668e783e792448834a544c95d2d87b1b14856c"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"497bce0187f2405bcff56b1d6fe2fb0bd01ccd51","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    for component in string_value.split(\u0027.\u0027):"},{"line_number":109,"context_line":"        if component.isdigit():"},{"line_number":110,"context_line":"            val \u003d component.lstrip(\u00270\u0027)"},{"line_number":111,"context_line":"            if len(val) \u003d\u003d 0:  # Corner case: when the component is just \u00270\u0027"},{"line_number":112,"context_line":"                val \u003d \u00270\u0027      # it will be stripped completely, so restore it"},{"line_number":113,"context_line":"            res.append(val)"},{"line_number":114,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_a098791c","line":111,"in_reply_to":"da86d52c_ec718ddf","updated":"2015-02-13 18:08:02.000000000","message":"According to semver spec leading zeroes are not allowed, so such situation is impossible. The only valid component which has leading zeros is plain \"0\" - and it covered here.","commit_id":"3e668e783e792448834a544c95d2d87b1b14856c"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Mirantis, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_39a532a2","line":1,"updated":"2015-03-06 14:24:12.000000000","message":"Not a big deal, nonetheless 2015 might be better.","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"d4a1c0579de8cd624956e508ad0b1c994aa74f2e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Mirantis, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_8ae5de39","line":1,"in_reply_to":"9a80dd14_39a532a2","updated":"2015-03-06 15:05:11.000000000","message":"Done","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import semantic_version"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from glance.common import exception"},{"line_number":19,"context_line":"from glance import i18n"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_d9bdf6b8","line":16,"updated":"2015-03-06 14:24:12.000000000","message":"3rd party after in-tree imports","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"99c96ebaae86096575f6f5e3c2358491257ccbb0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import semantic_version"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from glance.common import exception"},{"line_number":19,"context_line":"from glance import i18n"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_8f47b0bb","line":16,"in_reply_to":"9a80dd14_d9bdf6b8","updated":"2015-03-06 14:51:11.000000000","message":"My bad, the currently proposed code is good.","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from glance import i18n"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"max_component_length \u003d pow(2, 16) - 1"},{"line_number":22,"context_line":"max_numeric_prerelease_length \u003d 6"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"_ \u003d i18n._"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_19eb0eb1","line":22,"updated":"2015-03-06 14:24:12.000000000","message":"All in caps might be better\n\neg. https://github.com/openstack/glance_store/blob/master/glance_store/_drivers/swift/store.py#L46","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"d4a1c0579de8cd624956e508ad0b1c994aa74f2e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from glance import i18n"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"max_component_length \u003d pow(2, 16) - 1"},{"line_number":22,"context_line":"max_numeric_prerelease_length \u003d 6"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"_ \u003d i18n._"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_afed54b9","line":22,"in_reply_to":"9a80dd14_19eb0eb1","updated":"2015-03-06 15:05:11.000000000","message":"Done","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class DBVersion(object):"},{"line_number":28,"context_line":"    def __init__(self, components_long, prerelease, build):"},{"line_number":29,"context_line":"        version_string \u003d \u0027%d.%d.%d\u0027 % _long_to_components(components_long)"},{"line_number":30,"context_line":"        if prerelease:"},{"line_number":31,"context_line":"            version_string +\u003d \u0027-\u0027 + _strip_leading_zeroes_from_prerelease("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_7947aabc","line":28,"updated":"2015-03-06 14:24:12.000000000","message":"Can you please add a docstring here?","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"d4a1c0579de8cd624956e508ad0b1c994aa74f2e","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class DBVersion(object):"},{"line_number":28,"context_line":"    def __init__(self, components_long, prerelease, build):"},{"line_number":29,"context_line":"        version_string \u003d \u0027%d.%d.%d\u0027 % _long_to_components(components_long)"},{"line_number":30,"context_line":"        if prerelease:"},{"line_number":31,"context_line":"            version_string +\u003d \u0027-\u0027 + _strip_leading_zeroes_from_prerelease("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_cfbe0865","line":28,"in_reply_to":"9a80dd14_7947aabc","updated":"2015-03-06 15:05:11.000000000","message":"Done","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        raise exception.InvalidVersion(reason\u003dreason)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def _version_to_long(version):"},{"line_number":71,"context_line":"    _check_limit(version.major)"},{"line_number":72,"context_line":"    _check_limit(version.minor)"},{"line_number":73,"context_line":"    _check_limit(version.patch)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_34ce19b5","line":70,"updated":"2015-03-06 14:24:12.000000000","message":"A docstring/NOTE might help here to have a neat picture of the logic (easier to maintain/extend).","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"d4a1c0579de8cd624956e508ad0b1c994aa74f2e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        raise exception.InvalidVersion(reason\u003dreason)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def _version_to_long(version):"},{"line_number":71,"context_line":"    _check_limit(version.major)"},{"line_number":72,"context_line":"    _check_limit(version.minor)"},{"line_number":73,"context_line":"    _check_limit(version.patch)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_2a807245","line":70,"in_reply_to":"9a80dd14_34ce19b5","updated":"2015-03-06 15:05:11.000000000","message":"Done","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    major \u003d value \u003e\u003e 48"},{"line_number":85,"context_line":"    minor \u003d (value - (major \u003c\u003c 48)) \u003e\u003e 32"},{"line_number":86,"context_line":"    patch \u003d (value - (major \u003c\u003c 48) - (minor \u003c\u003c 32)) \u003e\u003e 16"},{"line_number":87,"context_line":"    return major, minor, patch"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def _add_leading_zeroes_to_prerelease(label_tuple):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_743971d6","line":87,"updated":"2015-03-06 14:24:12.000000000","message":"str(...) conversion is needed for long, right?\n\nhttps://docs.python.org/2/library/functions.html#long\n\nIf this is used outside of the string formatting it might be confusing with the trailing \"L\"","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"d4a1c0579de8cd624956e508ad0b1c994aa74f2e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    major \u003d value \u003e\u003e 48"},{"line_number":85,"context_line":"    minor \u003d (value - (major \u003c\u003c 48)) \u003e\u003e 32"},{"line_number":86,"context_line":"    patch \u003d (value - (major \u003c\u003c 48) - (minor \u003c\u003c 32)) \u003e\u003e 16"},{"line_number":87,"context_line":"    return major, minor, patch"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def _add_leading_zeroes_to_prerelease(label_tuple):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_2af792f6","line":87,"in_reply_to":"9a80dd14_743971d6","updated":"2015-03-06 15:05:11.000000000","message":"Done","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"}],"glance/tests/unit/common/test_semver.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3c438c9b80658a350a83c5eae37f148f051c4dd","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def test_minor_comparison_as_long(self):"},{"line_number":36,"context_line":"        v1 \u003d semver_db.parse(\"1.1.100\")"},{"line_number":37,"context_line":"        v2 \u003d semver_db.parse(\"2.0.0\")"},{"line_number":38,"context_line":"        self.assertTrue(v2.__composite_values__()[0] \u003e"},{"line_number":39,"context_line":"                        v1.__composite_values__()[0])"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_patch_comparison_as_long(self):"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_1373fd80","line":38,"updated":"2015-02-03 19:48:49.000000000","message":"Is there no other way to test the __composite_values__ method?","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"efda70dbfea96e82d3f0a995c848ea79b966ed93","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def test_minor_comparison_as_long(self):"},{"line_number":36,"context_line":"        v1 \u003d semver_db.parse(\"1.1.100\")"},{"line_number":37,"context_line":"        v2 \u003d semver_db.parse(\"2.0.0\")"},{"line_number":38,"context_line":"        self.assertTrue(v2.__composite_values__()[0] \u003e"},{"line_number":39,"context_line":"                        v1.__composite_values__()[0])"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_patch_comparison_as_long(self):"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_bed9bf58","line":38,"in_reply_to":"da86d52c_1373fd80","updated":"2015-02-05 17:53:33.000000000","message":"It is a \"magic method\" of SQLAlchemy (used to build composite fields). Technically, this could be tested via SQLAlchemy interaction, but this commit does not add any actual model classes etc, so the only way to test it is too call explicitly.","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"d3c438c9b80658a350a83c5eae37f148f051c4dd","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def test_label_comparison_as_long(self):"},{"line_number":48,"context_line":"        v1 \u003d semver_db.parse(\"1.1.1-alpha\")"},{"line_number":49,"context_line":"        v2 \u003d semver_db.parse(\"1.1.1\")"},{"line_number":50,"context_line":"        self.assertTrue(v2.__composite_values__()[0] \u003e"},{"line_number":51,"context_line":"                        v1.__composite_values__()[0])"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_6213ae66","line":49,"updated":"2015-02-03 19:48:49.000000000","message":"You need far more test cases than this. For example, you\u0027ll need\n\n    1.1.1-0.10.z.23.y.255\n    1.1.1-alpha.1.2.3.4.5.6\n\nKeep in mind that in pre-release identifiers, the format is essentially\n\n    -([a-zA-Z0-9]+\\.)+\n\ni.e., the pre-release component can have any number of dotted segments.","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"efda70dbfea96e82d3f0a995c848ea79b966ed93","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def test_label_comparison_as_long(self):"},{"line_number":48,"context_line":"        v1 \u003d semver_db.parse(\"1.1.1-alpha\")"},{"line_number":49,"context_line":"        v2 \u003d semver_db.parse(\"1.1.1\")"},{"line_number":50,"context_line":"        self.assertTrue(v2.__composite_values__()[0] \u003e"},{"line_number":51,"context_line":"                        v1.__composite_values__()[0])"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_deb3d307","line":49,"in_reply_to":"da86d52c_6213ae66","updated":"2015-02-05 17:53:33.000000000","message":"Well, this test scenario is called \"label_comparison_as_long\", i.e. it compares just long parts of the version representation. And this parts are identical for all the pre-release labels of the given version: i.e. \"1.1.1-0.10.z.23.y.255\" has the same long value as \"1.1.1-alpha.1.2.3.4.5.6\", and the comparison is actually done by comparing preformatted alphanumeric strings.\n\nI will add separate test for that.","commit_id":"105d4b22a13ffff47de9036c00fe7e19adf77df4"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"9a101368fe1ca15c5556de5f456d9da8b64b54fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"da86d52c_cc092934","updated":"2015-02-13 17:45:26.000000000","message":"Can we add a test for a version string like:\n\n    1.2.3-beta.001.2+build1\n\nIf I recall correctly, this is valid under SemVer","commit_id":"3e668e783e792448834a544c95d2d87b1b14856c"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"497bce0187f2405bcff56b1d6fe2fb0bd01ccd51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"da86d52c_2072c9e3","in_reply_to":"da86d52c_cc092934","updated":"2015-02-13 18:08:02.000000000","message":"Nope, it is not. See p.9 in the spec: Numeric identifiers MUST NOT include leading zeroes.\n\nI may add appropriate testcase asserting the exception, but it will eventually test the semantic_version lib instead of the functionality of this changeset.","commit_id":"3e668e783e792448834a544c95d2d87b1b14856c"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"413a9bc7abc26c44493f51d2b286b2f1cb0b179c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Mirantis, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_b4b92917","line":1,"updated":"2015-03-06 14:24:12.000000000","message":"ditto","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"d4a1c0579de8cd624956e508ad0b1c994aa74f2e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Mirantis, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_2a9dd259","line":1,"in_reply_to":"9a80dd14_b4b92917","updated":"2015-03-06 15:05:11.000000000","message":"Done","commit_id":"880c94be73408da38ad0540f7c51156b2cb7a685"}]}
