deb-python-pygit2/docs/oid.rst
2013-05-09 14:21:04 +02:00

85 lines
2.3 KiB
ReStructuredText

**********************************************************************
Object IDs
**********************************************************************
In the first place Git is a key-value storage system. The keys are called
OIDs, for Object ID, and the values stored are called Objects.
.. contents:: Contents
:local:
The three forms of an object id
===============================
The oid is the `SHA-1 <http://en.wikipedia.org/wiki/SHA-1>`_ hash of an
object. It is 20 bytes long.
These are the three forms of an oid in pygit2:
Raw oid
A raw oid is represented as a Python byte string of 20 bytes length.
This form can only be used to create an Oid object.
Hex oid
A hex oid is represented as a Python string of 40 hexadecimal chars. This
form can be used to create Oid objects, just like raw oids. Also, the pygit2
API directly accepts hex oids everywhere.
.. note::
In Python 3 hexadecimal oids are represented using the ``str`` type.
In Python 2 both ``str`` and ``unicode`` are accepted.
Oid object
An ``Oid`` object can be built from the raw or hexadecimal representations
(see below). The pygit2 API always returns, and accepts, ``Oid`` objects.
This is the preferred way to represent an Oid, with the hexadecimal form
being used for interaction with the user.
The Oid type
============
.. c:type:: pygit2.Oid(raw=None, hex=None)
The constructor expects either a raw or a hex oid, but not both.
An Oid object is created from the hexadecimal form this way::
>>> from pygit2 import Oid
>>> hex = "cff3ceaefc955f0dbe1957017db181bc49913781"
>>> oid1 = Oid(hex=hex)
An Oid object is created from the raw form this way::
>>> from binascii import unhexlify
>>> from pygit2 import Oid
>>> raw = unhexlify("cff3ceaefc955f0dbe1957017db181bc49913781")
>>> oid2 = Oid(raw=raw)
An the other way around, from an Oid object we can get the hexadecimal and raw
forms.
.. autoattribute:: pygit2.Oid.hex
.. autoattribute:: pygit2.Oid.raw
The Oid type supports:
- rich comparisons, not just for equality, also: lesser-than, lesser-or-equal,
etc.
- hashing, so Oid objects can be used as keys in a dictionary.
Constants
=========
.. py:data:: GIT_OID_RAWSZ
.. py:data:: GIT_OID_HEXSZ
.. py:data:: GIT_OID_HEX_ZERO
.. py:data:: GIT_OID_MINPREFIXLEN