File: helpers.py

package info (click to toggle)
git-delete-merged-branches 7.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 300 kB
  • sloc: python: 1,843; sh: 26; makefile: 2
file content (48 lines) | stat: -rw-r--r-- 1,423 bytes parent folder | download
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
# Copyright (C) 2020 Sebastian Pipping <sebastian@pipping.org>
# Licensed under GPL v3 or later

import subprocess
from tempfile import NamedTemporaryFile
from textwrap import dedent
from unittest.mock import Mock

from .._confirm import Confirmation
from .._engine import DeleteMergedBranches
from .._git import Git
from .._messenger import Messenger


def run_script(content, cwd):
    header = dedent("""\
        set -e
        set -x
        export HOME=  # make global git config have no effect

        export GIT_AUTHOR_EMAIL=author1@localhost
        export GIT_AUTHOR_NAME='Author One'
        export GIT_COMMITTER_EMAIL=committer2@localhost
        export GIT_COMMITTER_NAME='Committer Two'
    """)

    with NamedTemporaryFile() as f:
        for text in (header, content):
            f.write(text.encode("utf-8"))
        f.flush()
        subprocess.check_call(["bash", f.name], cwd=cwd)


def create_git(work_dir: str) -> Git:
    messenger = Messenger(colorize=False)
    return Git(messenger=messenger, pretend=False, verbose=True, work_dir=work_dir)


def create_dmb(git: Git, effort_level: int) -> DeleteMergedBranches:
    messenger = Messenger(colorize=False)
    confirmation = Confirmation(messenger=messenger, ask=False)
    return DeleteMergedBranches(
        git,
        messenger=messenger,
        confirmation=confirmation,
        selector=Mock(),
        effort_level=effort_level,
    )