import os
import subprocess


def git_command(repo, data, *args, return_err=False, return_exit=False):
    if not os.path.isdir(repo):
        raise FileNotFoundError(f"Repo {repo} not found")
    env = os.environ.copy()

    command = ["git", *args]

    proc = subprocess.Popen(" ".join(command), cwd=repo, env=env, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                            stdin=subprocess.PIPE)

    if data:
        proc.stdin.write(data)

    out, err = proc.communicate()
    exit_code = proc.returncode

    result = (out,)

    if return_err:
        result = result + (err,)
    if return_exit:
        result = result + (exit_code,)

    return result[0] if len(result) == 1 else result

