Porcelain

The porcelain is the higher level interface, built on top of the lower level implementation covered in previous chapters of this tutorial. The dulwich.porcelain module in Dulwich is aimed to closely resemble the Git command-line API that you are familiar with.

Basic concepts

The porcelain operations are implemented as top-level functions in the dulwich.porcelain module. Most arguments can either be strings or more complex Dulwich objects; e.g. a repository argument will either take a string with a path to the repository or an instance of a Repo object.

Initializing a new repository

>>> from dulwich import porcelain
>>> repo = porcelain.init("myrepo")

Clone a repository

>>> porcelain.clone("git://github.com/jelmer/dulwich", "dulwich-clone")

Basic authentication works using the username and password parameters:

>>> porcelain.clone(
    "https://example.com/a-private-repo.git",
    "a-private-repo-clone",
    username="user", password="password")

Commit changes

>>> r = porcelain.init("testrepo")
>>> open("testrepo/testfile", "w").write("data")
>>> porcelain.add(r, "testfile")
>>> porcelain.commit(r, b"A sample commit")

Push changes

>>> tr = porcelain.init("targetrepo")
>>> r = porcelain.push("testrepo", "targetrepo", "master")