Encapsulation des opérations git en Python

Notes personnelles. Pour voir comment Git fonctionne en Python, utilisez le ** sous-processus ** module ** Popen **.


class GitError(BaseException): pass


def git(cmd, *args):
     command = ("git", cmd) + args
     proc = Popen(command, stdin=-1,stdout=-1,stderr=-1)
     out, err = proc.communicate()

    if len(err) == 0:
        return out.strip()
    else:
        raise GitError(err.strip())

Créons une classe appelée ** GitUtility ** qui applique cela.

from subprocess import Popen

class GitError(BaseException):
    """
    This Error raises when git command runner has error.
    """

    pass

class GitUtility(object):
    """
    The GitUtility contains utility functions for operate git.
    """

    def __init__(self):

        return

    def run(self, cmd, *args):
        """
        This command is git command runner by subprocess.
        Return output or raise GitError if runner has error.
        """

        if isinstance(args[0], tuple):
            # Avoid duplicate tuple
            # ex. self.rev_parse("--show-toplevel")
            #   ->('git', 'rev-parse', ('--show-toplevel',))
            command = ("git", cmd) + tuple([arg for arg in args[0]])
        else:
            command = ("git", cmd) + args

        proc = Popen(command, stdin=-1,stdout=-1,stderr=-1)

        out, err = proc.communicate()

        if len(err) == 0:
            return out.strip()

        else:
            raise GitError(err.strip())

    def add(self, path):
        """
        Run git add command
        """

        self.run("add", path)

    def commit(self, commit_msg):
        """
        Run git commit
        """

        return self.run("commit", "-m", commit_msg)

    def rev_parse(self, *args):
        """
        Run git rev-parse command
        """
        return self.run("rev-parse", args)

    def get_toplevel(self):
        """
        Return git top level path using git rev-parse
        """

        return self.rev_parse("--show-toplevel")

Par exemple, vous pouvez vouloir valider automatiquement, ou vous pouvez obtenir le chemin du référentiel en utilisant rev-parse. Si vous l'appliquez davantage, vous pouvez analyser le journal ou obtenir le contenu du fichier au moment d'un certain commit.

Recommended Posts

Encapsulation des opérations git en Python
Opérations sur les fichiers en Python
Manipulation de fichiers avec Python
Quatre règles de python
Opération de collecte de type Scala en Python
Analyser le journal de validation Git en Python
ORC, opérations de fichier Parquet en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Caractères Python déformés dans l'environnement Windows + Git Bash
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
[Python] Comprendre le fonctionnement des tranches de liste en quelques secondes
Aplatir en python
Analysons le journal de validation git en Python!
Résumé des opérations Excel utilisant OpenPyXL en Python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python