<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GLib" version="2.0"/>
  <include name="GObject" version="2.0"/>
  <include name="Gio" version="2.0"/>
  <package name="libgit2-glib-1.0"/>
  <c:include name="libgit2-glib/ggit.h"/>
  <namespace name="Ggit"
             version="1.0"
             shared-library="libgit2-glib-1.0.so.3.0"
             c:identifier-prefixes="Ggit"
             c:symbol-prefixes="ggit">
    <record name="AnnotatedCommit"
            c:type="GgitAnnotatedCommit"
            glib:type-name="GgitAnnotatedCommit"
            glib:get-type="ggit_annotated_commit_get_type"
            c:symbol-prefix="annotated_commit">
      <doc xml:space="preserve">Represents an annotated commit object.</doc>
      <method name="get_id" c:identifier="ggit_annotated_commit_get_id">
        <doc xml:space="preserve">Gets the commit ID that the given @annotated_commit refs to.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the commit ID that the given @annotated_commit refs to.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="annotated_commit"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitAnnotatedCommit.</doc>
            <type name="AnnotatedCommit" c:type="GgitAnnotatedCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_annotated_commit_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @annotated_commit by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a newly allocated #GgitAnnotatedCommit.</doc>
          <type name="AnnotatedCommit" c:type="GgitAnnotatedCommit*"/>
        </return-value>
        <parameters>
          <instance-parameter name="annotated_commit"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitAnnotatedCommit.</doc>
            <type name="AnnotatedCommit" c:type="GgitAnnotatedCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_annotated_commit_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @annotated_commit by one.
If the reference count drops to 0, @annotated_commit is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="annotated_commit"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitAnnotatedCommit.</doc>
            <type name="AnnotatedCommit" c:type="GgitAnnotatedCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <bitfield name="AttributeCheckFlags"
              glib:type-name="GgitAttributeCheckFlags"
              glib:get-type="ggit_attribute_check_flags_get_type"
              c:type="GgitAttributeCheckFlags">
      <doc xml:space="preserve">Attribute check flags indicate the order in which to check for gitattributes.
git core uses @GGIT_ATTRIBUTE_CHECK_FILE_THEN_INDEX for all operations,
except on checkout, where it uses @GGIT_ATTRIBUTE_CHECK_INDEX_THEN_FILE.</doc>
      <member name="file_then_index"
              value="0"
              c:identifier="GGIT_ATTRIBUTE_CHECK_FILE_THEN_INDEX"
              glib:nick="file-then-index">
        <doc xml:space="preserve">check working directory, then index.</doc>
      </member>
      <member name="index_then_file"
              value="1"
              c:identifier="GGIT_ATTRIBUTE_CHECK_INDEX_THEN_FILE"
              glib:nick="index-then-file">
        <doc xml:space="preserve">check index, then working directory.</doc>
      </member>
      <member name="index_only"
              value="2"
              c:identifier="GGIT_ATTRIBUTE_CHECK_INDEX_ONLY"
              glib:nick="index-only">
        <doc xml:space="preserve">check only index.</doc>
      </member>
      <member name="no_system"
              value="4"
              c:identifier="GGIT_ATTRIBUTE_CHECK_NO_SYSTEM"
              glib:nick="no-system">
        <doc xml:space="preserve">ignore system wide attributes.</doc>
      </member>
    </bitfield>
    <class name="Blame"
           c:symbol-prefix="blame"
           c:type="GgitBlame"
           parent="Native"
           glib:type-name="GgitBlame"
           glib:get-type="ggit_blame_get_type"
           glib:type-struct="BlameClass">
      <doc xml:space="preserve">Represents a blame.</doc>
      <function name="get_flags" c:identifier="ggit_blame_get_flags">
        <doc xml:space="preserve">Get the blame options flags.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitBlameFlags.</doc>
          <type name="BlameFlags" c:type="GgitBlameFlags"/>
        </return-value>
        <parameters>
          <parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </parameter>
        </parameters>
      </function>
      <function name="set_flags" c:identifier="ggit_blame_set_flags">
        <doc xml:space="preserve">Set the blame options flags.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameFlags.</doc>
            <type name="BlameFlags" c:type="GgitBlameFlags"/>
          </parameter>
        </parameters>
      </function>
      <method name="from_buffer"
              c:identifier="ggit_blame_from_buffer"
              throws="1">
        <doc xml:space="preserve">Get blame data for a file that has been modified in memory. @blame is a
pre-calculated blame for the in-odb history of the file. This means that once
a file blame is completed (which can be expensitve), updating the buffer
blame is very fast.

Lines that differ between the buffer and the committed version are marked as
having a zero id for their #ggit_blame_hunk_get_final_commit_id.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitBlame.</doc>
          <type name="Blame" c:type="GgitBlame*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlame.</doc>
            <type name="Blame" c:type="GgitBlame*"/>
          </instance-parameter>
          <parameter name="buffer" transfer-ownership="none">
            <doc xml:space="preserve">the contents of the file.</doc>
            <array length="1" zero-terminated="0" c:type="guint8*">
              <type name="guint8" c:type="guint8"/>
            </array>
          </parameter>
          <parameter name="buffer_length" transfer-ownership="none">
            <doc xml:space="preserve">the length of the buffer.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_hunk_by_index"
              c:identifier="ggit_blame_get_hunk_by_index">
        <return-value transfer-ownership="full">
          <type name="BlameHunk" c:type="GgitBlameHunk*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame" transfer-ownership="none">
            <type name="Blame" c:type="GgitBlame*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_hunk_by_line"
              c:identifier="ggit_blame_get_hunk_by_line">
        <return-value transfer-ownership="full">
          <type name="BlameHunk" c:type="GgitBlameHunk*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame" transfer-ownership="none">
            <type name="Blame" c:type="GgitBlame*"/>
          </instance-parameter>
          <parameter name="line" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_hunk_count" c:identifier="ggit_blame_get_hunk_count">
        <return-value transfer-ownership="none">
          <type name="guint32" c:type="guint32"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame" transfer-ownership="none">
            <type name="Blame" c:type="GgitBlame*"/>
          </instance-parameter>
        </parameters>
      </method>
    </class>
    <record name="BlameClass"
            c:type="GgitBlameClass"
            glib:is-gtype-struct-for="Blame">
      <field name="parent_class">
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <bitfield name="BlameFlags"
              glib:type-name="GgitBlameFlags"
              glib:get-type="ggit_blame_flags_get_type"
              c:type="GgitBlameFlags">
      <member name="normal"
              value="0"
              c:identifier="GGIT_BLAME_NORMAL"
              glib:nick="normal">
        <doc xml:space="preserve">Normal blame, the default.</doc>
      </member>
      <member name="track_copies_same_file"
              value="1"
              c:identifier="GGIT_BLAME_TRACK_COPIES_SAME_FILE"
              glib:nick="track-copies-same-file">
        <doc xml:space="preserve">Track lines that have moved within a file
                                    (like git blame -M)</doc>
      </member>
    </bitfield>
    <record name="BlameHunk"
            c:type="GgitBlameHunk"
            glib:type-name="GgitBlameHunk"
            glib:get-type="ggit_blame_hunk_get_type"
            c:symbol-prefix="blame_hunk">
      <doc xml:space="preserve">Represents a blame hunk.</doc>
      <method name="get_final_commit_id"
              c:identifier="ggit_blame_hunk_get_final_commit_id">
        <doc xml:space="preserve">Get the id of the commit where this hunk was last changed.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_final_signature"
              c:identifier="ggit_blame_hunk_get_final_signature">
        <doc xml:space="preserve">Get the signature of the final version of the hunk.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitSignature.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_final_start_line_number"
              c:identifier="ggit_blame_hunk_get_final_start_line_number">
        <doc xml:space="preserve">Get the line number where the hunk begins in the final version of the file.
Line numbers start at 1.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the final hunk line number.</doc>
          <type name="guint16" c:type="guint16"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_lines_in_hunk"
              c:identifier="ggit_blame_hunk_get_lines_in_hunk">
        <doc xml:space="preserve">Get the number of lines in the hunk.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of lines in the hunk.</doc>
          <type name="guint16" c:type="guint16"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_orig_commit_id"
              c:identifier="ggit_blame_hunk_get_orig_commit_id">
        <doc xml:space="preserve">Get the id of the commit where the hunk was found. This is usually the same
the final commit id, except when #GGIT_BLAME_TRACK_COPIES_ANY_COMMIT was used.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_orig_path"
              c:identifier="ggit_blame_hunk_get_orig_path">
        <doc xml:space="preserve">Get the path of the file where this hunk originated, as of the commit
specified by #ggit_blame_hunk_get_orig_commit_id.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the path.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_orig_signature"
              c:identifier="ggit_blame_hunk_get_orig_signature">
        <doc xml:space="preserve">Get the signature of the commit specified by #ggit_blame_hunk_get_orig_commit_id.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitSignature.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_orig_start_line_number"
              c:identifier="ggit_blame_hunk_get_orig_start_line_number">
        <doc xml:space="preserve">Get the line number where the hunk begins in the file specified by
#ggit_blame_hunk_get_orig_path at the commit specified by
#ggit_blame_hunk_get_orig_commit_id. Line numbers start at 1.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the orig hunk line number.</doc>
          <type name="guint16" c:type="guint16"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_boundary" c:identifier="ggit_blame_hunk_is_boundary">
        <doc xml:space="preserve">Get whether the hunk has been tracked to a boundary commit (the root,
or the commit specified in #ggit_blame_options_set_oldest_commit).</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">whether the hunk is at a boundary commit.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_blame_hunk_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @blame_hunk by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitBlameHunk.</doc>
          <type name="BlameHunk" c:type="GgitBlameHunk*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_blame_hunk_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @blame_hunk by one.
If the reference count drops to 0, @blame_hunk is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameHunk.</doc>
            <type name="BlameHunk" c:type="GgitBlameHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="BlameOptions"
            c:type="GgitBlameOptions"
            glib:type-name="GgitBlameOptions"
            glib:get-type="ggit_blame_options_get_type"
            c:symbol-prefix="blame_options">
      <doc xml:space="preserve">Represents blame options.</doc>
      <constructor name="new" c:identifier="ggit_blame_options_new">
        <doc xml:space="preserve">Create a new, empty #GgitBlameOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitBlameOptions.</doc>
          <type name="BlameOptions" c:type="GgitBlameOptions*"/>
        </return-value>
      </constructor>
      <method name="copy" c:identifier="ggit_blame_options_copy">
        <doc xml:space="preserve">Copies @blame_options into a newly allocated #GgitBlameOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitBlameOptions.</doc>
          <type name="BlameOptions" c:type="GgitBlameOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_blame_options_free">
        <doc xml:space="preserve">Frees @blame_options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_maximum_line"
              c:identifier="ggit_blame_options_get_maximum_line">
        <doc xml:space="preserve">Get the last line in the file to consider. The default is 1.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the last line to consider.</doc>
          <type name="guint32" c:type="guint32"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_minimum_line"
              c:identifier="ggit_blame_options_get_minimum_line">
        <doc xml:space="preserve">Get the first line in the file to consider. The default is 1.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the first line to consider.</doc>
          <type name="guint32" c:type="guint32"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_minimum_match_characters"
              c:identifier="ggit_blame_options_get_minimum_match_characters">
        <doc xml:space="preserve">Get the minimum number of characters that must be detected as moving/copying
within a file for it to associate those lines with a parent commit. This is
only used when any of the #GGIT_BLAME_TRACK_COPIES_SAME_FILE flag is
specified. The default value is 20.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the minimum number of characters.</doc>
          <type name="guint16" c:type="guint16"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_newest_commit"
              c:identifier="ggit_blame_options_get_newest_commit">
        <doc xml:space="preserve">Get the id of the newest commit to consider in the blame. The default
value of %NULL indicates to use HEAD.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId or %NULL.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_oldest_commit"
              c:identifier="ggit_blame_options_get_oldest_commit">
        <doc xml:space="preserve">Get the id of the oldest commit to consider in the blame. Teh default value
of %NULL indicates to used HEAD.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_maximum_line"
              c:identifier="ggit_blame_options_set_maximum_line">
        <doc xml:space="preserve">Set the last line in the file to consider. Lines start at 1.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
          <parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">the last line to consider.</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_minimum_line"
              c:identifier="ggit_blame_options_set_minimum_line">
        <doc xml:space="preserve">Set the first line in the file to consider. Lines start at 1.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
          <parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">the first line to consider.</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_minimum_match_characters"
              c:identifier="ggit_blame_options_set_minimum_match_characters">
        <doc xml:space="preserve">Set the minimum number of characters that must be detected as moving/copying
within a file for it to associate those lines with a parent commit. This is
only used when any of the #GGIT_BLAME_TRACK_COPIES_ flags are specified. The
default value is 20.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
          <parameter name="characters" transfer-ownership="none">
            <doc xml:space="preserve">the minimum number of characters.</doc>
            <type name="guint16" c:type="guint16"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_newest_commit"
              c:identifier="ggit_blame_options_set_newest_commit">
        <doc xml:space="preserve">Set the id of the newest commit to consider in the blame. Specify %NULL to
set the default value which indicates to use HEAD.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
          <parameter name="oid"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitOId or %NULL.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_oldest_commit"
              c:identifier="ggit_blame_options_set_oldest_commit">
        <doc xml:space="preserve">Set the id of the oldest commit to consider in the blame. Specify %NULL to
set the default value which indicates to consider the first commit without
a parent.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="blame_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlameOptions.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </instance-parameter>
          <parameter name="oid"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <class name="Blob"
           c:symbol-prefix="blob"
           c:type="GgitBlob"
           parent="Object"
           glib:type-name="GgitBlob"
           glib:get-type="ggit_blob_get_type"
           glib:type-struct="BlobClass">
      <doc xml:space="preserve">Represents a blob object.</doc>
      <method name="get_raw_content" c:identifier="ggit_blob_get_raw_content">
        <doc xml:space="preserve">Gets a read-only buffer with the raw contents of @blob.

A pointer to the raw contents of @blob is returned.
This pointer is owned internally by @object and must
not be free'd. The pointer may be invalidated at a later
time.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the blob content or
         %NULL if the blob does not have any content.</doc>
          <array length="0" zero-terminated="0" c:type="guchar*">
            <type name="guint8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="blob" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlob.</doc>
            <type name="Blob" c:type="GgitBlob*"/>
          </instance-parameter>
          <parameter name="length"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve">return value of the length of the data.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_binary" c:identifier="ggit_blob_is_binary">
        <doc xml:space="preserve">Check whether the blob is binary.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the blob is binary, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="blob" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlob.</doc>
            <type name="Blob" c:type="GgitBlob*"/>
          </instance-parameter>
        </parameters>
      </method>
    </class>
    <record name="BlobClass"
            c:type="GgitBlobClass"
            glib:is-gtype-struct-for="Blob">
      <field name="parent_class">
        <type name="ObjectClass" c:type="GgitObjectClass"/>
      </field>
    </record>
    <class name="BlobOutputStream"
           c:symbol-prefix="blob_output_stream"
           c:type="GgitBlobOutputStream"
           parent="Gio.OutputStream"
           glib:type-name="GgitBlobOutputStream"
           glib:get-type="ggit_blob_output_stream_get_type"
           glib:type-struct="BlobOutputStreamClass">
      <doc xml:space="preserve">Represents a blob stream object.</doc>
      <method name="get_id"
              c:identifier="ggit_blob_output_stream_get_id"
              throws="1">
        <doc xml:space="preserve">Get the id of the written blob. The blob id is only available after the
stream has been properly closed. If an error occurred while writing the blob,
the %NULL is returned and @error is set accordingly.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId or %NULL.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="stream" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBlobOutputStream.</doc>
            <type name="BlobOutputStream" c:type="GgitBlobOutputStream*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="repository"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Repository"/>
      </property>
      <field name="parent_instance">
        <type name="Gio.OutputStream" c:type="GOutputStream"/>
      </field>
    </class>
    <record name="BlobOutputStreamClass"
            c:type="GgitBlobOutputStreamClass"
            glib:is-gtype-struct-for="BlobOutputStream">
      <doc xml:space="preserve">The class structure for #GgitBlobOutputStreamClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="Gio.OutputStreamClass" c:type="GOutputStreamClass"/>
      </field>
    </record>
    <class name="Branch"
           c:symbol-prefix="branch"
           c:type="GgitBranch"
           parent="Ref"
           glib:type-name="GgitBranch"
           glib:get-type="ggit_branch_get_type"
           glib:type-struct="BranchClass">
      <doc xml:space="preserve">Represents a branch object.</doc>
      <method name="delete" c:identifier="ggit_branch_delete" throws="1">
        <doc xml:space="preserve">Deletes an existing branch reference.

If the branch is successfully deleted, this object is
not useful anymore and if should be freed with g_object_unref().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="branch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranch.</doc>
            <type name="Branch" c:type="GgitBranch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_branch_get_name" throws="1">
        <doc xml:space="preserve">Gets the name of the given local or remote branch.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the given local or remote branch.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="branch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranch.</doc>
            <type name="Branch" c:type="GgitBranch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_upstream"
              c:identifier="ggit_branch_get_upstream"
              throws="1">
        <doc xml:space="preserve">Gets the reference supporting the remote tracking branch,
given a local branch reference.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the reference supporting the remote tracking branch.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="branch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranch.</doc>
            <type name="Branch" c:type="GgitBranch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_head" c:identifier="ggit_branch_is_head" throws="1">
        <doc xml:space="preserve">Determines if the current local branch is pointed at by HEAD.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the current local branch is pointed at by HEAD.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="branch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranch.</doc>
            <type name="Branch" c:type="GgitBranch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="move" c:identifier="ggit_branch_move" throws="1">
        <doc xml:space="preserve">Moves/renames an existing branch reference.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the new branch.</doc>
          <type name="Branch" c:type="GgitBranch*"/>
        </return-value>
        <parameters>
          <instance-parameter name="branch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranch.</doc>
            <type name="Branch" c:type="GgitBranch*"/>
          </instance-parameter>
          <parameter name="new_branch_name" transfer-ownership="none">
            <doc xml:space="preserve">target name of the branch once the move is performed; this name is validated for consistency.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCreateFlags.</doc>
            <type name="CreateFlags" c:type="GgitCreateFlags"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Ref" c:type="GgitRef"/>
      </field>
    </class>
    <record name="BranchClass"
            c:type="GgitBranchClass"
            glib:is-gtype-struct-for="Branch">
      <field name="parent_class" readable="0" private="1">
        <type name="RefClass" c:type="GgitRefClass"/>
      </field>
    </record>
    <record name="BranchEnumerator"
            c:type="GgitBranchEnumerator"
            glib:type-name="GgitBranchEnumerator"
            glib:get-type="ggit_branch_enumerator_get_type"
            c:symbol-prefix="branch_enumerator">
      <doc xml:space="preserve">Represents a branch enumerator.</doc>
      <method name="get" c:identifier="ggit_branch_enumerator_get">
        <doc xml:space="preserve">Returns the currently being enumerated branch, or %NULL. Note that the
returned GgitRef will be of type GgitBranch if the ref represents a local
branch.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the branch ref.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="enumerator" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranchEnumerator.</doc>
            <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="iterator" c:identifier="ggit_branch_enumerator_iterator">
        <doc xml:space="preserve">Get an iterator for the enumerator.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitBranchEnumerator.</doc>
          <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
        </return-value>
        <parameters>
          <instance-parameter name="enumerator" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranchEnumerator.</doc>
            <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="next" c:identifier="ggit_branch_enumerator_next">
        <doc xml:space="preserve">Move the enumerator to the next branch.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there is a next branch, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="enumerator" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranchEnumerator.</doc>
            <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_branch_enumerator_ref">
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">@enumerator</doc>
          <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
        </return-value>
        <parameters>
          <instance-parameter name="enumerator" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranchEnumerator.</doc>
            <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_branch_enumerator_unref">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="enumerator" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranchEnumerator.</doc>
            <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="BranchType"
                 glib:type-name="GgitBranchType"
                 glib:get-type="ggit_branch_type_get_type"
                 c:type="GgitBranchType">
      <doc xml:space="preserve">The type of a branch.</doc>
      <member name="local"
              value="1"
              c:identifier="GGIT_BRANCH_LOCAL"
              glib:nick="local">
        <doc xml:space="preserve">specifies a local branch.</doc>
      </member>
      <member name="remote"
              value="2"
              c:identifier="GGIT_BRANCH_REMOTE"
              glib:nick="remote">
        <doc xml:space="preserve">specifies a remote branch.</doc>
      </member>
    </enumeration>
    <bitfield name="CheckoutNotifyFlags"
              glib:type-name="GgitCheckoutNotifyFlags"
              glib:get-type="ggit_checkout_notify_flags_get_type"
              c:type="GgitCheckoutNotifyFlags">
      <member name="none"
              value="0"
              c:identifier="GGIT_CHECKOUT_NOTIFY_NONE"
              glib:nick="none">
      </member>
      <member name="conflict"
              value="1"
              c:identifier="GGIT_CHECKOUT_NOTIFY_CONFLICT"
              glib:nick="conflict">
      </member>
      <member name="dirty"
              value="2"
              c:identifier="GGIT_CHECKOUT_NOTIFY_DIRTY"
              glib:nick="dirty">
      </member>
      <member name="updated"
              value="4"
              c:identifier="GGIT_CHECKOUT_NOTIFY_UPDATED"
              glib:nick="updated">
      </member>
      <member name="untracked"
              value="8"
              c:identifier="GGIT_CHECKOUT_NOTIFY_UNTRACKED"
              glib:nick="untracked">
      </member>
      <member name="ignored"
              value="16"
              c:identifier="GGIT_CHECKOUT_NOTIFY_IGNORED"
              glib:nick="ignored">
      </member>
      <member name="all"
              value="65535"
              c:identifier="GGIT_CHECKOUT_NOTIFY_ALL"
              glib:nick="all">
      </member>
    </bitfield>
    <class name="CheckoutOptions"
           c:symbol-prefix="checkout_options"
           c:type="GgitCheckoutOptions"
           parent="GObject.Object"
           glib:type-name="GgitCheckoutOptions"
           glib:get-type="ggit_checkout_options_get_type"
           glib:type-struct="CheckoutOptionsClass">
      <doc xml:space="preserve">Represents the options used when doign a checkout.</doc>
      <constructor name="new" c:identifier="ggit_checkout_options_new">
        <doc xml:space="preserve">Create a new checkout options object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
          <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
        </return-value>
      </constructor>
      <virtual-method name="notify">
        <return-value transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="why" transfer-ownership="none">
            <type name="CheckoutNotifyFlags" c:type="GgitCheckoutNotifyFlags"/>
          </parameter>
          <parameter name="path" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="baseline" transfer-ownership="none">
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </parameter>
          <parameter name="workdir" transfer-ownership="none">
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="progress">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="completed_steps" transfer-ownership="none">
            <type name="gsize" c:type="gsize"/>
          </parameter>
          <parameter name="total_steps" transfer-ownership="none">
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_ancestor_label"
              c:identifier="ggit_checkout_options_get_ancestor_label">
        <doc xml:space="preserve">Get the checkout ancestor label.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the checkout ancestor label.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_baseline"
              c:identifier="ggit_checkout_options_get_baseline">
        <doc xml:space="preserve">Get the baseline, i.e. the expected content of workdir. Defaults to HEAD.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitTree.</doc>
          <type name="Tree" c:type="GgitTree*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_dir_mode"
              c:identifier="ggit_checkout_options_get_dir_mode">
        <doc xml:space="preserve">Get the default checkout directory mode.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the default directory mode.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_disable_filters"
              c:identifier="ggit_checkout_options_get_disable_filters">
        <doc xml:space="preserve">Get whether filters are disabled.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if filters are disabled, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_file_mode"
              c:identifier="ggit_checkout_options_get_file_mode">
        <doc xml:space="preserve">Get the default checkout file mode.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the default checkout file mode.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_file_open_flags"
              c:identifier="ggit_checkout_options_get_file_open_flags">
        <doc xml:space="preserve">Get the checkout file open flags. These flags are platform specific,
e.g. on Unix these would include O_CREAT, O_TRUNC, etc.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the checkout file open flags.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_notify_flags"
              c:identifier="ggit_checkout_options_get_notify_flags">
        <doc xml:space="preserve">Get the checkout notify flags.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitCheckoutNotifyFlags.</doc>
          <type name="CheckoutNotifyFlags" c:type="GgitCheckoutNotifyFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_our_label"
              c:identifier="ggit_checkout_options_get_our_label">
        <doc xml:space="preserve">Get the checkout our label.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the checkout our label.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_paths" c:identifier="ggit_checkout_options_get_paths">
        <doc xml:space="preserve">Get the list of file paths to checkout.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">a %NULL terminated list of file paths, or %NULL.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_strategy"
              c:identifier="ggit_checkout_options_get_strategy">
        <doc xml:space="preserve">Get the checkout strategy.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitCheckoutStrategy.</doc>
          <type name="CheckoutStrategy" c:type="GgitCheckoutStrategy"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_target_directory"
              c:identifier="ggit_checkout_options_get_target_directory">
        <doc xml:space="preserve">Get the checkout target directory.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the checkout target directory.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_their_label"
              c:identifier="ggit_checkout_options_get_their_label">
        <doc xml:space="preserve">Get the checkout their label.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the checkout their label.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_ancestor_label"
              c:identifier="ggit_checkout_options_set_ancestor_label">
        <doc xml:space="preserve">Set the checkout ancestor label.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="label"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the ancestor label.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_baseline"
              c:identifier="ggit_checkout_options_set_baseline">
        <doc xml:space="preserve">Set the baseline, i.e. the expected content of workdir. If @tree is set
to %NULL, the default (HEAD) will be used as the baseline.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="tree"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_dir_mode"
              c:identifier="ggit_checkout_options_set_dir_mode">
        <doc xml:space="preserve">Set the default checkout directory mode.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="dir_mode" transfer-ownership="none">
            <doc xml:space="preserve">the dir mode.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_disable_filters"
              c:identifier="ggit_checkout_options_set_disable_filters">
        <doc xml:space="preserve">Set whether to disable filters.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="disable" transfer-ownership="none">
            <doc xml:space="preserve">disable filters.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_file_mode"
              c:identifier="ggit_checkout_options_set_file_mode">
        <doc xml:space="preserve">Set the default checkout file mode.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="file_mode" transfer-ownership="none">
            <doc xml:space="preserve">the file mode.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_file_open_flags"
              c:identifier="ggit_checkout_options_set_file_open_flags">
        <doc xml:space="preserve">Set the checkout file open flags. These flags are platform dependent,
e.g. on Unix use O_CREAT, O_TRUNC, etc.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">the file open flags.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_notify_flags"
              c:identifier="ggit_checkout_options_set_notify_flags">
        <doc xml:space="preserve">Set the checkout notify flags.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutNotifyFlags.</doc>
            <type name="CheckoutNotifyFlags" c:type="GgitCheckoutNotifyFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_our_label"
              c:identifier="ggit_checkout_options_set_our_label">
        <doc xml:space="preserve">Set the checkout our label.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="label"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the our label.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_paths" c:identifier="ggit_checkout_options_set_paths">
        <doc xml:space="preserve">Set the list of file paths to checkout. If @paths is %NULL, then all files
will be checked out.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="paths"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a %NULL terminated list of paths.</doc>
            <array c:type="gchar**">
              <type name="utf8" c:type="gchar*"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="set_strategy"
              c:identifier="ggit_checkout_options_set_strategy">
        <doc xml:space="preserve">Set the checkout strategy.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="strategy" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutStrategy.</doc>
            <type name="CheckoutStrategy" c:type="GgitCheckoutStrategy"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_target_directory"
              c:identifier="ggit_checkout_options_set_target_directory">
        <doc xml:space="preserve">Set the checkout target directory.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="directory"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the target directory.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_their_label"
              c:identifier="ggit_checkout_options_set_their_label">
        <doc xml:space="preserve">Set the checkout their label.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </instance-parameter>
          <parameter name="label"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the their label.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <property name="ancestor-label" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="baseline" writable="1" transfer-ownership="none">
        <type name="Tree"/>
      </property>
      <property name="dir-mode" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="disable-filters" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="file-mode" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="file-open-flags" writable="1" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="notify-flags" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">The checkout notify flags.</doc>
        <type name="CheckoutNotifyFlags"/>
      </property>
      <property name="our-label" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="strategy" writable="1" transfer-ownership="none">
        <type name="CheckoutStrategy"/>
      </property>
      <property name="target-directory" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="their-label" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="CheckoutOptionsClass"
            c:type="GgitCheckoutOptionsClass"
            glib:is-gtype-struct-for="CheckoutOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="notify">
        <callback name="notify">
          <return-value transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </return-value>
          <parameters>
            <parameter name="options" transfer-ownership="none">
              <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
            </parameter>
            <parameter name="why" transfer-ownership="none">
              <type name="CheckoutNotifyFlags"
                    c:type="GgitCheckoutNotifyFlags"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="baseline" transfer-ownership="none">
              <type name="DiffFile" c:type="GgitDiffFile*"/>
            </parameter>
            <parameter name="target" transfer-ownership="none">
              <type name="DiffFile" c:type="GgitDiffFile*"/>
            </parameter>
            <parameter name="workdir" transfer-ownership="none">
              <type name="DiffFile" c:type="GgitDiffFile*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="progress">
        <callback name="progress">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="options" transfer-ownership="none">
              <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="completed_steps" transfer-ownership="none">
              <type name="gsize" c:type="gsize"/>
            </parameter>
            <parameter name="total_steps" transfer-ownership="none">
              <type name="gsize" c:type="gsize"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <bitfield name="CheckoutStrategy"
              glib:type-name="GgitCheckoutStrategy"
              glib:get-type="ggit_checkout_strategy_get_type"
              c:type="GgitCheckoutStrategy">
      <member name="none"
              value="0"
              c:identifier="GGIT_CHECKOUT_NONE"
              glib:nick="none">
      </member>
      <member name="safe"
              value="1"
              c:identifier="GGIT_CHECKOUT_SAFE"
              glib:nick="safe">
      </member>
      <member name="force"
              value="2"
              c:identifier="GGIT_CHECKOUT_FORCE"
              glib:nick="force">
      </member>
      <member name="recreate_missing"
              value="4"
              c:identifier="GGIT_CHECKOUT_RECREATE_MISSING"
              glib:nick="recreate-missing">
      </member>
      <member name="allow_conflicts"
              value="16"
              c:identifier="GGIT_CHECKOUT_ALLOW_CONFLICTS"
              glib:nick="allow-conflicts">
      </member>
      <member name="remove_untracked"
              value="32"
              c:identifier="GGIT_CHECKOUT_REMOVE_UNTRACKED"
              glib:nick="remove-untracked">
      </member>
      <member name="remove_ignored"
              value="64"
              c:identifier="GGIT_CHECKOUT_REMOVE_IGNORED"
              glib:nick="remove-ignored">
      </member>
      <member name="update_only"
              value="128"
              c:identifier="GGIT_CHECKOUT_UPDATE_ONLY"
              glib:nick="update-only">
      </member>
      <member name="dont_update_index"
              value="256"
              c:identifier="GGIT_CHECKOUT_DONT_UPDATE_INDEX"
              glib:nick="dont-update-index">
      </member>
      <member name="no_refresh"
              value="512"
              c:identifier="GGIT_CHECKOUT_NO_REFRESH"
              glib:nick="no-refresh">
      </member>
      <member name="skip_unmerged"
              value="1024"
              c:identifier="GGIT_CHECKOUT_SKIP_UNMERGED"
              glib:nick="skip-unmerged">
      </member>
      <member name="use_ours"
              value="2048"
              c:identifier="GGIT_CHECKOUT_USE_OURS"
              glib:nick="use-ours">
      </member>
      <member name="use_theirs"
              value="4096"
              c:identifier="GGIT_CHECKOUT_USE_THEIRS"
              glib:nick="use-theirs">
      </member>
      <member name="disable_pathspec_match"
              value="8192"
              c:identifier="GGIT_CHECKOUT_DISABLE_PATHSPEC_MATCH"
              glib:nick="disable-pathspec-match">
      </member>
      <member name="skip_locked_directories"
              value="262144"
              c:identifier="GGIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES"
              glib:nick="skip-locked-directories">
      </member>
      <member name="dont_overwrite_ignored"
              value="524288"
              c:identifier="GGIT_CHECKOUT_DONT_OVERWRITE_IGNORED"
              glib:nick="dont-overwrite-ignored">
      </member>
      <member name="conflict_style_merge"
              value="1048576"
              c:identifier="GGIT_CHECKOUT_CONFLICT_STYLE_MERGE"
              glib:nick="conflict-style-merge">
      </member>
      <member name="conflict_style_diff3"
              value="2097152"
              c:identifier="GGIT_CHECKOUT_CONFLICT_STYLE_DIFF3"
              glib:nick="conflict-style-diff3">
      </member>
      <member name="dont_remove_existing"
              value="4194304"
              c:identifier="GGIT_CHECKOUT_DONT_REMOVE_EXISTING"
              glib:nick="dont-remove-existing">
      </member>
      <member name="dont_write_index"
              value="8388608"
              c:identifier="GGIT_CHECKOUT_DONT_WRITE_INDEX"
              glib:nick="dont-write-index">
      </member>
      <member name="update_submodules"
              value="65536"
              c:identifier="GGIT_CHECKOUT_UPDATE_SUBMODULES"
              glib:nick="update-submodules">
      </member>
      <member name="update_submodules_if_changed"
              value="131072"
              c:identifier="GGIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED"
              glib:nick="update-submodules-if-changed">
      </member>
    </bitfield>
    <class name="CherryPickOptions"
           c:symbol-prefix="cherry_pick_options"
           c:type="GgitCherryPickOptions"
           parent="GObject.Object"
           glib:type-name="GgitCherryPickOptions"
           glib:get-type="ggit_cherry_pick_options_get_type"
           glib:type-struct="CherryPickOptionsClass">
      <doc xml:space="preserve">Represents the options used when doign a cherry-pick.</doc>
      <constructor name="new" c:identifier="ggit_cherry_pick_options_new">
        <doc xml:space="preserve">Create a new cherry-pick options object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
          <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
        </return-value>
      </constructor>
      <method name="get_checkout_options"
              c:identifier="ggit_cherry_pick_options_get_checkout_options">
        <doc xml:space="preserve">Get the checkout options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
          <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
            <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mainline"
              c:identifier="ggit_cherry_pick_options_get_mainline">
        <doc xml:space="preserve">Get the mainline parent to use when cherry-picking a merge commit.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the mainline parent.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
            <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_merge_options"
              c:identifier="ggit_cherry_pick_options_get_merge_options">
        <doc xml:space="preserve">Get the merge options.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitMergeOptions.</doc>
          <type name="MergeOptions" c:type="GgitMergeOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
            <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_checkout_options"
              c:identifier="ggit_cherry_pick_options_set_checkout_options">
        <doc xml:space="preserve">Set the checkout options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
            <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
          </instance-parameter>
          <parameter name="checkout_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_mainline"
              c:identifier="ggit_cherry_pick_options_set_mainline">
        <doc xml:space="preserve">Set the mainline parent to use when cherry-picking a merge commit.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
            <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
          </instance-parameter>
          <parameter name="mainline" transfer-ownership="none">
            <doc xml:space="preserve">the mainline parent.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_merge_options"
              c:identifier="ggit_cherry_pick_options_set_merge_options">
        <doc xml:space="preserve">Set the merge options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
            <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
          </instance-parameter>
          <parameter name="merge_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </parameter>
        </parameters>
      </method>
      <property name="checkout-options" writable="1" transfer-ownership="none">
        <type name="CheckoutOptions"/>
      </property>
      <property name="mainline" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="merge-options" writable="1" transfer-ownership="none">
        <type name="MergeOptions"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="CherryPickOptionsClass"
            c:type="GgitCherryPickOptionsClass"
            glib:is-gtype-struct-for="CherryPickOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="CloneLocal"
                 glib:type-name="GgitCloneLocal"
                 glib:get-type="ggit_clone_local_get_type"
                 c:type="GgitCloneLocal">
      <member name="auto"
              value="0"
              c:identifier="GGIT_CLONE_LOCAL_AUTO"
              glib:nick="auto">
      </member>
      <member name="local"
              value="1"
              c:identifier="GGIT_CLONE_LOCAL_LOCAL"
              glib:nick="local">
      </member>
      <member name="no_local"
              value="2"
              c:identifier="GGIT_CLONE_LOCAL_NO_LOCAL"
              glib:nick="no-local">
      </member>
      <member name="no_links"
              value="3"
              c:identifier="GGIT_CLONE_LOCAL_NO_LINKS"
              glib:nick="no-links">
      </member>
    </enumeration>
    <class name="CloneOptions"
           c:symbol-prefix="clone_options"
           c:type="GgitCloneOptions"
           parent="GObject.Object"
           glib:type-name="GgitCloneOptions"
           glib:get-type="ggit_clone_options_get_type"
           glib:type-struct="CloneOptionsClass">
      <doc xml:space="preserve">Represents the options used when cloning.</doc>
      <constructor name="new" c:identifier="ggit_clone_options_new">
        <doc xml:space="preserve">Creates a new #GgitCloneOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitCloneOptions.</doc>
          <type name="CloneOptions" c:type="GgitCloneOptions*"/>
        </return-value>
      </constructor>
      <virtual-method name="create_remote" throws="1">
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a #GgitRemote or %NULL in case of an error.</doc>
          <type name="Remote" c:type="GgitRemote*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">the repository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the remote name.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">the remote url.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="create_repository" throws="1">
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a #GgitRepository or %NULL in case of an error.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">the repository path.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="is_bare" transfer-ownership="none">
            <doc xml:space="preserve">whether a bare repository should be created.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_checkout_branch"
              c:identifier="ggit_clone_options_get_checkout_branch">
        <doc xml:space="preserve">Gets the name of the branch to checkout or %NULL.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the branch to checkout or %NULL.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_fetch_options"
              c:identifier="ggit_clone_options_get_fetch_options">
        <doc xml:space="preserve">Get the fetch options object or %NULL if not set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the fetch options or %NULL.</doc>
          <type name="FetchOptions" c:type="GgitFetchOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_is_bare" c:identifier="ggit_clone_options_get_is_bare">
        <doc xml:space="preserve">Gets if the repository will be bare.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE to clone a bare repository.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_local" c:identifier="ggit_clone_options_get_local">
        <doc xml:space="preserve">Get setting for bypassing the git-aware transport when cloning. The
default auto setting bypasses the git-aware transport for local paths,
but use a normal fetch for file:// URIs.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the local clone setting.</doc>
          <type name="CloneLocal" c:type="GgitCloneLocal"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_checkout_branch"
              c:identifier="ggit_clone_options_set_checkout_branch">
        <doc xml:space="preserve">Gives the name of the branch to checkout. %NULL means
use the remote's HEAD.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
          <parameter name="checkout_branch"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the name of the branch to checkout or %NULL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_fetch_options"
              c:identifier="ggit_clone_options_set_fetch_options">
        <doc xml:space="preserve">Set the fetch options object.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
          <parameter name="fetch_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitFetchOptions or %NULL.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_is_bare" c:identifier="ggit_clone_options_set_is_bare">
        <doc xml:space="preserve">Sets whether to clone a bare repository.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
          <parameter name="bare" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE to clone a bare repository.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_local" c:identifier="ggit_clone_options_set_local">
        <doc xml:space="preserve">Set setting for bypassing the git-aware transport when cloning. The
default auto setting bypasses the git-aware transport for local paths,
but use a normal fetch for file:// URIs.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </instance-parameter>
          <parameter name="local" transfer-ownership="none">
            <doc xml:space="preserve">the local clone setting.</doc>
            <type name="CloneLocal" c:type="GgitCloneLocal"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="CloneOptionsClass"
            c:type="GgitCloneOptionsClass"
            glib:is-gtype-struct-for="CloneOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="create_repository">
        <callback name="create_repository" throws="1">
          <return-value transfer-ownership="full" nullable="1">
            <doc xml:space="preserve">a #GgitRepository or %NULL in case of an error.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </return-value>
          <parameters>
            <parameter name="options" transfer-ownership="none">
              <doc xml:space="preserve">a #GgitCloneOptions.</doc>
              <type name="CloneOptions" c:type="GgitCloneOptions*"/>
            </parameter>
            <parameter name="path" transfer-ownership="none">
              <doc xml:space="preserve">the repository path.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="is_bare" transfer-ownership="none">
              <doc xml:space="preserve">whether a bare repository should be created.</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="create_remote">
        <callback name="create_remote" throws="1">
          <return-value transfer-ownership="full" nullable="1">
            <doc xml:space="preserve">a #GgitRemote or %NULL in case of an error.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </return-value>
          <parameters>
            <parameter name="options" transfer-ownership="none">
              <doc xml:space="preserve">a #GgitCloneOptions.</doc>
              <type name="CloneOptions" c:type="GgitCloneOptions*"/>
            </parameter>
            <parameter name="repository" transfer-ownership="none">
              <doc xml:space="preserve">the repository.</doc>
              <type name="Repository" c:type="GgitRepository*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <doc xml:space="preserve">the remote name.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="url" transfer-ownership="none">
              <doc xml:space="preserve">the remote url.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <class name="Commit"
           c:symbol-prefix="commit"
           c:type="GgitCommit"
           parent="Object"
           glib:type-name="GgitCommit"
           glib:get-type="ggit_commit_get_type"
           glib:type-struct="CommitClass">
      <doc xml:space="preserve">Represents a commit object.</doc>
      <method name="amend" c:identifier="ggit_commit_amend" throws="1">
        <doc xml:space="preserve">Amend an existing commit. If @update_ref is not %NULL, the given reference will
be updated to point to the newly created commit. Use "HEAD" to update the
HEAD of the current branch and make it point to this commit.

If @message_encoding is set to %NULL, "UTF-8" encoding is assumed for the
provided @message. Note that @message will not be cleaned up automatically.
You can use #ggit_message_prettify to do this yourself if needed.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitOId of the created commit object, or %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
          <parameter name="update_ref"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">name of the reference to update.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="author" transfer-ownership="none">
            <doc xml:space="preserve">author signature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="committer" transfer-ownership="none">
            <doc xml:space="preserve">committer signature (and time of commit).</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message_encoding"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">message encoding.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">commit message.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">the tree of objects to commit.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_author" c:identifier="ggit_commit_get_author">
        <doc xml:space="preserve">Gets the author of @commit. The returned value must be free'd with
g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the author of the commit.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_committer" c:identifier="ggit_commit_get_committer">
        <doc xml:space="preserve">Gets the committer of @commit. The returned value must be free'd with
g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the committer of the commit.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_message" c:identifier="ggit_commit_get_message">
        <doc xml:space="preserve">Gets the full message of @commit. The resulting message is always encoded
in UTF-8.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the message of the commit.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_message_encoding"
              c:identifier="ggit_commit_get_message_encoding">
        <doc xml:space="preserve">Get the encoding for the message of a commit,
as a string representing a standard encoding name.

The encoding may be %NULL if the 'encoding' header
in the commit is missing; in that case UTF-8 is assumed.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the encoding of the commit message or %NULL.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_nth_ancestor"
              c:identifier="ggit_commit_get_nth_ancestor"
              throws="1">
        <doc xml:space="preserve">Gets the commit object that is the n-th generation ancestor
of the named commit object, following only the first parents.
Passing %0 to the @n parameter returns another instance of @commit.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the @n ancestor commit.</doc>
          <type name="Commit" c:type="GgitCommit*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
          <parameter name="n" transfer-ownership="none">
            <doc xml:space="preserve">the requested ancestor.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_parents" c:identifier="ggit_commit_get_parents">
        <doc xml:space="preserve">Gets the parents collection for @commit.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the parents collection of the commit.</doc>
          <type name="CommitParents" c:type="GgitCommitParents*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_subject" c:identifier="ggit_commit_get_subject">
        <doc xml:space="preserve">Gets the subject of @commit. The subject of a commit is the first line of
the commit message (as per convention). The resulting subject is always
encoded in UTF-8.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the subject of the commit.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_tree" c:identifier="ggit_commit_get_tree">
        <doc xml:space="preserve">Get the tree object for @commit.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitTree.</doc>
          <type name="Tree" c:type="GgitTree*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_tree_id" c:identifier="ggit_commit_get_tree_id">
        <doc xml:space="preserve">Get the #GgitOId of the tree of @commit. Note that this is more efficient
than getting the tree object with ggit_commit_get_tree() because no additional
files need to be read from disk.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Object" c:type="GgitObject"/>
      </field>
    </class>
    <record name="CommitClass"
            c:type="GgitCommitClass"
            glib:is-gtype-struct-for="Commit">
      <doc xml:space="preserve">The class structure for #GgitCommitClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="ObjectClass" c:type="GgitObjectClass"/>
      </field>
    </record>
    <class name="CommitParents"
           c:symbol-prefix="commit_parents"
           c:type="GgitCommitParents"
           parent="GObject.Object"
           glib:type-name="GgitCommitParents"
           glib:get-type="ggit_commit_parents_get_type"
           glib:type-struct="CommitParentsClass">
      <doc xml:space="preserve">Represents the parents of a commit object.</doc>
      <constructor name="new" c:identifier="ggit_commit_parents_new">
        <return-value transfer-ownership="full">
          <type name="CommitParents" c:type="GgitCommitParents*"/>
        </return-value>
        <parameters>
          <parameter name="commit" transfer-ownership="none">
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get" c:identifier="ggit_commit_parents_get">
        <doc xml:space="preserve">Get the #GgitCommit of a parent.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitCommit.</doc>
          <type name="Commit" c:type="GgitCommit*"/>
        </return-value>
        <parameters>
          <instance-parameter name="parents" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommitParents.</doc>
            <type name="CommitParents" c:type="GgitCommitParents*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">the parent index.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="ggit_commit_parents_get_id">
        <doc xml:space="preserve">Get the #GgitOId of a parent.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="parents" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommitParents.</doc>
            <type name="CommitParents" c:type="GgitCommitParents*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">the parent index.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_size" c:identifier="ggit_commit_parents_get_size">
        <doc xml:space="preserve">Get the number of parents in the parents collection.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of parents.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="parents" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommitParents.</doc>
            <type name="CommitParents" c:type="GgitCommitParents*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="commit"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Commit"/>
      </property>
      <property name="size" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
    </class>
    <record name="CommitParentsClass"
            c:type="GgitCommitParentsClass"
            glib:is-gtype-struct-for="CommitParents">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <class name="Config"
           c:symbol-prefix="config"
           c:type="GgitConfig"
           parent="Native"
           glib:type-name="GgitConfig"
           glib:get-type="ggit_config_get_type"
           glib:type-struct="ConfigClass">
      <doc xml:space="preserve">Represents a git configuration.</doc>
      <constructor name="new" c:identifier="ggit_config_new">
        <doc xml:space="preserve">Create a new config. See also ggit_config_get_default() to get
a #GgitConfig representing the global, XDG and system configuration files.
To get a #GgitConfig for a repository use #ggit_repository_get_config
instead.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitConfig.</doc>
          <type name="Config" c:type="GgitConfig*"/>
        </return-value>
      </constructor>
      <constructor name="new_default"
                   c:identifier="ggit_config_new_default"
                   throws="1">
        <doc xml:space="preserve">Get the global, XDG and system configuration files merged into one
#GgitConfig with their appropriate priority levels. If an error occured
trying to load the various configuration files, this function will return
%NULL and @error will be set accordingly.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A #GgitConfig</doc>
          <type name="Config" c:type="GgitConfig*"/>
        </return-value>
      </constructor>
      <constructor name="new_from_file"
                   c:identifier="ggit_config_new_from_file"
                   throws="1">
        <doc xml:space="preserve">Create a new config from a single on disk file. This is a convenience
API and is exactly the same as creating an empty #GgitConfig using
#ggit_config_new and adding the file with #ggit_config_add_file. The
level will be set to #GGIT_CONFIG_LEVEL_LOCAL. If the config could not be
loaded this function returns %NULL and @error will be set accordingly.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitConfig.</doc>
          <type name="Config" c:type="GgitConfig*"/>
        </return-value>
        <parameters>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">the file to load.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="find_global" c:identifier="ggit_config_find_global">
        <doc xml:space="preserve">Find the file representing the users global git configuration. This file
is usually located at $HOME/.gitconfig. This function will try to guess
the full path to that file, if the file exists. The returned file may then
be used with #ggit_config_new_from_file or #ggit_config_add_file. This
function returns %NULL if the global config could not be found.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GFile or %NULL if the global config could not be found.</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
      </function>
      <function name="find_system" c:identifier="ggit_config_find_system">
        <doc xml:space="preserve">Find the file representing the systems global git configuration. This file
is usually located at /etc/gitconfig on UNIX type systems or
%PROGRAMFILES%\Git\etc\gitconfig on windows. This function will try to guess
the full path to that file, if the file exists. The returned file may then
be used with #ggit_config_new_from_file or #ggit_config_add_file. This
function returns %NULL if the system config could not be found.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GFile or %NULL if the system config could not
                          be found.</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
      </function>
      <method name="add_file" c:identifier="ggit_config_add_file" throws="1">
        <doc xml:space="preserve">Add an on-disk config file instance to an existing config

The on-disk file pointed at by @file will be opened and
parsed; it's expected to be a native Git config file following
the default Git config syntax (see man git-config).

Further queries on this config object will access each
of the config file instances in order (instances with
a higher priority level will be accessed first).</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="level" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfigLevel.</doc>
            <type name="ConfigLevel" c:type="GgitConfigLevel"/>
          </parameter>
          <parameter name="force" transfer-ownership="none">
            <doc xml:space="preserve">if a config file already exists for the given priority level, replace it.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="delete_entry"
              c:identifier="ggit_config_delete_entry"
              throws="1">
        <doc xml:space="preserve">Delete a config variable from the config file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the configuration value was deleted, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach" c:identifier="ggit_config_foreach" throws="1">
        <doc xml:space="preserve">Call @callback for each configuration value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if successfull, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve">a #GgitConfigCallback.</doc>
            <type name="ConfigCallback" c:type="GgitConfigCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data for @callback.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_bool" c:identifier="ggit_config_get_bool" throws="1">
        <doc xml:space="preserve">Get a boolean configuration value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the value.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_entry" c:identifier="ggit_config_get_entry" throws="1">
        <doc xml:space="preserve">Get #GgitConfigEntry of a config variable.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the entry of @name, or %NULL if such a value
                          does not exist.</doc>
          <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the configuration name.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int32" c:identifier="ggit_config_get_int32" throws="1">
        <doc xml:space="preserve">Get a int32 configuration value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the value.</doc>
          <type name="gint32" c:type="gint32"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_int64" c:identifier="ggit_config_get_int64" throws="1">
        <doc xml:space="preserve">Get a int64 configuration value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the value.</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_string"
              c:identifier="ggit_config_get_string"
              throws="1">
        <doc xml:space="preserve">Get the configuration value of @name as string.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the string value of @name, or %NULL if such a value
                       does not exist</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="match" c:identifier="ggit_config_match" throws="1">
        <doc xml:space="preserve">Matches a configuration against a regular expression. @match_info will
contain the match information if the return value is not %NULL, otherwise
@error will be set.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the value of that matched configuration</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="regex" transfer-ownership="none">
            <doc xml:space="preserve">a #GRegex.</doc>
            <type name="GLib.Regex" c:type="GRegex*"/>
          </parameter>
          <parameter name="match_info"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GMatchInfo.</doc>
            <type name="GLib.MatchInfo" c:type="GMatchInfo**"/>
          </parameter>
        </parameters>
      </method>
      <method name="match_foreach"
              c:identifier="ggit_config_match_foreach"
              throws="1">
        <doc xml:space="preserve">Call @callback for all configurations matching @regex.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if matches were successfull, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="regex" transfer-ownership="none">
            <doc xml:space="preserve">a #GRegex.</doc>
            <type name="GLib.Regex" c:type="GRegex*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <doc xml:space="preserve">a #GgitConfigMatchCallback.</doc>
            <type name="ConfigMatchCallback" c:type="GgitConfigMatchCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the user data for @callback.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_level"
              c:identifier="ggit_config_open_level"
              throws="1">
        <doc xml:space="preserve">Open a specific level config derived from a multi-level one.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the configuration at @level, or %NULL.</doc>
          <type name="Config" c:type="GgitConfig*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="level" transfer-ownership="none">
            <doc xml:space="preserve">the level to open.</doc>
            <type name="ConfigLevel" c:type="GgitConfigLevel"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_bool" c:identifier="ggit_config_set_bool" throws="1">
        <doc xml:space="preserve">Set a boolean value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the value was successfully set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">the new value.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_int32" c:identifier="ggit_config_set_int32" throws="1">
        <doc xml:space="preserve">Set a int32 value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the value was successfully set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">the new value.</doc>
            <type name="gint32" c:type="gint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_int64" c:identifier="ggit_config_set_int64" throws="1">
        <doc xml:space="preserve">Set a int64 value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the value was successfully set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">the new value.</doc>
            <type name="gint64" c:type="gint64"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_string"
              c:identifier="ggit_config_set_string"
              throws="1">
        <doc xml:space="preserve">Set a new string value of a configuration.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the value was successfully set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the configuration value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">the new value.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="snapshot" c:identifier="ggit_config_snapshot" throws="1">
        <doc xml:space="preserve">Create a snapshot of the current state of the configuration,
which allows you to look into a consistent view of the configuration
for looking up complex values (e.g. a remote, submodule).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitConfig, or %NULL if an error occurred.</doc>
          <type name="Config" c:type="GgitConfig*"/>
        </return-value>
        <parameters>
          <instance-parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfig.</doc>
            <type name="Config" c:type="GgitConfig*"/>
          </instance-parameter>
        </parameters>
      </method>
    </class>
    <callback name="ConfigCallback" c:type="GgitConfigCallback">
      <doc xml:space="preserve">The type of the callback functions for retrieving values from a #GgitConfig.
See ggit_config_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go for the next config value or a #GgitError in case there was
         an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="entry" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitConfigEntry.</doc>
          <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="ConfigClass"
            c:type="GgitConfigClass"
            glib:is-gtype-struct-for="Config">
      <field name="parent_class">
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <record name="ConfigEntry"
            c:type="GgitConfigEntry"
            glib:type-name="GgitConfigEntry"
            glib:get-type="ggit_config_entry_get_type"
            c:symbol-prefix="config_entry">
      <doc xml:space="preserve">Represents a git configuration entry.</doc>
      <method name="get_level" c:identifier="ggit_config_entry_get_level">
        <doc xml:space="preserve">Gets the #GgitConfigLevel of @entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GgitConfigLevel of @entry.</doc>
          <type name="ConfigLevel" c:type="GgitConfigLevel"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfigEntry.</doc>
            <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_config_entry_get_name">
        <doc xml:space="preserve">Gets the name of @entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of @entry:</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfigEntry.</doc>
            <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_value" c:identifier="ggit_config_entry_get_value">
        <doc xml:space="preserve">Gets the value of @entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the value of @entry.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfigEntry.</doc>
            <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_config_entry_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @entry by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitConfigEntry.</doc>
          <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfigEntry.</doc>
            <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_config_entry_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @entry by one.
If the reference count drops to 0, @entry is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitConfigEntry.</doc>
            <type name="ConfigEntry" c:type="GgitConfigEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="ConfigLevel"
                 glib:type-name="GgitConfigLevel"
                 glib:get-type="ggit_config_level_get_type"
                 c:type="GgitConfigLevel">
      <doc xml:space="preserve">Priority level of a config file.
These priority levels correspond to the natural escalation logic
(from higher to lower) when searching for config entries in git.git.</doc>
      <member name="programdata"
              value="1"
              c:identifier="GGIT_CONFIG_LEVEL_PROGRAMDATA"
              glib:nick="programdata">
        <doc xml:space="preserve">System-wide on Windows, for compatibility with portable git.</doc>
      </member>
      <member name="system"
              value="2"
              c:identifier="GGIT_CONFIG_LEVEL_SYSTEM"
              glib:nick="system">
        <doc xml:space="preserve">System-wide configuration file.</doc>
      </member>
      <member name="xdg"
              value="3"
              c:identifier="GGIT_CONFIG_LEVEL_XDG"
              glib:nick="xdg">
        <doc xml:space="preserve">XDG compatible configuration file (.config/git/config).</doc>
      </member>
      <member name="global"
              value="4"
              c:identifier="GGIT_CONFIG_LEVEL_GLOBAL"
              glib:nick="global">
        <doc xml:space="preserve">User-specific configuration file, also called Global configuration file.</doc>
      </member>
      <member name="local"
              value="5"
              c:identifier="GGIT_CONFIG_LEVEL_LOCAL"
              glib:nick="local">
        <doc xml:space="preserve">Repository specific configuration file.</doc>
      </member>
      <member name="app"
              value="6"
              c:identifier="GGIT_CONFIG_LEVEL_APP"
              glib:nick="app">
        <doc xml:space="preserve">Application specific configuration file; freely defined by applications.</doc>
      </member>
      <member name="highest"
              value="-1"
              c:identifier="GGIT_CONFIG_LEVEL_HIGHEST"
              glib:nick="highest">
        <doc xml:space="preserve">Represents the highest level of a config file.</doc>
      </member>
    </enumeration>
    <callback name="ConfigMatchCallback" c:type="GgitConfigMatchCallback">
      <doc xml:space="preserve">The type of the callback functions for retrieving values from a #GgitConfig
using a regular expression. See ggit_config_match_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go for the next config value or a #GgitError in case there was
         an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="match_info" transfer-ownership="none">
          <doc xml:space="preserve">the match</doc>
          <type name="GLib.MatchInfo" c:type="GMatchInfo*"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <doc xml:space="preserve">the value</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="CreateFlags"
              glib:type-name="GgitCreateFlags"
              glib:get-type="ggit_create_flags_get_type"
              c:type="GgitCreateFlags">
      <doc xml:space="preserve">Describes how something should be created.</doc>
      <member name="none"
              value="0"
              c:identifier="GGIT_CREATE_NONE"
              glib:nick="none">
        <doc xml:space="preserve">attempt to create.</doc>
      </member>
      <member name="force"
              value="1"
              c:identifier="GGIT_CREATE_FORCE"
              glib:nick="force">
        <doc xml:space="preserve">force creation.</doc>
      </member>
    </bitfield>
    <class name="Cred"
           c:symbol-prefix="cred"
           c:type="GgitCred"
           parent="Native"
           glib:type-name="GgitCred"
           glib:get-type="ggit_cred_get_type"
           glib:type-struct="CredClass">
      <doc xml:space="preserve">Represents a git credential.</doc>
      <field name="parent_instance">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <callback name="CredAcquireCallback" c:type="GgitCredAcquireCallback">
      <doc xml:space="preserve">Signature of a function which acquires a credential object.</doc>
      <return-value transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="url" transfer-ownership="none">
          <doc xml:space="preserve">the resource for which we are demanding a credential.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="username_from_url"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">The username that was embedded in a "user@host"
                                  remote url, or NULL if not included.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="allowed_types" transfer-ownership="none">
          <doc xml:space="preserve">a bitmask stating which cred types are OK to return.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="cred" transfer-ownership="full">
          <doc xml:space="preserve">newly created credential object.</doc>
          <type name="Cred" c:type="GgitCred**"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="CredClass"
            c:type="GgitCredClass"
            glib:is-gtype-struct-for="Cred">
      <field name="parent_class" readable="0" private="1">
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <class name="CredPlaintext"
           c:symbol-prefix="cred_plaintext"
           c:type="GgitCredPlaintext"
           parent="Cred"
           glib:type-name="GgitCredPlaintext"
           glib:get-type="ggit_cred_plaintext_get_type"
           glib:type-struct="CredPlaintextClass">
      <doc xml:space="preserve">Represents a plain text credential.</doc>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="ggit_cred_plaintext_new"
                   throws="1">
        <return-value transfer-ownership="full">
          <type name="CredPlaintext" c:type="GgitCredPlaintext*"/>
        </return-value>
        <parameters>
          <parameter name="username" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="password" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_password"
              c:identifier="ggit_cred_plaintext_get_password">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="cred" transfer-ownership="none">
            <type name="CredPlaintext" c:type="GgitCredPlaintext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_username"
              c:identifier="ggit_cred_plaintext_get_username">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="cred" transfer-ownership="none">
            <type name="CredPlaintext" c:type="GgitCredPlaintext*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="password"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="username"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent_instance">
        <type name="Cred" c:type="GgitCred"/>
      </field>
    </class>
    <record name="CredPlaintextClass"
            c:type="GgitCredPlaintextClass"
            glib:is-gtype-struct-for="CredPlaintext">
      <field name="parent_class" readable="0" private="1">
        <type name="CredClass" c:type="GgitCredClass"/>
      </field>
    </record>
    <class name="CredSshInteractive"
           c:symbol-prefix="cred_ssh_interactive"
           c:type="GgitCredSshInteractive"
           parent="Cred"
           glib:type-name="GgitCredSshInteractive"
           glib:get-type="ggit_cred_ssh_interactive_get_type"
           glib:type-struct="CredSshInteractiveClass">
      <doc xml:space="preserve">Represents a ssh interactive credential.</doc>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="ggit_cred_ssh_interactive_new"
                   throws="1">
        <return-value transfer-ownership="full">
          <type name="CredSshInteractive" c:type="GgitCredSshInteractive*"/>
        </return-value>
        <parameters>
          <parameter name="username" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="prompt">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="cred" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCredSshInteractive</doc>
            <type name="CredSshInteractive" c:type="GgitCredSshInteractive*"/>
          </instance-parameter>
          <parameter name="prompts" transfer-ownership="none">
            <doc xml:space="preserve">a list of prompts.</doc>
            <array length="1"
                   zero-terminated="0"
                   c:type="GgitCredSshInteractivePrompt**">
              <type name="CredSshInteractivePrompt"
                    c:type="GgitCredSshInteractivePrompt*"/>
            </array>
          </parameter>
          <parameter name="num_prompts" transfer-ownership="none">
            <doc xml:space="preserve">number of prompts.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_username"
              c:identifier="ggit_cred_ssh_interactive_get_username">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="cred" transfer-ownership="none">
            <type name="CredSshInteractive" c:type="GgitCredSshInteractive*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="username"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent_instance">
        <type name="Cred" c:type="GgitCred"/>
      </field>
    </class>
    <record name="CredSshInteractiveClass"
            c:type="GgitCredSshInteractiveClass"
            glib:is-gtype-struct-for="CredSshInteractive">
      <field name="parent_class" readable="0" private="1">
        <type name="CredClass" c:type="GgitCredClass"/>
      </field>
      <field name="prompt">
        <callback name="prompt">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="cred" transfer-ownership="none">
              <doc xml:space="preserve">a #GgitCredSshInteractive</doc>
              <type name="CredSshInteractive"
                    c:type="GgitCredSshInteractive*"/>
            </parameter>
            <parameter name="prompts" transfer-ownership="none">
              <doc xml:space="preserve">a list of prompts.</doc>
              <array length="2"
                     zero-terminated="0"
                     c:type="GgitCredSshInteractivePrompt**">
                <type name="CredSshInteractivePrompt"
                      c:type="GgitCredSshInteractivePrompt*"/>
              </array>
            </parameter>
            <parameter name="num_prompts" transfer-ownership="none">
              <doc xml:space="preserve">number of prompts.</doc>
              <type name="gsize" c:type="gsize"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="CredSshInteractivePrompt"
            c:type="GgitCredSshInteractivePrompt"
            glib:type-name="GgitCredSshInteractivePrompt"
            glib:get-type="ggit_cred_ssh_interactive_prompt_get_type"
            c:symbol-prefix="cred_ssh_interactive_prompt">
      <doc xml:space="preserve">Represents a ssh interactive prompt.</doc>
      <constructor name="new"
                   c:identifier="ggit_cred_ssh_interactive_prompt_new">
        <return-value transfer-ownership="full">
          <type name="CredSshInteractivePrompt"
                c:type="GgitCredSshInteractivePrompt*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="instruction" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="text" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="is_masked" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_instruction"
              c:identifier="ggit_cred_ssh_interactive_prompt_get_instruction">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name"
              c:identifier="ggit_cred_ssh_interactive_prompt_get_name">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_response"
              c:identifier="ggit_cred_ssh_interactive_prompt_get_response">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_text"
              c:identifier="ggit_cred_ssh_interactive_prompt_get_text">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_masked"
              c:identifier="ggit_cred_ssh_interactive_prompt_is_masked">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_cred_ssh_interactive_prompt_ref">
        <return-value transfer-ownership="full">
          <type name="CredSshInteractivePrompt"
                c:type="GgitCredSshInteractivePrompt*"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_response"
              c:identifier="ggit_cred_ssh_interactive_prompt_set_response">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
          <parameter name="response" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unref"
              c:identifier="ggit_cred_ssh_interactive_prompt_unref">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="prompt" transfer-ownership="none">
            <type name="CredSshInteractivePrompt"
                  c:type="GgitCredSshInteractivePrompt*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="CredSshKeyFromAgent"
           c:symbol-prefix="cred_ssh_key_from_agent"
           c:type="GgitCredSshKeyFromAgent"
           parent="Cred"
           glib:type-name="GgitCredSshKeyFromAgent"
           glib:get-type="ggit_cred_ssh_key_from_agent_get_type"
           glib:type-struct="CredSshKeyFromAgentClass">
      <doc xml:space="preserve">Represents a ssh key agent credential.</doc>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="ggit_cred_ssh_key_from_agent_new"
                   throws="1">
        <doc xml:space="preserve">Creates a new #GgitCredSshKeyFromAgent.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitCredSshKeyFromAgent or %NULL if there was an error.</doc>
          <type name="CredSshKeyFromAgent" c:type="GgitCredSshKeyFromAgent*"/>
        </return-value>
        <parameters>
          <parameter name="username" transfer-ownership="none">
            <doc xml:space="preserve">the username.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_username"
              c:identifier="ggit_cred_ssh_key_from_agent_get_username">
        <doc xml:space="preserve">Gets the username for the credential.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the username.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="cred" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCredSshKeyFromAgent.</doc>
            <type name="CredSshKeyFromAgent"
                  c:type="GgitCredSshKeyFromAgent*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="username"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
    </class>
    <record name="CredSshKeyFromAgentClass"
            c:type="GgitCredSshKeyFromAgentClass"
            glib:is-gtype-struct-for="CredSshKeyFromAgent">
      <field name="parent_class">
        <type name="CredClass" c:type="GgitCredClass"/>
      </field>
    </record>
    <bitfield name="Credtype"
              glib:type-name="GgitCredtype"
              glib:get-type="ggit_credtype_get_type"
              c:type="GgitCredtype">
      <member name="userpass_plaintext"
              value="1"
              c:identifier="GGIT_CREDTYPE_USERPASS_PLAINTEXT"
              glib:nick="userpass-plaintext">
      </member>
      <member name="ssh_key"
              value="2"
              c:identifier="GGIT_CREDTYPE_SSH_KEY"
              glib:nick="ssh-key">
      </member>
      <member name="ssh_custom"
              value="4"
              c:identifier="GGIT_CREDTYPE_SSH_CUSTOM"
              glib:nick="ssh-custom">
      </member>
      <member name="default"
              value="8"
              c:identifier="GGIT_CREDTYPE_DEFAULT"
              glib:nick="default">
      </member>
      <member name="ssh_interactive"
              value="16"
              c:identifier="GGIT_CREDTYPE_SSH_INTERACTIVE"
              glib:nick="ssh-interactive">
      </member>
    </bitfield>
    <enumeration name="DeltaType"
                 glib:type-name="GgitDeltaType"
                 glib:get-type="ggit_delta_type_get_type"
                 c:type="GgitDeltaType">
      <doc xml:space="preserve">Describes the type of change the delta is.</doc>
      <member name="unmodified"
              value="0"
              c:identifier="GGIT_DELTA_UNMODIFIED"
              glib:nick="unmodified">
        <doc xml:space="preserve">unmodified.</doc>
      </member>
      <member name="added"
              value="1"
              c:identifier="GGIT_DELTA_ADDED"
              glib:nick="added">
        <doc xml:space="preserve">added.</doc>
      </member>
      <member name="deleted"
              value="2"
              c:identifier="GGIT_DELTA_DELETED"
              glib:nick="deleted">
        <doc xml:space="preserve">deleted.</doc>
      </member>
      <member name="modified"
              value="3"
              c:identifier="GGIT_DELTA_MODIFIED"
              glib:nick="modified">
        <doc xml:space="preserve">modified.</doc>
      </member>
      <member name="renamed"
              value="4"
              c:identifier="GGIT_DELTA_RENAMED"
              glib:nick="renamed">
        <doc xml:space="preserve">renamed.</doc>
      </member>
      <member name="copied"
              value="5"
              c:identifier="GGIT_DELTA_COPIED"
              glib:nick="copied">
        <doc xml:space="preserve">copied.</doc>
      </member>
      <member name="ignored"
              value="6"
              c:identifier="GGIT_DELTA_IGNORED"
              glib:nick="ignored">
        <doc xml:space="preserve">ignored.</doc>
      </member>
      <member name="untracked"
              value="7"
              c:identifier="GGIT_DELTA_UNTRACKED"
              glib:nick="untracked">
        <doc xml:space="preserve">untracked.</doc>
      </member>
    </enumeration>
    <class name="Diff"
           c:symbol-prefix="diff"
           c:type="GgitDiff"
           parent="Native"
           glib:type-name="GgitDiff"
           glib:get-type="ggit_diff_get_type"
           glib:type-struct="DiffClass">
      <doc xml:space="preserve">Represents a diff list.</doc>
      <constructor name="new_index_to_workdir"
                   c:identifier="ggit_diff_new_index_to_workdir"
                   throws="1">
        <doc xml:space="preserve">Creates a #GgitDiff which compares the working directory and the index.

If @index is %NULL then @repository index is used.
If @diff_options is %NULL then the defaults specified in
ggit_diff_options_new() are used.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitDiff if there was no error, %NULL otherwise.</doc>
          <type name="Diff" c:type="GgitDiff*"/>
        </return-value>
        <parameters>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
          <parameter name="index"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitIndex, or %NULL.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </parameter>
          <parameter name="diff_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffOptions, or %NULL.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_tree_to_index"
                   c:identifier="ggit_diff_new_tree_to_index"
                   throws="1">
        <doc xml:space="preserve">Creates a #GgitDiff which compares @old_tree and the index.

If @index is %NULL then @repository index is used.
If @diff_options is %NULL then the defaults specified in
ggit_diff_options_new() are used.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitDiff if there was no error, %NULL otherwise.</doc>
          <type name="Diff" c:type="GgitDiff*"/>
        </return-value>
        <parameters>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
          <parameter name="old_tree"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitTree to diff from.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="index"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitIndex, or %NULL.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </parameter>
          <parameter name="diff_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffOptions, or %NULL.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_tree_to_tree"
                   c:identifier="ggit_diff_new_tree_to_tree"
                   throws="1">
        <doc xml:space="preserve">Creates a #GgitDiff which compares @old_tree and @new_tree.

If @diff_options is %NULL then the defaults specified in
ggit_diff_options_new() are used.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitDiff if there was no error, %NULL otherwise.</doc>
          <type name="Diff" c:type="GgitDiff*"/>
        </return-value>
        <parameters>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
          <parameter name="old_tree"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitTree to diff from.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="new_tree"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitTree to diff to.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="diff_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffOptions, or %NULL.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_tree_to_workdir"
                   c:identifier="ggit_diff_new_tree_to_workdir"
                   throws="1">
        <doc xml:space="preserve">Creates a #GgitDiff which compares the working directory and @old_tree.

If @diff_options is %NULL then the defaults specified in
ggit_diff_options_new() are used.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitDiff if there was no error, %NULL otherwise.</doc>
          <type name="Diff" c:type="GgitDiff*"/>
        </return-value>
        <parameters>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
          <parameter name="old_tree"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitTree to diff from.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="diff_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffOptions, or %NULL.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="blob_to_buffer"
                c:identifier="ggit_diff_blob_to_buffer"
                throws="1">
        <doc xml:space="preserve">Same as ggit_diff_blobs() but using a buffer.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="old_blob"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitBlob to diff from.</doc>
            <type name="Blob" c:type="GgitBlob*"/>
          </parameter>
          <parameter name="old_as_path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">treat @old_blob as if it had this filename, or %NULL,</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="buffer"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a buffer to diff to.</doc>
            <array length="3" zero-terminated="0" c:type="guint8*">
              <type name="guint8" c:type="guint8"/>
            </array>
          </parameter>
          <parameter name="buffer_len" transfer-ownership="none">
            <doc xml:space="preserve">length of @buffer.</doc>
            <type name="gssize" c:type="gssize"/>
          </parameter>
          <parameter name="buffer_as_path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">treat @buffer as if it had this filename, or %NULL,</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="diff_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffOptions, or %NULL.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </parameter>
          <parameter name="file_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="10">
            <doc xml:space="preserve">
 a #GgitDiffFileCallback.</doc>
            <type name="DiffFileCallback" c:type="GgitDiffFileCallback"/>
          </parameter>
          <parameter name="binary_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="10">
            <doc xml:space="preserve">
 a #GgitDiffBinaryCallback.</doc>
            <type name="DiffBinaryCallback" c:type="GgitDiffBinaryCallback"/>
          </parameter>
          <parameter name="hunk_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="10">
            <doc xml:space="preserve">
 a #GgitDiffHunkCallback.</doc>
            <type name="DiffHunkCallback" c:type="GgitDiffHunkCallback"/>
          </parameter>
          <parameter name="line_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="10">
            <doc xml:space="preserve">
 a #GgitDiffLineCallback.</doc>
            <type name="DiffLineCallback" c:type="GgitDiffLineCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
      <function name="blobs" c:identifier="ggit_diff_blobs" throws="1">
        <doc xml:space="preserve">Iterates over the diff calling @file_cb, @binary_cb, @hunk_cb and @line_cb.

The #GgitDiffFile mode always be 0, path will be %NULL and when a blob is
%NULL the oid will be 0.

If @diff_options is %NULL then the defaults specified in
ggit_diff_options_new() are used.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="old_blob"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitBlob to diff from.</doc>
            <type name="Blob" c:type="GgitBlob*"/>
          </parameter>
          <parameter name="old_as_path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">treat @old_blob as if it had this filename, or %NULL,</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="new_blob"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitBlob to diff to.</doc>
            <type name="Blob" c:type="GgitBlob*"/>
          </parameter>
          <parameter name="new_as_path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">treat @new_blob as if it had this filename, or %NULL,</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="diff_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffOptions, or %NULL.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </parameter>
          <parameter name="file_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="9">
            <doc xml:space="preserve">
 a #GgitDiffFileCallback.</doc>
            <type name="DiffFileCallback" c:type="GgitDiffFileCallback"/>
          </parameter>
          <parameter name="binary_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="9">
            <doc xml:space="preserve">
 a #GgitDiffBinaryCallback.</doc>
            <type name="DiffBinaryCallback" c:type="GgitDiffBinaryCallback"/>
          </parameter>
          <parameter name="hunk_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="9">
            <doc xml:space="preserve">
 a #GgitDiffHunkCallback.</doc>
            <type name="DiffHunkCallback" c:type="GgitDiffHunkCallback"/>
          </parameter>
          <parameter name="line_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="9">
            <doc xml:space="preserve">
 a #GgitDiffLineCallback.</doc>
            <type name="DiffLineCallback" c:type="GgitDiffLineCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
        </parameters>
      </function>
      <method name="find_similar"
              c:identifier="ggit_diff_find_similar"
              throws="1">
        <doc xml:space="preserve">Transform @diff marking file renames, copies, etc.. If @options is set to
%NULL, then the default options will be used.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there were no errors, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="diff" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </instance-parameter>
          <parameter name="options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffFindOptions or %NULL.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach" c:identifier="ggit_diff_foreach" throws="1">
        <doc xml:space="preserve">Iterates over the diff calling @file_cb, @binary_cb, @hunk_cb and @line_cb.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="diff" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </instance-parameter>
          <parameter name="file_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="4">
            <doc xml:space="preserve">
 a #GgitDiffFileCallback.</doc>
            <type name="DiffFileCallback" c:type="GgitDiffFileCallback"/>
          </parameter>
          <parameter name="binary_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="4">
            <doc xml:space="preserve">
 a #GgitDiffBinaryCallback.</doc>
            <type name="DiffBinaryCallback" c:type="GgitDiffBinaryCallback"/>
          </parameter>
          <parameter name="hunk_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="4">
            <doc xml:space="preserve">
 a #GgitDiffHunkCallback.</doc>
            <type name="DiffHunkCallback" c:type="GgitDiffHunkCallback"/>
          </parameter>
          <parameter name="line_cb"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="4">
            <doc xml:space="preserve">
 a #GgitDiffLineCallback.</doc>
            <type name="DiffLineCallback" c:type="GgitDiffLineCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
        </parameters>
      </method>
      <method name="format_email"
              c:identifier="ggit_diff_format_email"
              throws="1">
        <doc xml:space="preserve">Create an e-mail ready patch from a diff.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the patch or %NULL if an error occurred.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="diff" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </instance-parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_num_deltas" c:identifier="ggit_diff_get_num_deltas">
        <doc xml:space="preserve">Get the number of deltas in the diff.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of deltas.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="diff" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="merge" c:identifier="ggit_diff_merge" throws="1">
        <doc xml:space="preserve">Merges @from into @onto unless @error is set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="onto" transfer-ownership="none">
            <doc xml:space="preserve">the #GgitDiff to merge into.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </instance-parameter>
          <parameter name="from" transfer-ownership="none">
            <doc xml:space="preserve">the #GgitDiff to merge.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </parameter>
        </parameters>
      </method>
      <method name="print" c:identifier="ggit_diff_print" throws="1">
        <doc xml:space="preserve">Iterates over @diff generating text output like "git diff".</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="diff" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatType.</doc>
            <type name="DiffFormatType" c:type="GgitDiffFormatType"/>
          </parameter>
          <parameter name="print_cb"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <doc xml:space="preserve">a #GgitDiffLineCallback.</doc>
            <type name="DiffLineCallback" c:type="GgitDiffLineCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
        </parameters>
      </method>
      <property name="repository"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Repository"/>
      </property>
      <field name="parent_instance">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <record name="DiffBinary"
            c:type="GgitDiffBinary"
            glib:type-name="GgitDiffBinary"
            glib:get-type="ggit_diff_binary_get_type"
            c:symbol-prefix="diff_binary">
      <doc xml:space="preserve">Represents a diff binary.</doc>
      <method name="get_new_file" c:identifier="ggit_diff_binary_get_new_file">
        <doc xml:space="preserve">Gets the #GgitDiffBinaryFile new file for @binary.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the contents of the new file.</doc>
          <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="binary" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinary.</doc>
            <type name="DiffBinary" c:type="GgitDiffBinary*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_old_file" c:identifier="ggit_diff_binary_get_old_file">
        <doc xml:space="preserve">Gets the #GgitDiffBinaryFile old file for @binary.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the contents of the old file.</doc>
          <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="binary" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinary.</doc>
            <type name="DiffBinary" c:type="GgitDiffBinary*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_diff_binary_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @binary by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffBinary.</doc>
          <type name="DiffBinary" c:type="GgitDiffBinary*"/>
        </return-value>
        <parameters>
          <instance-parameter name="binary" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinary.</doc>
            <type name="DiffBinary" c:type="GgitDiffBinary*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_diff_binary_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @binary by one.
If the reference count drops to 0, @binary is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="binary" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinary.</doc>
            <type name="DiffBinary" c:type="GgitDiffBinary*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="DiffBinaryCallback" c:type="GgitDiffBinaryCallback">
      <doc xml:space="preserve">Called for each file.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="delta" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffDelta.</doc>
          <type name="DiffDelta" c:type="GgitDiffDelta*"/>
        </parameter>
        <parameter name="binary" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffBinary.</doc>
          <type name="DiffBinary" c:type="GgitDiffBinary*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="DiffBinaryFile"
            c:type="GgitDiffBinaryFile"
            glib:type-name="GgitDiffBinaryFile"
            glib:get-type="ggit_diff_binary_file_get_type"
            c:symbol-prefix="diff_binary_file">
      <doc xml:space="preserve">Represents a diff binary file.</doc>
      <method name="get_binary_type"
              c:identifier="ggit_diff_binary_file_get_binary_type">
        <doc xml:space="preserve">Gets the #GgitDiffBinaryType for @file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file's binary type.</doc>
          <type name="DiffBinaryType" c:type="GgitDiffBinaryType"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinaryFile.</doc>
            <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_data" c:identifier="ggit_diff_binary_file_get_data">
        <doc xml:space="preserve">Get the binary data. This data should not be modified.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a pointer to the binary data, or %NULL.</doc>
          <type name="guint8" c:type="const guint8*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinaryFile.</doc>
            <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
          </instance-parameter>
          <parameter name="size"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">location to return size of byte data.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_inflated_size"
              c:identifier="ggit_diff_binary_file_get_inflated_size">
        <doc xml:space="preserve">Gets the length of the binary data after inflation.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the length of the binary data after inflation.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinaryFile.</doc>
            <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_diff_binary_file_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @file by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffBinaryFile.</doc>
          <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_diff_binary_file_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @file by one.
If the reference count drops to 0, @file is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffBinaryFile.</doc>
            <type name="DiffBinaryFile" c:type="GgitDiffBinaryFile*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="DiffBinaryType"
                 glib:type-name="GgitDiffBinaryType"
                 glib:get-type="ggit_diff_binary_type_get_type"
                 c:type="GgitDiffBinaryType">
      <doc xml:space="preserve">When producing a binary diff, the binary data returned will be
either the deflated full ("literal") contents of the file, or
the deflated binary delta between the two sides (whichever is
smaller).</doc>
      <member name="none"
              value="0"
              c:identifier="GGIT_DIFF_BINARY_NONE"
              glib:nick="none">
      </member>
      <member name="literal"
              value="1"
              c:identifier="GGIT_DIFF_BINARY_LITERAL"
              glib:nick="literal">
      </member>
      <member name="delta"
              value="2"
              c:identifier="GGIT_DIFF_BINARY_DELTA"
              glib:nick="delta">
      </member>
    </enumeration>
    <record name="DiffClass"
            c:type="GgitDiffClass"
            glib:is-gtype-struct-for="Diff">
      <doc xml:space="preserve">The class structure for #GgitDiffClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <record name="DiffDelta"
            c:type="GgitDiffDelta"
            glib:type-name="GgitDiffDelta"
            glib:get-type="ggit_diff_delta_get_type"
            c:symbol-prefix="diff_delta">
      <doc xml:space="preserve">Represents the changes done to one file.</doc>
      <method name="get_flags" c:identifier="ggit_diff_delta_get_flags">
        <doc xml:space="preserve">Gets flags for @delta.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the delta flags</doc>
          <type name="DiffFlag" c:type="GgitDiffFlag"/>
        </return-value>
        <parameters>
          <instance-parameter name="delta" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffDelta.</doc>
            <type name="DiffDelta" c:type="GgitDiffDelta*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_new_file" c:identifier="ggit_diff_delta_get_new_file">
        <doc xml:space="preserve">Gets the new file for @delta.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the delta's new file.</doc>
          <type name="DiffFile" c:type="GgitDiffFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="delta" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffDelta.</doc>
            <type name="DiffDelta" c:type="GgitDiffDelta*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_old_file" c:identifier="ggit_diff_delta_get_old_file">
        <doc xml:space="preserve">Gets the old file for @delta.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the delta's old file.</doc>
          <type name="DiffFile" c:type="GgitDiffFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="delta" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffDelta.</doc>
            <type name="DiffDelta" c:type="GgitDiffDelta*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_similarity"
              c:identifier="ggit_diff_delta_get_similarity">
        <doc xml:space="preserve">Gets the similarity between @delta files.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the delta's similarity.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="delta" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffDelta.</doc>
            <type name="DiffDelta" c:type="GgitDiffDelta*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_status" c:identifier="ggit_diff_delta_get_status">
        <doc xml:space="preserve">Gets the #GgitDeltaType for @delta.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the delta's status.</doc>
          <type name="DeltaType" c:type="GgitDeltaType"/>
        </return-value>
        <parameters>
          <instance-parameter name="delta" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffDelta.</doc>
            <type name="DiffDelta" c:type="GgitDiffDelta*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_diff_delta_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @delta by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffDelta.</doc>
          <type name="DiffDelta" c:type="GgitDiffDelta*"/>
        </return-value>
        <parameters>
          <instance-parameter name="delta" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffDelta.</doc>
            <type name="DiffDelta" c:type="GgitDiffDelta*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_diff_delta_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @delta by one.
If the reference count drops to 0, @delta is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="delta" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffDelta.</doc>
            <type name="DiffDelta" c:type="GgitDiffDelta*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="DiffFile"
            c:type="GgitDiffFile"
            glib:type-name="GgitDiffFile"
            glib:get-type="ggit_diff_file_get_type"
            c:symbol-prefix="diff_file">
      <doc xml:space="preserve">Represents a file in a #GgitDiff.</doc>
      <method name="get_flags" c:identifier="ggit_diff_file_get_flags">
        <doc xml:space="preserve">Gets the #GgitDifflags for @file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file's flags.</doc>
          <type name="DiffFlag" c:type="GgitDiffFlag"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFile.</doc>
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mode" c:identifier="ggit_diff_file_get_mode">
        <doc xml:space="preserve">Gets the mode for @file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file's mode.</doc>
          <type name="guint16" c:type="guint16"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFile.</doc>
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_oid" c:identifier="ggit_diff_file_get_oid">
        <doc xml:space="preserve">Gets the #GgitOId for @file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file's #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFile.</doc>
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_path" c:identifier="ggit_diff_file_get_path">
        <doc xml:space="preserve">Gets the path of @file or %NULL if it is unknown.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the file's path, or %NULL.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFile.</doc>
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_size" c:identifier="ggit_diff_file_get_size">
        <doc xml:space="preserve">Gets the size for @file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file's size.</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFile.</doc>
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_diff_file_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @file by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffFile.</doc>
          <type name="DiffFile" c:type="GgitDiffFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_diff_file_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @file by one.
If the reference count drops to 0, @file is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFile.</doc>
            <type name="DiffFile" c:type="GgitDiffFile*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="DiffFileCallback" c:type="GgitDiffFileCallback">
      <doc xml:space="preserve">Called for each file.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="delta" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffDelta.</doc>
          <type name="DiffDelta" c:type="GgitDiffDelta*"/>
        </parameter>
        <parameter name="progress" transfer-ownership="none">
          <doc xml:space="preserve">the progress.</doc>
          <type name="gfloat" c:type="gfloat"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="DiffFindFlags"
              glib:type-name="GgitDiffFindFlags"
              glib:get-type="ggit_diff_find_flags_get_type"
              c:type="GgitDiffFindFlags">
      <member name="find_by_config"
              value="0"
              c:identifier="GGIT_DIFF_FIND_BY_CONFIG"
              glib:nick="find-by-config">
      </member>
      <member name="find_renames"
              value="1"
              c:identifier="GGIT_DIFF_FIND_RENAMES"
              glib:nick="find-renames">
      </member>
      <member name="find_renames_from_rewrites"
              value="2"
              c:identifier="GGIT_DIFF_FIND_RENAMES_FROM_REWRITES"
              glib:nick="find-renames-from-rewrites">
      </member>
      <member name="find_copies"
              value="4"
              c:identifier="GGIT_DIFF_FIND_COPIES"
              glib:nick="find-copies">
      </member>
      <member name="find_copies_from_unmodified"
              value="8"
              c:identifier="GGIT_DIFF_FIND_COPIES_FROM_UNMODIFIED"
              glib:nick="find-copies-from-unmodified">
      </member>
      <member name="find_rewrites"
              value="16"
              c:identifier="GGIT_DIFF_FIND_REWRITES"
              glib:nick="find-rewrites">
      </member>
      <member name="break_rewrites"
              value="32"
              c:identifier="GGIT_DIFF_BREAK_REWRITES"
              glib:nick="break-rewrites">
      </member>
      <member name="find_and_break_rewrites"
              value="48"
              c:identifier="GGIT_DIFF_FIND_AND_BREAK_REWRITES"
              glib:nick="find-and-break-rewrites">
      </member>
      <member name="find_for_untracked"
              value="64"
              c:identifier="GGIT_DIFF_FIND_FOR_UNTRACKED"
              glib:nick="find-for-untracked">
      </member>
      <member name="find_all"
              value="255"
              c:identifier="GGIT_DIFF_FIND_ALL"
              glib:nick="find-all">
      </member>
      <member name="find_ignore_leading_whitespace"
              value="0"
              c:identifier="GGIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE"
              glib:nick="find-ignore-leading-whitespace">
      </member>
      <member name="find_ignore_whitespace"
              value="4096"
              c:identifier="GGIT_DIFF_FIND_IGNORE_WHITESPACE"
              glib:nick="find-ignore-whitespace">
      </member>
      <member name="find_dont_ignore_whitespace"
              value="8192"
              c:identifier="GGIT_DIFF_FIND_DONT_IGNORE_WHITESPACE"
              glib:nick="find-dont-ignore-whitespace">
      </member>
      <member name="find_exact_match_only"
              value="16384"
              c:identifier="GGIT_DIFF_FIND_EXACT_MATCH_ONLY"
              glib:nick="find-exact-match-only">
      </member>
      <member name="break_rewrites_for_renames_only"
              value="32768"
              c:identifier="GGIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY"
              glib:nick="break-rewrites-for-renames-only">
      </member>
      <member name="find_remove_unmodified"
              value="65536"
              c:identifier="GGIT_DIFF_FIND_REMOVE_UNMODIFIED"
              glib:nick="find-remove-unmodified">
      </member>
    </bitfield>
    <class name="DiffFindOptions"
           c:symbol-prefix="diff_find_options"
           c:type="GgitDiffFindOptions"
           parent="GObject.Object"
           glib:type-name="GgitDiffFindOptions"
           glib:get-type="ggit_diff_find_options_get_type"
           glib:type-struct="DiffFindOptionsClass">
      <doc xml:space="preserve">Represents options for finding diff similarity.</doc>
      <constructor name="new" c:identifier="ggit_diff_find_options_new">
        <doc xml:space="preserve">Creates a new #GgitDiffFindOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitDiffFindOptions.</doc>
          <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
        </return-value>
      </constructor>
      <method name="get_copy_threshold"
              c:identifier="ggit_diff_find_options_get_copy_threshold">
        <doc xml:space="preserve">Get the find options copy threshold.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the copy threshold.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flags" c:identifier="ggit_diff_find_options_get_flags">
        <doc xml:space="preserve">Get the find options flags.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the find options flags.</doc>
          <type name="DiffFindFlags" c:type="GgitDiffFindFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_metric"
              c:identifier="ggit_diff_find_options_get_metric">
        <doc xml:space="preserve">Get the find options metric.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffSimilarityMetric or %NULL.</doc>
          <type name="DiffSimilarityMetric"
                c:type="GgitDiffSimilarityMetric*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rename_from_rewrite_threshold"
              c:identifier="ggit_diff_find_options_get_rename_from_rewrite_threshold">
        <doc xml:space="preserve">Get the find options rename from rewrite threshold.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the rename from rewrite threshold.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rename_limit"
              c:identifier="ggit_diff_find_options_get_rename_limit">
        <doc xml:space="preserve">Get the find options rename limit.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the rename limit.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rename_threshold"
              c:identifier="ggit_diff_find_options_get_rename_threshold">
        <doc xml:space="preserve">Get the find options rename threshold.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the rename threshold.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_copy_threshold"
              c:identifier="ggit_diff_find_options_set_copy_threshold">
        <doc xml:space="preserve">Set the find options copy threshold.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
          <parameter name="threshold" transfer-ownership="none">
            <doc xml:space="preserve">the threshold.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_flags" c:identifier="ggit_diff_find_options_set_flags">
        <doc xml:space="preserve">Set the find options flags.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindFlags.</doc>
            <type name="DiffFindFlags" c:type="GgitDiffFindFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_metric"
              c:identifier="ggit_diff_find_options_set_metric">
        <doc xml:space="preserve">Set the find options metric.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
          <parameter name="metric" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffSimilarityMetric.</doc>
            <type name="DiffSimilarityMetric"
                  c:type="GgitDiffSimilarityMetric*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_rename_from_rewrite_threshold"
              c:identifier="ggit_diff_find_options_set_rename_from_rewrite_threshold">
        <doc xml:space="preserve">Set the find options rename from rewrite threshold.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
          <parameter name="threshold" transfer-ownership="none">
            <doc xml:space="preserve">the threshold.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_rename_limit"
              c:identifier="ggit_diff_find_options_set_rename_limit">
        <doc xml:space="preserve">Set the find options rename limit.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
          <parameter name="limit" transfer-ownership="none">
            <doc xml:space="preserve">the limit.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_rename_threshold"
              c:identifier="ggit_diff_find_options_set_rename_threshold">
        <doc xml:space="preserve">Set the find options rename threshold.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFindOptions.</doc>
            <type name="DiffFindOptions" c:type="GgitDiffFindOptions*"/>
          </instance-parameter>
          <parameter name="threshold" transfer-ownership="none">
            <doc xml:space="preserve">the threshold.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <property name="copy-threshold" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="flags" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">The diff option flags.</doc>
        <type name="DiffFindFlags"/>
      </property>
      <property name="metric" writable="1" transfer-ownership="none">
        <type name="DiffSimilarityMetric"/>
      </property>
      <property name="rename-from-rewrite-threshold"
                writable="1"
                transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="rename-limit" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="rename-threshold" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="DiffFindOptionsClass"
            c:type="GgitDiffFindOptionsClass"
            glib:is-gtype-struct-for="DiffFindOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <bitfield name="DiffFlag"
              glib:type-name="GgitDiffFlag"
              glib:get-type="ggit_diff_flag_get_type"
              c:type="GgitDiffFlag">
      <doc xml:space="preserve">Describes the diff file and/or delta flags</doc>
      <member name="binary"
              value="1"
              c:identifier="GGIT_DIFF_FLAG_BINARY"
              glib:nick="binary">
        <doc xml:space="preserve">if the file is binary.</doc>
      </member>
      <member name="not_binary"
              value="2"
              c:identifier="GGIT_DIFF_FLAG_NOT_BINARY"
              glib:nick="not-binary">
        <doc xml:space="preserve">if the file is not binary.</doc>
      </member>
      <member name="valid_id"
              value="4"
              c:identifier="GGIT_DIFF_FLAG_VALID_ID"
              glib:nick="valid-id">
        <doc xml:space="preserve">if the ID is valid.</doc>
      </member>
    </bitfield>
    <bitfield name="DiffFormatEmailFlags"
              glib:type-name="GgitDiffFormatEmailFlags"
              glib:get-type="ggit_diff_format_email_flags_get_type"
              c:type="GgitDiffFormatEmailFlags">
      <member name="none"
              value="0"
              c:identifier="GGIT_DIFF_FORMAT_EMAIL_NONE"
              glib:nick="none">
      </member>
      <member name="exclude_subject_patch_marker"
              value="1"
              c:identifier="GGIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER"
              glib:nick="exclude-subject-patch-marker">
      </member>
    </bitfield>
    <class name="DiffFormatEmailOptions"
           c:symbol-prefix="diff_format_email_options"
           c:type="GgitDiffFormatEmailOptions"
           parent="GObject.Object"
           glib:type-name="GgitDiffFormatEmailOptions"
           glib:get-type="ggit_diff_format_email_options_get_type"
           glib:type-struct="DiffFormatEmailOptionsClass">
      <constructor name="new"
                   c:identifier="ggit_diff_format_email_options_new">
        <doc xml:space="preserve">Create a new checkout options object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
          <type name="DiffFormatEmailOptions"
                c:type="GgitDiffFormatEmailOptions*"/>
        </return-value>
      </constructor>
      <method name="get_author"
              c:identifier="ggit_diff_format_email_options_get_author">
        <doc xml:space="preserve">Get the author.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitSignature.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flags"
              c:identifier="ggit_diff_format_email_options_get_flags">
        <doc xml:space="preserve">Get the flags.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffFormatEmailFlags.</doc>
          <type name="DiffFormatEmailFlags" c:type="GgitDiffFormatEmailFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id"
              c:identifier="ggit_diff_format_email_options_get_id">
        <doc xml:space="preserve">Get the object id.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_patch_number"
              c:identifier="ggit_diff_format_email_options_get_patch_number">
        <doc xml:space="preserve">Get the patch number.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the patch number.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_summary"
              c:identifier="ggit_diff_format_email_options_get_summary">
        <doc xml:space="preserve">Get the summary.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the summary.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_total_patches"
              c:identifier="ggit_diff_format_email_options_get_total_patches">
        <doc xml:space="preserve">Get the total number of patches.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the total number of patches.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_author"
              c:identifier="ggit_diff_format_email_options_set_author">
        <doc xml:space="preserve">Set the author.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
          <parameter name="author"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_flags"
              c:identifier="ggit_diff_format_email_options_set_flags">
        <doc xml:space="preserve">Set the flags.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailFlags.</doc>
            <type name="DiffFormatEmailFlags"
                  c:type="GgitDiffFormatEmailFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_id"
              c:identifier="ggit_diff_format_email_options_set_id">
        <doc xml:space="preserve">Set the object id.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
          <parameter name="id"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_patch_number"
              c:identifier="ggit_diff_format_email_options_set_patch_number">
        <doc xml:space="preserve">Set the patch number.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
          <parameter name="number" transfer-ownership="none">
            <doc xml:space="preserve">the patch number.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_summary"
              c:identifier="ggit_diff_format_email_options_set_summary">
        <doc xml:space="preserve">Set the summary.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
          <parameter name="summary"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the summary.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_total_patches"
              c:identifier="ggit_diff_format_email_options_set_total_patches">
        <doc xml:space="preserve">Set the total number of patches.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffFormatEmailOptions.</doc>
            <type name="DiffFormatEmailOptions"
                  c:type="GgitDiffFormatEmailOptions*"/>
          </instance-parameter>
          <parameter name="patches" transfer-ownership="none">
            <doc xml:space="preserve">the total number of patches.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <property name="author" writable="1" transfer-ownership="none">
        <type name="Signature"/>
      </property>
      <property name="flags" writable="1" transfer-ownership="none">
        <type name="DiffFormatEmailFlags"/>
      </property>
      <property name="id" writable="1" transfer-ownership="none">
        <type name="OId"/>
      </property>
      <property name="patch-number" writable="1" transfer-ownership="none">
        <type name="guint64" c:type="guint64"/>
      </property>
      <property name="summary" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="total-patches" writable="1" transfer-ownership="none">
        <type name="guint64" c:type="guint64"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="DiffFormatEmailOptionsClass"
            c:type="GgitDiffFormatEmailOptionsClass"
            glib:is-gtype-struct-for="DiffFormatEmailOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="DiffFormatType"
                 glib:type-name="GgitDiffFormatType"
                 glib:get-type="ggit_diff_format_type_get_type"
                 c:type="GgitDiffFormatType">
      <doc xml:space="preserve">Possible output formats for diff data.</doc>
      <member name="patch"
              value="1"
              c:identifier="GGIT_DIFF_FORMAT_PATCH"
              glib:nick="patch">
        <doc xml:space="preserve">full git diff.</doc>
      </member>
      <member name="patch_header"
              value="2"
              c:identifier="GGIT_DIFF_FORMAT_PATCH_HEADER"
              glib:nick="patch-header">
        <doc xml:space="preserve">just the file headers of patch.</doc>
      </member>
      <member name="raw"
              value="3"
              c:identifier="GGIT_DIFF_FORMAT_RAW"
              glib:nick="raw">
        <doc xml:space="preserve">like git diff --raw.</doc>
      </member>
      <member name="name_only"
              value="4"
              c:identifier="GGIT_DIFF_FORMAT_NAME_ONLY"
              glib:nick="name-only">
        <doc xml:space="preserve">like git diff --name-only.</doc>
      </member>
      <member name="name_status"
              value="5"
              c:identifier="GGIT_DIFF_FORMAT_NAME_STATUS"
              glib:nick="name-status">
        <doc xml:space="preserve">like git diff --name-status.</doc>
      </member>
    </enumeration>
    <record name="DiffHunk"
            c:type="GgitDiffHunk"
            glib:type-name="GgitDiffHunk"
            glib:get-type="ggit_diff_hunk_get_type"
            c:symbol-prefix="diff_hunk">
      <doc xml:space="preserve">Represents the hunk of a diff.</doc>
      <method name="get_header" c:identifier="ggit_diff_hunk_get_header">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="hunk" transfer-ownership="none">
            <type name="DiffHunk" c:type="GgitDiffHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_new_lines" c:identifier="ggit_diff_hunk_get_new_lines">
        <doc xml:space="preserve">Gets the number of lines in the new file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of lines in the new file.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffHunk.</doc>
            <type name="DiffHunk" c:type="GgitDiffHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_new_start" c:identifier="ggit_diff_hunk_get_new_start">
        <doc xml:space="preserve">Gets the starting line number in the new file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the starting line number in the new file.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffHunk.</doc>
            <type name="DiffHunk" c:type="GgitDiffHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_old_lines" c:identifier="ggit_diff_hunk_get_old_lines">
        <doc xml:space="preserve">Gets the number of lines in the old file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of lines in the old file.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffHunk.</doc>
            <type name="DiffHunk" c:type="GgitDiffHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_old_start" c:identifier="ggit_diff_hunk_get_old_start">
        <doc xml:space="preserve">Gets the starting line number in the old file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the starting line number in the old file.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffHunk.</doc>
            <type name="DiffHunk" c:type="GgitDiffHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_diff_hunk_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @hunk by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffHunk.</doc>
          <type name="DiffHunk" c:type="GgitDiffHunk*"/>
        </return-value>
        <parameters>
          <instance-parameter name="hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffHunk.</doc>
            <type name="DiffHunk" c:type="GgitDiffHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_diff_hunk_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @hunk by one.
If the reference count drops to 0, @hunk is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="hunk" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffHunk.</doc>
            <type name="DiffHunk" c:type="GgitDiffHunk*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="DiffHunkCallback" c:type="GgitDiffHunkCallback">
      <doc xml:space="preserve">Called for each hunk.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="delta" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffDelta.</doc>
          <type name="DiffDelta" c:type="GgitDiffDelta*"/>
        </parameter>
        <parameter name="hunk" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffHunk.</doc>
          <type name="DiffHunk" c:type="GgitDiffHunk*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="DiffLine"
            c:type="GgitDiffLine"
            glib:type-name="GgitDiffLine"
            glib:get-type="ggit_diff_line_get_type"
            c:symbol-prefix="diff_line">
      <doc xml:space="preserve">Represents the line of a diff.</doc>
      <method name="get_content" c:identifier="ggit_diff_line_get_content">
        <doc xml:space="preserve">Gets the content in bytes.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the content in bytes.</doc>
          <array length="0" zero-terminated="0" c:type="guint8*">
            <type name="guint8" c:type="guint8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
          <parameter name="length"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">the number of returned bytes.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_content_offset"
              c:identifier="ggit_diff_line_get_content_offset">
        <doc xml:space="preserve">Gets the content offset.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the content offset.</doc>
          <type name="gint64" c:type="gint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_new_lineno"
              c:identifier="ggit_diff_line_get_new_lineno">
        <doc xml:space="preserve">Gets the Line number in new file or -1 for deleted line.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the line's old number of lines.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_old_lineno"
              c:identifier="ggit_diff_line_get_old_lineno">
        <doc xml:space="preserve">Gets the line number in old file or -1 for added line.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the line's old line number.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_origin" c:identifier="ggit_diff_line_get_origin">
        <doc xml:space="preserve">Gets the #GgitDiffLineType value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GgitDiffLineType value.</doc>
          <type name="DiffLineType" c:type="GgitDiffLineType"/>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_text" c:identifier="ggit_diff_line_get_text">
        <doc xml:space="preserve">Get the content of the diff line as UTF-8 encoded text.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the content in utf-8 encoding.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_diff_line_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @line by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffLine.</doc>
          <type name="DiffLine" c:type="GgitDiffLine*"/>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_diff_line_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @line by one.
If the reference count drops to 0, @line is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="line" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffLine.</doc>
            <type name="DiffLine" c:type="GgitDiffLine*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="DiffLineCallback" c:type="GgitDiffLineCallback">
      <doc xml:space="preserve">Called for each line.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="delta" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffDelta.</doc>
          <type name="DiffDelta" c:type="GgitDiffDelta*"/>
        </parameter>
        <parameter name="hunk" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffHunk.</doc>
          <type name="DiffHunk" c:type="GgitDiffHunk*"/>
        </parameter>
        <parameter name="line" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffLine.</doc>
          <type name="DiffLine" c:type="GgitDiffLine*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="DiffLineType"
                 glib:type-name="GgitDiffLineType"
                 glib:get-type="ggit_diff_line_type_get_type"
                 c:type="GgitDiffLineType">
      <doc xml:space="preserve">These values describe where a line came from and will be passed to
the #GgitDiffLineCallback when iterating over a diff.

The #GGIT_DIFF_LINE_FILE_HDR, #GGIT_DIFF_LINE_HUNK_HDR and
#GGIT_DIFF_LINE_BINARY values are only sent when the diff is being printed.</doc>
      <member name="context"
              value="32"
              c:identifier="GGIT_DIFF_LINE_CONTEXT"
              glib:nick="context">
        <doc xml:space="preserve">line is part of the context.</doc>
      </member>
      <member name="addition"
              value="43"
              c:identifier="GGIT_DIFF_LINE_ADDITION"
              glib:nick="addition">
        <doc xml:space="preserve">line that was added.</doc>
      </member>
      <member name="deletion"
              value="45"
              c:identifier="GGIT_DIFF_LINE_DELETION"
              glib:nick="deletion">
        <doc xml:space="preserve">line that was removed.</doc>
      </member>
      <member name="context_eofnl"
              value="61"
              c:identifier="GGIT_DIFF_LINE_CONTEXT_EOFNL"
              glib:nick="context-eofnl">
        <doc xml:space="preserve">Both files have no LF at end.</doc>
      </member>
      <member name="add_eofnl"
              value="62"
              c:identifier="GGIT_DIFF_LINE_ADD_EOFNL"
              glib:nick="add-eofnl">
        <doc xml:space="preserve">LF was added at end of file.</doc>
      </member>
      <member name="del_eofnl"
              value="60"
              c:identifier="GGIT_DIFF_LINE_DEL_EOFNL"
              glib:nick="del-eofnl">
        <doc xml:space="preserve">LF was removed at end of file.</doc>
      </member>
      <member name="file_hdr"
              value="70"
              c:identifier="GGIT_DIFF_LINE_FILE_HDR"
              glib:nick="file-hdr">
        <doc xml:space="preserve">the file header.</doc>
      </member>
      <member name="hunk_hdr"
              value="72"
              c:identifier="GGIT_DIFF_LINE_HUNK_HDR"
              glib:nick="hunk-hdr">
        <doc xml:space="preserve">the hunk header.</doc>
      </member>
      <member name="binary"
              value="66"
              c:identifier="GGIT_DIFF_LINE_BINARY"
              glib:nick="binary">
        <doc xml:space="preserve">is binary.</doc>
      </member>
    </enumeration>
    <bitfield name="DiffOption"
              glib:type-name="GgitDiffOption"
              glib:get-type="ggit_diff_option_get_type"
              c:type="GgitDiffOption">
      <doc xml:space="preserve">How the diff should be generated.</doc>
      <member name="normal"
              value="0"
              c:identifier="GGIT_DIFF_NORMAL"
              glib:nick="normal">
        <doc xml:space="preserve">normal.</doc>
      </member>
      <member name="reverse"
              value="1"
              c:identifier="GGIT_DIFF_REVERSE"
              glib:nick="reverse">
        <doc xml:space="preserve">reverse the sides of the diff.</doc>
      </member>
      <member name="include_ignored"
              value="2"
              c:identifier="GGIT_DIFF_INCLUDE_IGNORED"
              glib:nick="include-ignored">
        <doc xml:space="preserve">include ignored files.</doc>
      </member>
      <member name="recurse_ignored_dirs"
              value="4"
              c:identifier="GGIT_DIFF_RECURSE_IGNORED_DIRS"
              glib:nick="recurse-ignored-dirs">
        <doc xml:space="preserve">also add all files under ignored dirs.</doc>
      </member>
      <member name="include_untracked"
              value="8"
              c:identifier="GGIT_DIFF_INCLUDE_UNTRACKED"
              glib:nick="include-untracked">
        <doc xml:space="preserve">include untracked files.</doc>
      </member>
      <member name="recurse_untracked_dirs"
              value="16"
              c:identifier="GGIT_DIFF_RECURSE_UNTRACKED_DIRS"
              glib:nick="recurse-untracked-dirs">
        <doc xml:space="preserve">recurse to untracked directories.</doc>
      </member>
      <member name="include_unmodified"
              value="32"
              c:identifier="GGIT_DIFF_INCLUDE_UNMODIFIED"
              glib:nick="include-unmodified">
        <doc xml:space="preserve">include unmodified files.</doc>
      </member>
      <member name="include_typechange"
              value="64"
              c:identifier="GGIT_DIFF_INCLUDE_TYPECHANGE"
              glib:nick="include-typechange">
        <doc xml:space="preserve">enable generation of typechange detal records.</doc>
      </member>
      <member name="include_typechange_trees"
              value="128"
              c:identifier="GGIT_DIFF_INCLUDE_TYPECHANGE_TREES"
              glib:nick="include-typechange-trees">
        <doc xml:space="preserve">try to label tree transitions as type changes.</doc>
      </member>
      <member name="ignore_file_mode"
              value="256"
              c:identifier="GGIT_DIFF_IGNORE_FILE_MODE"
              glib:nick="ignore-file-mode">
        <doc xml:space="preserve">ignore file mode changes.</doc>
      </member>
      <member name="ignore_submodules"
              value="512"
              c:identifier="GGIT_DIFF_IGNORE_SUBMODULES"
              glib:nick="ignore-submodules">
        <doc xml:space="preserve">ignore submodules.</doc>
      </member>
      <member name="ignore_case"
              value="1024"
              c:identifier="GGIT_DIFF_IGNORE_CASE"
              glib:nick="ignore-case">
        <doc xml:space="preserve">use case insensitive filename comparison.</doc>
      </member>
      <member name="disable_pathspec_match"
              value="4096"
              c:identifier="GGIT_DIFF_DISABLE_PATHSPEC_MATCH"
              glib:nick="disable-pathspec-match">
        <doc xml:space="preserve">use exact path matching.</doc>
      </member>
      <member name="skip_binary_check"
              value="8192"
              c:identifier="GGIT_DIFF_SKIP_BINARY_CHECK"
              glib:nick="skip-binary-check">
        <doc xml:space="preserve">disable updating the binary flag in delta records.</doc>
      </member>
      <member name="enable_fast_untracked_dirs"
              value="16384"
              c:identifier="GGIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS"
              glib:nick="enable-fast-untracked-dirs">
        <doc xml:space="preserve">immediately label untracked directories as
untracked, without checking inside.</doc>
      </member>
      <member name="force_text"
              value="1048576"
              c:identifier="GGIT_DIFF_FORCE_TEXT"
              glib:nick="force-text">
        <doc xml:space="preserve">force text.</doc>
      </member>
      <member name="force_binary"
              value="2097152"
              c:identifier="GGIT_DIFF_FORCE_BINARY"
              glib:nick="force-binary">
        <doc xml:space="preserve">treat all files as binary, disabling text diffs.</doc>
      </member>
      <member name="ignore_whitespace"
              value="4194304"
              c:identifier="GGIT_DIFF_IGNORE_WHITESPACE"
              glib:nick="ignore-whitespace">
        <doc xml:space="preserve">ignore whitespace.</doc>
      </member>
      <member name="ignore_whitespace_change"
              value="8388608"
              c:identifier="GGIT_DIFF_IGNORE_WHITESPACE_CHANGE"
              glib:nick="ignore-whitespace-change">
        <doc xml:space="preserve">ignore whitespace change.</doc>
      </member>
      <member name="ignore_whitespace_eol"
              value="16777216"
              c:identifier="GGIT_DIFF_IGNORE_WHITESPACE_EOL"
              glib:nick="ignore-whitespace-eol">
        <doc xml:space="preserve">ignore whitespace at end-of-line.</doc>
      </member>
      <member name="show_untracked_content"
              value="33554432"
              c:identifier="GGIT_DIFF_SHOW_UNTRACKED_CONTENT"
              glib:nick="show-untracked-content">
        <doc xml:space="preserve">include content of untracked files.
this implies GGIT_DIFF_INCLUDE_UNTRACKED but not GGIT_DIFF_RECURSE_UNTRACKED_DIRS.</doc>
      </member>
      <member name="show_unmodified"
              value="67108864"
              c:identifier="GGIT_DIFF_SHOW_UNMODIFIED"
              glib:nick="show-unmodified">
        <doc xml:space="preserve">show unmodified files.</doc>
      </member>
      <member name="patience"
              value="268435456"
              c:identifier="GGIT_DIFF_PATIENCE"
              glib:nick="patience">
        <doc xml:space="preserve">generate using the "patience diff" algorithm.</doc>
      </member>
      <member name="minimal"
              value="536870912"
              c:identifier="GGIT_DIFF_MINIMAL"
              glib:nick="minimal">
        <doc xml:space="preserve">take extra time to find minimal diff.</doc>
      </member>
      <member name="show_binary"
              value="1073741824"
              c:identifier="GGIT_DIFF_SHOW_BINARY"
              glib:nick="show-binary">
        <doc xml:space="preserve">include deflate/delta information for binary files.</doc>
      </member>
    </bitfield>
    <class name="DiffOptions"
           c:symbol-prefix="diff_options"
           c:type="GgitDiffOptions"
           parent="GObject.Object"
           glib:type-name="GgitDiffOptions"
           glib:get-type="ggit_diff_options_get_type"
           glib:type-struct="DiffOptionsClass">
      <doc xml:space="preserve">Represents the options used when creating a #GgitDiff.</doc>
      <constructor name="new" c:identifier="ggit_diff_options_new">
        <doc xml:space="preserve">Create a new diff options object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitDiffOptions.</doc>
          <type name="DiffOptions" c:type="GgitDiffOptions*"/>
        </return-value>
      </constructor>
      <method name="get_flags" c:identifier="ggit_diff_options_get_flags">
        <doc xml:space="preserve">Get the diff flags.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitDiffOption.</doc>
          <type name="DiffOption" c:type="GgitDiffOption"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_n_context_lines"
              c:identifier="ggit_diff_options_get_n_context_lines">
        <doc xml:space="preserve">Get the number of context lines to include in the diff.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of context lines.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_n_interhunk_lines"
              c:identifier="ggit_diff_options_get_n_interhunk_lines">
        <doc xml:space="preserve">Get the number of interhunk lines to include in the diff.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of lines.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_new_prefix"
              c:identifier="ggit_diff_options_get_new_prefix">
        <doc xml:space="preserve">Get the diff new-prefix string.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the new-prefix string.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_old_prefix"
              c:identifier="ggit_diff_options_get_old_prefix">
        <doc xml:space="preserve">Get the diff old-prefix string.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the old-prefix string.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_pathspec"
              c:identifier="ggit_diff_options_get_pathspec">
        <doc xml:space="preserve">Get the pathspec.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the pathspec.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_flags" c:identifier="ggit_diff_options_set_flags">
        <doc xml:space="preserve">Set the diff flags.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOption.</doc>
            <type name="DiffOption" c:type="GgitDiffOption"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_n_context_lines"
              c:identifier="ggit_diff_options_set_n_context_lines">
        <doc xml:space="preserve">Set the number of context lines to include in the diff.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
          <parameter name="n" transfer-ownership="none">
            <doc xml:space="preserve">the number of lines.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_n_interhunk_lines"
              c:identifier="ggit_diff_options_set_n_interhunk_lines">
        <doc xml:space="preserve">Set the number of interhunk lines to include in the diff.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
          <parameter name="n" transfer-ownership="none">
            <doc xml:space="preserve">the number of lines.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_new_prefix"
              c:identifier="ggit_diff_options_set_new_prefix">
        <doc xml:space="preserve">Set the diff new-prefix string.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
          <parameter name="prefix" transfer-ownership="none">
            <doc xml:space="preserve">the prefix.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_old_prefix"
              c:identifier="ggit_diff_options_set_old_prefix">
        <doc xml:space="preserve">Get the diff old-prefix string.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
          <parameter name="prefix" transfer-ownership="none">
            <doc xml:space="preserve">the prefix.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_pathspec"
              c:identifier="ggit_diff_options_set_pathspec">
        <doc xml:space="preserve">Set the pathspec.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffOptions.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </instance-parameter>
          <parameter name="pathspec"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the pathspec.</doc>
            <array c:type="gchar**">
              <type name="utf8" c:type="gchar*"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <property name="flags"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">The diff option flags.</doc>
        <type name="DiffOption"/>
      </property>
      <property name="n-context-lines"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="n-interhunk-lines"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="new-prefix"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="old-prefix"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="pathspec"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="DiffOptionsClass"
            c:type="GgitDiffOptionsClass"
            glib:is-gtype-struct-for="DiffOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="DiffSimilarityMetric"
            c:type="GgitDiffSimilarityMetric"
            glib:type-name="GgitDiffSimilarityMetric"
            glib:get-type="ggit_diff_similarity_metric_get_type"
            c:symbol-prefix="diff_similarity_metric">
      <doc xml:space="preserve">Represents a similarity metric.</doc>
      <constructor name="new" c:identifier="ggit_diff_similarity_metric_new">
        <doc xml:space="preserve">Creates a new #GgitDiffSimilarityMetric.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitDiffSimilarityMetric.</doc>
          <type name="DiffSimilarityMetric"
                c:type="GgitDiffSimilarityMetric*"/>
        </return-value>
        <parameters>
          <parameter name="file_signature"
                     transfer-ownership="none"
                     scope="call">
            <doc xml:space="preserve">a #GgitDiffSimilarityMetricFileSignature.</doc>
            <type name="DiffSimilarityMetricFileSignatureCallback"
                  c:type="GgitDiffSimilarityMetricFileSignatureCallback"/>
          </parameter>
          <parameter name="buffer_signature"
                     transfer-ownership="none"
                     scope="call">
            <doc xml:space="preserve">a #GgitDiffSimilarityMetricBufferSignature.</doc>
            <type name="DiffSimilarityMetricBufferSignatureCallback"
                  c:type="GgitDiffSimilarityMetricBufferSignatureCallback"/>
          </parameter>
          <parameter name="free_signature"
                     transfer-ownership="none"
                     scope="call">
            <doc xml:space="preserve">a #GgitDiffSimilarityMetricFreeSignature.</doc>
            <type name="DiffSimilarityMetricFreeSignatureCallback"
                  c:type="GgitDiffSimilarityMetricFreeSignatureCallback"/>
          </parameter>
          <parameter name="similarity"
                     transfer-ownership="none"
                     scope="call"
                     closure="4">
            <doc xml:space="preserve">a #GgitDiffSimilarityMetricSimilarity.</doc>
            <type name="DiffSimilarityMetricSimilarityCallback"
                  c:type="GgitDiffSimilarityMetricSimilarityCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">passed as user_data to the previous parameters.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy" c:identifier="ggit_diff_similarity_metric_copy">
        <doc xml:space="preserve">Copies @metric into a newly allocated #GgitDiffSimilarityMetric.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitDiffSimilarityMetric.</doc>
          <type name="DiffSimilarityMetric"
                c:type="GgitDiffSimilarityMetric*"/>
        </return-value>
        <parameters>
          <instance-parameter name="metric" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffSimilarityMetric.</doc>
            <type name="DiffSimilarityMetric"
                  c:type="GgitDiffSimilarityMetric*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_diff_similarity_metric_free">
        <doc xml:space="preserve">Frees @metric.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="metric" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiffSimilarityMetric.</doc>
            <type name="DiffSimilarityMetric"
                  c:type="GgitDiffSimilarityMetric*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="DiffSimilarityMetricBufferSignatureCallback"
              c:type="GgitDiffSimilarityMetricBufferSignatureCallback">
      <return-value transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="file" transfer-ownership="none">
          <type name="DiffFile" c:type="GgitDiffFile*"/>
        </parameter>
        <parameter name="buf" transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="buflen" transfer-ownership="none">
          <type name="gsize" c:type="gsize"/>
        </parameter>
        <parameter name="out"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="DiffSimilarityMetricFileSignatureCallback"
              c:type="GgitDiffSimilarityMetricFileSignatureCallback">
      <return-value transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="file" transfer-ownership="none">
          <type name="DiffFile" c:type="GgitDiffFile*"/>
        </parameter>
        <parameter name="fullpath" transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="out"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="DiffSimilarityMetricFreeSignatureCallback"
              c:type="GgitDiffSimilarityMetricFreeSignatureCallback">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="signature"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="DiffSimilarityMetricSimilarityCallback"
              c:type="GgitDiffSimilarityMetricSimilarityCallback">
      <return-value transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="score" transfer-ownership="none">
          <type name="gint" c:type="gint*"/>
        </parameter>
        <parameter name="signature_a"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="signature_b"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="Direction"
                 glib:type-name="GgitDirection"
                 glib:get-type="ggit_direction_get_type"
                 c:type="GgitDirection">
      <member name="fetch"
              value="0"
              c:identifier="GGIT_DIRECTION_FETCH"
              glib:nick="fetch">
      </member>
      <member name="push"
              value="1"
              c:identifier="GGIT_DIRECTION_PUSH"
              glib:nick="push">
      </member>
    </enumeration>
    <enumeration name="Error"
                 glib:type-name="GgitError"
                 glib:get-type="ggit_error_get_type"
                 c:type="GgitError"
                 glib:error-domain="ggit-error">
      <doc xml:space="preserve">Error codes for the %GGIT_ERROR error domain.</doc>
      <member name="git_error"
              value="-1"
              c:identifier="GGIT_ERROR_GIT_ERROR"
              glib:nick="git-error">
        <doc xml:space="preserve">A generic error for when an operation fails.</doc>
      </member>
      <member name="notfound"
              value="-3"
              c:identifier="GGIT_ERROR_NOTFOUND"
              glib:nick="notfound">
        <doc xml:space="preserve">Input does not exist in the scope searched.</doc>
      </member>
      <member name="exists"
              value="-4"
              c:identifier="GGIT_ERROR_EXISTS"
              glib:nick="exists">
        <doc xml:space="preserve">A reference with this name already exists.</doc>
      </member>
      <member name="ambiguous"
              value="-5"
              c:identifier="GGIT_ERROR_AMBIGUOUS"
              glib:nick="ambiguous">
        <doc xml:space="preserve">The given error is ambiguous.</doc>
      </member>
      <member name="bufs"
              value="-6"
              c:identifier="GGIT_ERROR_BUFS"
              glib:nick="bufs">
        <doc xml:space="preserve">The buffer is too short.</doc>
      </member>
      <member name="passthrough"
              value="-30"
              c:identifier="GGIT_ERROR_PASSTHROUGH"
              glib:nick="passthrough">
        <doc xml:space="preserve">Skip and passthrough the given ODB backend.</doc>
      </member>
      <member name="iterover"
              value="-31"
              c:identifier="GGIT_ERROR_ITEROVER"
              glib:nick="iterover">
        <doc xml:space="preserve">The iteration has finished.</doc>
      </member>
      <function name="quark" c:identifier="ggit_error_quark">
        <doc xml:space="preserve">Error domain for Ggit functions.
Errors in this domain will be from the GgitError enumeration.
See #GError for information on error domains.</doc>
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <bitfield name="FeatureFlags"
              glib:type-name="GgitFeatureFlags"
              glib:get-type="ggit_feature_flags_get_type"
              c:type="GgitFeatureFlags">
      <member name="threads"
              value="1"
              c:identifier="GGIT_FEATURE_THREADS"
              glib:nick="threads">
      </member>
      <member name="https"
              value="2"
              c:identifier="GGIT_FEATURE_HTTPS"
              glib:nick="https">
      </member>
      <member name="ssh"
              value="4"
              c:identifier="GGIT_FEATURE_SSH"
              glib:nick="ssh">
      </member>
    </bitfield>
    <record name="FetchOptions"
            c:type="GgitFetchOptions"
            glib:type-name="GgitFetchOptions"
            glib:get-type="ggit_fetch_options_get_type"
            c:symbol-prefix="fetch_options">
      <doc xml:space="preserve">Represents a git fetch options.</doc>
      <constructor name="new" c:identifier="ggit_fetch_options_new">
        <doc xml:space="preserve">Creates a new #GgitFetchOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitFetchOptions.</doc>
          <type name="FetchOptions" c:type="GgitFetchOptions*"/>
        </return-value>
      </constructor>
      <method name="copy" c:identifier="ggit_fetch_options_copy">
        <doc xml:space="preserve">Copies @fetch_options into a newly allocated #GgitFetchOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitFetchOptions.</doc>
          <type name="FetchOptions" c:type="GgitFetchOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="fetch_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_fetch_options_free">
        <doc xml:space="preserve">Frees @fetch_options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="fetch_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_download_tags"
              c:identifier="ggit_fetch_options_get_download_tags">
        <doc xml:space="preserve">Get how tags are being handled when fetching/downloading.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitRemoteDownloadTagsType.</doc>
          <type name="RemoteDownloadTagsType"
                c:type="GgitRemoteDownloadTagsType"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_remote_callbacks"
              c:identifier="ggit_fetch_options_get_remote_callbacks">
        <doc xml:space="preserve">Get the remote callbacks object or %NULL if not set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the remote callbacks or %NULL.</doc>
          <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_download_tags"
              c:identifier="ggit_fetch_options_set_download_tags">
        <doc xml:space="preserve">Set how tags are being handled when fetching/downloading.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </instance-parameter>
          <parameter name="download_tags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemoteDownloadTagsType.</doc>
            <type name="RemoteDownloadTagsType"
                  c:type="GgitRemoteDownloadTagsType"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_remote_callbacks"
              c:identifier="ggit_fetch_options_set_remote_callbacks">
        <doc xml:space="preserve">Set the fetch options object.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </instance-parameter>
          <parameter name="callbacks"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitRemoteCallbacks or %NULL.</doc>
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="FileMode"
                 glib:type-name="GgitFileMode"
                 glib:get-type="ggit_file_mode_get_type"
                 c:type="GgitFileMode">
      <member name="unreadable"
              value="0"
              c:identifier="GGIT_FILE_MODE_UNREADABLE"
              glib:nick="unreadable">
      </member>
      <member name="tree"
              value="16384"
              c:identifier="GGIT_FILE_MODE_TREE"
              glib:nick="tree">
      </member>
      <member name="blob"
              value="33188"
              c:identifier="GGIT_FILE_MODE_BLOB"
              glib:nick="blob">
      </member>
      <member name="blob_executable"
              value="33261"
              c:identifier="GGIT_FILE_MODE_BLOB_EXECUTABLE"
              glib:nick="blob-executable">
      </member>
      <member name="link"
              value="40960"
              c:identifier="GGIT_FILE_MODE_LINK"
              glib:nick="link">
      </member>
      <member name="commit"
              value="57344"
              c:identifier="GGIT_FILE_MODE_COMMIT"
              glib:nick="commit">
      </member>
    </enumeration>
    <class name="Index"
           c:symbol-prefix="index"
           c:type="GgitIndex"
           parent="Native"
           glib:type-name="GgitIndex"
           glib:get-type="ggit_index_get_type"
           glib:type-struct="IndexClass">
      <doc xml:space="preserve">Represents an index object.</doc>
      <implements name="Gio.Initable"/>
      <function name="open" c:identifier="ggit_index_open" throws="1">
        <doc xml:space="preserve">Create a new bare Git index object as a memory representation of the Git
index file in @file, without a repository to back it.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndex or %NULL if an error occurred.</doc>
          <type name="Index" c:type="GgitIndex*"/>
        </return-value>
        <parameters>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </function>
      <method name="add" c:identifier="ggit_index_add" throws="1">
        <doc xml:space="preserve">Add a file to the index.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the file was successfully added, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
          <parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_file" c:identifier="ggit_index_add_file" throws="1">
        <doc xml:space="preserve">Add a file to the index. The specified file must be in the working directory
and must exist and be readable.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the file was added to the index or %FALSE if there was an error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">file to add.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_path" c:identifier="ggit_index_add_path" throws="1">
        <doc xml:space="preserve">Add a file to the index by path. You can specify both relative paths
(to the working directory) and absolute paths. Absolute paths however must
reside in the working directory. The specified path must exist and must be
readable.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the file was added to the index or %FALSE if there was an error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">path to the file to add.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_entries" c:identifier="ggit_index_get_entries">
        <doc xml:space="preserve">Get the index entries enumerator.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntries.</doc>
          <type name="IndexEntries" c:type="GgitIndexEntries*"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_entries_resolve_undo"
              c:identifier="ggit_index_get_entries_resolve_undo">
        <doc xml:space="preserve">Get the resolve undo entries enumerator.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntriesResolveUndo.</doc>
          <type name="IndexEntriesResolveUndo"
                c:type="GgitIndexEntriesResolveUndo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_owner" c:identifier="ggit_index_get_owner">
        <doc xml:space="preserve">Get the #GgitRepository that owns the index.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitRepository that owns this index.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_conflicts" c:identifier="ggit_index_has_conflicts">
        <doc xml:space="preserve">Get whether the index has any conflicts.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the index has any conflicts, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="read" c:identifier="ggit_index_read" throws="1">
        <doc xml:space="preserve">Update the contents of an existing index object in memory by reading from
the hard disk.

If @force is true, this performs a "hard" read that discards in-memory
changes and always reloads the on-disk index data. If there is no on-disk
version, the index will be cleared.

If @force is false, this does a "soft" read that reloads the index data from
disk only if it has changed since the last time it was loaded. Purely
in-memory index data will be untouched. Be aware: if there are changes on
disk, unwritten in-memory changes are discarded.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the index could be read from the file associated with the
         index, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
          <parameter name="force" transfer-ownership="none">
            <doc xml:space="preserve">force read even if there are in-memory changes.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove" c:identifier="ggit_index_remove" throws="1">
        <doc xml:space="preserve">Remove a file from the index (specified by position).</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the file was successfully removed, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">the file to search.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="stage" transfer-ownership="none">
            <doc xml:space="preserve">the stage to search.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="write" c:identifier="ggit_index_write" throws="1">
        <doc xml:space="preserve">Write an existing index object from memory back to disk using an atomic file
lock.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the index was successfully written to disk, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="write_tree"
              c:identifier="ggit_index_write_tree"
              throws="1">
        <doc xml:space="preserve">Write a new tree object to disk containing a representation of the current
state of the index. The index must be associated to an existing repository
and must not contain any files in conflict. You can use the resulting tree
to for instance create a commit.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId or %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="write_tree_to"
              c:identifier="ggit_index_write_tree_to"
              throws="1">
        <doc xml:space="preserve">Write a new tree object to @repository containing a representation of the current
state of the index. The index must not contain any files in conflict. You can use
the resulting tree to for instance create a commit.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId or %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndex.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </instance-parameter>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
        </parameters>
      </method>
      <property name="file"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Gio.File"/>
      </property>
    </class>
    <record name="IndexClass"
            c:type="GgitIndexClass"
            glib:is-gtype-struct-for="Index">
      <field name="parent_class">
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <record name="IndexEntries"
            c:type="GgitIndexEntries"
            glib:type-name="GgitIndexEntries"
            glib:get-type="ggit_index_entries_get_type"
            c:symbol-prefix="index_entries">
      <doc xml:space="preserve">Represents the entries in an index object.</doc>
      <method name="get_by_index"
              c:identifier="ggit_index_entries_get_by_index">
        <doc xml:space="preserve">Get a #GgitIndexEntry by index. Note that the returned #GgitIndexEntry is
_only_ valid as long as:

1) The associated index has been closed
2) The entry has not been removed (see ggit_index_remove())
3) The index has not been refreshed (see ggit_index_read())

Changes to the #GgitIndexEntry will be reflected in the index once written
back to disk using ggit_index_write().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntry or %NULL if out of bounds.</doc>
          <type name="IndexEntry" c:type="GgitIndexEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntries.</doc>
            <type name="IndexEntries" c:type="GgitIndexEntries*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">the index of the entry.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_by_path" c:identifier="ggit_index_entries_get_by_path">
        <doc xml:space="preserve">Get a #GgitIndexEntry by index. Note that the returned #GgitIndexEntry is
_only_ valid as long as:

1) The associated index has not been closed
2) The entry has not been removed (see ggit_index_remove())
3) The index has not been refreshed (see ggit_index_read())

Changes to the #GgitIndexEntry will be reflected in the index once written
back to disk using ggit_index_write().

@stage indicates the stage to search the file for. Stages are used in the
index when merge conflicts occur, such that multiple versions of the same
file can be represented in the index. Stage 0 is associated with the working
tree, while stages 1 to 3 are associated with the various versions of the
file in a merge conflict. The special value -1 can be used to match the first
file encountered in any stage.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntry or %NULL if it was not found.</doc>
          <type name="IndexEntry" c:type="GgitIndexEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntries.</doc>
            <type name="IndexEntries" c:type="GgitIndexEntries*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">the path to search.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="stage" transfer-ownership="none">
            <doc xml:space="preserve">stage to search.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_index_entries_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @entries by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitIndexEntries.</doc>
          <type name="IndexEntries" c:type="GgitIndexEntries*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntries.</doc>
            <type name="IndexEntries" c:type="GgitIndexEntries*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="size" c:identifier="ggit_index_entries_size">
        <doc xml:space="preserve">Get the number of #GgitIndexEntry entries.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of entries.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntries.</doc>
            <type name="IndexEntries" c:type="GgitIndexEntries*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_index_entries_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @entries by one.
If the reference count drops to 0, @entries is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntries.</doc>
            <type name="IndexEntries" c:type="GgitIndexEntries*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="IndexEntriesResolveUndo"
            c:type="GgitIndexEntriesResolveUndo"
            glib:type-name="GgitIndexEntriesResolveUndo"
            glib:get-type="ggit_index_entries_resolve_undo_get_type"
            c:symbol-prefix="index_entries_resolve_undo">
      <doc xml:space="preserve">Represents the resolve undo entries in an index object.</doc>
      <method name="get" c:identifier="ggit_index_entries_resolve_undo_get">
        <doc xml:space="preserve">Get a #GgitIndexEntryResolveUndo by index. Note that the returned
#GgitIndexEntryResolveUndo is _only_ valid as long as:

1) The associated index has been closed
2) The entry has not been removed (see ggit_index_remove())
3) The index has not been refreshed (see ggit_index_read())</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntryResolveUndo.</doc>
          <type name="IndexEntryResolveUndo"
                c:type="GgitIndexEntryResolveUndo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntriesResolveUndo.</doc>
            <type name="IndexEntriesResolveUndo"
                  c:type="GgitIndexEntriesResolveUndo*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">the index of the entry.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_by_file"
              c:identifier="ggit_index_entries_resolve_undo_get_by_file">
        <doc xml:space="preserve">Get an resolve_undo entry specified by path. The returned entry is read
only and should not be modified by the caller. If the entry could not be
found, %NULL is returned.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntryResolveUndo or %NULL.</doc>
          <type name="IndexEntryResolveUndo"
                c:type="GgitIndexEntryResolveUndo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntriesResolveUndo.</doc>
            <type name="IndexEntriesResolveUndo"
                  c:type="GgitIndexEntriesResolveUndo*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_index_entries_resolve_undo_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @entries by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitIndexEntriesResolveUndo.</doc>
          <type name="IndexEntriesResolveUndo"
                c:type="GgitIndexEntriesResolveUndo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntriesResolveUndo.</doc>
            <type name="IndexEntriesResolveUndo"
                  c:type="GgitIndexEntriesResolveUndo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="size" c:identifier="ggit_index_entries_resolve_undo_size">
        <doc xml:space="preserve">Get the number of #GgitIndexEntryResolveUndo entries.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of entries.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntriesResolveUndo.</doc>
            <type name="IndexEntriesResolveUndo"
                  c:type="GgitIndexEntriesResolveUndo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref"
              c:identifier="ggit_index_entries_resolve_undo_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @entries by one.
If the reference count drops to 0, @entries is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entries" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntriesResolveUndo.</doc>
            <type name="IndexEntriesResolveUndo"
                  c:type="GgitIndexEntriesResolveUndo*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="IndexEntry"
            c:type="GgitIndexEntry"
            glib:type-name="GgitIndexEntry"
            glib:get-type="ggit_index_entry_get_type"
            c:symbol-prefix="index_entry">
      <doc xml:space="preserve">Represents an index entry object.</doc>
      <method name="get_dev" c:identifier="ggit_index_entry_get_dev">
        <doc xml:space="preserve">Get the dev of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the dev.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_file_size"
              c:identifier="ggit_index_entry_get_file_size">
        <doc xml:space="preserve">Get the file size of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file size.</doc>
          <type name="gint64" c:type="goffset"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flags" c:identifier="ggit_index_entry_get_flags">
        <doc xml:space="preserve">Get the flags of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the flags.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flags_extended"
              c:identifier="ggit_index_entry_get_flags_extended">
        <doc xml:space="preserve">Get the extended flags of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the extended flags.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_gid" c:identifier="ggit_index_entry_get_gid">
        <doc xml:space="preserve">Get the gid of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the gid.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="ggit_index_entry_get_id">
        <doc xml:space="preserve">Get the oid of the index entry.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_ino" c:identifier="ggit_index_entry_get_ino">
        <doc xml:space="preserve">Get the ino of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the ino.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mode" c:identifier="ggit_index_entry_get_mode">
        <doc xml:space="preserve">Get the mode of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the mode.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_path" c:identifier="ggit_index_entry_get_path">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_uid" c:identifier="ggit_index_entry_get_uid">
        <doc xml:space="preserve">Get the uid of the index entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the uid.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_conflict" c:identifier="ggit_index_entry_is_conflict">
        <doc xml:space="preserve">Get whether the entry represents a conflict.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the entry is a conflict, or %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_index_entry_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @entry by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitIndexEntry.</doc>
          <type name="IndexEntry" c:type="GgitIndexEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_commit" c:identifier="ggit_index_entry_set_commit">
        <doc xml:space="preserve">Set the index entry to point to a given commit. This sets the index entry
id to the commit id, changes the mode to #GGIT_FILE_MODE_COMMIT and updates
the timestamps to when the commit was made.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_dev" c:identifier="ggit_index_entry_set_dev">
        <doc xml:space="preserve">Set the dev of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="dev" transfer-ownership="none">
            <doc xml:space="preserve">the dev.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_file_size"
              c:identifier="ggit_index_entry_set_file_size">
        <doc xml:space="preserve">Set the file size of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="file_size" transfer-ownership="none">
            <doc xml:space="preserve">the file size.</doc>
            <type name="gint64" c:type="goffset"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_flags" c:identifier="ggit_index_entry_set_flags">
        <doc xml:space="preserve">Set the flags of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">the flags.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_flags_extended"
              c:identifier="ggit_index_entry_set_flags_extended">
        <doc xml:space="preserve">Set the extended flags of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="flags_extended" transfer-ownership="none">
            <doc xml:space="preserve">the extended flags.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_gid" c:identifier="ggit_index_entry_set_gid">
        <doc xml:space="preserve">Set the gid of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="gid" transfer-ownership="none">
            <doc xml:space="preserve">the gid.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_id" c:identifier="ggit_index_entry_set_id">
        <doc xml:space="preserve">Set the oid of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="id"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the oid.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_ino" c:identifier="ggit_index_entry_set_ino">
        <doc xml:space="preserve">Set the ino of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="ino" transfer-ownership="none">
            <doc xml:space="preserve">the ino.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_mode" c:identifier="ggit_index_entry_set_mode">
        <doc xml:space="preserve">Set the mode of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="mode" transfer-ownership="none">
            <doc xml:space="preserve">the mode.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_path" c:identifier="ggit_index_entry_set_path">
        <doc xml:space="preserve">Set the path of the index entry. The path should be relative to the working
directory.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the path.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_uid" c:identifier="ggit_index_entry_set_uid">
        <doc xml:space="preserve">Set the uid of the index entry.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve">the uid.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="stat" c:identifier="ggit_index_entry_stat" throws="1">
        <doc xml:space="preserve">Fill the entry fields from statting @file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the entry was filled from statting @file successfully, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">the file to stat.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_index_entry_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @entry by one.
If the reference count drops to 0, @entry is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntry.</doc>
            <type name="IndexEntry" c:type="GgitIndexEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="IndexEntryResolveUndo"
            c:type="GgitIndexEntryResolveUndo"
            glib:type-name="GgitIndexEntryResolveUndo"
            glib:get-type="ggit_index_entry_resolve_undo_get_type"
            c:symbol-prefix="index_entry_resolve_undo">
      <doc xml:space="preserve">Represents an resolve undo index entry object.</doc>
      <method name="get_file"
              c:identifier="ggit_index_entry_resolve_undo_get_file">
        <doc xml:space="preserve">Get the file of the index entry.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GFile.</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntryResolveUndo.</doc>
            <type name="IndexEntryResolveUndo"
                  c:type="GgitIndexEntryResolveUndo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id"
              c:identifier="ggit_index_entry_resolve_undo_get_id">
        <doc xml:space="preserve">Get the oid of the index entry.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntryResolveUndo.</doc>
            <type name="IndexEntryResolveUndo"
                  c:type="GgitIndexEntryResolveUndo*"/>
          </instance-parameter>
          <parameter name="stage" transfer-ownership="none">
            <doc xml:space="preserve">the stage (0, 1 or 2).</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_mode"
              c:identifier="ggit_index_entry_resolve_undo_get_mode">
        <doc xml:space="preserve">Get the mode of the index entry. The returned mode contains the modes from
stage 1, 2 and 3.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the mode.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntryResolveUndo.</doc>
            <type name="IndexEntryResolveUndo"
                  c:type="GgitIndexEntryResolveUndo*"/>
          </instance-parameter>
          <parameter name="stage" transfer-ownership="none">
            <doc xml:space="preserve">the stage (0, 1 or 2).</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_index_entry_resolve_undo_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @entry by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitIndexEntryResolveUndo.</doc>
          <type name="IndexEntryResolveUndo"
                c:type="GgitIndexEntryResolveUndo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntryResolveUndo.</doc>
            <type name="IndexEntryResolveUndo"
                  c:type="GgitIndexEntryResolveUndo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_index_entry_resolve_undo_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @entry by one.
If the reference count drops to 0, @entry is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitIndexEntryResolveUndo.</doc>
            <type name="IndexEntryResolveUndo"
                  c:type="GgitIndexEntryResolveUndo*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="MergeFileFavor"
                 glib:type-name="GgitMergeFileFavor"
                 glib:get-type="ggit_merge_file_favor_get_type"
                 c:type="GgitMergeFileFavor">
      <member name="normal"
              value="0"
              c:identifier="GGIT_MERGE_FILE_FAVOR_NORMAL"
              glib:nick="normal">
      </member>
      <member name="ours"
              value="1"
              c:identifier="GGIT_MERGE_FILE_FAVOR_OURS"
              glib:nick="ours">
      </member>
      <member name="theirs"
              value="2"
              c:identifier="GGIT_MERGE_FILE_FAVOR_THEIRS"
              glib:nick="theirs">
      </member>
      <member name="union"
              value="3"
              c:identifier="GGIT_MERGE_FILE_FAVOR_UNION"
              glib:nick="union">
      </member>
    </enumeration>
    <bitfield name="MergeFileFlags"
              glib:type-name="GgitMergeFileFlags"
              glib:get-type="ggit_merge_file_flags_get_type"
              c:type="GgitMergeFileFlags">
      <doc xml:space="preserve">GGIT_MERGE_FILE_DEFAULT: Defaults.
GGIT_MERGE_FILE_STYLE_MERGE: Create standard conflicted merge files.
GGIT_MERGE_FILE_STYLE_DIFF3: Create diff3-style files.
GGIT_MERGE_FILE_SIMPLIFY_ALNUM: Condense non-alphanumeric regions for simplified diff file.
GGIT_MERGE_FILE_IGNORE_WHITESPACE: Ignore all whitespace.
GGIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE: Ignore changes in amount of whitespace.
GGIT_MERGE_FILE_IGNORE_WHITESPACE_EOL: Ignore whitespace at end of line.
GGIT_MERGE_FILE_DIFF_PATIENCE: Use the "patience diff" algorithm.
GGIT_MERGE_FILE_DIFF_MINIMAL: Take extra time to find minimal diff.</doc>
      <member name="default"
              value="0"
              c:identifier="GGIT_MERGE_FILE_DEFAULT"
              glib:nick="default">
      </member>
      <member name="style_merge"
              value="1"
              c:identifier="GGIT_MERGE_FILE_STYLE_MERGE"
              glib:nick="style-merge">
      </member>
      <member name="style_diff3"
              value="2"
              c:identifier="GGIT_MERGE_FILE_STYLE_DIFF3"
              glib:nick="style-diff3">
      </member>
      <member name="simplify_alnum"
              value="4"
              c:identifier="GGIT_MERGE_FILE_SIMPLIFY_ALNUM"
              glib:nick="simplify-alnum">
      </member>
      <member name="ignore_whitespace"
              value="8"
              c:identifier="GGIT_MERGE_FILE_IGNORE_WHITESPACE"
              glib:nick="ignore-whitespace">
      </member>
      <member name="ignore_whitespace_change"
              value="16"
              c:identifier="GGIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE"
              glib:nick="ignore-whitespace-change">
      </member>
      <member name="ignore_whitespace_eol"
              value="32"
              c:identifier="GGIT_MERGE_FILE_IGNORE_WHITESPACE_EOL"
              glib:nick="ignore-whitespace-eol">
      </member>
      <member name="diff_patience"
              value="64"
              c:identifier="GGIT_MERGE_FILE_DIFF_PATIENCE"
              glib:nick="diff-patience">
      </member>
      <member name="diff_minimal"
              value="128"
              c:identifier="GGIT_MERGE_FILE_DIFF_MINIMAL"
              glib:nick="diff-minimal">
      </member>
    </bitfield>
    <bitfield name="MergeFlags"
              glib:type-name="GgitMergeFlags"
              glib:get-type="ggit_merge_flags_get_type"
              c:type="GgitMergeFlags">
      <member name="find_renames"
              value="1"
              c:identifier="GGIT_MERGE_FIND_RENAMES"
              glib:nick="find-renames">
        <doc xml:space="preserve">detect renames that occur between the common
ancestor and the "ours" side or the common ancestor and the "theirs" side.
This will enable the ability to merge between a modified and renamed file.</doc>
      </member>
      <member name="fail_on_conflict"
              value="2"
              c:identifier="GGIT_MERGE_FAIL_ON_CONFLICT"
              glib:nick="fail-on-conflict">
        <doc xml:space="preserve">If a conflict occurs, exit immediately instead
of attempting to continue resolving conflicts.  The merge operation will
fail with @GGIT_EMERGECONFLICT and no index will be returned.</doc>
      </member>
      <member name="skip_reuc"
              value="4"
              c:identifier="GGIT_MERGE_SKIP_REUC"
              glib:nick="skip-reuc">
        <doc xml:space="preserve">do not write the REUC extension on the generated index.</doc>
      </member>
      <member name="no_recursive"
              value="8"
              c:identifier="GGIT_MERGE_NO_RECURSIVE"
              glib:nick="no-recursive">
        <doc xml:space="preserve">If the commits being merged have multiple merge bases,
do not build a recursive merge base (by merging the multiple merge bases),
instead simply use the first base.  This flag provides a similar
merge base to `git-merge-resolve`.</doc>
      </member>
    </bitfield>
    <record name="MergeOptions"
            c:type="GgitMergeOptions"
            glib:type-name="GgitMergeOptions"
            glib:get-type="ggit_merge_options_get_type"
            c:symbol-prefix="merge_options">
      <doc xml:space="preserve">Represents the options used when merging.</doc>
      <constructor name="new" c:identifier="ggit_merge_options_new">
        <doc xml:space="preserve">Creates a new #GgitMergeOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitMergeOptions.</doc>
          <type name="MergeOptions" c:type="GgitMergeOptions*"/>
        </return-value>
      </constructor>
      <method name="copy" c:identifier="ggit_merge_options_copy">
        <doc xml:space="preserve">Copies @merge_options into a newly allocated #GgitMergeOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitMergeOptions.</doc>
          <type name="MergeOptions" c:type="GgitMergeOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_merge_options_free">
        <doc xml:space="preserve">Frees @merge_options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_file_favor"
              c:identifier="ggit_merge_options_get_file_favor">
        <doc xml:space="preserve">Get flags for handling conflicting content.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file favor.</doc>
          <type name="MergeFileFavor" c:type="GgitMergeFileFavor"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_file_flags"
              c:identifier="ggit_merge_options_get_file_flags">
        <doc xml:space="preserve">Get file merging flags.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the file merging flags.</doc>
          <type name="MergeFileFlags" c:type="GgitMergeFileFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flags" c:identifier="ggit_merge_options_get_flags">
        <doc xml:space="preserve">Get the tree flags to use for merging.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the flags.</doc>
          <type name="MergeFlags" c:type="GgitMergeFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rename_threshold"
              c:identifier="ggit_merge_options_get_rename_threshold">
        <doc xml:space="preserve">Get the rename threshold (defaults to 50). If %GGIT_MERGE_TREE_FIND_RENAMES
is enabled, added files will be compared with deleted files to
determine their similarity. Files that are more similar than the rename
threshold (percentage-wise) will be treated as a rename.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the rename threshold.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_similarity_metric"
              c:identifier="ggit_merge_options_get_similarity_metric">
        <doc xml:space="preserve">Get the similarity metric.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the similarity metric, or %NULL.</doc>
          <type name="DiffSimilarityMetric"
                c:type="GgitDiffSimilarityMetric*"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_target_limit"
              c:identifier="ggit_merge_options_get_target_limit">
        <doc xml:space="preserve">Get the maximum number of similarity sources to examine for renames (defaults to 200).
If the number of rename candidates (add / delete pairs) is greater than
this value, inexact rename detection is aborted.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the target limit.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_file_favor"
              c:identifier="ggit_merge_options_set_file_favor">
        <doc xml:space="preserve">Set flags for handling conflicting content.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
          <parameter name="file_favor" transfer-ownership="none">
            <doc xml:space="preserve">the file favor.</doc>
            <type name="MergeFileFavor" c:type="GgitMergeFileFavor"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_file_flags"
              c:identifier="ggit_merge_options_set_file_flags">
        <doc xml:space="preserve">Set file merging flags.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
          <parameter name="file_flags" transfer-ownership="none">
            <doc xml:space="preserve">the file flags.</doc>
            <type name="MergeFileFlags" c:type="GgitMergeFileFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_flags" c:identifier="ggit_merge_options_set_flags">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <type name="MergeFlags" c:type="GgitMergeFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_rename_threshold"
              c:identifier="ggit_merge_options_set_rename_threshold">
        <doc xml:space="preserve">Set the rename threshold (defaults to 50). If %GGIT_MERGE_TREE_FIND_RENAMES
is enabled, added files will be compared with deleted files to
determine their similarity. Files that are more similar than the rename
threshold (percentage-wise) will be treated as a rename.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
          <parameter name="rename_threshold" transfer-ownership="none">
            <doc xml:space="preserve">similarity to consider a file renamed.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_similarity_metric"
              c:identifier="ggit_merge_options_set_similarity_metric">
        <doc xml:space="preserve">Set the similarity metric, or %NULL for the default similarity metric.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
          <parameter name="metric" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSimilarityMetric.</doc>
            <type name="DiffSimilarityMetric"
                  c:type="GgitDiffSimilarityMetric*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_target_limit"
              c:identifier="ggit_merge_options_set_target_limit">
        <doc xml:space="preserve">Set the maximum number of similarity sources to examine for renames (defaults to 200).
If the number of rename candidates (add / delete pairs) is greater than
this value, inexact rename detection is aborted.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </instance-parameter>
          <parameter name="target_limit" transfer-ownership="none">
            <doc xml:space="preserve">maximum similarity source to examine for renames.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <class name="Native"
           c:symbol-prefix="native"
           c:type="GgitNative"
           parent="ObjectFactoryBase"
           abstract="1"
           glib:type-name="GgitNative"
           glib:get-type="ggit_native_get_type"
           glib:type-struct="NativeClass">
      <doc xml:space="preserve">Represents a generic native object.</doc>
      <property name="native"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <field name="parent_instance">
        <type name="ObjectFactoryBase" c:type="GgitObjectFactoryBase"/>
      </field>
    </class>
    <record name="NativeClass"
            c:type="GgitNativeClass"
            glib:is-gtype-struct-for="Native">
      <doc xml:space="preserve">The class structure for #GgitNativeClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="ObjectFactoryBaseClass"
              c:type="GgitObjectFactoryBaseClass"/>
      </field>
    </record>
    <record name="Note"
            c:type="GgitNote"
            glib:type-name="GgitNote"
            glib:get-type="ggit_note_get_type"
            c:symbol-prefix="note">
      <doc xml:space="preserve">Represents a note object.</doc>
      <method name="get_id" c:identifier="ggit_note_get_id">
        <doc xml:space="preserve">Gets the note object's id.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the object's id.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="note" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitNote.</doc>
            <type name="Note" c:type="GgitNote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_message" c:identifier="ggit_note_get_message">
        <doc xml:space="preserve">Gets the note message.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the note message.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="note" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitNote.</doc>
            <type name="Note" c:type="GgitNote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_note_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @note by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitNote.</doc>
          <type name="Note" c:type="GgitNote*"/>
        </return-value>
        <parameters>
          <instance-parameter name="note" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitNote.</doc>
            <type name="Note" c:type="GgitNote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_note_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @note by one.
If the reference count drops to 0, @note is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="note" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitNote.</doc>
            <type name="Note" c:type="GgitNote*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="NoteCallback" c:type="GgitNoteCallback">
      <doc xml:space="preserve">When iterating over all the notes, callback that will be
issued per note. See ggit_repository_note_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="blob_id" transfer-ownership="none">
          <doc xml:space="preserve">id of the blob containing the message.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </parameter>
        <parameter name="annotated_object_id" transfer-ownership="none">
          <doc xml:space="preserve">id of the git object being annotated.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-suplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="OId"
            c:type="GgitOId"
            glib:type-name="GgitOId"
            glib:get-type="ggit_oid_get_type"
            c:symbol-prefix="oid">
      <doc xml:space="preserve">Represents a unique ID of any object.</doc>
      <constructor name="new_from_raw" c:identifier="ggit_oid_new_from_raw">
        <doc xml:space="preserve">Creates a new #GgitOId from a raw oid.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <parameter name="raw" transfer-ownership="none">
            <doc xml:space="preserve">the raw input bytes to be copied.</doc>
            <type name="guint8" c:type="const guchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_from_string"
                   c:identifier="ggit_oid_new_from_string">
        <doc xml:space="preserve">Parses a hex formatted object id into a #GgitOId.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitOId or %NULL on error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">input hex string; must be pointing at the start of
      the hex sequence and have at least the number of bytes
      needed for an oid encoded in hex (40 bytes).</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="compare" c:identifier="ggit_oid_compare">
        <doc xml:space="preserve">Compare two #GgitOId structures.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">&lt;0, 0, &gt;0 if a &lt; b, a == b, a &gt; b.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="a" transfer-ownership="none">
            <doc xml:space="preserve">first #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
          <parameter name="b" transfer-ownership="none">
            <doc xml:space="preserve">second #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="copy" c:identifier="ggit_oid_copy">
        <doc xml:space="preserve">Copies @oid into a newly allocated #GgitOId.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="equal" c:identifier="ggit_oid_equal">
        <doc xml:space="preserve">Compares two #GgitOId for equality.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @a and @b are equal, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="a" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
          <parameter name="b" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_oid_free">
        <doc xml:space="preserve">Frees @oid.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_prefix" c:identifier="ggit_oid_has_prefix">
        <doc xml:space="preserve">Check whether the object id has a given prefix. Note that the prefix is
specified in hexadecimal ASCII.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the id has the given prefix, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
          <parameter name="prefix" transfer-ownership="none">
            <doc xml:space="preserve">a prefix.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="hash" c:identifier="ggit_oid_hash">
        <doc xml:space="preserve">Computes a hash value for a git object identifier.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the hash value</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_zero" c:identifier="ggit_oid_is_zero">
        <doc xml:space="preserve">Get whether the oid contains only zeros.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the oid contains only zeros, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="to_string" c:identifier="ggit_oid_to_string">
        <doc xml:space="preserve">Converts @oid into a readable string.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated string representing @oid.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="Object"
           c:symbol-prefix="object"
           c:type="GgitObject"
           parent="Native"
           abstract="1"
           glib:type-name="GgitObject"
           glib:get-type="ggit_object_get_type"
           glib:type-struct="ObjectClass">
      <doc xml:space="preserve">Represents a generic object in a repository.</doc>
      <method name="get_id" c:identifier="ggit_object_get_id">
        <doc xml:space="preserve">Gets the #GgitOId of @object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitOId of the object.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="object" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObject.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_owner" c:identifier="ggit_object_get_owner">
        <doc xml:space="preserve">Gets the #GgitRepository that owns @object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitRepository that owns this object.
The returned value must be free'd calling g_object_unref().</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="object" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObject.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <record name="ObjectClass"
            c:type="GgitObjectClass"
            glib:is-gtype-struct-for="Object">
      <doc xml:space="preserve">The class structure for #GgitObjectClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <class name="ObjectFactory"
           c:symbol-prefix="object_factory"
           c:type="GgitObjectFactory"
           parent="GObject.Object"
           glib:type-name="GgitObjectFactory"
           glib:get-type="ggit_object_factory_get_type"
           glib:type-struct="ObjectFactoryClass">
      <doc xml:space="preserve">Represents an object factory.</doc>
      <function name="get_default"
                c:identifier="ggit_object_factory_get_default">
        <doc xml:space="preserve">Get the default type factory instance.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitObjectFactory.</doc>
          <type name="ObjectFactory" c:type="GgitObjectFactory*"/>
        </return-value>
      </function>
      <method name="construct" c:identifier="ggit_object_factory_construct">
        <doc xml:space="preserve">Construct a new object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GObject.</doc>
          <type name="GObject.Object" c:type="GObject*"/>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObjectFactory.</doc>
            <type name="ObjectFactory" c:type="GgitObjectFactory*"/>
          </instance-parameter>
          <parameter name="parent_class" transfer-ownership="none">
            <doc xml:space="preserve">a #GObjectClass.</doc>
            <type name="GObject.ObjectClass" c:type="GObjectClass*"/>
          </parameter>
          <parameter name="basetype" transfer-ownership="none">
            <doc xml:space="preserve">a #GType.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="n_construct_properties" transfer-ownership="none">
            <doc xml:space="preserve">number of construct properties.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="construct_properties" transfer-ownership="none">
            <doc xml:space="preserve">a list of #GObjectConstructParam.</doc>
            <array length="2"
                   zero-terminated="0"
                   c:type="GObjectConstructParam*">
              <type name="GObject.ObjectConstructParam"
                    c:type="GObjectConstructParam"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="register" c:identifier="ggit_object_factory_register">
        <doc xml:space="preserve">Register @subtype as the instantiation class for @basetype. Each time an
object of type @basetype is going to be created, an instance of @subtype
is created instead. @basetype must be subclassed from #GgitObjectFactoryBase.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObjectFactory.</doc>
            <type name="ObjectFactory" c:type="GgitObjectFactory*"/>
          </instance-parameter>
          <parameter name="basetype" transfer-ownership="none">
            <doc xml:space="preserve">a #GType.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="subtype" transfer-ownership="none">
            <doc xml:space="preserve">a #GType.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="unregister" c:identifier="ggit_object_factory_unregister">
        <doc xml:space="preserve">Unregister a subtype from the factory.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObjectFactory.</doc>
            <type name="ObjectFactory" c:type="GgitObjectFactory*"/>
          </instance-parameter>
          <parameter name="basetype" transfer-ownership="none">
            <doc xml:space="preserve">a #GType.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="subtype" transfer-ownership="none">
            <doc xml:space="preserve">a #GType.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
    </class>
    <class name="ObjectFactoryBase"
           c:symbol-prefix="object_factory_base"
           c:type="GgitObjectFactoryBase"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="GgitObjectFactoryBase"
           glib:get-type="ggit_object_factory_base_get_type"
           glib:type-struct="ObjectFactoryBaseClass">
      <doc xml:space="preserve">Represents the base type for objects created by an object factory.</doc>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="ObjectFactoryBaseClass"
            c:type="GgitObjectFactoryBaseClass"
            glib:is-gtype-struct-for="ObjectFactoryBase">
      <doc xml:space="preserve">The class structure for #GgitObjectFactoryBaseClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="ObjectFactoryClass"
            c:type="GgitObjectFactoryClass"
            glib:is-gtype-struct-for="ObjectFactory">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <enumeration name="PackbuilderStage"
                 glib:type-name="GgitPackbuilderStage"
                 glib:get-type="ggit_packbuilder_stage_get_type"
                 c:type="GgitPackbuilderStage">
      <doc xml:space="preserve">Valid stages for pack building.</doc>
      <member name="adding_objects"
              value="0"
              c:identifier="GGIT_PACKBUILDER_STAGE_ADDING_OBJECTS"
              glib:nick="adding-objects">
        <doc xml:space="preserve">adding objects.</doc>
      </member>
      <member name="deltafication"
              value="1"
              c:identifier="GGIT_PACKBUILDER_STAGE_DELTAFICATION"
              glib:nick="deltafication">
        <doc xml:space="preserve">deltafication.</doc>
      </member>
    </enumeration>
    <record name="Patch"
            c:type="GgitPatch"
            glib:type-name="GgitPatch"
            glib:get-type="ggit_patch_get_type"
            c:symbol-prefix="patch">
      <doc xml:space="preserve">Represents a patch object.</doc>
      <constructor name="new_from_blobs"
                   c:identifier="ggit_patch_new_from_blobs"
                   throws="1">
        <doc xml:space="preserve">Directly generate a patch from the difference between two blobs.

This is just like ggit_diff_blobs() except it generates a patch object
for the difference instead of directly making callbacks.  You can use the
standard ggit_patch accessor functions to read the patch data, and
you must call ggit_patch_unref on the patch when done.</doc>
        <return-value transfer-ownership="full">
          <type name="Patch" c:type="GgitPatch*"/>
        </return-value>
        <parameters>
          <parameter name="old_blob"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitBlob to diff from.</doc>
            <type name="Blob" c:type="GgitBlob*"/>
          </parameter>
          <parameter name="old_as_path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">treat @old_blob as if it had this filename, or %NULL,</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="new_blob"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitBlob to diff to.</doc>
            <type name="Blob" c:type="GgitBlob*"/>
          </parameter>
          <parameter name="new_as_path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">treat @new_blob as if it had this filename, or %NULL,</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="diff_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitDiffOptions, or %NULL.</doc>
            <type name="DiffOptions" c:type="GgitDiffOptions*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_from_diff"
                   c:identifier="ggit_patch_new_from_diff"
                   throws="1">
        <doc xml:space="preserve">The #GgitPatch is a newly created object contains the text diffs
for the delta.  You have to call ggit_patch_unref() when you are
done with it.  You can use the patch object to loop over all the hunks
and lines in the diff of the one delta.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly created #GgitPatch.</doc>
          <type name="Patch" c:type="GgitPatch*"/>
        </return-value>
        <parameters>
          <parameter name="diff" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitDiff.</doc>
            <type name="Diff" c:type="GgitDiff*"/>
          </parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">index into diff list.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_delta" c:identifier="ggit_patch_get_delta">
        <doc xml:space="preserve">Get the diff delta corresponding to the patch.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitDiffDelta of the patch.</doc>
          <type name="DiffDelta" c:type="GgitDiffDelta*"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_hunk" c:identifier="ggit_patch_get_hunk" throws="1">
        <doc xml:space="preserve">Get the @idx'th hunk in the patch.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitDiffHunk or %NULL on error.</doc>
          <type name="DiffHunk" c:type="GgitDiffHunk*"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">the hunk index.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_line_stats"
              c:identifier="ggit_patch_get_line_stats"
              throws="1">
        <doc xml:space="preserve">Get the line statistics of the patch.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if successfull, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
          <parameter name="total_context"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve">return value for the number of context lines.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
          <parameter name="total_additions"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve">return value for the number of added lines.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
          <parameter name="total_deletions"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve">return value for the number of deleted lines.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_num_hunks" c:identifier="ggit_patch_get_num_hunks">
        <doc xml:space="preserve">Get the number of hunks in the patch.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of hunks.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_num_lines_in_hunk"
              c:identifier="ggit_patch_get_num_lines_in_hunk">
        <doc xml:space="preserve">Get the number of lines in @hunk.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of lines.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
          <parameter name="hunk" transfer-ownership="none">
            <doc xml:space="preserve">the hunk index.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_patch_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @patch by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitPatch.</doc>
          <type name="Patch" c:type="GgitPatch*"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="to_stream" c:identifier="ggit_patch_to_stream" throws="1">
        <doc xml:space="preserve">Write the contents of a patch to the provided stream.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the patch was written successfully, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
          <parameter name="stream" transfer-ownership="none">
            <doc xml:space="preserve">a #GOutputStream.</doc>
            <type name="Gio.OutputStream" c:type="GOutputStream*"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string" c:identifier="ggit_patch_to_string" throws="1">
        <doc xml:space="preserve">Gets the content of a patch as a single diff text.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the content of a patch as a single diff text.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_patch_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @patch by one.
If the reference count drops to 0, @patch is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="patch" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPatch.</doc>
            <type name="Patch" c:type="GgitPatch*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="PushOptions"
           c:symbol-prefix="push_options"
           c:type="GgitPushOptions"
           parent="GObject.Object"
           glib:type-name="GgitPushOptions"
           glib:get-type="ggit_push_options_get_type"
           glib:type-struct="PushOptionsClass">
      <doc xml:space="preserve">Represents a git push options.</doc>
      <constructor name="new" c:identifier="ggit_push_options_new">
        <doc xml:space="preserve">Create a new push options object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitPushOptions.</doc>
          <type name="PushOptions" c:type="GgitPushOptions*"/>
        </return-value>
      </constructor>
      <method name="get_parallelism"
              c:identifier="ggit_push_options_get_parallelism">
        <doc xml:space="preserve">Get the number of parallel threads to use when creating the pack file
to push. The special value 0 indicates that the number of threads will
be automatically detected.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of parallel threads, or 0 for auto-detect.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPushOptions.</doc>
            <type name="PushOptions" c:type="GgitPushOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_parallelism"
              c:identifier="ggit_push_options_set_parallelism">
        <doc xml:space="preserve">Set the number of parallel threads to use when creating the pack file
to push. The special value 0 can be specified for @parallelism indicating that
the number of threads will be automatically detected.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitPushOptions.</doc>
            <type name="PushOptions" c:type="GgitPushOptions*"/>
          </instance-parameter>
          <parameter name="parallelism" transfer-ownership="none">
            <doc xml:space="preserve">the number of threads, or 0 for auto-detect.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <property name="parallelism"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="PushOptionsClass"
            c:type="GgitPushOptionsClass"
            glib:is-gtype-struct-for="PushOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <class name="Rebase"
           c:symbol-prefix="rebase"
           c:type="GgitRebase"
           parent="Native"
           glib:type-name="GgitRebase"
           glib:get-type="ggit_rebase_get_type"
           glib:type-struct="RebaseClass">
      <doc xml:space="preserve">Represents a rebase object.</doc>
      <method name="abort" c:identifier="ggit_rebase_abort" throws="1">
        <doc xml:space="preserve">Aborts a rebase that is currently in progress, resetting the repository
and working directory to their state before rebase began.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebase.</doc>
            <type name="Rebase" c:type="GgitRebase*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="commit" c:identifier="ggit_rebase_commit" throws="1">
        <doc xml:space="preserve">Commits the current patch.  You must have resolved any conflicts that
were introduced during the patch application from the ggit_rebase_next()
invocation.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId of the newly created commit.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebase.</doc>
            <type name="Rebase" c:type="GgitRebase*"/>
          </instance-parameter>
          <parameter name="author"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitSignature or %NULL to keep the author from
the original commit.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="committer" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the message for this commit, or %NULL to use
the message from the original commit.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="finish" c:identifier="ggit_rebase_finish" throws="1">
        <doc xml:space="preserve">Finishes a rebase that is currently in progress once all patches have
been applied.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebase.</doc>
            <type name="Rebase" c:type="GgitRebase*"/>
          </instance-parameter>
          <parameter name="signature"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the identity that is finishing the rebase or %NULL.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_operation_by_index"
              c:identifier="ggit_rebase_get_operation_by_index">
        <doc xml:space="preserve">Gets the rebase operation specified by @idx.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The rebase operation or %NULL if @idx was out of bounds.</doc>
          <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebase.</doc>
            <type name="Rebase" c:type="GgitRebase*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">The index of the rebase operation to retrieve.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_operation_entry_count"
              c:identifier="ggit_rebase_get_operation_entry_count">
        <doc xml:space="preserve">Gets the count of rebase operations that are to be applied.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the count of rebase operations that are to be applied.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebase.</doc>
            <type name="Rebase" c:type="GgitRebase*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_operation_index"
              c:identifier="ggit_rebase_get_operation_index">
        <doc xml:space="preserve">Gets the index of the rebase operation that is currently being applied.
If the first operation has not yet been applied (because you have
called ggit_repository_rebase_init() but not yet ggit_rebase_next())
then this returns @GGIT_REBASE_NO_OPERATION.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The index of the rebase operation currently being applied.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebase.</doc>
            <type name="Rebase" c:type="GgitRebase*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="next" c:identifier="ggit_rebase_next" throws="1">
        <doc xml:space="preserve">Performs the next rebase operation and returns the information about it.
If the operation is one that applies a patch (which is any operation except
@GGIT_REBASE_OPERATION_EXEC) then the patch will be applied and the index and
working directory will be updated with the changes. If there are conflicts,
you will need to address those before committing the changes.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the rebase operation that is to be performed next.</doc>
          <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebase.</doc>
            <type name="Rebase" c:type="GgitRebase*"/>
          </instance-parameter>
        </parameters>
      </method>
    </class>
    <record name="RebaseClass"
            c:type="GgitRebaseClass"
            glib:is-gtype-struct-for="Rebase">
      <field name="parent_class">
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <record name="RebaseOperation"
            c:type="GgitRebaseOperation"
            glib:type-name="GgitRebaseOperation"
            glib:get-type="ggit_rebase_operation_get_type"
            c:symbol-prefix="rebase_operation">
      <doc xml:space="preserve">Represents a rebase operation.</doc>
      <method name="get_exec" c:identifier="ggit_rebase_operation_get_exec">
        <doc xml:space="preserve">Gets the executable the user has requested be run.  This will only
be populated for operations of type @GGIT_REBASE_OPERATION_EXEC.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the executable the user has requested be run.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_operation"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOperation.</doc>
            <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="ggit_rebase_operation_get_id">
        <doc xml:space="preserve">Gets the commit ID being cherry-picked. This will be populated for
all operations except those of type @GGIT_REBASE_OPERATION_EXEC.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the commit ID being cherry-picked.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_operation"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOperation.</doc>
            <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_operation_type"
              c:identifier="ggit_rebase_operation_get_operation_type">
        <doc xml:space="preserve">Gets the type of rebase operation.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitRebaseOperationType.</doc>
          <type name="RebaseOperationType" c:type="GgitRebaseOperationType"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_operation"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOperation.</doc>
            <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_rebase_operation_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @rebase_operation by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a newly allocated #GgitRebaseOperation.</doc>
          <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_operation"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOperation.</doc>
            <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_rebase_operation_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @rebase_operation by one.
If the reference count drops to 0, @rebase_operation is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_operation"
                              transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOperation.</doc>
            <type name="RebaseOperation" c:type="GgitRebaseOperation*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="RebaseOperationType"
                 glib:type-name="GgitRebaseOperationType"
                 glib:get-type="ggit_rebase_operation_type_get_type"
                 c:type="GgitRebaseOperationType">
      <doc xml:space="preserve">Type of rebase operation in-progress.</doc>
      <member name="pick"
              value="0"
              c:identifier="GGIT_REBASE_OPERATION_PICK"
              glib:nick="pick">
        <doc xml:space="preserve">The given commit is to be cherry-picked.
The client should commit the changes and continue if there are no conflicts.</doc>
      </member>
      <member name="reword"
              value="1"
              c:identifier="GGIT_REBASE_OPERATION_REWORD"
              glib:nick="reword">
        <doc xml:space="preserve">The given commit is to be cherry-picked,
but the client should prompt the user to provide an updated commit message.</doc>
      </member>
      <member name="edit"
              value="2"
              c:identifier="GGIT_REBASE_OPERATION_EDIT"
              glib:nick="edit">
        <doc xml:space="preserve">The given commit is to be cherry-picked,
but the client should stop to allow the user to edit the changes before
committing them.</doc>
      </member>
      <member name="squash"
              value="3"
              c:identifier="GGIT_REBASE_OPERATION_SQUASH"
              glib:nick="squash">
        <doc xml:space="preserve">The given commit is to be squashed into
the previous commit. The commit message will be merged with the previous message.</doc>
      </member>
      <member name="fixup"
              value="4"
              c:identifier="GGIT_REBASE_OPERATION_FIXUP"
              glib:nick="fixup">
        <doc xml:space="preserve">The given commit is to be squashed into the
previous commit. The commit message from this commit will be discarded.</doc>
      </member>
      <member name="exec"
              value="5"
              c:identifier="GGIT_REBASE_OPERATION_EXEC"
              glib:nick="exec">
        <doc xml:space="preserve">No commit will be cherry-picked.
The client should run the given command and (if successful) continue.</doc>
      </member>
    </enumeration>
    <record name="RebaseOptions"
            c:type="GgitRebaseOptions"
            glib:type-name="GgitRebaseOptions"
            glib:get-type="ggit_rebase_options_get_type"
            c:symbol-prefix="rebase_options">
      <doc xml:space="preserve">Represents the options used when rebasing.</doc>
      <constructor name="new" c:identifier="ggit_rebase_options_new">
        <doc xml:space="preserve">Creates a new #GgitRebaseOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitRebaseOptions.</doc>
          <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
        </return-value>
      </constructor>
      <method name="copy" c:identifier="ggit_rebase_options_copy">
        <doc xml:space="preserve">Copies @rebase_options into a newly allocated #GgitRebaseOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitRebaseOptions.</doc>
          <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_rebase_options_free">
        <doc xml:space="preserve">Frees @rebase_options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_checkout_options"
              c:identifier="ggit_rebase_options_get_checkout_options">
        <doc xml:space="preserve">Get the checkout options object or %NULL if not set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the checkout options or %NULL.</doc>
          <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_quiet" c:identifier="ggit_rebase_options_get_quiet">
        <doc xml:space="preserve">Gets whether you want a quiet rebase experience.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">returns whether you want a quiet rebase experience.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_rewrite_notes_ref"
              c:identifier="ggit_rebase_options_get_rewrite_notes_ref">
        <doc xml:space="preserve">Gets the the name of the notes reference used to rewrite notes for rebased
commits when finishing the rebase or %NULL if not set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the notes reference or %NULL.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_checkout_options"
              c:identifier="ggit_rebase_options_set_checkout_options">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
          <parameter name="checkout_options" transfer-ownership="none">
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_quiet" c:identifier="ggit_rebase_options_set_quiet">
        <doc xml:space="preserve">Used by ggit_rebase_init(), this will instruct other clients working
on this rebase that you want a quiet rebase experience, which they
may choose to provide in an application-specific manner.  This has no
effect upon libgit2-glib directly, but is provided for interoperability
between Git tools.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
          <parameter name="quiet" transfer-ownership="none">
            <doc xml:space="preserve">whether you want a quiet rebase experience.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_rewrite_notes_ref"
              c:identifier="ggit_rebase_options_set_rewrite_notes_ref">
        <doc xml:space="preserve">Used by ggit_rebase_finish(), this is the name of the notes reference
used to rewrite notes for rebased commits when finishing the rebase;
if %NULL, the contents of the configuration option `notes.rewriteRef`
is examined, unless the configuration option `notes.rewrite.rebase`
is set to false.  If `notes.rewriteRef` is also %NULL, notes will
not be rewritten.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="rebase_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </instance-parameter>
          <parameter name="rewrite_notes_ref" transfer-ownership="none">
            <doc xml:space="preserve">the name of the notes reference.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <class name="Ref"
           c:symbol-prefix="ref"
           c:type="GgitRef"
           parent="Native"
           glib:type-name="GgitRef"
           glib:get-type="ggit_ref_get_type"
           glib:type-struct="RefClass">
      <doc xml:space="preserve">Reprensents a git reference.</doc>
      <function name="is_valid_name" c:identifier="ggit_ref_is_valid_name">
        <doc xml:space="preserve">Check if the given @name is a valid name for a reference. Note that @name
should be the full ref name (including prefixes).

Valid toplevel names can contain only capital letters and underscores
and must start and end with a letter (e.g. HEAD, ORIG_HEAD).

Valid refs/ names may contain any characters, except '~', '^', ':', '\', '?',
'[', '*', ".." and "@{", because they are interpreted by revparse.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @name is valid, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name to validate.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </function>
      <method name="delete" c:identifier="ggit_ref_delete" throws="1">
        <doc xml:space="preserve">Deletes @ref.

This method works for both direct and symbolic references.

The reference will be immediately removed on disk and from
memory. The given reference pointer will no longer be valid.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="delete_log" c:identifier="ggit_ref_delete_log" throws="1">
        <doc xml:space="preserve">Deletes the log for @ref, on error @error is set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_log" c:identifier="ggit_ref_get_log" throws="1">
        <doc xml:space="preserve">Gets the #GgitReflog for @ref. The reflog will be created if it doesn't exist
yet.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the reflog.</doc>
          <type name="Reflog" c:type="GgitReflog*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_ref_get_name">
        <doc xml:space="preserve">Gets the full name of @ref.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the full name of a reference.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_owner" c:identifier="ggit_ref_get_owner">
        <doc xml:space="preserve">Gets the repository where @ref resides.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the repository where a reference resides.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_reference_type"
              c:identifier="ggit_ref_get_reference_type">
        <doc xml:space="preserve">Gets the type of @ref. Either direct (#GGIT_REF_OID) or
symbolic (#GGIT_REF_SYMBOLIC).</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the type of a reference.</doc>
          <type name="RefType" c:type="GgitRefType"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_shorthand" c:identifier="ggit_ref_get_shorthand">
        <doc xml:space="preserve">Gets the shorthand name of @ref.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the shorthand name of a reference.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_symbolic_target"
              c:identifier="ggit_ref_get_symbolic_target">
        <doc xml:space="preserve">Get full name to the reference pointed to by a symbolic reference.
Only available if the reference is symbolic.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name if available, %NULL otherwise.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_target" c:identifier="ggit_ref_get_target">
        <doc xml:space="preserve">Get the OID pointed to by a direct reference.
Only available if the reference is direct (i.e. an object id reference,
not a symbolic one).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new oid if available, %NULL otherwise.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_log" c:identifier="ggit_ref_has_log">
        <doc xml:space="preserve">Get whether @ref has an existing log.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @ref has a log, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_branch" c:identifier="ggit_ref_is_branch">
        <doc xml:space="preserve">Check whether the reference is a branch.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the reference is a branch, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_note" c:identifier="ggit_ref_is_note">
        <doc xml:space="preserve">Check whether the reference is a note.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the reference is a note, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_remote" c:identifier="ggit_ref_is_remote">
        <doc xml:space="preserve">Check whether the reference is a remote.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the reference is a remote, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_tag" c:identifier="ggit_ref_is_tag">
        <doc xml:space="preserve">Check whether the reference is a tag.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the reference is a tag, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="lookup" c:identifier="ggit_ref_lookup" throws="1">
        <doc xml:space="preserve">Convenient method to resolve a reference to an object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitObject.</doc>
          <type name="Object" c:type="GgitObject*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="rename" c:identifier="ggit_ref_rename" throws="1">
        <doc xml:space="preserve">Rename an existing reference.

This method works for both direct and symbolic references.

The new name will be checked for validity.
See `ggit_ref_create_symbolic()` for rules about valid names.

If not error, @ref will be deleted from disk and a
new #GgitRef will be returned.

The reference will be immediately renamed in-memory and on disk.

If the `force` flag is not enabled, and there's already
a reference with the given name, the renaming will fail.

IMPORTANT:
The user needs to write a proper reflog entry if the
reflog is enabled for the repository. We only rename
the reflog if it exists.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly created #GgitRef.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
          <parameter name="new_name" transfer-ownership="none">
            <doc xml:space="preserve">the new name.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="force" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE to force the renaming.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="log_message" transfer-ownership="none">
            <doc xml:space="preserve">The one line long message to be appended to the reflog.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="resolve" c:identifier="ggit_ref_resolve" throws="1">
        <doc xml:space="preserve">Resolves a symbolic reference.

This method iteratively peels a symbolic reference
until it resolves to a direct reference to an OID.

If a direct reference is passed as an argument,
that reference is returned immediately.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the resolved reference to the peeled one.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_symbolic_target"
              c:identifier="ggit_ref_set_symbolic_target"
              throws="1">
        <doc xml:space="preserve">Create a new reference with the same name as the given reference but a
different symbolic target. The reference must be a symbolic reference,
otherwise this will fail.

The new reference will be written to disk, overwriting the given reference.

The target name will be checked for validity.
See `ggit_ref_create_symbolic()` for rules about valid names.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the newly created #GgitRef.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve">The new target for the reference.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="log_message" transfer-ownership="none">
            <doc xml:space="preserve">The one line long message to be appended to the reflog.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_target" c:identifier="ggit_ref_set_target" throws="1">
        <doc xml:space="preserve">Create a new reference with the same name as the given reference but a
different OID target. The reference must be a direct reference, otherwise
this will fail.

The new reference will be written to disk, overwriting the given reference.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the newly created #GgitRef.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
          <parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="log_message" transfer-ownership="none">
            <doc xml:space="preserve">The one line long message to be appended to the reflog.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string" c:identifier="ggit_ref_to_string">
        <doc xml:space="preserve">Get a string representation of the ref.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string representation of the ref.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ref" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRef.</doc>
            <type name="Ref" c:type="GgitRef*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <record name="RefClass"
            c:type="GgitRefClass"
            glib:is-gtype-struct-for="Ref">
      <doc xml:space="preserve">The class structure for #GgitRefClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <record name="RefSpec"
            c:type="GgitRefSpec"
            glib:type-name="GgitRefSpec"
            glib:get-type="ggit_ref_spec_get_type"
            c:symbol-prefix="ref_spec">
      <doc xml:space="preserve">Reprensents a git reference specification.</doc>
      <method name="get_destination"
              c:identifier="ggit_ref_spec_get_destination">
        <doc xml:space="preserve">Gets the @refspec's destination.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the refspec's destination.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="refspec" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRefSpec.</doc>
            <type name="RefSpec" c:type="GgitRefSpec*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_source" c:identifier="ggit_ref_spec_get_source">
        <doc xml:space="preserve">Gets the @refspec's source.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the refspec's source.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="refspec" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRefSpec.</doc>
            <type name="RefSpec" c:type="GgitRefSpec*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_forced" c:identifier="ggit_ref_spec_is_forced">
        <doc xml:space="preserve">Whether updating is done forcefully.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">if updating is done forcefully.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="refspec" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRefSpec.</doc>
            <type name="RefSpec" c:type="GgitRefSpec*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_ref_spec_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @refspec by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitRefSpec.</doc>
          <type name="RefSpec" c:type="GgitRefSpec*"/>
        </return-value>
        <parameters>
          <instance-parameter name="refspec" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRefSpec.</doc>
            <type name="RefSpec" c:type="GgitRefSpec*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_ref_spec_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @refspec by one.
If the reference count drops to 0, @refspec is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="refspec" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRefSpec.</doc>
            <type name="RefSpec" c:type="GgitRefSpec*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="RefType"
                 glib:type-name="GgitRefType"
                 glib:get-type="ggit_ref_type_get_type"
                 c:type="GgitRefType">
      <doc xml:space="preserve">Describes the type a reference is.</doc>
      <member name="invalid"
              value="0"
              c:identifier="GGIT_REF_INVALID"
              glib:nick="invalid">
        <doc xml:space="preserve">An invalid reference.</doc>
      </member>
      <member name="oid" value="1" c:identifier="GGIT_REF_OID" glib:nick="oid">
        <doc xml:space="preserve">A reference which points at an object id.</doc>
      </member>
      <member name="symbolic"
              value="2"
              c:identifier="GGIT_REF_SYMBOLIC"
              glib:nick="symbolic">
        <doc xml:space="preserve">A reference which points at another reference.</doc>
      </member>
      <member name="listall"
              value="3"
              c:identifier="GGIT_REF_LISTALL"
              glib:nick="listall">
        <doc xml:space="preserve">All reference types.</doc>
      </member>
    </enumeration>
    <callback name="ReferencesCallback" c:type="GgitReferencesCallback">
      <doc xml:space="preserve">The type of the callback functions for retrieving the references
in a #GgitRepository. See ggit_repository_references_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go for the next references or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="reference" transfer-ownership="full">
          <doc xml:space="preserve">the reference.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="ReferencesNameCallback"
              c:type="GgitReferencesNameCallback">
      <doc xml:space="preserve">The type of the callback functions for retrieving the references
in a #GgitRepository. See ggit_repository_references_foreach_name().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go for the next references or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <doc xml:space="preserve">the name of the reference</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="Reflog"
            c:type="GgitReflog"
            glib:type-name="GgitReflog"
            glib:get-type="ggit_reflog_get_type"
            c:symbol-prefix="reflog">
      <doc xml:space="preserve">Represents a reflog.</doc>
      <method name="append" c:identifier="ggit_reflog_append" throws="1">
        <doc xml:space="preserve">Creates a reflog entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the reflog was successfully created, or %FALSE if error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflog.</doc>
            <type name="Reflog" c:type="GgitReflog*"/>
          </instance-parameter>
          <parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="committer" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">the message.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_entry_count"
              c:identifier="ggit_reflog_get_entry_count">
        <doc xml:space="preserve">Gets the number of log entries in @reflog.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of log entries.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflog.</doc>
            <type name="Reflog" c:type="GgitReflog*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_entry_from_index"
              c:identifier="ggit_reflog_get_entry_from_index">
        <doc xml:space="preserve">Gets the #GgitReflogEntry at @idx in @reflog, or %NULL if not found.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the reflog entry at the index, or %NULL if not found.</doc>
          <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflog.</doc>
            <type name="Reflog" c:type="GgitReflog*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">the position to lookup.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_reflog_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @reflog by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the passed in #GgitReflog.</doc>
          <type name="Reflog" c:type="GgitReflog*"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflog.</doc>
            <type name="Reflog" c:type="GgitReflog*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="rename" c:identifier="ggit_reflog_rename" throws="1">
        <doc xml:space="preserve">Renames the reflog for to @new_name, on error @error is set.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflog.</doc>
            <type name="Reflog" c:type="GgitReflog*"/>
          </instance-parameter>
          <parameter name="new_name" transfer-ownership="none">
            <doc xml:space="preserve">the new name of the reference.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_reflog_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @reflog by one.
If the reference count drops to 0, @reflog is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflog.</doc>
            <type name="Reflog" c:type="GgitReflog*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="write" c:identifier="ggit_reflog_write" throws="1">
        <doc xml:space="preserve">Write the reflog to disk.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the reflog was successfully written, or %FALSE on error.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflog.</doc>
            <type name="Reflog" c:type="GgitReflog*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <record name="ReflogEntry"
            c:type="GgitReflogEntry"
            glib:type-name="GgitReflogEntry"
            glib:get-type="ggit_reflog_entry_get_type"
            c:symbol-prefix="reflog_entry">
      <doc xml:space="preserve">Represents a reflog entry.</doc>
      <method name="get_committer"
              c:identifier="ggit_reflog_entry_get_committer">
        <doc xml:space="preserve">Gets the committer as a #GgitSignature.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the committer.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog_entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflogEntry.</doc>
            <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_message" c:identifier="ggit_reflog_entry_get_message">
        <doc xml:space="preserve">Gets the message.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the message.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog_entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflogEntry.</doc>
            <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_new_id" c:identifier="ggit_reflog_entry_get_new_id">
        <doc xml:space="preserve">Gets the new #GgitOId.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the new oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog_entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflogEntry.</doc>
            <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_old_id" c:identifier="ggit_reflog_entry_get_old_id">
        <doc xml:space="preserve">Gets the old #GgitOId.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the old oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog_entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflogEntry.</doc>
            <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_reflog_entry_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @reflog_entry by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the passed in #GgitReflogEntry.</doc>
          <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog_entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflogEntry.</doc>
            <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_reflog_entry_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @reflog_entry by one.
If the reference count drops to 0, @reflog_entry is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="reflog_entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitReflogEntry.</doc>
            <type name="ReflogEntry" c:type="GgitReflogEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="Remote"
           c:symbol-prefix="remote"
           c:type="GgitRemote"
           parent="Native"
           glib:type-name="GgitRemote"
           glib:get-type="ggit_remote_get_type"
           glib:type-struct="RemoteClass">
      <doc xml:space="preserve">Represents a git remote.</doc>
      <constructor name="new" c:identifier="ggit_remote_new" throws="1">
        <doc xml:space="preserve">Creates a remote with the default refspecs in memory. You can use
this when you have a URL instead of a remote's name.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitRemote.</doc>
          <type name="Remote" c:type="GgitRemote*"/>
        </return-value>
        <parameters>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the remote's name.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">the remote repository's URL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_anonymous"
                   c:identifier="ggit_remote_new_anonymous"
                   throws="1">
        <doc xml:space="preserve">Creates a remote with the specified refspec in memory. You can use
this when you have a URL instead of a remote's name.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitRemote.</doc>
          <type name="Remote" c:type="GgitRemote*"/>
        </return-value>
        <parameters>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">the remote repository's URL.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="connect" c:identifier="ggit_remote_connect" throws="1">
        <doc xml:space="preserve">Opens a connection to a remote.
The transport is selected based on the URL. The direction argument
is due to a limitation of the git protocol (over TCP or SSH) which
starts up a specific binary which can only do the one or the other.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
          <parameter name="direction" transfer-ownership="none">
            <doc xml:space="preserve">whether you want to receive or send data.</doc>
            <type name="Direction" c:type="GgitDirection"/>
          </parameter>
          <parameter name="callbacks" transfer-ownership="none">
            <doc xml:space="preserve">the callbacks to use for this connection.</doc>
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </parameter>
          <parameter name="custom_headers"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">extra HTTP headers to use in this connection.</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
        </parameters>
      </method>
      <method name="disconnect" c:identifier="ggit_remote_disconnect">
        <doc xml:space="preserve">Closes the connection to the remote and frees the underlying
transport.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="download" c:identifier="ggit_remote_download" throws="1">
        <doc xml:space="preserve">Connect to the remote if not yet connected, negotiate with the remote
about which objects are missing and download the resulting packfile and
its index.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if successful, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
          <parameter name="specs"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the ref specs.</doc>
            <array c:type="gchar**">
              <type name="utf8" c:type="gchar*"/>
            </array>
          </parameter>
          <parameter name="fetch_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_connected" c:identifier="ggit_remote_get_connected">
        <doc xml:space="preserve">Check whether @remote is connected.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if it is connected.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_fetch_specs"
              c:identifier="ggit_remote_get_fetch_specs"
              throws="1">
        <doc xml:space="preserve">Get the list of fetch refspecs for the given remote.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a list of fetch refspecs.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_remote_get_name">
        <doc xml:space="preserve">Gets the remote's name.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of @remote.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_owner" c:identifier="ggit_remote_get_owner">
        <doc xml:space="preserve">Gets the repository where @remote resides.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the repository where the remote resides.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_push_specs"
              c:identifier="ggit_remote_get_push_specs"
              throws="1">
        <doc xml:space="preserve">Get the list of push refspecs for the given remote.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a list of push refspecs.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_url" c:identifier="ggit_remote_get_url">
        <doc xml:space="preserve">Gets the remote's url.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the url of @remote.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list" c:identifier="ggit_remote_list" throws="1">
        <doc xml:space="preserve">Get a list of refs at the remote.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the remote heads.</doc>
          <array c:type="GgitRemoteHead**">
            <type name="RemoteHead" c:type="GgitRemoteHead*"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="update_tips"
              c:identifier="ggit_remote_update_tips"
              throws="1">
        <doc xml:space="preserve">Update tips to the new state.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if successful, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </instance-parameter>
          <parameter name="callbacks" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemoteCallbacks.</doc>
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </parameter>
          <parameter name="update_fetch_head" transfer-ownership="none">
            <doc xml:space="preserve">whether to write to FETCH_HEAD. %TRUE to behave like git.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="tags_type" transfer-ownership="none">
            <doc xml:space="preserve">what the behaviour for downloading tags is for this fetch. This is
            ignored for push. This must be the same value passed to
            ggit_remote_download().</doc>
            <type name="RemoteDownloadTagsType"
                  c:type="GgitRemoteDownloadTagsType"/>
          </parameter>
          <parameter name="message"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">reflog_message The message to insert into the reflogs. If
                        %NULL and fetching, the default is "fetch &lt;name&gt;",
                        where &lt;name&gt; is the name of the remote (or its url,
                        for in-memory remotes). This parameter is ignored when pushing.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <class name="RemoteCallbacks"
           c:symbol-prefix="remote_callbacks"
           c:type="GgitRemoteCallbacks"
           parent="GObject.Object"
           glib:type-name="GgitRemoteCallbacks"
           glib:get-type="ggit_remote_callbacks_get_type"
           glib:type-struct="RemoteCallbacksClass">
      <doc xml:space="preserve">Represents a git remote callbacks.</doc>
      <virtual-method name="completion">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="callbacks" transfer-ownership="none">
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <type name="RemoteCompletionType"
                  c:type="GgitRemoteCompletionType"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="credentials" throws="1">
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a #GgitCred or %NULL in case of an error.</doc>
          <type name="Cred" c:type="GgitCred*"/>
        </return-value>
        <parameters>
          <instance-parameter name="callbacks" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemoteCallbacks.</doc>
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </instance-parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">the url.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="username_from_url"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the username extracted from the url.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="allowed_types" transfer-ownership="none">
            <doc xml:space="preserve">the allowed credential types.</doc>
            <type name="Credtype" c:type="GgitCredtype"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="progress">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="callbacks" transfer-ownership="none">
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </instance-parameter>
          <parameter name="message" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="transfer_progress">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="callbacks" transfer-ownership="none">
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </instance-parameter>
          <parameter name="stats" transfer-ownership="none">
            <type name="TransferProgress" c:type="GgitTransferProgress*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="update_tips">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="callbacks" transfer-ownership="none">
            <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
          </instance-parameter>
          <parameter name="refname" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="a" transfer-ownership="none">
            <type name="OId" c:type="const GgitOId*"/>
          </parameter>
          <parameter name="b" transfer-ownership="none">
            <type name="OId" c:type="const GgitOId*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <glib:signal name="completion" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="RemoteCompletionType"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="progress" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="transfer-progress" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="TransferProgress"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="update-tips" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="OId"/>
          </parameter>
          <parameter name="p1" transfer-ownership="none">
            <type name="OId"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="RemoteCallbacksClass"
            c:type="GgitRemoteCallbacksClass"
            glib:is-gtype-struct-for="RemoteCallbacks">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="progress">
        <callback name="progress">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="callbacks" transfer-ownership="none">
              <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
            </parameter>
            <parameter name="message" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="transfer_progress">
        <callback name="transfer_progress">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="callbacks" transfer-ownership="none">
              <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
            </parameter>
            <parameter name="stats" transfer-ownership="none">
              <type name="TransferProgress" c:type="GgitTransferProgress*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="update_tips">
        <callback name="update_tips">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="callbacks" transfer-ownership="none">
              <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
            </parameter>
            <parameter name="refname" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="a" transfer-ownership="none">
              <type name="OId" c:type="const GgitOId*"/>
            </parameter>
            <parameter name="b" transfer-ownership="none">
              <type name="OId" c:type="const GgitOId*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="completion">
        <callback name="completion">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="callbacks" transfer-ownership="none">
              <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
            </parameter>
            <parameter name="type" transfer-ownership="none">
              <type name="RemoteCompletionType"
                    c:type="GgitRemoteCompletionType"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="credentials">
        <callback name="credentials" throws="1">
          <return-value transfer-ownership="full" nullable="1">
            <doc xml:space="preserve">a #GgitCred or %NULL in case of an error.</doc>
            <type name="Cred" c:type="GgitCred*"/>
          </return-value>
          <parameters>
            <parameter name="callbacks" transfer-ownership="none">
              <doc xml:space="preserve">a #GgitRemoteCallbacks.</doc>
              <type name="RemoteCallbacks" c:type="GgitRemoteCallbacks*"/>
            </parameter>
            <parameter name="url" transfer-ownership="none">
              <doc xml:space="preserve">the url.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="username_from_url"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve">the username extracted from the url.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="allowed_types" transfer-ownership="none">
              <doc xml:space="preserve">the allowed credential types.</doc>
              <type name="Credtype" c:type="GgitCredtype"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="RemoteClass"
            c:type="GgitRemoteClass"
            glib:is-gtype-struct-for="Remote">
      <field name="parent_class" readable="0" private="1">
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <enumeration name="RemoteCompletionType"
                 glib:type-name="GgitRemoteCompletionType"
                 glib:get-type="ggit_remote_completion_type_get_type"
                 c:type="GgitRemoteCompletionType">
      <doc xml:space="preserve">Argument to the completion callback which tells it which operation finished.</doc>
      <member name="download"
              value="0"
              c:identifier="GGIT_REMOTE_COMPLETION_DOWNLOAD"
              glib:nick="download">
        <doc xml:space="preserve">download.</doc>
      </member>
      <member name="indexing"
              value="1"
              c:identifier="GGIT_REMOTE_COMPLETION_INDEXING"
              glib:nick="indexing">
        <doc xml:space="preserve">indexing.</doc>
      </member>
      <member name="error"
              value="2"
              c:identifier="GGIT_REMOTE_COMPLETION_ERROR"
              glib:nick="error">
        <doc xml:space="preserve">error.</doc>
      </member>
    </enumeration>
    <enumeration name="RemoteDownloadTagsType"
                 glib:type-name="GgitRemoteDownloadTagsType"
                 glib:get-type="ggit_remote_download_tags_type_get_type"
                 c:type="GgitRemoteDownloadTagsType">
      <doc xml:space="preserve">Automatic tag following option

Lets us select the --tags option to use.</doc>
      <member name="unspecified"
              value="0"
              c:identifier="GGIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED"
              glib:nick="unspecified">
        <doc xml:space="preserve">Use the setting from the configuration.</doc>
      </member>
      <member name="auto"
              value="1"
              c:identifier="GGIT_REMOTE_DOWNLOAD_TAGS_AUTO"
              glib:nick="auto">
        <doc xml:space="preserve">Ask the server for tags pointing to objects we're already
downloading.</doc>
      </member>
      <member name="none"
              value="2"
              c:identifier="GGIT_REMOTE_DOWNLOAD_TAGS_NONE"
              glib:nick="none">
        <doc xml:space="preserve">Don't ask for any tags beyond the refspecs.</doc>
      </member>
      <member name="all"
              value="3"
              c:identifier="GGIT_REMOTE_DOWNLOAD_TAGS_ALL"
              glib:nick="all">
        <doc xml:space="preserve">Ask for the all the tags.</doc>
      </member>
    </enumeration>
    <record name="RemoteHead"
            c:type="GgitRemoteHead"
            glib:type-name="GgitRemoteHead"
            glib:get-type="ggit_remote_head_get_type"
            c:symbol-prefix="remote_head">
      <doc xml:space="preserve">Represents a git remote head.</doc>
      <method name="get_local_oid"
              c:identifier="ggit_remote_head_get_local_oid">
        <doc xml:space="preserve">Get the local oid of the remote head.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the local oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote_head" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemoteHead.</doc>
            <type name="RemoteHead" c:type="GgitRemoteHead*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_remote_head_get_name">
        <doc xml:space="preserve">Get the remote head name.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the remote head name.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote_head" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemoteHead.</doc>
            <type name="RemoteHead" c:type="GgitRemoteHead*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_oid" c:identifier="ggit_remote_head_get_oid">
        <doc xml:space="preserve">Get the remote oid of the remote head.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the remote oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote_head" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemoteHead.</doc>
            <type name="RemoteHead" c:type="GgitRemoteHead*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_local" c:identifier="ggit_remote_head_is_local">
        <doc xml:space="preserve">Get whether the remote head is local.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">whether the remote head is local.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote_head" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemoteHead.</doc>
            <type name="RemoteHead" c:type="GgitRemoteHead*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_remote_head_ref">
        <return-value transfer-ownership="full">
          <type name="RemoteHead" c:type="GgitRemoteHead*"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote_head" transfer-ownership="none">
            <type name="RemoteHead" c:type="GgitRemoteHead*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_remote_head_unref">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="remote_head" transfer-ownership="none">
            <type name="RemoteHead" c:type="GgitRemoteHead*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="RemoteListCallback" c:type="GgitRemoteListCallback">
      <doc xml:space="preserve">The type of the callback functions for listing the references of a
#GgitRemote. See ggit_remote_list().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <doc xml:space="preserve">the name of the reference.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="oid" transfer-ownership="none">
          <doc xml:space="preserve">the reference's oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </parameter>
        <parameter name="loid" transfer-ownership="none">
          <doc xml:space="preserve">the reference's loid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </parameter>
        <parameter name="local" transfer-ownership="none">
          <doc xml:space="preserve">if available locally.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="Repository"
           c:symbol-prefix="repository"
           c:type="GgitRepository"
           parent="Native"
           glib:type-name="GgitRepository"
           glib:get-type="ggit_repository_get_type"
           glib:type-struct="RepositoryClass">
      <doc xml:space="preserve">Represents an existing git repository including all of it's
object contents.</doc>
      <implements name="Gio.Initable"/>
      <function name="clone" c:identifier="ggit_repository_clone" throws="1">
        <doc xml:space="preserve">Clones a new git repository in the given folder.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly created #GgitRepository.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">url to fetch the repository from.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="location" transfer-ownership="none">
            <doc xml:space="preserve">the location of the repository.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitCloneOptions.</doc>
            <type name="CloneOptions" c:type="GgitCloneOptions*"/>
          </parameter>
        </parameters>
      </function>
      <function name="discover"
                c:identifier="ggit_repository_discover"
                throws="1">
        <doc xml:space="preserve">Looks for a git repository.

The lookup starts from @path and walks up the parent directories
and stops when a repository is found.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the repository location.</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
        <parameters>
          <parameter name="location" transfer-ownership="none">
            <doc xml:space="preserve">the base location where the lookup starts.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </function>
      <function name="init_repository"
                c:identifier="ggit_repository_init_repository"
                throws="1">
        <doc xml:space="preserve">Creates a new git repository in the given folder.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly created #GgitRepository.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <parameter name="location" transfer-ownership="none">
            <doc xml:space="preserve">the location of the repository.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="is_bare" transfer-ownership="none">
            <doc xml:space="preserve">if %TRUE, a git repository without a working directory is created
          at the pointed path. If %FALSE, provided path will be considered as the working
          directory into which the .git directory will be created.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </function>
      <function name="open" c:identifier="ggit_repository_open" throws="1">
        <doc xml:space="preserve">Open a git repository.

The @path must point to an existing git repository folder, e.g.

	/path/to/my_repo/.git/	(normal repository)
						objects/
						index
						HEAD

	/path/to/bare_repo/		(bare repository)
					objects/
					index
					HEAD

The method will automatically detect if @path is a normal
or bare repository or fail if it is neither.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly created #GgitRepository.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <parameter name="location" transfer-ownership="none">
            <doc xml:space="preserve">the location of the repository.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </function>
      <method name="add_remote_fetch"
              c:identifier="ggit_repository_add_remote_fetch"
              throws="1">
        <doc xml:space="preserve">Adds a fetch refspec to the @remote's configuration.
Adds @refspec to the fetch list in the configuration. No
loaded remote instances will be affected.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </parameter>
          <parameter name="refspec" transfer-ownership="none">
            <doc xml:space="preserve">the fetch refspec.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_remote_push"
              c:identifier="ggit_repository_add_remote_push"
              throws="1">
        <doc xml:space="preserve">Adds a push refspec to @remote's configuration.
Adds the given refspec to the push list in the configuration. No
loaded remote instances will be affected.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="remote" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRemote.</doc>
            <type name="Remote" c:type="GgitRemote*"/>
          </parameter>
          <parameter name="refspec" transfer-ownership="none">
            <doc xml:space="preserve">the push refspec.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="blame_file"
              c:identifier="ggit_repository_blame_file"
              throws="1">
        <doc xml:space="preserve">Get a blame for a single file.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitBlame.</doc>
          <type name="Blame" c:type="GgitBlame*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">the file to blame.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="blame_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">blame options.</doc>
            <type name="BlameOptions" c:type="GgitBlameOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="checkout_head"
              c:identifier="ggit_repository_checkout_head"
              throws="1">
        <doc xml:space="preserve">Update files in the working tree to reflect the contents of current HEAD. If
@options is %NULL, then the default checkout options will be used.

If the checkout was not successfull, then @error will be set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the checkout was successfull, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitCheckoutOptions or %NULL.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="checkout_index"
              c:identifier="ggit_repository_checkout_index"
              throws="1">
        <doc xml:space="preserve">Update files in the working tree to reflect the contents of the index. If
@index is %NULL, then the current index of the repository will be used. If
@options is %NULL, then the default checkout options will be used.

If the checkout was not successfull, then @error will be set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the checkout was successfull, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="index"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitIndex or %NULL.</doc>
            <type name="Index" c:type="GgitIndex*"/>
          </parameter>
          <parameter name="options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitCheckoutOptions or %NULL.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="checkout_tree"
              c:identifier="ggit_repository_checkout_tree"
              throws="1">
        <doc xml:space="preserve">Update files in the working tree to reflect the contents of the specified
commit, tag or tree object. If @tree is %NULL, then the current HEAD of the
repository will be used. If @options is %NULL, then the default checkout
options will be used.

If the checkout was not successfull, then @error will be set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the checkout was successfull, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="tree"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitObject or %NULL.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </parameter>
          <parameter name="options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitCheckoutOptions or %NULL.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cherry_pick"
              c:identifier="ggit_repository_cherry_pick"
              throws="1">
        <doc xml:space="preserve">Cherry pick the specified commit, making changes in the index and the working
directory.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the commit was cherry-picked successfully, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCherryPickOptions.</doc>
            <type name="CherryPickOptions" c:type="GgitCherryPickOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cherry_pick_commit"
              c:identifier="ggit_repository_cherry_pick_commit"
              throws="1">
        <doc xml:space="preserve">Cherry-picks the given @commit against the provided @our_commit, producing
and index that reflects the result of the cherry-pick.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndex.</doc>
          <type name="Index" c:type="GgitIndex*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit to cherry-pick.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
          <parameter name="our_commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit to cherry-pick on.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
          <parameter name="mainline" transfer-ownership="none">
            <doc xml:space="preserve">the parent of the commit, in case of a merge commit.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="merge_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_blob" c:identifier="ggit_repository_create_blob">
        <doc xml:space="preserve">Create a new blob and return a #GOutputStream to write contents to the blob.
This is an efficient way to create new blobs without copying data. The
blob id can be obtained from the blob output stream using
#ggit_blob_output_stream_get_id, after you close the stream.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitBlobOutputStream.</doc>
          <type name="BlobOutputStream" c:type="GgitBlobOutputStream*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="create_blob_from_buffer"
              c:identifier="ggit_repository_create_blob_from_buffer"
              throws="1">
        <doc xml:space="preserve">Write an in-memory buffer to the object database as a blob.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the new #GgitOid of the written blob, or %NULL if writing the blob
failed.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="buffer" transfer-ownership="none">
            <doc xml:space="preserve">the data.</doc>
            <array length="1" zero-terminated="0" c:type="gconstpointer">
              <type name="guint8"/>
            </array>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">the length (in bytes) of the data.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_blob_from_file"
              c:identifier="ggit_repository_create_blob_from_file"
              throws="1">
        <doc xml:space="preserve">Write a file to the object database as a blob.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the new #GgitOid of the written blob, or %NULL if writing the blob
failed.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_blob_from_path"
              c:identifier="ggit_repository_create_blob_from_path"
              throws="1">
        <doc xml:space="preserve">Write a path relative to the repository working directory to the object
database as a blob.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the new #GgitOid of the written blob, or %NULL if writing the blob
failed.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">the file path.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_branch"
              c:identifier="ggit_repository_create_branch"
              throws="1">
        <doc xml:space="preserve">Creates a new branch pointing at a target commit.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the reference to which the branch
                                       points, or %NULL in case of an error.</doc>
          <type name="Branch" c:type="GgitBranch*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="branch_name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the branch.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObject.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCreateFlags.</doc>
            <type name="CreateFlags" c:type="GgitCreateFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_commit"
              c:identifier="ggit_repository_create_commit"
              throws="1">
        <doc xml:space="preserve">Create a new commit. If @update_ref is not %NULL, the given reference will
be updated to point to the newly created commit. Use "HEAD" to update the
HEAD of the current branch and make it point to this commit.

If @message_encoding is set to %NULL, "UTF-8" encoding is assumed for the
provided @message. Note that @message will not be cleaned up automatically.
You can use #ggit_message_prettify to do this yourself if needed.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitOId of the created commit object, or %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="update_ref"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">name of the reference to update.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="author" transfer-ownership="none">
            <doc xml:space="preserve">author signature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="committer" transfer-ownership="none">
            <doc xml:space="preserve">committer signature (and time of commit).</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message_encoding"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">message encoding.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">commit message.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">the tree of objects to commit.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="parents" transfer-ownership="none">
            <doc xml:space="preserve">parent commits.</doc>
            <array length="7" zero-terminated="0" c:type="GgitCommit**">
              <type name="Commit" c:type="GgitCommit*"/>
            </array>
          </parameter>
          <parameter name="parent_count" transfer-ownership="none">
            <doc xml:space="preserve">number of parent commits in @parents.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_commit_from_ids"
              c:identifier="ggit_repository_create_commit_from_ids"
              throws="1">
        <doc xml:space="preserve">Create a new commit. If @update_ref is not %NULL, the given reference will
be updated to point to the newly created commit. Use "HEAD" to update the
HEAD of the current branch and make it point to this commit.

If @message_encoding is set to %NULL, "UTF-8" encoding is assumed for the
provided @message. Note that @message will not be cleaned up automatically.
You can use #ggit_message_prettify to do this yourself if needed.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitOId of the created commit object, or %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="update_ref"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">name of the reference to update.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="author" transfer-ownership="none">
            <doc xml:space="preserve">author signature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="committer" transfer-ownership="none">
            <doc xml:space="preserve">committer signature (and time of commit).</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message_encoding"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">message encoding.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">commit message.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">the tree of objects to commit.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="parents" transfer-ownership="none">
            <doc xml:space="preserve">parent commits.</doc>
            <array length="7" zero-terminated="0" c:type="GgitOId**">
              <type name="OId" c:type="GgitOId*"/>
            </array>
          </parameter>
          <parameter name="parent_count" transfer-ownership="none">
            <doc xml:space="preserve">number of parent commits in @parents.</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_index_entry_for_file"
              c:identifier="ggit_repository_create_index_entry_for_file"
              throws="1">
        <doc xml:space="preserve">Create a new index entry. When @file is not %NULL, the path of the returned
entry (#ggit_index_entry_get_path) is set to the path of @file relative to
the working directory of @repository. The file must reside in the working
directory of @repository. The file related
fields of the returned entry are also queried from this file (if the file exists).

If @id is not %NULL, then the id of the returned entry is set to @id
(see #ggit_index_entry_get_id) which could point to a blob (for a file)
or a tree (for a directory).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntry or %NULL when an error occurred.</doc>
          <type name="IndexEntry" c:type="GgitIndexEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="file"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GFile.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="id"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_index_entry_for_path"
              c:identifier="ggit_repository_create_index_entry_for_path"
              throws="1">
        <doc xml:space="preserve">Create a new index entry. When @path is not %NULL, the path of the returned
entry (#ggit_index_entry_get_path) is set @path. The specified path can be
either absolute or relative. In the case of
an absolute path, the path must reside within the working directory of
@repository. The file related fields of the returned entry are also queried
from this path (if the file exists).

If @id is not %NULL, then the id of the returned entry is set to @id
(see #ggit_index_entry_get_id) which could point to a blob (for a file)
or a tree (for a directory).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndexEntry or %NULL when an error occurred.</doc>
          <type name="IndexEntry" c:type="GgitIndexEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="path"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a path.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="id"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_note"
              c:identifier="ggit_repository_create_note"
              throws="1">
        <doc xml:space="preserve">Adds a note for an object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the OID for the note or %NULL in case of error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="notes_ref"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">canonical name of the reference to use, or %NULL to use the default ref.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="author" transfer-ownership="none">
            <doc xml:space="preserve">author signature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="committer" transfer-ownership="none">
            <doc xml:space="preserve">committer signature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">OID of the git object to decorate.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="note" transfer-ownership="none">
            <doc xml:space="preserve">content of the note to add for object oid.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="force" transfer-ownership="none">
            <doc xml:space="preserve">whether to overwrite existing note.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_reference"
              c:identifier="ggit_repository_create_reference"
              throws="1">
        <doc xml:space="preserve">Creates a new object id reference.

The reference will be created in the repository and written
to the disk. The returned value must be freed with g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the newly created reference.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name for the new #GgitRef.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">the #GgitOId pointed to by the reference.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="log_message" transfer-ownership="none">
            <doc xml:space="preserve">The one line long message to be appended to the reflog.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_remote"
              c:identifier="ggit_repository_create_remote"
              throws="1">
        <doc xml:space="preserve">Adds a remote with the default fetch refspec to the repository's configuration.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a new #GgitRemote or %NULL if there is an error.</doc>
          <type name="Remote" c:type="GgitRemote*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the new remote.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">the url of the remote.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_symbolic_reference"
              c:identifier="ggit_repository_create_symbolic_reference"
              throws="1">
        <doc xml:space="preserve">Creates a new symbolic reference.

The reference will be created in the repository and written
to the disk. The returned value must be freed with g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the newly created reference.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name for the new #GgitRef.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve">the full name to the reference.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="log_message" transfer-ownership="none">
            <doc xml:space="preserve">The one line long message to be appended to the reflog.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_tag"
              c:identifier="ggit_repository_create_tag"
              throws="1">
        <doc xml:space="preserve">Create a new tag object.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the id to which the tag points, or
                                       %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="tag_name" transfer-ownership="none">
            <doc xml:space="preserve">the tag name.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObject.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </parameter>
          <parameter name="tagger" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">the tag message.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCreateFlags.</doc>
            <type name="CreateFlags" c:type="GgitCreateFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_tag_annotation"
              c:identifier="ggit_repository_create_tag_annotation"
              throws="1">
        <doc xml:space="preserve">Creates a new annotated tag.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the id to which the tag points, or
                                       %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="tag_name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the tag.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObject.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </parameter>
          <parameter name="signature" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObject.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">the tag message.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_tag_from_buffer"
              c:identifier="ggit_repository_create_tag_from_buffer"
              throws="1">
        <doc xml:space="preserve">Create a new tag from a buffer describing the tag object. The buffer must
be correctly formatted.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the id to which the tag points, or
                                       %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">the tag buffer.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCreateFlags.</doc>
            <type name="CreateFlags" c:type="GgitCreateFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_tag_lightweight"
              c:identifier="ggit_repository_create_tag_lightweight"
              throws="1">
        <doc xml:space="preserve">Creates a new lightweight tag.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the id to which the tag points, or
                                       %NULL in case of an error.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="tag_name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the tag.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitObject.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCreateFlags.</doc>
            <type name="CreateFlags" c:type="GgitCreateFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_tree_builder"
              c:identifier="ggit_repository_create_tree_builder"
              throws="1">
        <doc xml:space="preserve">Create a new tree builder.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitTreeBuilder, or %NULL if there was an error.</doc>
          <type name="TreeBuilder" c:type="GgitTreeBuilder*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="create_tree_builder_from_tree"
              c:identifier="ggit_repository_create_tree_builder_from_tree"
              throws="1">
        <doc xml:space="preserve">Create a tree builder for initialized with @tree. To create an empty
tree builder, use #ggit_repository_create_tree_builder instead.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitTreeBuilder object, or %NULL if there was an error.</doc>
          <type name="TreeBuilder" c:type="GgitTreeBuilder*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
        </parameters>
      </method>
      <method name="delete_tag"
              c:identifier="ggit_repository_delete_tag"
              throws="1">
        <doc xml:space="preserve">Delete an existing tag reference by name.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the tag was deleted successfully, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the tag.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="drop_stash"
              c:identifier="ggit_repository_drop_stash"
              throws="1">
        <doc xml:space="preserve">Removes a single stashed state from the stash list.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve">the position within the stash list. 0 points to the.
most recent stashed state.</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="enumerate_branches"
              c:identifier="ggit_repository_enumerate_branches"
              throws="1">
        <doc xml:space="preserve">Get a branch enumerator to enumerate over all branches of the specified
@list_type in @repository.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a branch enumerator.</doc>
          <type name="BranchEnumerator" c:type="GgitBranchEnumerator*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="list_type" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranchType.</doc>
            <type name="BranchType" c:type="GgitBranchType"/>
          </parameter>
        </parameters>
      </method>
      <method name="file_status"
              c:identifier="ggit_repository_file_status"
              throws="1">
        <doc xml:space="preserve">Gets the file status for a single file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the status for a single file.</doc>
          <type name="StatusFlags" c:type="GgitStatusFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="location" transfer-ownership="none">
            <doc xml:space="preserve">the file to retrieve status for, rooted at the repository working dir.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
        </parameters>
      </method>
      <method name="file_status_foreach"
              c:identifier="ggit_repository_file_status_foreach"
              throws="1">
        <doc xml:space="preserve">Gathers file statuses and run a callback for each one.

To the callback is passed the path of the file, the status and the data pointer
passed to this function. If the callback returns something other than
0, the iteration will stop and @error will be set.

Set @options to %NULL to get the default status options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was no error, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">status options, or %NULL.</doc>
            <type name="StatusOptions" c:type="GgitStatusOptions*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <doc xml:space="preserve">a #GgitStatusCallback.</doc>
            <type name="StatusCallback" c:type="GgitStatusCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_ahead_behind"
              c:identifier="ggit_repository_get_ahead_behind"
              throws="1">
        <doc xml:space="preserve">Count the number of unique commits between two commit objects.

There is no need for branches containing the commits to have any
upstream relationship, but it helps to think of one as a branch and
the other as its upstream, the @ahead and @behind values will be
what git would report for the branches.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="local" transfer-ownership="none">
            <doc xml:space="preserve">the commit for local.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="upstream" transfer-ownership="none">
            <doc xml:space="preserve">the commit for upstream.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="ahead"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">number of unique from commits in @upstream.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
          <parameter name="behind"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">number of unique from commits in @local.</doc>
            <type name="gsize" c:type="gsize*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_attribute"
              c:identifier="ggit_repository_get_attribute"
              throws="1">
        <doc xml:space="preserve">Get the attribute value of the specified attribute for the given file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the attribute value, or %NULL.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">the relative path to the file.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the attribute.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitAttributeCheckFlags.</doc>
            <type name="AttributeCheckFlags" c:type="GgitAttributeCheckFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_config"
              c:identifier="ggit_repository_get_config"
              throws="1">
        <doc xml:space="preserve">Get the config for a specific repository.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitConfig.</doc>
          <type name="Config" c:type="GgitConfig*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_default_notes_ref"
              c:identifier="ggit_repository_get_default_notes_ref"
              throws="1">
        <doc xml:space="preserve">Gets the default notes reference for @repository. It defaults to
"refs/notes/commits".</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the default notes reference for @repository.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_descendant_of"
              c:identifier="ggit_repository_get_descendant_of"
              throws="1">
        <doc xml:space="preserve">Check whether @com mit is a descendant of @ancestor. Note that if this
function returns %FALSE, an error might have occurred. If so, @error will
be set appropriately.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @commit is a descendant of @ancestor, or %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">the commit.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="ancestor" transfer-ownership="none">
            <doc xml:space="preserve">the ancestor.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_head"
              c:identifier="ggit_repository_get_head"
              throws="1">
        <doc xml:space="preserve">Get and resolves the current HEAD reference of the repository. Note that the
returned ref is already resolved (if HEAD is symbolic). If you want to
retrieve the symbolic ref called HEAD, then use #ggit_repository_lookup_reference
instead.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitRef</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_index"
              c:identifier="ggit_repository_get_index"
              throws="1">
        <doc xml:space="preserve">Get the index for a specific repository.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitIndex.</doc>
          <type name="Index" c:type="GgitIndex*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_location" c:identifier="ggit_repository_get_location">
        <doc xml:space="preserve">Get the gitdir location of the repository.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the location of the gitdir of the repository.</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_submodule_status"
              c:identifier="ggit_repository_get_submodule_status"
              throws="1">
        <doc xml:space="preserve">Gets the status for a submodule.
This looks at a submodule and tries to determine the status.  It
will return a combination of the %GGIT_SUBMODULE_STATUS values.
How deeply it examines the working directory to do this will depend
on @ignore.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GgitSubmoduleStatus for @submodule.</doc>
          <type name="SubmoduleStatus" c:type="GgitSubmoduleStatus"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the submodule.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="ignore" transfer-ownership="none">
            <doc xml:space="preserve">the ignore rules to follow.</doc>
            <type name="SubmoduleIgnore" c:type="GgitSubmoduleIgnore"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_workdir" c:identifier="ggit_repository_get_workdir">
        <doc xml:space="preserve">Gets the working directory of the repository.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the location of the working directory of the repository.</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_bare" c:identifier="ggit_repository_is_bare">
        <doc xml:space="preserve">Checks if @repository is bare.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the repository is empty.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_empty"
              c:identifier="ggit_repository_is_empty"
              throws="1">
        <doc xml:space="preserve">Checks if @repository is empty.

An empty repository has just been initialized and contains
no commits.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the repository is empty.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_head_detached"
              c:identifier="ggit_repository_is_head_detached"
              throws="1">
        <doc xml:space="preserve">Checks if @repository's HEAD is detached.

A repository's HEAD is detached when it points directly to a commit
instead of a branch.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if HEAD is detached.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_head_unborn"
              c:identifier="ggit_repository_is_head_unborn"
              throws="1">
        <doc xml:space="preserve">Checks if @repository's HEAD is an orphan.

An orphan branch is one named from HEAD but doesn't exist in
the refs namespace, because it doesn't have any commit to point to.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the current branch is an orphan.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_remotes"
              c:identifier="ggit_repository_list_remotes"
              throws="1">
        <doc xml:space="preserve">Fill a list with all the remotes in @repository.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a list with the remotes.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_tags"
              c:identifier="ggit_repository_list_tags"
              throws="1">
        <doc xml:space="preserve">Fill a list with all the tags in the @repository.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a list with the tags in @repository.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_tags_match"
              c:identifier="ggit_repository_list_tags_match"
              throws="1">
        <doc xml:space="preserve">Fill a list with all the tags in the @repository matching the provided
pattern. The pattern can use standard fnmatch syntax.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a list with matching tags in @repository.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="pattern"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a pattern to match.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup" c:identifier="ggit_repository_lookup" throws="1">
        <doc xml:space="preserve">Lookups a reference to one of the objects in the @repository.

The generated reference must be freed with g_object_unref().

The @gtype must match the type of the object
in the odb; the method will fail otherwise.
The special value %G_TYPE_NONE may be passed to let
the method guess the object's type.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the found #GgitObject, or %NULL on error.</doc>
          <type name="Object" c:type="GgitObject*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="gtype" transfer-ownership="none">
            <doc xml:space="preserve">a #GType.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_branch"
              c:identifier="ggit_repository_lookup_branch"
              throws="1">
        <doc xml:space="preserve">Lookups a branch by its name in a repository.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a branch by its name in a repository.</doc>
          <type name="Branch" c:type="GgitBranch*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="branch_name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the branch.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="branch_type" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitBranchType.</doc>
            <type name="BranchType" c:type="GgitBranchType"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_reference"
              c:identifier="ggit_repository_lookup_reference"
              throws="1">
        <doc xml:space="preserve">Lookups a reference by its name in @repository. The returned #GgitRef must
be freed with g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the searched reference.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the long name for the reference (e.g. HEAD, ref/heads/master, refs/tags/v0.1.0, ...).</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_reference_dwim"
              c:identifier="ggit_repository_lookup_reference_dwim"
              throws="1">
        <doc xml:space="preserve">Lookups a reference by its short name in @repository applying the git precendence
rules to the given shorthand to determine which reference the user is referring to.
The returned #GgitRef must be freed with g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the searched reference.</doc>
          <type name="Ref" c:type="GgitRef*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="short_name" transfer-ownership="none">
            <doc xml:space="preserve">the short name for the reference (e.g. master, v0.1.0, ...).</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_remote"
              c:identifier="ggit_repository_lookup_remote"
              throws="1">
        <doc xml:space="preserve">Gets the remote called @name.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a new #GgitRemote or %NULL if there is an error.</doc>
          <type name="Remote" c:type="GgitRemote*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the remote's name.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lookup_submodule"
              c:identifier="ggit_repository_lookup_submodule"
              throws="1">
        <doc xml:space="preserve">Lookups a submodule information by name or path. If the submodule
does not exist, %NULL is returned and a GGIT_ERROR_NOTFOUND error set.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">a newly-allocated #GgitSubmodule.</doc>
          <type name="Submodule" c:type="GgitSubmodule*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the submodule.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="merge_commits"
              c:identifier="ggit_repository_merge_commits"
              throws="1">
        <doc xml:space="preserve">Merge two commits creating a #GgitIndex reflecting the result of the merge.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitIndex or %NULL if an error occurred.</doc>
          <type name="Index" c:type="GgitIndex*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="our_commit" transfer-ownership="none">
            <doc xml:space="preserve">the commit that reflects the destination tree.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
          <parameter name="their_commit" transfer-ownership="none">
            <doc xml:space="preserve">the commit that reflects the source tree.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
          <parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">the merge options.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="merge_trees"
              c:identifier="ggit_repository_merge_trees"
              throws="1">
        <doc xml:space="preserve">Merge two trees creating a #GgitIndex reflecting the result of the merge.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitIndex or %NULL if an error occurred.</doc>
          <type name="Index" c:type="GgitIndex*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="ancestor_tree" transfer-ownership="none">
            <doc xml:space="preserve">the common ancestor between the trees, or %NULL.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="our_tree" transfer-ownership="none">
            <doc xml:space="preserve">the tree that reflects the destination tree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="their_tree" transfer-ownership="none">
            <doc xml:space="preserve">the tree that reflects the source tree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </parameter>
          <parameter name="merge_options" transfer-ownership="none">
            <doc xml:space="preserve">the merge options.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="note_foreach"
              c:identifier="ggit_repository_note_foreach"
              throws="1">
        <doc xml:space="preserve">Loop over all the notes within a specified namespace
and issue a callback for each one.
If @callback returns a non-zero value, this will stop looping.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was no error, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="notes_ref"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">canonical name of the reference to use, or %NULL to use the default ref.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <doc xml:space="preserve">a #GgitNoteCallback.</doc>
            <type name="NoteCallback" c:type="GgitNoteCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="path_is_ignored"
              c:identifier="ggit_repository_path_is_ignored"
              throws="1">
        <doc xml:space="preserve">Tests if the ignore rules apply to the path provided.

This acts similar to filtering performed when calling "git add ."
on the command line.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @path should be ignored.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">A #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">A path within the repository.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="read_note"
              c:identifier="ggit_repository_read_note"
              throws="1">
        <doc xml:space="preserve">Reads the note for an object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the read note or %NULL in case of an error.</doc>
          <type name="Note" c:type="GgitNote*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="notes_ref"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">canonical name of the reference to use, or %NULL to use the default ref.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">OID of the git object to decorate.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="rebase_init"
              c:identifier="ggit_repository_rebase_init"
              throws="1">
        <doc xml:space="preserve">Initializes a rebase operation to rebase the changes in @branch
relative to @upstream onto another branch. To begin the rebase
process, call git_rebase_next(). When you have finished with this
object, call g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitRebase.</doc>
          <type name="Rebase" c:type="GgitRebase*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="branch"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the terminal commit to rebase, or %NULL to rebase the
current branch.</doc>
            <type name="AnnotatedCommit" c:type="GgitAnnotatedCommit*"/>
          </parameter>
          <parameter name="upstream"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the commit to begin rebasing from, or %NULL to
rebase all reachable commits.</doc>
            <type name="AnnotatedCommit" c:type="GgitAnnotatedCommit*"/>
          </parameter>
          <parameter name="onto"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the branch to rebase onto, or %NULL to rebase onto
the given upstream.</doc>
            <type name="AnnotatedCommit" c:type="GgitAnnotatedCommit*"/>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions to specify how rebase is performed, or %NULL.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="rebase_open"
              c:identifier="ggit_repository_rebase_open"
              throws="1">
        <doc xml:space="preserve">Opens an existing rebase that was previously started by either an
invocation of ggit_rebase_init() or by another client.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitRebase.</doc>
          <type name="Rebase" c:type="GgitRebase*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRebaseOptions to specify how rebase is performed, or %NULL.</doc>
            <type name="RebaseOptions" c:type="GgitRebaseOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="references_foreach"
              c:identifier="ggit_repository_references_foreach"
              throws="1">
        <doc xml:space="preserve">Gathers references and run a callback for each one.

To the callback is passed the reference and the data pointer
passed to this function. If the callback returns something other than
0, the iteration will stop and @error will be set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was no error, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve">a #GgitReferencesCallback.</doc>
            <type name="ReferencesCallback" c:type="GgitReferencesCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="references_foreach_name"
              c:identifier="ggit_repository_references_foreach_name"
              throws="1">
        <doc xml:space="preserve">Gathers reference names and run a callback for each one.

To the callback is passed the name of the reference and the data pointer
passed to this function. If the callback returns something other than
0, the iteration will stop and @error will be set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was no error, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve">a #GgitReferencesNameCallback.</doc>
            <type name="ReferencesNameCallback"
                  c:type="GgitReferencesNameCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_note"
              c:identifier="ggit_repository_remove_note"
              throws="1">
        <doc xml:space="preserve">Removes the note for an object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the note was removed from @id.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="notes_ref"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">canonical name of the reference to use, or %NULL to use the default ref.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="author" transfer-ownership="none">
            <doc xml:space="preserve">author signature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="committer" transfer-ownership="none">
            <doc xml:space="preserve">committer signature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">OID of the git object to decorate.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="reset" c:identifier="ggit_repository_reset" throws="1">
        <doc xml:space="preserve">Performs a reset of type @reset_type on @repository to @target,
or @error will be set.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="target" transfer-ownership="none">
            <doc xml:space="preserve">the target #GgitObject which is a commit or a tag.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </parameter>
          <parameter name="reset_type" transfer-ownership="none">
            <doc xml:space="preserve">the #GgitResetType to perform.</doc>
            <type name="ResetType" c:type="GgitResetType"/>
          </parameter>
          <parameter name="checkout_options" transfer-ownership="none">
            <doc xml:space="preserve">the #GgitCheckoutOptions to be used for a HARD reset.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="reset_default"
              c:identifier="ggit_repository_reset_default"
              throws="1">
        <doc xml:space="preserve">Update some entries in the index from the target commit tree. The scope of
the updated entries is determined by the paths specified in @pathspecs.
Passing %NULL in @target will result in removing entries in the index
matching the provided pathspecs.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="target"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the target #GgitObject which is a commit or a tag.</doc>
            <type name="Object" c:type="GgitObject*"/>
          </parameter>
          <parameter name="pathspecs" transfer-ownership="none">
            <doc xml:space="preserve">a list of file paths to reset.</doc>
            <array c:type="gchar**">
              <type name="utf8" c:type="gchar*"/>
            </array>
          </parameter>
        </parameters>
      </method>
      <method name="revert" c:identifier="ggit_repository_revert" throws="1">
        <doc xml:space="preserve">Revert the given @commit on top of the current working directory.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the revert was successfull, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="commit" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCommit.</doc>
            <type name="Commit" c:type="GgitCommit*"/>
          </parameter>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevertOptions.</doc>
            <type name="RevertOptions" c:type="GgitRevertOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="revparse"
              c:identifier="ggit_repository_revparse"
              throws="1">
        <doc xml:space="preserve">Find an object, as specified by a revision string. See `man gitrevisions`,
or the documentation for `git rev-parse` for information on the syntax
accepted.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitObject or %NULL if the revision could not be found.</doc>
          <type name="Object" c:type="GgitObject*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="spec" transfer-ownership="none">
            <doc xml:space="preserve">the revision specification.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="save_stash"
              c:identifier="ggit_repository_save_stash"
              throws="1">
        <doc xml:space="preserve">Saves the local modifications to a new stash.
It returns the commit containing the stashed state.
This commit is also the target of the direct reference refs/stash.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new object id of the commit containing the stashed state.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="stasher" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve">description along with the stashed state or %NULL to be autogenerated.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitStashFlags to control the stashing process.</doc>
            <type name="StashFlags" c:type="GgitStashFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_head"
              c:identifier="ggit_repository_set_head"
              throws="1">
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if head was successfully set, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="ref_name" transfer-ownership="none">
            <doc xml:space="preserve">canonical name of the reference HEAD should point to.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_submodule_fetch_recurse"
              c:identifier="ggit_repository_set_submodule_fetch_recurse"
              throws="1">
        <doc xml:space="preserve">Sets the submodule.'name'.fetchRecurseSubmodules value for
the submodule. This setting won't affect any existing instances..</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the submodule.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="fetch_recurse_submodules" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleRecurse.</doc>
            <type name="SubmoduleRecurse" c:type="GgitSubmoduleRecurse"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_submodule_ignore"
              c:identifier="ggit_repository_set_submodule_ignore"
              throws="1">
        <doc xml:space="preserve">Sets the ignore rule for the submodule in the configuration.
This does not affect any currently-loaded instances..</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the submodule.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="ignore" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleIgnore.</doc>
            <type name="SubmoduleIgnore" c:type="GgitSubmoduleIgnore"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_submodule_update"
              c:identifier="ggit_repository_set_submodule_update"
              throws="1">
        <doc xml:space="preserve">Sets the update rule for the submodule in the configuration.
This setting won't affect any existing instances.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the submodule.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="update" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleUpdate.</doc>
            <type name="SubmoduleUpdate" c:type="GgitSubmoduleUpdate"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_submodule_url"
              c:identifier="ggit_repository_set_submodule_url"
              throws="1">
        <doc xml:space="preserve">Sets the URL for the submodule in the configuration.

After calling this, you may wish to call ggit_submodule_sync() to
write the changes to the checked out submodule repository.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the submodule to configure.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="url" transfer-ownership="none">
            <doc xml:space="preserve">URL that should be used for the submodule.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_workdir" c:identifier="ggit_repository_set_workdir">
        <doc xml:space="preserve">Sets the working directory of the repository. If @update_gitlink is set to
%TRUE "core.worktree" will be set in the config if workdir is not the parent
of the .git directory).</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="workdir" transfer-ownership="none">
            <doc xml:space="preserve">the working directory.</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="update_gitlink" transfer-ownership="none">
            <doc xml:space="preserve">create/update gitlink in workdir.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="stash_foreach"
              c:identifier="ggit_repository_stash_foreach"
              throws="1">
        <doc xml:space="preserve">Loops over all the stashed states and issue a callback for each one.
If @callback returns a non-zero value, this will stop looping.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was no error, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve">a #GgitStashCallback.</doc>
            <type name="StashCallback" c:type="GgitStashCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="submodule_foreach"
              c:identifier="ggit_repository_submodule_foreach"
              throws="1">
        <doc xml:space="preserve">Gathers submodules and run a callback for each one.

To the callback is passed the submodule instance and name. If the callback
returns something other than 0, the iteration will stop and @error
will be set.

NOTE: the submodule instance passed to the callback is only valid during
the call to ggit_repository_submodule_foreach and may not be used after the
call has finished.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was no error, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve">a #GgitStatusCallback.</doc>
            <type name="SubmoduleCallback" c:type="GgitSubmoduleCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="tag_foreach"
              c:identifier="ggit_repository_tag_foreach"
              throws="1">
        <doc xml:space="preserve">Get all the tags in the repository and run the provided callback on each. If
the callback returns something other than 0, the iteration will stop and
@error will be set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if there was no error, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </instance-parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve">a #GgitTagCallback.</doc>
            <type name="TagCallback" c:type="GgitTagCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">callback user data.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <property name="clone-options"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="CloneOptions"/>
      </property>
      <property name="head" transfer-ownership="none">
        <type name="Ref"/>
      </property>
      <property name="init"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="is-bare"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="location"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Gio.File"/>
      </property>
      <property name="url"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="workdir"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="Gio.File"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <record name="RepositoryClass"
            c:type="GgitRepositoryClass"
            glib:is-gtype-struct-for="Repository">
      <doc xml:space="preserve">The class structure for #GgitRepositoryClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <enumeration name="ResetType"
                 glib:type-name="GgitResetType"
                 glib:get-type="ggit_reset_type_get_type"
                 c:type="GgitResetType">
      <doc xml:space="preserve">Describes the type of reset to perform.</doc>
      <member name="soft"
              value="1"
              c:identifier="GGIT_RESET_SOFT"
              glib:nick="soft">
        <doc xml:space="preserve">The head will be moved to the commit.</doc>
      </member>
      <member name="mixed"
              value="2"
              c:identifier="GGIT_RESET_MIXED"
              glib:nick="mixed">
        <doc xml:space="preserve">the head will be moved to the commit and the index
                   will be replaced with the content of the commit tree.</doc>
      </member>
      <member name="hard"
              value="3"
              c:identifier="GGIT_RESET_HARD"
              glib:nick="hard">
        <doc xml:space="preserve">MIXED plus changes in working tree discarded.</doc>
      </member>
    </enumeration>
    <record name="RevertOptions"
            c:type="GgitRevertOptions"
            glib:type-name="GgitRevertOptions"
            glib:get-type="ggit_revert_options_get_type"
            c:symbol-prefix="revert_options">
      <doc xml:space="preserve">Represents the options used when reverting.</doc>
      <constructor name="new" c:identifier="ggit_revert_options_new">
        <doc xml:space="preserve">Create a new #GgitRevertOptions. Note that the passed in @merge_options and
@checkout_options are copied by this function, and alterations in either
after this call are therefore not reflected in the revert options.

The @mainline indicates which parent to use for the revert when reverting
a merge commit.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitRevertOptions.</doc>
          <type name="RevertOptions" c:type="GgitRevertOptions*"/>
        </return-value>
        <parameters>
          <parameter name="mainline" transfer-ownership="none">
            <doc xml:space="preserve">the mainline.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="merge_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitMergeOptions.</doc>
            <type name="MergeOptions" c:type="GgitMergeOptions*"/>
          </parameter>
          <parameter name="checkout_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy" c:identifier="ggit_revert_options_copy">
        <doc xml:space="preserve">Copies @revert_options into a newly allocated #GgitRevertOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitRevertOptions.</doc>
          <type name="RevertOptions" c:type="GgitRevertOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="revert_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevertOptions.</doc>
            <type name="RevertOptions" c:type="GgitRevertOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_revert_options_free">
        <doc xml:space="preserve">Frees @revert_options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="revert_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevertOptions.</doc>
            <type name="RevertOptions" c:type="GgitRevertOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="RevisionWalker"
           c:symbol-prefix="revision_walker"
           c:type="GgitRevisionWalker"
           parent="Native"
           glib:type-name="GgitRevisionWalker"
           glib:get-type="ggit_revision_walker_get_type"
           glib:type-struct="RevisionWalkerClass">
      <doc xml:space="preserve">Represents a revision walker.</doc>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="ggit_revision_walker_new"
                   throws="1">
        <doc xml:space="preserve">Creates a new revision walker to iterate through @repository.

This revision walker uses a custom memory pool and an internal
commit cache, so it is relatively expensive to allocate.

For maximum performance, this revision walker should be
reused for different walks.

This revision walker is *not* thread safe: it may only be
used to walk a repository on a single thread; however,
it is possible to have several revision walkers in
several different threads walking the same repository.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #GgitRevisionWalker.</doc>
          <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
        </return-value>
        <parameters>
          <parameter name="repository" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="Repository" c:type="GgitRepository*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_repository"
              c:identifier="ggit_revision_walker_get_repository">
        <doc xml:space="preserve">Gets the repository on which this walker is operating.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the repository on which this walker is operating.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRepository.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="hide" c:identifier="ggit_revision_walker_hide" throws="1">
        <doc xml:space="preserve">Marks a commit (and its ancestors) uninteresting for the output.

The given OID must belong to a commit on the walked
repository.

The resolved commit and all its parents will be hidden from the
output on the revision walk.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="hide_glob"
              c:identifier="ggit_revision_walker_hide_glob"
              throws="1">
        <doc xml:space="preserve">Hide all OIDs pointed to by references that match the given glob pattern
to the revsision walker. A leading 'refs/' is implied if not present, as well
as a trailing '/ \ *' if the glob lacks '?', '\ *' or '['.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve">the glob to hide.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="hide_head"
              c:identifier="ggit_revision_walker_hide_head"
              throws="1">
        <doc xml:space="preserve">Hide the OID of the current HEAD to the revision walker.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="hide_ref"
              c:identifier="ggit_revision_walker_hide_ref"
              throws="1">
        <doc xml:space="preserve">Hide the OID pointed to by the named reference to the revision walker.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve">the reference to hide.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="next" c:identifier="ggit_revision_walker_next" throws="1">
        <doc xml:space="preserve">Gets the next commit from the revision walk.

The initial call to this method is *not* blocking when
iterating through a repository with a time-sorting mode.

Iterating with Topological or inverted modes makes the initial
call blocking to preprocess the commit list, but this block should be
mostly unnoticeable on most repositories (topological preprocessing
times at 0.3s on the git.git repo).

The revision walker is reset when the walk is over.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the next commit from the revision walk.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="push" c:identifier="ggit_revision_walker_push" throws="1">
        <doc xml:space="preserve">Marks a commit to start traversal from.

The given OID must belong to a commit on the walked
repository.

The given commit will be used as one of the roots
when starting the revision walk. At least one commit
must be pushed the repository before a walk can
be started.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitOId.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
        </parameters>
      </method>
      <method name="push_glob"
              c:identifier="ggit_revision_walker_push_glob"
              throws="1">
        <doc xml:space="preserve">Push all OIDs pointed to by references that match the given glob pattern
to the revsision walker. A leading 'refs/' is implied if not present, as well
as a trailing '/ \ *' if the glob lacks '?', '\ *' or '['.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve">the glob to push.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="push_head"
              c:identifier="ggit_revision_walker_push_head"
              throws="1">
        <doc xml:space="preserve">Push the OID of the current HEAD to the revision walker.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="push_range"
              c:identifier="ggit_revision_walker_push_range"
              throws="1">
        <doc xml:space="preserve">Push and hide the respective endpoints of the given range. The range
should be of the form: &amp;ltcommit&amp;gt..&amp;lt;commit&amp;gt;, where each &amp;lt;commit&amp;gt; is in the
form accepted by revparse. The left-hand commit will be hidden and the
right-hand commit pushed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="range" transfer-ownership="none">
            <doc xml:space="preserve">the range to push.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="push_ref"
              c:identifier="ggit_revision_walker_push_ref"
              throws="1">
        <doc xml:space="preserve">Push the OID pointed to by the named reference to the revision walker.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve">the reference to push.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="reset" c:identifier="ggit_revision_walker_reset">
        <doc xml:space="preserve">Resets the revision walker for reuse.

This will clear all the pushed and hidden commits, and
leave the walker in a blank state (just like at
creation) ready to receive new commit pushes and
start a new walk.

The revision walk is automatically reset when a walk
is over.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_sort_mode"
              c:identifier="ggit_revision_walker_set_sort_mode">
        <doc xml:space="preserve">Change the sorting mode when iterating through the
repository's contents.

Changing the sorting mode resets the walker.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="walker" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitRevisionWalker.</doc>
            <type name="RevisionWalker" c:type="GgitRevisionWalker*"/>
          </instance-parameter>
          <parameter name="sort_mode" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSortMode value.</doc>
            <type name="SortMode" c:type="GgitSortMode"/>
          </parameter>
        </parameters>
      </method>
      <property name="repository"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="Repository"/>
      </property>
      <field name="parent_instance">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <record name="RevisionWalkerClass"
            c:type="GgitRevisionWalkerClass"
            glib:is-gtype-struct-for="RevisionWalker">
      <doc xml:space="preserve">The class structure for #GgitRevisionWalkerClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <class name="Signature"
           c:symbol-prefix="signature"
           c:type="GgitSignature"
           parent="Native"
           glib:type-name="GgitSignature"
           glib:get-type="ggit_signature_get_type"
           glib:type-struct="SignatureClass">
      <doc xml:space="preserve">Represents an action signature.</doc>
      <constructor name="new" c:identifier="ggit_signature_new" throws="1">
        <doc xml:space="preserve">Creates a new #GgitSignature. Name and e-mail are assumed to be in UTF-8.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitSignature.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the person.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="email" transfer-ownership="none">
            <doc xml:space="preserve">the email of the person.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="signature_time" transfer-ownership="none">
            <doc xml:space="preserve">the time when the action happened.</doc>
            <type name="GLib.DateTime" c:type="GDateTime*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_now"
                   c:identifier="ggit_signature_new_now"
                   throws="1">
        <doc xml:space="preserve">Creates a new #GgitSignature with a timestamp of 'now'. Name and e-mail are
assumed to be in UTF-8.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitSignature.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">the name of the person.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="email" transfer-ownership="none">
            <doc xml:space="preserve">the email of the person.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy" c:identifier="ggit_signature_copy">
        <doc xml:space="preserve">Create a copy of the signature.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitSignature.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="signature" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_email" c:identifier="ggit_signature_get_email">
        <doc xml:space="preserve">Gets the email of the person.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the email of the person.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="signature" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_signature_get_name">
        <doc xml:space="preserve">Gets the name of the person.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the person.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="signature" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_time" c:identifier="ggit_signature_get_time">
        <doc xml:space="preserve">Gets the time when the action happened. Note that the time is returned in
the timezone of the commit (see #ggit_signature_get_time_zone).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the time when the action happened.</doc>
          <type name="GLib.DateTime" c:type="GDateTime*"/>
        </return-value>
        <parameters>
          <instance-parameter name="signature" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_time_zone" c:identifier="ggit_signature_get_time_zone">
        <doc xml:space="preserve">Gets the timezone in which the action happened.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the timezone in which the action happened.</doc>
          <type name="GLib.TimeZone" c:type="GTimeZone*"/>
        </return-value>
        <parameters>
          <instance-parameter name="signature" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSignature.</doc>
            <type name="Signature" c:type="GgitSignature*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="encoding"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
    </class>
    <record name="SignatureClass"
            c:type="GgitSignatureClass"
            glib:is-gtype-struct-for="Signature">
      <field name="parent_class">
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <bitfield name="SortMode"
              glib:type-name="GgitSortMode"
              glib:get-type="ggit_sort_mode_get_type"
              c:type="GgitSortMode">
      <doc xml:space="preserve">The type of sorting mode for the revision walker.</doc>
      <member name="none"
              value="0"
              c:identifier="GGIT_SORT_NONE"
              glib:nick="none">
        <doc xml:space="preserve">Sorts the repository contents in no particular ordering;
                 this sorting is arbitrary, implementation-specific
                 and subject to change at any time.</doc>
      </member>
      <member name="topological"
              value="1"
              c:identifier="GGIT_SORT_TOPOLOGICAL"
              glib:nick="topological">
        <doc xml:space="preserve">Sorts the repository contents in topological order
                        (parents before children); this sorting mode
                        can be combined with time sorting.</doc>
      </member>
      <member name="time"
              value="2"
              c:identifier="GGIT_SORT_TIME"
              glib:nick="time">
        <doc xml:space="preserve">Sort the repository contents by commit time;
                 this sorting mode can be combined with
                 topological sorting.</doc>
      </member>
      <member name="reverse"
              value="4"
              c:identifier="GGIT_SORT_REVERSE"
              glib:nick="reverse">
        <doc xml:space="preserve">Iterate through the repository contents in reverse
                    order; this sorting mode can be combined with
                    any of the above.</doc>
      </member>
    </bitfield>
    <callback name="StashCallback" c:type="GgitStashCallback">
      <doc xml:space="preserve">When iterating over all the stashed states, callback that will be
issued per entry. See ggit_repository_stash_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="index" transfer-ownership="none">
          <doc xml:space="preserve">the position within the stash list. 0 points to the
most recent stashed state.</doc>
          <type name="gsize" c:type="gsize"/>
        </parameter>
        <parameter name="message" transfer-ownership="none">
          <doc xml:space="preserve">the stash message.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="stash_oid" transfer-ownership="none">
          <doc xml:space="preserve">the commit oid of the stashed state.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <doc xml:space="preserve">user-suplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="StashFlags"
              glib:type-name="GgitStashFlags"
              glib:get-type="ggit_stash_flags_get_type"
              c:type="GgitStashFlags">
      <doc xml:space="preserve">Describes how a stash should be applied.</doc>
      <member name="default"
              value="0"
              c:identifier="GGIT_STASH_DEFAULT"
              glib:nick="default">
        <doc xml:space="preserve">default stash.</doc>
      </member>
      <member name="keep_index"
              value="1"
              c:identifier="GGIT_STASH_KEEP_INDEX"
              glib:nick="keep-index">
        <doc xml:space="preserve">All changes already added to the index
are left intact in the working directory.</doc>
      </member>
      <member name="include_untracked"
              value="2"
              c:identifier="GGIT_STASH_INCLUDE_UNTRACKED"
              glib:nick="include-untracked">
        <doc xml:space="preserve">All untracked files are also stashed and then
cleaned up from the working directory.</doc>
      </member>
      <member name="include_ignored"
              value="4"
              c:identifier="GGIT_STASH_INCLUDE_IGNORED"
              glib:nick="include-ignored">
        <doc xml:space="preserve">All ignored files are also stashed and then
cleaned up from the working directory.</doc>
      </member>
    </bitfield>
    <callback name="StatusCallback" c:type="GgitStatusCallback">
      <doc xml:space="preserve">The type of the callback functions for retrieving the status of the files
in a #GgitRepository. See ggit_repository_file_status_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go for the next file or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="path" transfer-ownership="none">
          <doc xml:space="preserve">the file to retrieve status for, rooted at the repository working dir.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="status_flags" transfer-ownership="none">
          <doc xml:space="preserve">the status value.</doc>
          <type name="StatusFlags" c:type="GgitStatusFlags"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="StatusFlags"
              glib:type-name="GgitStatusFlags"
              glib:get-type="ggit_status_flags_get_type"
              c:type="GgitStatusFlags">
      <doc xml:space="preserve">Describes a file's status.</doc>
      <member name="current"
              value="0"
              c:identifier="GGIT_STATUS_CURRENT"
              glib:nick="current">
        <doc xml:space="preserve">file is current.</doc>
      </member>
      <member name="index_new"
              value="1"
              c:identifier="GGIT_STATUS_INDEX_NEW"
              glib:nick="index-new">
        <doc xml:space="preserve">file in index is new.</doc>
      </member>
      <member name="index_modified"
              value="2"
              c:identifier="GGIT_STATUS_INDEX_MODIFIED"
              glib:nick="index-modified">
        <doc xml:space="preserve">file in index is modified.</doc>
      </member>
      <member name="index_deleted"
              value="4"
              c:identifier="GGIT_STATUS_INDEX_DELETED"
              glib:nick="index-deleted">
        <doc xml:space="preserve">file in index is deleted.</doc>
      </member>
      <member name="index_renamed"
              value="8"
              c:identifier="GGIT_STATUS_INDEX_RENAMED"
              glib:nick="index-renamed">
      </member>
      <member name="index_typechange"
              value="16"
              c:identifier="GGIT_STATUS_INDEX_TYPECHANGE"
              glib:nick="index-typechange">
      </member>
      <member name="working_tree_new"
              value="128"
              c:identifier="GGIT_STATUS_WORKING_TREE_NEW"
              glib:nick="working-tree-new">
        <doc xml:space="preserve">file in working tree is new.</doc>
      </member>
      <member name="working_tree_modified"
              value="256"
              c:identifier="GGIT_STATUS_WORKING_TREE_MODIFIED"
              glib:nick="working-tree-modified">
        <doc xml:space="preserve">file in working tree is modified.</doc>
      </member>
      <member name="working_tree_deleted"
              value="512"
              c:identifier="GGIT_STATUS_WORKING_TREE_DELETED"
              glib:nick="working-tree-deleted">
        <doc xml:space="preserve">file in working tree is deleted.</doc>
      </member>
      <member name="working_tree_typechange"
              value="1024"
              c:identifier="GGIT_STATUS_WORKING_TREE_TYPECHANGE"
              glib:nick="working-tree-typechange">
      </member>
      <member name="ignored"
              value="16384"
              c:identifier="GGIT_STATUS_IGNORED"
              glib:nick="ignored">
        <doc xml:space="preserve">file is ignored.</doc>
      </member>
    </bitfield>
    <bitfield name="StatusOption"
              glib:type-name="GgitStatusOption"
              glib:get-type="ggit_status_option_get_type"
              c:type="GgitStatusOption">
      <doc xml:space="preserve">GGIT_STATUS_OPTION_INCLUDE_UNTRACKED: include untracked files (default).
GGIT_STATUS_OPTION_INCLUDE_IGNORED: include ignored files (default).
GGIT_STATUS_OPTION_INCLUDE_UNMODIFIED: include unmodified files.
GGIT_STATUS_OPTION_EXCLUDE_SUBMODULES: exclude submodules.
GGIT_STATUS_OPTION_RECURSE_UNTRACKED_DIRS: search untracked directories recursively (default).
GGIT_STATUS_OPTION_DISABLE_PATHSPEC_MATCH: do not match path specifications.
GGIT_STATUS_OPTION_RECURSE_IGNORED_DIRS: search ignored directories recursively.
GGIT_STATUS_OPTION_RENAMES_HEAD_TO_INDEX: indicates that rename detection
should be processed between the head and the index and enables
the GIT_STATUS_INDEX_RENAMED as a possible status flag.
GGIT_STATUS_OPTION_RENAMES_INDEX_TO_WORKDIR: indicates tha rename
detection should be run between the index and the working directory
and enabled GIT_STATUS_WT_RENAMED as a possible status flag.
GGIT_STATUS_OPTION_SORT_CASE_SENSITIVELY: sort case sensitive.
GGIT_STATUS_OPTION_SORT_CASE_INSENSITIVELY: sort case insensitive.
GGIT_STATUS_OPTION_DEFAULT: default flags.
Status options specified when using #ggit_repository_file_status_foreach.</doc>
      <member name="include_untracked"
              value="1"
              c:identifier="GGIT_STATUS_OPTION_INCLUDE_UNTRACKED"
              glib:nick="include-untracked">
      </member>
      <member name="include_ignored"
              value="2"
              c:identifier="GGIT_STATUS_OPTION_INCLUDE_IGNORED"
              glib:nick="include-ignored">
      </member>
      <member name="include_unmodified"
              value="4"
              c:identifier="GGIT_STATUS_OPTION_INCLUDE_UNMODIFIED"
              glib:nick="include-unmodified">
      </member>
      <member name="exclude_submodules"
              value="8"
              c:identifier="GGIT_STATUS_OPTION_EXCLUDE_SUBMODULES"
              glib:nick="exclude-submodules">
      </member>
      <member name="recurse_untracked_dirs"
              value="16"
              c:identifier="GGIT_STATUS_OPTION_RECURSE_UNTRACKED_DIRS"
              glib:nick="recurse-untracked-dirs">
      </member>
      <member name="disable_pathspec_match"
              value="32"
              c:identifier="GGIT_STATUS_OPTION_DISABLE_PATHSPEC_MATCH"
              glib:nick="disable-pathspec-match">
      </member>
      <member name="recurse_ignored_dirs"
              value="64"
              c:identifier="GGIT_STATUS_OPTION_RECURSE_IGNORED_DIRS"
              glib:nick="recurse-ignored-dirs">
      </member>
      <member name="renames_head_to_index"
              value="128"
              c:identifier="GGIT_STATUS_OPTION_RENAMES_HEAD_TO_INDEX"
              glib:nick="renames-head-to-index">
      </member>
      <member name="renames_index_to_workdir"
              value="256"
              c:identifier="GGIT_STATUS_OPTION_RENAMES_INDEX_TO_WORKDIR"
              glib:nick="renames-index-to-workdir">
      </member>
      <member name="sort_case_sensitively"
              value="512"
              c:identifier="GGIT_STATUS_OPTION_SORT_CASE_SENSITIVELY"
              glib:nick="sort-case-sensitively">
      </member>
      <member name="sort_case_insensitively"
              value="1024"
              c:identifier="GGIT_STATUS_OPTION_SORT_CASE_INSENSITIVELY"
              glib:nick="sort-case-insensitively">
      </member>
      <member name="default"
              value="19"
              c:identifier="GGIT_STATUS_OPTION_DEFAULT"
              glib:nick="default">
      </member>
    </bitfield>
    <record name="StatusOptions"
            c:type="GgitStatusOptions"
            glib:type-name="GgitStatusOptions"
            glib:get-type="ggit_status_options_get_type"
            c:symbol-prefix="status_options">
      <doc xml:space="preserve">Represents the options used when creating getting file status.</doc>
      <constructor name="new" c:identifier="ggit_status_options_new">
        <doc xml:space="preserve">Creates a new #GgitStatusOptions for use in #ggit_repository_stash_foreach.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitStatusOptions.</doc>
          <type name="StatusOptions" c:type="GgitStatusOptions*"/>
        </return-value>
        <parameters>
          <parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">status options.</doc>
            <type name="StatusOption" c:type="GgitStatusOption"/>
          </parameter>
          <parameter name="show" transfer-ownership="none">
            <doc xml:space="preserve">status show options.</doc>
            <type name="StatusShow" c:type="GgitStatusShow"/>
          </parameter>
          <parameter name="pathspec"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">which paths to show, defaults to showing all paths.</doc>
            <array c:type="gchar**">
              <type name="utf8" c:type="gchar*"/>
            </array>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy" c:identifier="ggit_status_options_copy">
        <doc xml:space="preserve">Copies @status_options into a newly allocated #GgitStatusOptions.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitStatusOptions.</doc>
          <type name="StatusOptions" c:type="GgitStatusOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="status_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitStatusOptions.</doc>
            <type name="StatusOptions" c:type="GgitStatusOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_status_options_free">
        <doc xml:space="preserve">Frees @status_options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="status_options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitStatusOptions.</doc>
            <type name="StatusOptions" c:type="GgitStatusOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <enumeration name="StatusShow"
                 glib:type-name="GgitStatusShow"
                 glib:get-type="ggit_status_show_get_type"
                 c:type="GgitStatusShow">
      <doc xml:space="preserve">Show options for #ggit_repository_file_status_foreach. Determines which
files are included in the status.</doc>
      <member name="index_and_workdir"
              value="0"
              c:identifier="GGIT_STATUS_SHOW_INDEX_AND_WORKDIR"
              glib:nick="index-and-workdir">
        <doc xml:space="preserve">receive one callback for each file,
even if the file is in both the index and the workdir (combining #GgitStatusFlags).</doc>
      </member>
      <member name="index_only"
              value="1"
              c:identifier="GGIT_STATUS_SHOW_INDEX_ONLY"
              glib:nick="index-only">
        <doc xml:space="preserve">only receive callbacks for files in the index.</doc>
      </member>
      <member name="workdir_only"
              value="2"
              c:identifier="GGIT_STATUS_SHOW_WORKDIR_ONLY"
              glib:nick="workdir-only">
        <doc xml:space="preserve">only receive callbacks for files in the workdir.</doc>
      </member>
    </enumeration>
    <record name="Submodule"
            c:type="GgitSubmodule"
            glib:type-name="GgitSubmodule"
            glib:get-type="ggit_submodule_get_type"
            c:symbol-prefix="submodule">
      <doc xml:space="preserve">Represents a git submodule.</doc>
      <method name="get_fetch_recurse"
              c:identifier="ggit_submodule_get_fetch_recurse">
        <doc xml:space="preserve">Gets whether to fetch recursively. See see gitmodules(5) fetchRecurseSubmodules.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">whether or not fetch recursively.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_head_id" c:identifier="ggit_submodule_get_head_id">
        <return-value transfer-ownership="full">
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_ignore" c:identifier="ggit_submodule_get_ignore">
        <doc xml:space="preserve">Gets a #GgitSubmoduleIgnore. See see gitmodules(5) ignore.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GgitSubmoduleIgnore.</doc>
          <type name="SubmoduleIgnore" c:type="GgitSubmoduleIgnore"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_index_id" c:identifier="ggit_submodule_get_index_id">
        <doc xml:space="preserve">Gets the OID for the submodule in the index or %NULL if there is no index.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the OID for the submodule in the index or %NULL.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_submodule_get_name">
        <doc xml:space="preserve">Gets the name of the submodule from .gitmodules.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the submodule from .gitmodules.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_owner" c:identifier="ggit_submodule_get_owner">
        <doc xml:space="preserve">Gets the containing repository for a submodule.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the containing repository for a submodule.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_path" c:identifier="ggit_submodule_get_path">
        <doc xml:space="preserve">Gets the path to the submodule from the repo working directory.
It is almost always the same as the name.
See ggit_submodule_get_name().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the path to the submodule from the repo working directory.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_update" c:identifier="ggit_submodule_get_update">
        <doc xml:space="preserve">Gets a #GgitSubmoduleUpdate. See see gitmodules(5) update.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GgitSubmoduleUpdate.</doc>
          <type name="SubmoduleUpdate" c:type="GgitSubmoduleUpdate"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_url" c:identifier="ggit_submodule_get_url">
        <doc xml:space="preserve">Gets the url for the submodule or %NULL if the submodule has been deleted
but not yet committed.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the url for the submodule.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_workdir_id"
              c:identifier="ggit_submodule_get_workdir_id">
        <doc xml:space="preserve">Gets the OID for the submodule in the current working directory.
Corresponds to looking up 'HEAD' in the checked out submodule.
If there are pending changes in the index or anything
else, this won't notice that.  You should call ggit_submodule_status()
for a more complete picture about the state of the working directory.</doc>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve">the OID for the submodule in the current working directory or %NULL.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="init" c:identifier="ggit_submodule_init" throws="1">
        <doc xml:space="preserve">Just like "git submodule init", this copies information about the
submodule into ".git/config".  You can use the accessor functions
above to alter the in-memory git_submodule object and control what
is written to the config, overriding what is in .gitmodules.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
          <parameter name="overwrite" transfer-ownership="none">
            <doc xml:space="preserve">forces existing entries to be updated.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="open" c:identifier="ggit_submodule_open" throws="1">
        <doc xml:space="preserve">Open the repository for a submodule. Multiple calls to this function
will return distinct #GgitRepository objects. Only submodules which are
checked out in the working directory can be opened.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the opened #GgitRepository or %NULL in case of an
                          error.</doc>
          <type name="Repository" c:type="GgitRepository*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_submodule_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @submodule by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the passed in #GgitSubmodule.</doc>
          <type name="Submodule" c:type="GgitSubmodule*"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="reload" c:identifier="ggit_submodule_reload" throws="1">
        <doc xml:space="preserve">Rereads submodule info from config, index, and HEAD.
Call this if you have reason to believe that it has changed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
          <parameter name="force" transfer-ownership="none">
            <doc xml:space="preserve">reload even if the data doesn't seem out of date.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="sync" c:identifier="ggit_submodule_sync" throws="1">
        <doc xml:space="preserve">Copies the information about the submodules URL into the checked out
submodule config, acting like "git submodule sync".  This is useful if
you have altered the URL for the submodule (or it has been altered by a
fetch of upstream changes) and you need to update your local repo.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_submodule_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @submodule by one.
If the reference count drops to 0, @remote is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="submodule" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmodule.</doc>
            <type name="Submodule" c:type="GgitSubmodule*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="SubmoduleCallback" c:type="GgitSubmoduleCallback">
      <doc xml:space="preserve">The type of the callback functions for retrieving the submodules
in a #GgitRepository. See ggit_repository_submodule_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go for the next submodule or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="submodule" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitSubmodule.</doc>
          <type name="Submodule" c:type="GgitSubmodule*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <doc xml:space="preserve">the name of the submodule.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="SubmoduleIgnore"
                 glib:type-name="GgitSubmoduleIgnore"
                 glib:get-type="ggit_submodule_ignore_get_type"
                 c:type="GgitSubmoduleIgnore">
      <doc xml:space="preserve">Describes which submodules should be ignored.</doc>
      <member name="unspecified"
              value="-1"
              c:identifier="GGIT_SUBMODULE_IGNORE_UNSPECIFIED"
              glib:nick="unspecified">
        <doc xml:space="preserve">reset to on-disk value.</doc>
      </member>
      <member name="none"
              value="1"
              c:identifier="GGIT_SUBMODULE_IGNORE_NONE"
              glib:nick="none">
        <doc xml:space="preserve">don't ignore any change.</doc>
      </member>
      <member name="untracked"
              value="2"
              c:identifier="GGIT_SUBMODULE_IGNORE_UNTRACKED"
              glib:nick="untracked">
        <doc xml:space="preserve">ignore untracked files.</doc>
      </member>
      <member name="dirty"
              value="3"
              c:identifier="GGIT_SUBMODULE_IGNORE_DIRTY"
              glib:nick="dirty">
        <doc xml:space="preserve">ignore changes in the working directory.</doc>
      </member>
      <member name="all"
              value="4"
              c:identifier="GGIT_SUBMODULE_IGNORE_ALL"
              glib:nick="all">
        <doc xml:space="preserve">never check if the submodule is dirty.</doc>
      </member>
    </enumeration>
    <enumeration name="SubmoduleRecurse"
                 glib:type-name="GgitSubmoduleRecurse"
                 glib:get-type="ggit_submodule_recurse_get_type"
                 c:type="GgitSubmoduleRecurse">
      <doc xml:space="preserve">Options for submodule recurse.
Represents the value of `submodule.$name.fetchRecurseSubmodules`</doc>
      <member name="no"
              value="0"
              c:identifier="GGIT_SUBMODULE_RECURSE_NO"
              glib:nick="no">
        <doc xml:space="preserve">do no recurse into submodules.</doc>
      </member>
      <member name="yes"
              value="1"
              c:identifier="GGIT_SUBMODULE_RECURSE_YES"
              glib:nick="yes">
        <doc xml:space="preserve">recurse into submodules.</doc>
      </member>
      <member name="ondemand"
              value="2"
              c:identifier="GGIT_SUBMODULE_RECURSE_ONDEMAND"
              glib:nick="ondemand">
        <doc xml:space="preserve">recurse into submodules only when
commit not already in local clone.</doc>
      </member>
    </enumeration>
    <bitfield name="SubmoduleStatus"
              glib:type-name="GgitSubmoduleStatus"
              glib:get-type="ggit_submodule_status_get_type"
              c:type="GgitSubmoduleStatus">
      <doc xml:space="preserve">FIXME</doc>
      <member name="in_head"
              value="1"
              c:identifier="GGIT_SUBMODULE_STATUS_IN_HEAD"
              glib:nick="in-head">
      </member>
      <member name="in_index"
              value="2"
              c:identifier="GGIT_SUBMODULE_STATUS_IN_INDEX"
              glib:nick="in-index">
      </member>
      <member name="in_config"
              value="4"
              c:identifier="GGIT_SUBMODULE_STATUS_IN_CONFIG"
              glib:nick="in-config">
      </member>
      <member name="in_wd"
              value="8"
              c:identifier="GGIT_SUBMODULE_STATUS_IN_WD"
              glib:nick="in-wd">
      </member>
      <member name="index_added"
              value="16"
              c:identifier="GGIT_SUBMODULE_STATUS_INDEX_ADDED"
              glib:nick="index-added">
      </member>
      <member name="index_deleted"
              value="32"
              c:identifier="GGIT_SUBMODULE_STATUS_INDEX_DELETED"
              glib:nick="index-deleted">
      </member>
      <member name="index_modified"
              value="64"
              c:identifier="GGIT_SUBMODULE_STATUS_INDEX_MODIFIED"
              glib:nick="index-modified">
      </member>
      <member name="wd_uninitialized"
              value="128"
              c:identifier="GGIT_SUBMODULE_STATUS_WD_UNINITIALIZED"
              glib:nick="wd-uninitialized">
      </member>
      <member name="wd_added"
              value="256"
              c:identifier="GGIT_SUBMODULE_STATUS_WD_ADDED"
              glib:nick="wd-added">
      </member>
      <member name="wd_deleted"
              value="512"
              c:identifier="GGIT_SUBMODULE_STATUS_WD_DELETED"
              glib:nick="wd-deleted">
      </member>
      <member name="wd_modified"
              value="1024"
              c:identifier="GGIT_SUBMODULE_STATUS_WD_MODIFIED"
              glib:nick="wd-modified">
      </member>
      <member name="wd_index_modified"
              value="2048"
              c:identifier="GGIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED"
              glib:nick="wd-index-modified">
      </member>
      <member name="wd_wd_modified"
              value="4096"
              c:identifier="GGIT_SUBMODULE_STATUS_WD_WD_MODIFIED"
              glib:nick="wd-wd-modified">
      </member>
      <member name="wd_untracked"
              value="8192"
              c:identifier="GGIT_SUBMODULE_STATUS_WD_UNTRACKED"
              glib:nick="wd-untracked">
      </member>
    </bitfield>
    <enumeration name="SubmoduleUpdate"
                 glib:type-name="GgitSubmoduleUpdate"
                 glib:get-type="ggit_submodule_update_get_type"
                 c:type="GgitSubmoduleUpdate">
      <doc xml:space="preserve">Describes how a submodule should be updated.</doc>
      <member name="checkout"
              value="1"
              c:identifier="GGIT_SUBMODULE_UPDATE_CHECKOUT"
              glib:nick="checkout">
        <doc xml:space="preserve">checkout the submodule.</doc>
      </member>
      <member name="rebase"
              value="2"
              c:identifier="GGIT_SUBMODULE_UPDATE_REBASE"
              glib:nick="rebase">
        <doc xml:space="preserve">rebase the current branch onto the
                               commit recorded in the superproject.</doc>
      </member>
      <member name="merge"
              value="3"
              c:identifier="GGIT_SUBMODULE_UPDATE_MERGE"
              glib:nick="merge">
        <doc xml:space="preserve">merge the commit recorded in the
                              superproject into the current branch.</doc>
      </member>
      <member name="none"
              value="4"
              c:identifier="GGIT_SUBMODULE_UPDATE_NONE"
              glib:nick="none">
        <doc xml:space="preserve">do not update this submodule.</doc>
      </member>
      <member name="default"
              value="0"
              c:identifier="GGIT_SUBMODULE_UPDATE_DEFAULT"
              glib:nick="default">
        <doc xml:space="preserve">not used except as static initializer
when we don't want any particular update rule to be specified.</doc>
      </member>
    </enumeration>
    <class name="SubmoduleUpdateOptions"
           c:symbol-prefix="submodule_update_options"
           c:type="GgitSubmoduleUpdateOptions"
           parent="GObject.Object"
           glib:type-name="GgitSubmoduleUpdateOptions"
           glib:get-type="ggit_submodule_update_options_get_type"
           glib:type-struct="SubmoduleUpdateOptionsClass">
      <doc xml:space="preserve">Represents options for a submodule update.</doc>
      <constructor name="new" c:identifier="ggit_submodule_update_options_new">
        <doc xml:space="preserve">Creates a new submodule options object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitSubmoduleUpdateOptions.</doc>
          <type name="SubmoduleUpdateOptions"
                c:type="GgitSubmoduleUpdateOptions*"/>
        </return-value>
      </constructor>
      <method name="get_checkout_options"
              c:identifier="ggit_submodule_update_options_get_checkout_options">
        <doc xml:space="preserve">Get the checkout options.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
          <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleUpdateOptions.</doc>
            <type name="SubmoduleUpdateOptions"
                  c:type="GgitSubmoduleUpdateOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_clone_checkout_strategy"
              c:identifier="ggit_submodule_update_options_get_clone_checkout_strategy">
        <doc xml:space="preserve">Gets the clone checkout strategy.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the clone checkout strategy.</doc>
          <type name="CheckoutStrategy" c:type="GgitCheckoutStrategy"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleUpdateOptions.</doc>
            <type name="SubmoduleUpdateOptions"
                  c:type="GgitSubmoduleUpdateOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_fetch_options"
              c:identifier="ggit_submodule_update_options_get_fetch_options">
        <return-value transfer-ownership="full">
          <type name="FetchOptions" c:type="GgitFetchOptions*"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <type name="SubmoduleUpdateOptions"
                  c:type="GgitSubmoduleUpdateOptions*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_checkout_options"
              c:identifier="ggit_submodule_update_options_set_checkout_options">
        <doc xml:space="preserve">Set the checkout options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleUpdateOptions.</doc>
            <type name="SubmoduleUpdateOptions"
                  c:type="GgitSubmoduleUpdateOptions*"/>
          </instance-parameter>
          <parameter name="checkout_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitCheckoutOptions.</doc>
            <type name="CheckoutOptions" c:type="GgitCheckoutOptions*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_clone_checkout_strategy"
              c:identifier="ggit_submodule_update_options_set_clone_checkout_strategy">
        <doc xml:space="preserve">Sets the clone checkout strategy. Use %GGIT_CHECKOUT_SAFE_CREATE to create
all files in the working directory for the newly cloned repository.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleUpdateOptions.</doc>
            <type name="SubmoduleUpdateOptions"
                  c:type="GgitSubmoduleUpdateOptions*"/>
          </instance-parameter>
          <parameter name="checkout_strategy" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitCheckoutStrategy.</doc>
            <type name="CheckoutStrategy" c:type="GgitCheckoutStrategy"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_fetch_options"
              c:identifier="ggit_submodule_update_options_set_fetch_options">
        <doc xml:space="preserve">Sets the fetch options.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="options" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitSubmoduleUpdateOptions.</doc>
            <type name="SubmoduleUpdateOptions"
                  c:type="GgitSubmoduleUpdateOptions*"/>
          </instance-parameter>
          <parameter name="fetch_options"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GgitFetchOptions.</doc>
            <type name="FetchOptions" c:type="GgitFetchOptions*"/>
          </parameter>
        </parameters>
      </method>
      <property name="checkout-options" writable="1" transfer-ownership="none">
        <type name="CheckoutOptions"/>
      </property>
      <property name="clone-checkout-strategy"
                writable="1"
                transfer-ownership="none">
        <type name="CheckoutStrategy"/>
      </property>
      <property name="fetch-options" writable="1" transfer-ownership="none">
        <type name="FetchOptions"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="SubmoduleUpdateOptionsClass"
            c:type="GgitSubmoduleUpdateOptionsClass"
            glib:is-gtype-struct-for="SubmoduleUpdateOptions">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <class name="Tag"
           c:symbol-prefix="tag"
           c:type="GgitTag"
           parent="Object"
           glib:type-name="GgitTag"
           glib:get-type="ggit_tag_get_type"
           glib:type-struct="TagClass">
      <doc xml:space="preserve">Represents a tag object.</doc>
      <method name="get_message" c:identifier="ggit_tag_get_message">
        <doc xml:space="preserve">Gets the message of @tag.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the message of the tag.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTag.</doc>
            <type name="Tag" c:type="GgitTag*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_tag_get_name">
        <doc xml:space="preserve">Gets the name of @tag.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the tag.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTag.</doc>
            <type name="Tag" c:type="GgitTag*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_tagger" c:identifier="ggit_tag_get_tagger">
        <doc xml:space="preserve">Get the tagger (author) of @tag. The returned value must be free with
g_object_unref().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the tagger (author) of the tag.</doc>
          <type name="Signature" c:type="GgitSignature*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTag.</doc>
            <type name="Tag" c:type="GgitTag*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_target" c:identifier="ggit_tag_get_target" throws="1">
        <doc xml:space="preserve">Gets the target #GgitObject of @tag.

This method performs a repository lookup for the
given object and returns it.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the target #GgitObject of the tag.</doc>
          <type name="Object" c:type="GgitObject*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTag.</doc>
            <type name="Tag" c:type="GgitTag*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_target_id" c:identifier="ggit_tag_get_target_id">
        <doc xml:space="preserve">Gets the target #GgitOId of @tag.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the target #GgitOId of the tag.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTag.</doc>
            <type name="Tag" c:type="GgitTag*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_target_type" c:identifier="ggit_tag_get_target_type">
        <doc xml:space="preserve">Get the target object type.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GType.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTag.</doc>
            <type name="Tag" c:type="GgitTag*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="peel" c:identifier="ggit_tag_peel" throws="1">
        <doc xml:space="preserve">Recursively peel a tag until a non tag object is found.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitObject.</doc>
          <type name="Object" c:type="GgitObject*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tag" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTag.</doc>
            <type name="Tag" c:type="GgitTag*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Object" c:type="GgitObject"/>
      </field>
    </class>
    <callback name="TagCallback" c:type="GgitTagCallback">
      <doc xml:space="preserve">When iterating over all the tags, callback that will be
issued per entry. See ggit_repository_tag_foreach().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go continue or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="name" transfer-ownership="none">
          <doc xml:space="preserve">the tag name.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="tag_oid" transfer-ownership="none">
          <doc xml:space="preserve">the tag oid.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-suplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="TagClass"
            c:type="GgitTagClass"
            glib:is-gtype-struct-for="Tag">
      <doc xml:space="preserve">The class structure for #GgitTagClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="ObjectClass" c:type="GgitObjectClass"/>
      </field>
    </record>
    <record name="TransferProgress"
            c:type="GgitTransferProgress"
            glib:type-name="GgitTransferProgress"
            glib:get-type="ggit_transfer_progress_get_type"
            c:symbol-prefix="transfer_progress">
      <doc xml:space="preserve">Represents transfering progress.</doc>
      <method name="copy" c:identifier="ggit_transfer_progress_copy">
        <doc xml:space="preserve">Copies @progress into a newly allocated #GgitTransferProgress.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly allocated #GgitTransferProgress.</doc>
          <type name="TransferProgress" c:type="GgitTransferProgress*"/>
        </return-value>
        <parameters>
          <instance-parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTransferProgress.</doc>
            <type name="TransferProgress" c:type="GgitTransferProgress*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="free" c:identifier="ggit_transfer_progress_free">
        <doc xml:space="preserve">Frees @progress.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTransferProgress.</doc>
            <type name="TransferProgress" c:type="GgitTransferProgress*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_indexed_objects"
              c:identifier="ggit_transfer_progress_get_indexed_objects">
        <doc xml:space="preserve">Gets the indexed objects of the transfer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the indexed objects of the transfer.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTransferProgress.</doc>
            <type name="TransferProgress" c:type="GgitTransferProgress*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_received_bytes"
              c:identifier="ggit_transfer_progress_get_received_bytes">
        <doc xml:space="preserve">Gets the received bytes of the transfer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the received bytes of the transfer.</doc>
          <type name="gsize" c:type="gsize"/>
        </return-value>
        <parameters>
          <instance-parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTransferProgress.</doc>
            <type name="TransferProgress" c:type="GgitTransferProgress*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_received_objects"
              c:identifier="ggit_transfer_progress_get_received_objects">
        <doc xml:space="preserve">Gets the received objects of the transfer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the received objects of the transfer.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTransferProgress.</doc>
            <type name="TransferProgress" c:type="GgitTransferProgress*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_total_objects"
              c:identifier="ggit_transfer_progress_get_total_objects">
        <doc xml:space="preserve">Gets the total objects of the transfer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the total objects of the transfer.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="progress" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTransferProgress.</doc>
            <type name="TransferProgress" c:type="GgitTransferProgress*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="TransferProgressCallback"
              c:type="GgitTransferProgressCallback">
      <doc xml:space="preserve">Progress callbacks during indexing.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a value less than zero to cancel the transfer.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="stats" transfer-ownership="none">
          <doc xml:space="preserve">a #GgitTransferProgress.</doc>
          <type name="TransferProgress" c:type="GgitTransferProgress*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="Tree"
           c:symbol-prefix="tree"
           c:type="GgitTree"
           parent="Object"
           glib:type-name="GgitTree"
           glib:get-type="ggit_tree_get_type"
           glib:type-struct="TreeClass">
      <doc xml:space="preserve">Represents a tree object.</doc>
      <method name="get" c:identifier="ggit_tree_get">
        <doc xml:space="preserve">Get a tree entry by index.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitTreeEntry.</doc>
          <type name="TreeEntry" c:type="GgitTreeEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </instance-parameter>
          <parameter name="i" transfer-ownership="none">
            <doc xml:space="preserve">the index of the entry.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_by_name" c:identifier="ggit_tree_get_by_name">
        <doc xml:space="preserve">Get a tree entry by name.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitTreeEntry.</doc>
          <type name="TreeEntry" c:type="GgitTreeEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">a filename.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_by_path"
              c:identifier="ggit_tree_get_by_path"
              throws="1">
        <doc xml:space="preserve">Retrieves a tree entry contained in a tree or in any of its subtrees,
given its relative path.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitTreeEntry.</doc>
          <type name="TreeEntry" c:type="GgitTreeEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">a path.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="ggit_tree_get_id">
        <doc xml:space="preserve">Get the #GgitOId of the tree.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="size" c:identifier="ggit_tree_size">
        <doc xml:space="preserve">Get the number of entries in the tree.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the number of entries in the tree.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="walk" c:identifier="ggit_tree_walk" throws="1">
        <doc xml:space="preserve">Walk all the entries of a tree object recursively (resolving and walking
subtrees of the tree as needed). The @error will be set to the error returned
by @callback (if any).</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="tree" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTree.</doc>
            <type name="Tree" c:type="GgitTree*"/>
          </instance-parameter>
          <parameter name="mode" transfer-ownership="none">
            <doc xml:space="preserve">the walking order.</doc>
            <type name="TreeWalkMode" c:type="GgitTreeWalkMode"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="2">
            <doc xml:space="preserve">the callback to call for each entry.</doc>
            <type name="TreeWalkCallback" c:type="GgitTreeWalkCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user data for the callback.</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Object" c:type="GgitObject"/>
      </field>
    </class>
    <class name="TreeBuilder"
           c:symbol-prefix="tree_builder"
           c:type="GgitTreeBuilder"
           parent="Native"
           glib:type-name="GgitTreeBuilder"
           glib:get-type="ggit_tree_builder_get_type"
           glib:type-struct="TreeBuilderClass">
      <doc xml:space="preserve">Represents a tree object.</doc>
      <method name="clear" c:identifier="ggit_tree_builder_clear">
        <doc xml:space="preserve">Clear all entries in the tree builder.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="builder" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeBuilder.</doc>
            <type name="TreeBuilder" c:type="GgitTreeBuilder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_entry" c:identifier="ggit_tree_builder_get_entry">
        <doc xml:space="preserve">Get an entry by path.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GGitTreeEntry or %NULL if no such entry exists.</doc>
          <type name="TreeEntry" c:type="GgitTreeEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="builder" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeBuilder.</doc>
            <type name="TreeBuilder" c:type="GgitTreeBuilder*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">the path to remove.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="insert" c:identifier="ggit_tree_builder_insert" throws="1">
        <doc xml:space="preserve">Insert a file with a given blob in the tree builder. If the tree builder
already contains an entry for the given file, then this entry will be
overwritten.

Note that the returned #GgitTreeEntry is bound to the lifetime of the tree
builder and cannot be used after the tree builder has been freed.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitTreeEntry.</doc>
          <type name="TreeEntry" c:type="GgitTreeEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="builder" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeBuilder.</doc>
            <type name="TreeBuilder" c:type="GgitTreeBuilder*"/>
          </instance-parameter>
          <parameter name="filename" transfer-ownership="none">
            <doc xml:space="preserve">the file name.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="oid" transfer-ownership="none">
            <doc xml:space="preserve">the #GgitOId of the file blob to insert.</doc>
            <type name="OId" c:type="GgitOId*"/>
          </parameter>
          <parameter name="file_mode" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitFileMode.</doc>
            <type name="FileMode" c:type="GgitFileMode"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove" c:identifier="ggit_tree_builder_remove" throws="1">
        <doc xml:space="preserve">Remove an entry from the builder by path.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="builder" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeBuilder.</doc>
            <type name="TreeBuilder" c:type="GgitTreeBuilder*"/>
          </instance-parameter>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve">the path to remove.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="write" c:identifier="ggit_tree_builder_write" throws="1">
        <doc xml:space="preserve">Write the contents of the tree builder as a tree object.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the #GgitOId of the created tree object.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="builder" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeBuilder.</doc>
            <type name="TreeBuilder" c:type="GgitTreeBuilder*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="Native" c:type="GgitNative"/>
      </field>
    </class>
    <record name="TreeBuilderClass"
            c:type="GgitTreeBuilderClass"
            glib:is-gtype-struct-for="TreeBuilder">
      <doc xml:space="preserve">The class structure for #GgitTreeBuilderClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="NativeClass" c:type="GgitNativeClass"/>
      </field>
    </record>
    <record name="TreeClass"
            c:type="GgitTreeClass"
            glib:is-gtype-struct-for="Tree">
      <doc xml:space="preserve">The class structure for #GgitTreeClass.</doc>
      <field name="parent_class" readable="0" private="1">
        <doc xml:space="preserve">The parent class.</doc>
        <type name="ObjectClass" c:type="GgitObjectClass"/>
      </field>
    </record>
    <record name="TreeEntry"
            c:type="GgitTreeEntry"
            glib:type-name="GgitTreeEntry"
            glib:get-type="ggit_tree_entry_get_type"
            c:symbol-prefix="tree_entry">
      <doc xml:space="preserve">Represents an entry in a tree.</doc>
      <method name="get_file_mode"
              c:identifier="ggit_tree_entry_get_file_mode">
        <doc xml:space="preserve">Gets the #GgitFileMode of a tree entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GgitFileMode of a tree entry.</doc>
          <type name="FileMode" c:type="GgitFileMode"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeEntry.</doc>
            <type name="TreeEntry" c:type="GgitTreeEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="ggit_tree_entry_get_id">
        <doc xml:space="preserve">Get the #GgitOId of the entry.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #GgitOId.</doc>
          <type name="OId" c:type="GgitOId*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeEntry.</doc>
            <type name="TreeEntry" c:type="GgitTreeEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ggit_tree_entry_get_name">
        <doc xml:space="preserve">Get the name of the tree entry.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the name of the tree entry.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeEntry.</doc>
            <type name="TreeEntry" c:type="GgitTreeEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_object_type"
              c:identifier="ggit_tree_entry_get_object_type">
        <doc xml:space="preserve">Get the type of the tree entry object.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GType.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeEntry.</doc>
            <type name="TreeEntry" c:type="GgitTreeEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="ggit_tree_entry_ref">
        <doc xml:space="preserve">Atomically increments the reference count of @entry by one.
This function is MT-safe and may be called from any thread.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GgitTreeEntry.</doc>
          <type name="TreeEntry" c:type="GgitTreeEntry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeEntry.</doc>
            <type name="TreeEntry" c:type="GgitTreeEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="ggit_tree_entry_unref">
        <doc xml:space="preserve">Atomically decrements the reference count of @entry by one.
If the reference count drops to 0, @entry is freed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="entry" transfer-ownership="none">
            <doc xml:space="preserve">a #GgitTreeEntry.</doc>
            <type name="TreeEntry" c:type="GgitTreeEntry*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <callback name="TreeWalkCallback" c:type="GgitTreeWalkCallback">
      <doc xml:space="preserve">The type of the callback functions for walking a tree.
See ggit_tree_walk().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">0 to go for the next entry or a #GgitError in case there was an error.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="root" transfer-ownership="none">
          <doc xml:space="preserve">the current (relative) root of the entry</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="entry" transfer-ownership="none">
          <doc xml:space="preserve">the tree entry</doc>
          <type name="TreeEntry" c:type="const GgitTreeEntry*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve">user-supplied data.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="TreeWalkMode"
                 glib:type-name="GgitTreeWalkMode"
                 glib:get-type="ggit_tree_walk_mode_get_type"
                 c:type="GgitTreeWalkMode">
      <doc xml:space="preserve">Describes in which order a tree walk should be performed.</doc>
      <member name="pre"
              value="0"
              c:identifier="GGIT_TREE_WALK_MODE_PRE"
              glib:nick="pre">
        <doc xml:space="preserve">walk tree in pre-order</doc>
      </member>
      <member name="post"
              value="1"
              c:identifier="GGIT_TREE_WALK_MODE_POST"
              glib:nick="post">
        <doc xml:space="preserve">walk tree in post-order</doc>
      </member>
    </enumeration>
    <function name="error_quark"
              c:identifier="ggit_error_quark"
              moved-to="Error.quark">
      <doc xml:space="preserve">Error domain for Ggit functions.
Errors in this domain will be from the GgitError enumeration.
See #GError for information on error domains.</doc>
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="get_features" c:identifier="ggit_get_features">
      <doc xml:space="preserve">Gets the features of the library.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a #GgitFeatureFlags.</doc>
        <type name="FeatureFlags" c:type="GgitFeatureFlags"/>
      </return-value>
    </function>
    <function name="init" c:identifier="ggit_init">
      <doc xml:space="preserve">Call this function before using any other libgit2-glib function.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
    </function>
    <function name="message_prettify" c:identifier="ggit_message_prettify">
      <doc xml:space="preserve">Prettify a commit message by removing excess whitespace and making sure the
last line ends with a newline. If @strip_comments is %TRUE, then lines
starting with a @comment_char will be removed.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">the prettified message.</doc>
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="message" transfer-ownership="none">
          <doc xml:space="preserve">the message.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="strip_comments" transfer-ownership="none">
          <doc xml:space="preserve">whether to strip comments.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="comment_char" transfer-ownership="none">
          <doc xml:space="preserve">comment character.</doc>
          <type name="gchar" c:type="gchar"/>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
