dulwich.client module

Client side support for the Git protocol.

The Dulwich client supports the following capabilities:

  • thin-pack

  • multi_ack_detailed

  • multi_ack

  • side-band-64k

  • ofs-delta

  • quiet

  • report-status

  • delete-refs

  • shallow

Known capabilities that are not supported:

  • no-progress

  • include-tag

class dulwich.client.AbstractHttpGitClient(base_url, dumb=False, **kwargs)

Bases: dulwich.client.GitClient

Abstract base class for HTTP Git Clients.

This is agonistic of the actual HTTP implementation.

Subclasses should provide an implementation of the _http_request method.

Create a new GitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

  • include_tags – send annotated tags when sending the objects they point to

fetch_pack(path, determine_wants, graph_walker, pack_data, progress=None, depth=None)

Retrieve a pack from a git smart server.

Parameters
  • path – Path to fetch from

  • determine_wants – Callback that returns list of commits to fetch

  • graph_walker – Object with next() and ack().

  • pack_data – Callback called for each bit of data in the pack

  • progress – Callback for progress reports (strings)

  • depth – Depth for request

Returns

FetchPackResult object

classmethod from_parsedurl(parsedurl, **kwargs)

Create an instance of this client from a urlparse.parsed object.

Parameters

parsedurl – Result of urlparse()

Returns

A GitClient object

get_refs(path)

Retrieve the current refs from a git smart server.

get_url(path)

Retrieves full url to given path.

Parameters

path – Repository path (as string)

Returns

Url to path (as string)

send_pack(path, update_refs, generate_pack_data, progress=None)

Upload a pack to a remote repository.

Parameters
  • path – Repository path (as bytestring)

  • update_refs – Function to determine changes to remote refs. Receives dict with existing remote refs, returns dict with changed refs (name -> sha, where sha=ZERO_SHA for deletions)

  • generate_pack_data – Function that can return a tuple with number of elements and pack data to upload.

  • progress – Optional progress function

Returns

SendPackResult

Raises

SendPackError – if server rejects the pack data

class dulwich.client.FetchPackResult(refs, symrefs, agent, new_shallow=None, new_unshallow=None)

Bases: object

Result of a fetch-pack operation.

refs

Dictionary with all remote refs

symrefs

Dictionary with remote symrefs

agent

User agent string

class dulwich.client.GitClient(thin_packs=True, report_activity=None, quiet=False, include_tags=False)

Bases: object

Git smart server client.

Create a new GitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

  • include_tags – send annotated tags when sending the objects they point to

fetch(path, target, determine_wants=None, progress=None, depth=None)

Fetch into a target repository.

Parameters
  • path – Path to fetch from (as bytestring)

  • target – Target repository to fetch into

  • determine_wants – Optional function to determine what refs to fetch. Receives dictionary of name->sha, should return list of shas to fetch. Defaults to all shas.

  • progress – Optional progress function

  • depth – Depth to fetch at

Returns

Dictionary with all remote refs (not just those fetched)

fetch_pack(path, determine_wants, graph_walker, pack_data, progress=None, depth=None)

Retrieve a pack from a git smart server.

Parameters
  • path – Remote path to fetch from

  • determine_wants – Function determine what refs to fetch. Receives dictionary of name->sha, should return list of shas to fetch.

  • graph_walker – Object with next() and ack().

  • pack_data – Callback called for each bit of data in the pack

  • progress – Callback for progress reports (strings)

  • depth – Shallow fetch depth

Returns

FetchPackResult object

classmethod from_parsedurl(parsedurl, **kwargs)

Create an instance of this client from a urlparse.parsed object.

Parameters

parsedurl – Result of urlparse()

Returns

A GitClient object

get_refs(path)

Retrieve the current refs from a git smart server.

Parameters

path – Path to the repo to fetch from. (as bytestring)

Returns:

get_url(path)

Retrieves full url to given path.

Parameters

path – Repository path (as string)

Returns

Url to path (as string)

send_pack(path, update_refs, generate_pack_data, progress=None)

Upload a pack to a remote repository.

Parameters
  • path – Repository path (as bytestring)

  • update_refs – Function to determine changes to remote refs. Receive dict with existing remote refs, returns dict with changed refs (name -> sha, where sha=ZERO_SHA for deletions)

  • generate_pack_data – Function that can return a tuple with number of objects and list of pack data to include

  • progress – Optional progress function

Returns

SendPackResult object

Raises

SendPackError – if server rejects the pack data

exception dulwich.client.HTTPProxyUnauthorized(proxy_authenticate, url)

Bases: Exception

Raised when proxy authentication fails.

exception dulwich.client.HTTPUnauthorized(www_authenticate, url)

Bases: Exception

Raised when authentication fails.

dulwich.client.HttpGitClient

alias of dulwich.client.Urllib3HttpGitClient

exception dulwich.client.InvalidWants(wants)

Bases: Exception

Invalid wants.

class dulwich.client.LocalGitClient(thin_packs=True, report_activity=None, config=None)

Bases: dulwich.client.GitClient

Git Client that just uses a local Repo.

Create a new LocalGitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

fetch(path, target, determine_wants=None, progress=None, depth=None)

Fetch into a target repository.

Parameters
  • path – Path to fetch from (as bytestring)

  • target – Target repository to fetch into

  • determine_wants – Optional function determine what refs to fetch. Receives dictionary of name->sha, should return list of shas to fetch. Defaults to all shas.

  • progress – Optional progress function

  • depth – Shallow fetch depth

Returns

FetchPackResult object

fetch_pack(path, determine_wants, graph_walker, pack_data, progress=None, depth=None)

Retrieve a pack from a git smart server.

Parameters
  • path – Remote path to fetch from

  • determine_wants – Function determine what refs to fetch. Receives dictionary of name->sha, should return list of shas to fetch.

  • graph_walker – Object with next() and ack().

  • pack_data – Callback called for each bit of data in the pack

  • progress – Callback for progress reports (strings)

  • depth – Shallow fetch depth

Returns

FetchPackResult object

classmethod from_parsedurl(parsedurl, **kwargs)

Create an instance of this client from a urlparse.parsed object.

Parameters

parsedurl – Result of urlparse()

Returns

A GitClient object

get_refs(path)

Retrieve the current refs from a git smart server.

get_url(path)

Retrieves full url to given path.

Parameters

path – Repository path (as string)

Returns

Url to path (as string)

send_pack(path, update_refs, generate_pack_data, progress=None)

Upload a pack to a remote repository.

Parameters
  • path – Repository path (as bytestring)

  • update_refs – Function to determine changes to remote refs. Receive dict with existing remote refs, returns dict with changed refs (name -> sha, where sha=ZERO_SHA for deletions) with number of items and pack data to upload.

  • progress – Optional progress function

Returns

SendPackResult

Raises

SendPackError – if server rejects the pack data

class dulwich.client.PLinkSSHVendor

Bases: dulwich.client.SSHVendor

SSH vendor that shells out to the local ‘plink’ command.

run_command(host, command, username=None, port=None, password=None, key_filename=None, ssh_command=None)

Connect to an SSH server.

Run a command remotely and return a file-like object for interaction with the remote command.

Parameters
  • host – Host name

  • command – Command to run (as argv array)

  • username – Optional ame of user to log in as

  • port – Optional SSH port to use

  • password – Optional ssh password for login or private key

  • key_filename – Optional path to private keyfile

  • ssh_command – Optional SSH command

Returns:

dulwich.client.ParamikoSSHVendor(**kwargs)
class dulwich.client.ReportStatusParser

Bases: object

Handle status as reported by servers with ‘report-status’ capability.

check()

Check if there were any errors and, if so, raise exceptions.

Raises

SendPackError – Raised when the server could not unpack

Returns

iterator over refs

handle_packet(pkt)

Handle a packet.

Raises
  • GitProtocolError – Raised when packets are received after a flush

  • packet.

class dulwich.client.SSHGitClient(host, port=None, username=None, vendor=None, config=None, password=None, key_filename=None, ssh_command=None, **kwargs)

Bases: dulwich.client.TraditionalGitClient

Create a new GitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

  • include_tags – send annotated tags when sending the objects they point to

classmethod from_parsedurl(parsedurl, **kwargs)

Create an instance of this client from a urlparse.parsed object.

Parameters

parsedurl – Result of urlparse()

Returns

A GitClient object

get_url(path)

Retrieves full url to given path.

Parameters

path – Repository path (as string)

Returns

Url to path (as string)

class dulwich.client.SSHVendor

Bases: object

A client side SSH implementation.

connect_ssh(host, command, username=None, port=None, password=None, key_filename=None)
run_command(host, command, username=None, port=None, password=None, key_filename=None, ssh_command=None)

Connect to an SSH server.

Run a command remotely and return a file-like object for interaction with the remote command.

Parameters
  • host – Host name

  • command – Command to run (as argv array)

  • username – Optional ame of user to log in as

  • port – Optional SSH port to use

  • password – Optional ssh password for login or private key

  • key_filename – Optional path to private keyfile

  • ssh_command – Optional SSH command

Returns:

class dulwich.client.SendPackResult(refs, agent=None, ref_status=None)

Bases: object

Result of a upload-pack operation.

refs

Dictionary with all remote refs

agent

User agent string

ref_status

Optional dictionary mapping ref name to error message (if it failed to update), or None if it was updated successfully

exception dulwich.client.StrangeHostname(hostname)

Bases: Exception

Refusing to connect to strange SSH hostname.

class dulwich.client.SubprocessGitClient(path_encoding='utf-8', **kwargs)

Bases: dulwich.client.TraditionalGitClient

Git client that talks to a server using a subprocess.

Create a new GitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

  • include_tags – send annotated tags when sending the objects they point to

classmethod from_parsedurl(parsedurl, **kwargs)

Create an instance of this client from a urlparse.parsed object.

Parameters

parsedurl – Result of urlparse()

Returns

A GitClient object

git_command = None
class dulwich.client.SubprocessSSHVendor

Bases: dulwich.client.SSHVendor

SSH vendor that shells out to the local ‘ssh’ command.

run_command(host, command, username=None, port=None, password=None, key_filename=None, ssh_command=None)

Connect to an SSH server.

Run a command remotely and return a file-like object for interaction with the remote command.

Parameters
  • host – Host name

  • command – Command to run (as argv array)

  • username – Optional ame of user to log in as

  • port – Optional SSH port to use

  • password – Optional ssh password for login or private key

  • key_filename – Optional path to private keyfile

  • ssh_command – Optional SSH command

Returns:

class dulwich.client.SubprocessWrapper(proc)

Bases: object

A socket-like object that talks to a subprocess via pipes.

can_read()
close()
property stderr
class dulwich.client.TCPGitClient(host, port=None, **kwargs)

Bases: dulwich.client.TraditionalGitClient

A Git Client that works over TCP directly (i.e. git://).

Create a new GitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

  • include_tags – send annotated tags when sending the objects they point to

classmethod from_parsedurl(parsedurl, **kwargs)

Create an instance of this client from a urlparse.parsed object.

Parameters

parsedurl – Result of urlparse()

Returns

A GitClient object

get_url(path)

Retrieves full url to given path.

Parameters

path – Repository path (as string)

Returns

Url to path (as string)

class dulwich.client.TraditionalGitClient(path_encoding='utf-8', **kwargs)

Bases: dulwich.client.GitClient

Traditional Git client.

Create a new GitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

  • include_tags – send annotated tags when sending the objects they point to

DEFAULT_ENCODING = 'utf-8'
archive(path, committish, write_data, progress=None, write_error=None, format=None, subdirs=None, prefix=None)
fetch_pack(path, determine_wants, graph_walker, pack_data, progress=None, depth=None)

Retrieve a pack from a git smart server.

Parameters
  • path – Remote path to fetch from

  • determine_wants – Function determine what refs to fetch. Receives dictionary of name->sha, should return list of shas to fetch.

  • graph_walker – Object with next() and ack().

  • pack_data – Callback called for each bit of data in the pack

  • progress – Callback for progress reports (strings)

  • depth – Shallow fetch depth

Returns

FetchPackResult object

get_refs(path)

Retrieve the current refs from a git smart server.

send_pack(path, update_refs, generate_pack_data, progress=None)

Upload a pack to a remote repository.

Parameters
  • path – Repository path (as bytestring)

  • update_refs – Function to determine changes to remote refs. Receive dict with existing remote refs, returns dict with changed refs (name -> sha, where sha=ZERO_SHA for deletions)

  • generate_pack_data – Function that can return a tuple with number of objects and pack data to upload.

  • progress – Optional callback called with progress updates

Returns

SendPackResult

Raises

SendPackError – if server rejects the pack data

class dulwich.client.Urllib3HttpGitClient(base_url, dumb=None, pool_manager=None, config=None, username=None, password=None, **kwargs)

Bases: dulwich.client.AbstractHttpGitClient

Create a new GitClient instance.

Parameters
  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

  • include_tags – send annotated tags when sending the objects they point to

dulwich.client.check_wants(wants, refs)

Check that a set of wants is valid.

Parameters
  • wants – Set of object SHAs to fetch

  • refs – Refs dictionary to check against

Returns:

dulwich.client.default_local_git_client_cls

alias of dulwich.client.LocalGitClient

dulwich.client.default_urllib3_manager(config, pool_manager_cls=None, proxy_manager_cls=None, **override_kwargs)

Return urllib3 connection pool manager.

Honour detected proxy configurations.

Parameters
  • config – dulwich.config.ConfigDict` instance with Git configuration.

  • kwargs – Additional arguments for urllib3.ProxyManager

Returns

pool_manager_cls (defaults to urllib3.ProxyManager) instance for proxy configurations, proxy_manager_cls (defaults to urllib3.PoolManager) instance otherwise.

dulwich.client.default_user_agent_string()
dulwich.client.find_git_command()

Find command to run for system Git (usually C Git).

dulwich.client.get_credentials_from_store(scheme, hostname, username=None, fnames=['/home/jelmer/.git-credentials', '/home/jelmer/.config/git/credentials'])
dulwich.client.get_ssh_vendor

alias of dulwich.client.SubprocessSSHVendor

dulwich.client.get_transport_and_path(location, **kwargs)

Obtain a git client from a URL.

Parameters
  • location – URL or path (a string)

  • config – Optional config object

  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

Returns

Tuple with client instance and relative path.

dulwich.client.get_transport_and_path_from_url(url, config=None, **kwargs)

Obtain a git client from a URL.

Parameters
  • url – URL to open (a unicode string)

  • config – Optional config object

  • thin_packs – Whether or not thin packs should be retrieved

  • report_activity – Optional callback for reporting transport activity.

Returns

Tuple with client instance and relative path.

dulwich.client.parse_rsync_url(location)

Parse a rsync-style URL.

dulwich.client.read_pkt_refs(proto)