dulwich.refs module

Ref handling.

class dulwich.refs.DictRefsContainer(refs, logger=None)

Bases: dulwich.refs.RefsContainer

RefsContainer backed by a simple dict.

This container does not support symbolic or packed references and is not threadsafe.

add_if_new(name, ref, committer=None, timestamp=None, timezone=None, message=None)

Add a new reference only if it does not already exist.

Parameters:
  • name – Ref name
  • ref – Ref value
  • message – Message for reflog
allkeys()

All refs present in this container.

get_packed_refs()

Get contents of the packed-refs file.

Returns:Dictionary mapping ref names to SHA1s
Note:Will return an empty dictionary when no packed-refs file is present.
get_peeled(name)

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 the ref may point to a tag, but no cached information is available, None is returned.
read_loose_ref(name)

Read a loose reference and return its contents.

Parameters:name – the refname to read
Returns:The contents of the ref file, or None if it does not exist.
remove_if_equals(name, old_ref, committer=None, timestamp=None, timezone=None, message=None)

Remove a refname only if it currently equals old_ref.

This method does not follow symbolic references, even if applicable for the subclass. It can be used to perform an atomic compare-and-delete operation.

Parameters:
  • name – The refname to delete.
  • old_ref – The old sha the refname must refer to, or None to delete unconditionally.
  • message – Message for reflog
Returns:

True if the delete was successful, False otherwise.

set_if_equals(name, old_ref, new_ref, committer=None, timestamp=None, timezone=None, message=None)

Set a refname to new_ref only if it currently equals old_ref.

This method follows all symbolic references if applicable for the subclass, and can be used to perform an atomic compare-and-swap operation.

Parameters:
  • name – The refname to set.
  • old_ref – The old sha the refname must refer to, or None to set unconditionally.
  • new_ref – The new sha the refname will refer to.
  • message – Message for reflog
Returns:

True if the set was successful, False otherwise.

set_symbolic_ref(name, other, committer=None, timestamp=None, timezone=None, message=None)

Make a ref point at another ref.

Parameters:
  • name – Name of the ref to set
  • other – Name of the ref to point at
  • message – Optional message
class dulwich.refs.DiskRefsContainer(path, worktree_path=None, logger=None)

Bases: dulwich.refs.RefsContainer

Refs container that reads refs from disk.

add_if_new(name, ref, committer=None, timestamp=None, timezone=None, message=None)

Add a new reference only if it does not already exist.

This method follows symrefs, and only ensures that the last ref in the chain does not exist.

Parameters:
  • name – The refname to set.
  • ref – The new sha the refname will refer to.
  • message – Optional message for reflog
Returns:

True if the add was successful, False otherwise.

allkeys()

All refs present in this container.

get_packed_refs()

Get contents of the packed-refs file.

Returns:Dictionary mapping ref names to SHA1s
Note:Will return an empty dictionary when no packed-refs file is present.
get_peeled(name)

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 the ref may point to a tag, but no cached information is available, None is returned.
read_loose_ref(name)

Read a reference file and return its contents.

If the reference file a symbolic reference, only read the first line of the file. Otherwise, only read the first 40 bytes.

Parameters:name – the refname to read, relative to refpath
Returns:The contents of the ref file, or None if the file does not exist.
Raises:IOError – if any other error occurs
refpath(name)

Return the disk path of a ref.

remove_if_equals(name, old_ref, committer=None, timestamp=None, timezone=None, message=None)

Remove a refname only if it currently equals old_ref.

This method does not follow symbolic references. It can be used to perform an atomic compare-and-delete operation.

Parameters:
  • name – The refname to delete.
  • old_ref – The old sha the refname must refer to, or None to delete unconditionally.
  • message – Optional message
Returns:

True if the delete was successful, False otherwise.

set_if_equals(name, old_ref, new_ref, committer=None, timestamp=None, timezone=None, message=None)

Set a refname to new_ref only if it currently equals old_ref.

This method follows all symbolic references, and can be used to perform an atomic compare-and-swap operation.

Parameters:
  • name – The refname to set.
  • old_ref – The old sha the refname must refer to, or None to set unconditionally.
  • new_ref – The new sha the refname will refer to.
  • message – Set message for reflog
Returns:

True if the set was successful, False otherwise.

set_symbolic_ref(name, other, committer=None, timestamp=None, timezone=None, message=None)

Make a ref point at another ref.

Parameters:
  • name – Name of the ref to set
  • other – Name of the ref to point at
  • message – Optional message to describe the change
subkeys(base)

Refs present in this container under a base.

Parameters:base – The base to return refs under.
Returns:A set of valid refs in this container under the base; the base prefix is stripped from the ref names returned.
class dulwich.refs.InfoRefsContainer(f)

Bases: dulwich.refs.RefsContainer

Refs container that reads refs from a info/refs file.

allkeys()

All refs present in this container.

get_packed_refs()

Get contents of the packed-refs file.

Returns:Dictionary mapping ref names to SHA1s
Note:Will return an empty dictionary when no packed-refs file is present.
get_peeled(name)

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 the ref may point to a tag, but no cached information is available, None is returned.
read_loose_ref(name)

Read a loose reference and return its contents.

Parameters:name – the refname to read
Returns:The contents of the ref file, or None if it does not exist.
class dulwich.refs.RefsContainer(logger=None)

Bases: object

A container for refs.

add_if_new(name, ref)

Add a new reference only if it does not already exist.

Parameters:
  • name – Ref name
  • ref – Ref value
  • message – Message for reflog
allkeys()

All refs present in this container.

as_dict(base=None)

Return the contents of this container as a dictionary.

follow(name)

Follow a reference name.

Returns:a tuple of (refnames, sha), wheres refnames are the names of references in the chain
get_packed_refs()

Get contents of the packed-refs file.

Returns:Dictionary mapping ref names to SHA1s
Note:Will return an empty dictionary when no packed-refs file is present.
get_peeled(name)

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 the ref may point to a tag, but no cached information is available, None is returned.
get_symrefs()

Get a dict with all symrefs in this container.

Returns:Dictionary mapping source ref to target ref
import_refs(base, other, committer=None, timestamp=None, timezone=None, message=None, prune=False)
keys(base=None)

Refs present in this container.

Parameters:base – An optional base to return refs under.
Returns:An unsorted set of valid refs in this container, including packed refs.
read_loose_ref(name)

Read a loose reference and return its contents.

Parameters:name – the refname to read
Returns:The contents of the ref file, or None if it does not exist.
read_ref(refname)

Read a reference without following any references.

Parameters:refname – The name of the reference
Returns:The contents of the ref file, or None if it does not exist.
remove_if_equals(name, old_ref, committer=None, timestamp=None, timezone=None, message=None)

Remove a refname only if it currently equals old_ref.

This method does not follow symbolic references, even if applicable for the subclass. It can be used to perform an atomic compare-and-delete operation.

Parameters:
  • name – The refname to delete.
  • old_ref – The old sha the refname must refer to, or None to delete unconditionally.
  • message – Message for reflog
Returns:

True if the delete was successful, False otherwise.

set_if_equals(name, old_ref, new_ref, committer=None, timestamp=None, timezone=None, message=None)

Set a refname to new_ref only if it currently equals old_ref.

This method follows all symbolic references if applicable for the subclass, and can be used to perform an atomic compare-and-swap operation.

Parameters:
  • name – The refname to set.
  • old_ref – The old sha the refname must refer to, or None to set unconditionally.
  • new_ref – The new sha the refname will refer to.
  • message – Message for reflog
Returns:

True if the set was successful, False otherwise.

set_symbolic_ref(name, other, committer=None, timestamp=None, timezone=None, message=None)

Make a ref point at another ref.

Parameters:
  • name – Name of the ref to set
  • other – Name of the ref to point at
  • message – Optional message
subkeys(base)

Refs present in this container under a base.

Parameters:base – The base to return refs under.
Returns:A set of valid refs in this container under the base; the base prefix is stripped from the ref names returned.
dulwich.refs.check_ref_format(refname)

Check if a refname is correctly formatted.

Implements all the same rules as git-check-ref-format[1].

[1] http://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html

Parameters:refname – The refname to check
Returns:True if refname is valid, False otherwise
dulwich.refs.is_local_branch(x)
dulwich.refs.parse_symref_value(contents)

Parse a symref value.

Parameters:contents – Contents to parse
Returns:Destination
dulwich.refs.read_info_refs(f)
dulwich.refs.read_packed_refs(f)

Read a packed refs file.

Parameters:f – file-like object to read from
Returns:Iterator over tuples with SHA1s and ref names.
dulwich.refs.read_packed_refs_with_peeled(f)

Read a packed refs file including peeled refs.

Assumes the “# pack-refs with: peeled” line was already read. Yields tuples with ref names, SHA1s, and peeled SHA1s (or None).

Parameters:f – file-like object to read from, seek’ed to the second line
dulwich.refs.strip_peeled_refs(refs)

Remove all peeled refs

dulwich.refs.write_info_refs(refs, store)

Generate info refs.

dulwich.refs.write_packed_refs(f, packed_refs, peeled_refs=None)

Write a packed refs file.

Parameters:
  • f – empty file-like object to write to
  • packed_refs – dict of refname to sha of packed refs to write
  • peeled_refs – dict of refname to peeled value of sha