## GgitRevisionWalker GgitRevisionWalker |

## Synopsis

                        GgitRevisionWalker;
    struct              GgitRevisionWalkerClass;
    enum                GgitSortMode;
    GgitRevisionWalker * ggit_revision_walker_new           (GgitRepository *repository,
                                                             GError **error);
    void                ggit_revision_walker_reset          (GgitRevisionWalker *walker);
    void                ggit_revision_walker_push           (GgitRevisionWalker *walker,
                                                             GgitOId *oid,
                                                             GError **error);
    void                ggit_revision_walker_hide           (GgitRevisionWalker *walker,
                                                             GgitOId *oid,
                                                             GError **error);
    GgitOId *           ggit_revision_walker_next           (GgitRevisionWalker *walker,
                                                             GError **error);
    void                ggit_revision_walker_set_sort_mode  (GgitRevisionWalker *walker,
                                                             GgitSortMode sort_mode);
    GgitRepository *    ggit_revision_walker_get_repository (GgitRevisionWalker *walker);

## Object Hierarchy

      GObject
       +----GgitObjectFactoryBase
             +----GgitNative
                   +----GgitRevisionWalker

      GFlags
       +----GgitSortMode

## Implemented Interfaces

GgitRevisionWalker implements GInitable.

## Properties

      "repository"               GgitRepository*       : Read / Write / Construct

## Description

## Details

### GgitRevisionWalker

    typedef struct _GgitRevisionWalker GgitRevisionWalker;

Represents a revision walker.

### struct GgitRevisionWalkerClass

    struct GgitRevisionWalkerClass {
    };

The class structure for GgitRevisionWalkerClass.

### enum GgitSortMode

    typedef enum {
    	GGIT_SORT_NONE        = 0,
    	GGIT_SORT_TOPOLOGICAL = 1 << 0,
    	GGIT_SORT_TIME        = 1 << 1,
    	GGIT_SORT_REVERSE     = 1 << 2
    } GgitSortMode;

The type of sorting mode for the revision walker.

`GGIT_SORT_NONE` | Sorts the repository contents in no particular ordering; this sorting is arbitrary, implementation-specific and subject to change at any time.
`GGIT_SORT_TOPOLOGICAL` | Sorts the repository contents in topological order (parents before children); this sorting mode can be combined with time sorting.
`GGIT_SORT_TIME` | Sort the repository contents by commit time; this sorting mode can be combined with topological sorting.
`GGIT_SORT_REVERSE` | Iterate through the repository contents in reverse order; this sorting mode can be combined with any of the above.

### ggit_revision_walker_new ()

    GgitRevisionWalker * ggit_revision_walker_new           (GgitRepository *repository,
                                                             GError **error);

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.

`repository` : | a GgitRepository.
`error` : | a GError for error reporting, or `NULL`.
Returns : | a new GgitRevisionWalker. [transfer full]

### ggit_revision_walker_reset ()

    void                ggit_revision_walker_reset          (GgitRevisionWalker *walker);

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.

`walker` : | a GgitRevisionWalker.

### ggit_revision_walker_push ()

    void                ggit_revision_walker_push           (GgitRevisionWalker *walker,
                                                             GgitOId *oid,
                                                             GError **error);

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.

`walker` : | a GgitRevisionWalker.
`oid` : | a GgitOId.
`error` : | a GError for error reporting, or `NULL`.

### ggit_revision_walker_hide ()

    void                ggit_revision_walker_hide           (GgitRevisionWalker *walker,
                                                             GgitOId *oid,
                                                             GError **error);

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.

`walker` : | a GgitRevisionWalker.
`oid` : | a GgitOId.
`error` : | a GError for error reporting, or `NULL`.

### ggit_revision_walker_next ()

    GgitOId *           ggit_revision_walker_next           (GgitRevisionWalker *walker,
                                                             GError **error);

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.

`walker` : | a GgitRevisionWalker.
`error` : | a GError for error reporting, or `NULL`.
Returns : | the next commit from the revision walk. [transfer full]

### ggit_revision_walker_set_sort_mode ()

    void                ggit_revision_walker_set_sort_mode  (GgitRevisionWalker *walker,
                                                             GgitSortMode sort_mode);

Change the sorting mode when iterating through the repository's contents.

Changing the sorting mode resets the walker.

`walker` : | a GgitRevisionWalker.
`sort_mode` : | a GgitSortMode value.

### ggit_revision_walker_get_repository ()

    GgitRepository *    ggit_revision_walker_get_repository (GgitRevisionWalker *walker);

Gets the repository on which this walker is operating.

`walker` : | a GgitRepository.
Returns : | the repository on which this walker is operating. [transfer none]

## Property Details

### The `"repository"` property

      "repository"               GgitRepository*       : Read / Write / Construct

The repository where to make the walking.