summaryrefslogtreecommitdiffstats
path: root/tools/tryselect/selectors/compare.py
blob: a6e77ad61b237d5e8372e662e82dcf50feaafa26 (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
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import os

from mozbuild.base import MozbuildObject
from mozversioncontrol import get_repository_object
from tryselect.cli import BaseTryParser

from .again import run as again_run
from .fuzzy import run as fuzzy_run

here = os.path.abspath(os.path.dirname(__file__))
build = MozbuildObject.from_environment(cwd=here)


class CompareParser(BaseTryParser):
    name = "compare"
    arguments = [
        [
            ["-cc", "--compare-commit"],
            {
                "default": None,
                "help": "The commit that you want to compare your current revision with",
            },
        ],
    ]
    common_groups = ["task"]
    task_configs = [
        "rebuild",
    ]

    def get_revisions_to_run(vcs, compare_commit):
        if compare_commit is None:
            compare_commit = vcs.base_ref
        if vcs.branch:
            current_revision_ref = vcs.branch
        else:
            current_revision_ref = vcs.head_ref

        return compare_commit, current_revision_ref


def run(compare_commit=None, **kwargs):
    vcs = get_repository_object(build.topsrcdir)
    compare_commit, current_revision_ref = CompareParser.get_revisions_to_run(
        vcs, compare_commit
    )

    try:
        fuzzy_run(**kwargs)
        vcs.update(compare_commit)
        again_run()
    finally:
        vcs.update(current_revision_ref)