# # Copyright BitBake Contributors # # SPDX-License-Identifier: GPL-2.0-only # __version__ = "2.0.0" import logging logger = logging.getLogger("BitBake.PRserv") from bb.asyncrpc.client import parse_address, ADDR_TYPE_UNIX, ADDR_TYPE_WS def create_server(addr, dbpath, upstream=None, read_only=False): from . import serv s = serv.PRServer(dbpath, upstream=upstream, read_only=read_only) host, port = addr.split(":") s.start_tcp_server(host, int(port)) return s def increase_revision(ver): """Take a revision string such as "1" or "1.2.3" or even a number and increase its last number This fails if the last number is not an integer""" fields=str(ver).split('.') last = fields[-1] try: val = int(last) except Exception as e: logger.critical("Unable to increase revision value %s: %s" % (ver, e)) raise e return ".".join(fields[0:-1] + [ str(val + 1) ]) def _revision_greater_or_equal(rev1, rev2): """Compares x.y.z revision numbers, using integer comparison Returns True if rev1 is greater or equal to rev2""" fields1 = rev1.split(".") fields2 = rev2.split(".") l1 = len(fields1) l2 = len(fields2) for i in range(l1): val1 = int(fields1[i]) if i < l2: val2 = int(fields2[i]) if val2 < val1: return True elif val2 > val1: return False else: return True return True def revision_smaller(rev1, rev2): """Compares x.y.z revision numbers, using integer comparison Returns True if rev1 is strictly smaller than rev2""" return not(_revision_greater_or_equal(rev1, rev2)) def revision_greater(rev1, rev2): """Compares x.y.z revision numbers, using integer comparison Returns True if rev1 is strictly greater than rev2""" return _revision_greater_or_equal(rev1, rev2) and (rev1 != rev2) def create_client(addr): from . import client c = client.PRClient() try: (typ, a) = parse_address(addr) c.connect_tcp(*a) return c except Exception as e: c.close() raise e async def create_async_client(addr): from . import client c = client.PRAsyncClient() try: (typ, a) = parse_address(addr) await c.connect_tcp(*a) return c except Exception as e: await c.close() raise e