dulwich.server module¶
Git smart network protocol server implementation.
For more detailed implementation on the network protocol, see the Documentation/technical directory in the cgit distribution, and in particular:
Documentation/technical/protocol-capabilities.txt
Documentation/technical/pack-protocol.txt
Currently supported capabilities:
include-tag
thin-pack
multi_ack_detailed
multi_ack
side-band-64k
ofs-delta
no-progress
report-status
delete-refs
shallow
symref
- class dulwich.server.Backend¶
Bases:
object
A backend for the Git smart server implementation.
- open_repository(path)¶
Open the repository at a path.
- Parameters
path – Path to the repository
- Raises
NotGitRepository – no git repository was found at path
Returns: Instance of BackendRepo
- class dulwich.server.BackendRepo¶
Bases:
object
Repository abstraction used by the Git server.
The methods required here are a subset of those provided by dulwich.repo.Repo.
- fetch_objects(determine_wants, graph_walker, progress, get_tagged=None)¶
Yield the objects required for a list of commits.
- Parameters
progress – is a callback to send progress messages to the client
get_tagged – Function that returns a dict of pointed-to sha -> tag sha for including tags.
- get_peeled(name: bytes) Optional[bytes] ¶
Return the cached peeled value of a ref, if available.
- Parameters
name – Name of the ref to peel
- Returns: The peeled value of the ref. If the ref is known not point to
a tag, this will be the SHA the ref refers to. If no cached information about a tag is available, this method may return None, but it should attempt to peel the tag if possible.
- object_store = None¶
- refs = None¶
- class dulwich.server.DictBackend(repos)¶
Bases:
Backend
Trivial backend that looks up Git repositories in a dictionary.
- open_repository(path: str) BaseRepo ¶
Open the repository at a path.
- Parameters
path – Path to the repository
- Raises
NotGitRepository – no git repository was found at path
Returns: Instance of BackendRepo
- class dulwich.server.FileSystemBackend(root='/')¶
Bases:
Backend
Simple backend looking up Git repositories in the local file system.
- open_repository(path)¶
Open the repository at a path.
- Parameters
path – Path to the repository
- Raises
NotGitRepository – no git repository was found at path
Returns: Instance of BackendRepo
- class dulwich.server.Handler(backend, proto, stateless_rpc=False)¶
Bases:
object
Smart protocol command handler base class.
- handle()¶
- class dulwich.server.MultiAckDetailedGraphWalkerImpl(walker)¶
Bases:
object
Graph walker implementation speaking the multi-ack-detailed protocol.
- ack(have_ref)¶
- handle_done(done_required, done_received)¶
- next()¶
- class dulwich.server.MultiAckGraphWalkerImpl(walker)¶
Bases:
object
Graph walker implementation that speaks the multi-ack protocol.
- ack(have_ref)¶
- handle_done(done_required, done_received)¶
- next()¶
- class dulwich.server.PackHandler(backend, proto, stateless_rpc=False)¶
Bases:
Handler
Protocol handler for packs.
- class dulwich.server.ReceivePackHandler(backend, args, proto, stateless_rpc=False, advertise_refs=False)¶
Bases:
PackHandler
Protocol handler for downloading a pack from the client.
- class dulwich.server.SingleAckGraphWalkerImpl(walker)¶
Bases:
object
Graph walker implementation that speaks the single-ack protocol.
- ack(have_ref)¶
- handle_done(done_required, done_received)¶
- next()¶
- class dulwich.server.TCPGitRequestHandler(handlers, *args, **kwargs)¶
Bases:
StreamRequestHandler
- handle()¶
- class dulwich.server.TCPGitServer(backend, listen_addr, port=9418, handlers=None)¶
Bases:
TCPServer
Constructor. May be extended, do not override.
- allow_reuse_address = True¶
- handle_error(request, client_address)¶
Handle an error gracefully. May be overridden.
The default is to print a traceback and continue.
- serve(poll_interval=0.5)¶
Handle one request at a time until shutdown.
Polls for shutdown every poll_interval seconds. Ignores self.timeout. If you need to do periodic tasks, do them in another thread.
- verify_request(request, client_address)¶
Verify the request. May be overridden.
Return True if we should proceed with this request.
- class dulwich.server.UploadArchiveHandler(backend, args, proto, stateless_rpc=False)¶
Bases:
Handler
- handle()¶
- class dulwich.server.UploadPackHandler(backend, args, proto, stateless_rpc=False, advertise_refs=False)¶
Bases:
PackHandler
Protocol handler for uploading a pack to the client.
- classmethod capabilities()¶
- get_tagged(refs=None, repo=None)¶
Get a dict of peeled values of tags to their original tag shas.
- Parameters
refs – dict of refname -> sha of possible tags; defaults to all of the backend’s refs.
repo – optional Repo instance for getting peeled refs; defaults to the backend’s repo, if available
- Returns: dict of peeled_sha -> tag_sha, where tag_sha is the sha of a
tag whose peeled value is peeled_sha.
- handle()¶
- progress(message)¶
- classmethod required_capabilities()¶
Return a list of capabilities that we require the client to have.
- dulwich.server.generate_info_refs(repo)¶
Generate an info refs file.
- dulwich.server.generate_objects_info_packs(repo)¶
Generate an index for for packs.
- dulwich.server.main(argv=['/usr/bin/sphinx-build', '-b', 'html', '-d', 'build/doctrees', '.', 'build/html'])¶
Entry point for starting a TCP git server.
- dulwich.server.serve_command(handler_cls, argv=['/usr/bin/sphinx-build', '-b', 'html', '-d', 'build/doctrees', '.', 'build/html'], backend=None, inf=<_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>, outf=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)¶
Serve a single command.
This is mostly useful for the implementation of commands used by e.g. git+ssh.
- Parameters
handler_cls – Handler class to use for the request
argv – execv-style command-line arguments. Defaults to sys.argv.
backend – Backend to use
inf – File-like object to read from, defaults to standard input.
outf – File-like object to write to, defaults to standard output.
Returns: Exit code for use with sys.exit. 0 on success, 1 on failure.
- dulwich.server.update_server_info(repo)¶
Generate server info for dumb file access.
This generates info/refs and objects/info/packs, similar to “git update-server-info”.