Wrapping von Git-Operationen in Python

Persönliche Notizen. Um zu sehen, wie Git in Python funktioniert, verwenden Sie das Modul ** Subprozess ** 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())

Erstellen wir eine Klasse namens ** GitUtility **, die dies anwendet.

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")

Sie können beispielsweise automatisch festschreiben oder den Pfad des Repositorys mithilfe von "rev-parse" abrufen. Wenn Sie es mehr anwenden, können Sie das Protokoll analysieren oder den Inhalt der Datei zum Zeitpunkt eines bestimmten Commits abrufen.

Recommended Posts

Wrapping von Git-Operationen in Python
Dateioperationen in Python
Dateimanipulation mit Python
Vier Regeln für Python
Scala-ähnliche Erfassungsoperation in Python
Analysieren Sie das Git-Commit-Protokoll in Python
ORC, Parkettdateivorgänge in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Verstümmelte Python-Zeichen in der Windows + Git Bash-Umgebung
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
[Python] Verstehen Sie die Slice-Operation der Liste in Sekunden
In Python flach drücken
Lassen Sie uns das Git-Commit-Protokoll in Python analysieren!
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python