aboutsummaryrefslogtreecommitdiff
path: root/update-gerrit-parents.py
blob: 25f9465592318337d4a12f6b80a12142bebeb40a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/python
from __future__ import print_function
import sys
import json
import logging
import argparse
import linaro_gerrit

from update_gerrit_parents_conf import PARENT_MAP
# update_gerrit_parents_conf.py should contain per-server parent map in
# the following format:
# (prefix, parent project)
# or
# (prefix, (parent, more parents...))
# e.g.:
#
#PARENT_MAP = {
#    "https://review.linaro.org": [
#        ("toolchain",
#            ("Toolchain-Projects", "Toolchain-Upstream-Mirrors")),
#        ("infrastructure", "infrastructure"),
#    ],
#}

parser = argparse.ArgumentParser(
    description='Update Gerrit project parents based on tree prefix')
parser.add_argument('--server',
    help="Server to use config for (if differs from --base)")
parser.add_argument('--limit', type=int, default=-1,
    help="Process at most LIMIT projects")
linaro_gerrit.add_gerrit_args(parser, def_loglevel="INFO")
args = parser.parse_args()
linaro_gerrit.apply_gerrit_conf(args)
logging.basicConfig()
log = logging.getLogger("update-gerrit-parents")
log.setLevel(getattr(logging, args.loglevel.upper()))

gerrit = linaro_gerrit.LinaroGerrit(args.base, args.username, args.password,
                                    args.noverify, args.loglevel, args.dryrun)
parent_map = PARENT_MAP[args.server or args.base]

proj_map = gerrit.list_projects(parents=True)

limit = args.limit
for name, info in proj_map.items():
    if limit == 0:
        break
    for prefix, parents in parent_map:
        if name != prefix and name.startswith(prefix):
            if not isinstance(parents, tuple):
                parents = (parents,)
            if info["parent"] == "All-Projects":
                if len(parents) == 1:
                    log.debug("Current parent of %s is %s, setting to %s",
                        name, info["parent"], parents[0])
                    gerrit.set_project_parent(name, parents[0])
                    limit -= 1
                else:
                    log.warn("Current parent of %s is %s, should be one of %s",
                        name, info["parent"], parents)
            elif info["parent"] not in parents:
                log.info("Parent of '%s' is '%s', but not among expected %s",
                    name, info["parent"], parents)
            else:
                log.debug("Parent of '%s' is already '%s'",
                    name, info["parent"])
            # If matched one rule, skip processing next
            break