Passed
Pull Request — main (#107)
by
unknown
01:14
created

pyclean.gitclean.execute_git_clean()   A

Complexity

Conditions 3

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 14
rs 9.85
c 0
b 0
f 0
cc 3
nop 2
1
# SPDX-FileCopyrightText: 2020 Peter Bittner <[email protected]>
2
#
3
# SPDX-License-Identifier: GPL-3.0-or-later
4
5
import logging
6
import subprocess
7
8
GIT_FATAL_ERROR = 128
9
10
log = logging.getLogger(__name__)
11
12
13
def build_git_clean_command(
14
    ignore_patterns: list[str],
15
    dry_run=False,
16
    force=False,
17
) -> list[str]:
18
    exclude = (item for pattern in ignore_patterns for item in ['-e', pattern])
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable item does not seem to be defined.
Loading history...
19
    mode = '-n' if dry_run else '-f' if force else '-i'
20
    return ['git', 'clean', '-dx', *exclude, mode]
21
22
23
def execute_git_clean(directory, args):
24
    log.info('Executing git clean...')
25
    cmd = build_git_clean_command(args.ignore, dry_run=args.dry_run, force=args.yes)
26
27
    log.debug('Run: %s', ' '.join(cmd))
28
    result = subprocess.run(cmd, cwd=directory, check=False)  # noqa: S603
29
30
    if result.returncode == GIT_FATAL_ERROR:
31
        log.warning(
32
            'Directory %s is not under version control. Skipping git clean.',
33
            directory,
34
        )
35
    elif result.returncode:
36
        raise SystemExit(result.returncode)
37