1# 2# Copyright BitBake Contributors 3# 4# SPDX-License-Identifier: GPL-2.0-only 5# 6 7 8__version__ = "2.0.0" 9 10import logging 11logger = logging.getLogger("BitBake.PRserv") 12 13from bb.asyncrpc.client import parse_address, ADDR_TYPE_UNIX, ADDR_TYPE_WS 14 15def create_server(addr, dbpath, upstream=None, read_only=False): 16 from . import serv 17 18 s = serv.PRServer(dbpath, upstream=upstream, read_only=read_only) 19 host, port = addr.split(":") 20 s.start_tcp_server(host, int(port)) 21 22 return s 23 24def increase_revision(ver): 25 """Take a revision string such as "1" or "1.2.3" or even a number and increase its last number 26 This fails if the last number is not an integer""" 27 28 fields=str(ver).split('.') 29 last = fields[-1] 30 31 try: 32 val = int(last) 33 except Exception as e: 34 logger.critical("Unable to increase revision value %s: %s" % (ver, e)) 35 raise e 36 37 return ".".join(fields[0:-1] + [ str(val + 1) ]) 38 39def _revision_greater_or_equal(rev1, rev2): 40 """Compares x.y.z revision numbers, using integer comparison 41 Returns True if rev1 is greater or equal to rev2""" 42 43 fields1 = rev1.split(".") 44 fields2 = rev2.split(".") 45 l1 = len(fields1) 46 l2 = len(fields2) 47 48 for i in range(l1): 49 val1 = int(fields1[i]) 50 if i < l2: 51 val2 = int(fields2[i]) 52 if val2 < val1: 53 return True 54 elif val2 > val1: 55 return False 56 else: 57 return True 58 return True 59 60def revision_smaller(rev1, rev2): 61 """Compares x.y.z revision numbers, using integer comparison 62 Returns True if rev1 is strictly smaller than rev2""" 63 return not(_revision_greater_or_equal(rev1, rev2)) 64 65def revision_greater(rev1, rev2): 66 """Compares x.y.z revision numbers, using integer comparison 67 Returns True if rev1 is strictly greater than rev2""" 68 return _revision_greater_or_equal(rev1, rev2) and (rev1 != rev2) 69 70def create_client(addr): 71 from . import client 72 73 c = client.PRClient() 74 75 try: 76 (typ, a) = parse_address(addr) 77 c.connect_tcp(*a) 78 return c 79 except Exception as e: 80 c.close() 81 raise e 82 83async def create_async_client(addr): 84 from . import client 85 86 c = client.PRAsyncClient() 87 88 try: 89 (typ, a) = parse_address(addr) 90 await c.connect_tcp(*a) 91 return c 92 93 except Exception as e: 94 await c.close() 95 raise e 96