__init__.py 2.4 KB

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