diff options
Diffstat (limited to 'bitbake/lib/prserv/__init__.py')
| -rw-r--r-- | bitbake/lib/prserv/__init__.py | 99 |
1 files changed, 88 insertions, 11 deletions
diff --git a/bitbake/lib/prserv/__init__.py b/bitbake/lib/prserv/__init__.py index 9961040b58..ffc5a40a28 100644 --- a/bitbake/lib/prserv/__init__.py +++ b/bitbake/lib/prserv/__init__.py | |||
| @@ -1,18 +1,95 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright BitBake Contributors | ||
| 3 | # | ||
| 2 | # SPDX-License-Identifier: GPL-2.0-only | 4 | # SPDX-License-Identifier: GPL-2.0-only |
| 3 | # | 5 | # |
| 4 | 6 | ||
| 5 | __version__ = "1.0.0" | ||
| 6 | 7 | ||
| 7 | import os, time | 8 | __version__ = "2.0.0" |
| 8 | import sys,logging | 9 | |
| 10 | import logging | ||
| 11 | logger = logging.getLogger("BitBake.PRserv") | ||
| 12 | |||
| 13 | from bb.asyncrpc.client import parse_address, ADDR_TYPE_UNIX, ADDR_TYPE_WS | ||
| 14 | |||
| 15 | def 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 | |||
| 24 | def 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 | |||
| 39 | def _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 | |||
| 60 | def 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 | |||
| 65 | def 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 | |||
| 70 | def 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 | |||
| 83 | async def create_async_client(addr): | ||
| 84 | from . import client | ||
| 85 | |||
| 86 | c = client.PRAsyncClient() | ||
| 9 | 87 | ||
| 10 | def init_logger(logfile, loglevel): | 88 | try: |
| 11 | numeric_level = getattr(logging, loglevel.upper(), None) | 89 | (typ, a) = parse_address(addr) |
| 12 | if not isinstance(numeric_level, int): | 90 | await c.connect_tcp(*a) |
| 13 | raise ValueError('Invalid log level: %s' % loglevel) | 91 | return c |
| 14 | FORMAT = '%(asctime)-15s %(message)s' | ||
| 15 | logging.basicConfig(level=numeric_level, filename=logfile, format=FORMAT) | ||
| 16 | 92 | ||
| 17 | class NotFoundError(Exception): | 93 | except Exception as e: |
| 18 | pass | 94 | await c.close() |
| 95 | raise e | ||
