[[tags: egg]] == git [[toc:]] === Description Bindings to the [[http://libgit2.github.com|libgit2]] library. Please note that the libgit library is currently a moving target, under heavy development. This library has been written and tested against Chicken 4.6 & 4.7 and libgit2 0.15.0. If you encounter problems, check your versions. === Documentation {{git}} provides an interface for reading & manipulating git repositories. The library is split into two modules, {{git}} and {{git-lolevel}}: * {{git-lolevel}} is essentially just the libgit2 API, thinly wrapped. Most of the function signatures remain the same, with a few exceptions: ** Structures & pointers that would go on the stack are allocated automatically. ** Return values are checked where appropriate, signaling an exception of type {{git}} when negative. ** Pointer arrays are converted to rest arguments. * {{git}} is a higher-level interface around {{git-lolevel}}, providing record types for each libgit2 structure. The following documentation applies to the {{git}} module. === Usage (use git) ; or... (use git-lolevel) It's not recommended to mix the two without prefixing one or the other's imports, as the two libraries share many identifiers. === API ==== Repository repository (repository? obj) => boolean A {{repository}} corresponds to an on-disk Git repository. (repository-open [path]) => repository Opens the Git repository indicated by {{path}}, or the value of {{current-directory}} if no {{path}} is given. {{path}} may point to a bare repository, a working directory containing a ".git" directory, or a ".git" directory directly. (repository-path repository [type]) => string Returns the absolute path to the given {{repository}}. A {{type}} symbol may be given in order to retrieve alternate paths for the repository, and should be one of {{path}} (the default), {{index}}, {{odb}} or {{workdir}}. (repository-ref repository ref [type]) => object Looks up a Git object in the given {{repository}}. {{ref}} may be a SHA1 string, {{oid}}, {{reference}}, {{blob*}}, {{commit}}, {{tag}} or {{tree}}. The returned object will be of type {{blob*}}, {{commit}}, {{tag}} or {{tree}}, or {{#f}} if no object matching the given {{ref}} is found. An optional {{type}} symbol may be given in order to enforce an object type for which to search. (repository-empty? repository) => boolean (repository-bare? repositoy) => boolean Returns a boolean indicating whether the given {{repository}} is empty (contains no commits) or bare (an exposed git directory without a working directory). (pack-references repository) => void Writes all loose references in the given {{repository}} into its "pack-refs" file and removes them from the on-disk repository. Calling this function will invalidate any existing {{reference}} objects belonging to the repository. ==== OID oid (oid? obj) => boolean An {{oid}} is a unique reference to a Git object, corresponding to a 40-character SHA1 object name. (string->oid string) => oid Creates an {{oid}} from the given string, which should be a 40-character SHA1 hash. An error is signaled if the string is not a valid hash. (oid->string oid [length]) => string Returns the string representation of the given {{oid}}. The optional integer {{length}} specifies the length of the returned string, up to 40 characters. (oid->path oid) => string Returns the string representation of the given {{oid}} in the form "xx/...", where "xx" is the first two characters of the SHA1 and "..." is the remainder. ==== Reference reference (reference? obj) => boolean A {{reference}} is an indirect pointer to a Git commit object. A repository's {{"HEAD"}} is a common example. (reference repository ref) => reference Returns the {{reference}} specified by the given string {{ref}} from the {{repository}}. {{ref}} must refer to a valid reference, such as {{"HEAD"}}, {{"ref/heads/master"}}, or {{"refs/tags/v0.1.0"}}. An error is signalled if the reference doesn't exists. (references repository) => list Returns a list of all references in the given {{repository}}. (reference-id reference) => oid Returns the {{oid}} of the object referred to by the given {{reference}}. (reference-owner reference) => repository Returns the {{repository}} to which the given {{reference}} belongs. (reference-resolve reference) => reference Dereferences the given (possibly symbolic) {{reference}}, returning a new non-symbolic {{reference}} pointing directly to a {{commit}}. (reference-rename reference name) => void (reference-target-set reference target) => void {{reference-rename}} changes the name of the given {{reference}} to the string {{name}}. {{reference-target-set}} updates a {{reference}} to refer to the given {{target}}. If {{reference}} is an immediate reference (referring to an object ID), {{target}} must be an {{oid}}, {{commit}}, or SHA1 string. If {{reference}} is symbolic, {{target}} must be a {{reference}} or reference name. It is an error to assign a symbolic reference an OID target and vice-versa. On success, the on-disk repository is updated immediately. (create-reference repository #!key name target [symbolic?] [force?]) => reference Creates & returns a new reference in the given {{repository}} for the specified {{name}} and {{target}}. If {{symbolic?}} is given and not {{#f}}, the created reference will be so, and {{target}} must be a reference name or {{reference}}. Otherwise, {{target}} must be a SHA1 string, {{oid}}, {{commit}} or {{reference}} to a {{commit}}. If a reference of the given {{name}} exists and {{force?}} is not given or {{#f}}, an error is signalled. Otherwise, creation is forced and the old reference will be overwritten. On success, the on-disk repository is updated immediately. ==== Generic (object-id object) => oid Returns the {{oid}} referring to the given object, which must be a {{commit}}, {{tree}}, {{tag}} or {{blob*}}. (object-sha object [length]) => string Returns the SHA1 identifier corresponding to the given object, which may be a {{commit}}, {{tree}}, {{tag}} {{blob*}}, {{reference}}, {{oid}} or {{string}}. (object-type object) => symbol Returns a symbol specifying the type of the given object, which must be one of {{commit}}, {{tree}}, {{tag}} or {{blob*}}. {{#f}} is returned if the type cannot be determined. ==== Blob* blob* (blob*? obj) => boolean A {{blob*}} corresponds to Git's Blob object type, renamed in order to avoid name clashes with Chicken's built-in {{blob}} type. It represents a file. (blob* repository ref) => blob* Returns the {{blob*}} specified by the given {{ref}} from the repository. {{ref}} may be a SHA1 string, {{oid}}, or {{blob*}}. An error is signaled if no such {{blob*}} exists. (blob*-content blob*) => blob Returns a {{blob}} (of the Chicken built-in type) with the contents of the given {{blob*}} (of the Git object type). (blob*-size blob*) => int Returns the size in bytes of the given {{blob*}}. ==== Commit commit (commit? obj) => boolean A {{commit}} corresponds to Git's commit object type. (commit repository ref) => commit Returns the {{commit}} specified by the given {{ref}} from the repository. {{ref}} may be a SHA1 string, {{oid}}, {{reference}} or {{commit}}. An error is signaled if no such {{commit}} exists. (commits repository #!key [initial] [hide] [sort]) => list Returns a list of all {{commit}}s in the given {{repository}}. If a {{commit}} or SHA1 {{initial}} is given, (commit-id commit) => oid Returns the {{oid}} for the given {{commit}}. (commit-time commit) => int (commit-time-offset commit) => int {{commit-time}} and {{commit-time-offset}} return the timestamp of the given {{commit}} and its UTC offset in minutes, respectively. (commit-message commit) => string Returns the full commit message of the given {{commit}}. (commit-tree commit) => tree Returns the {{tree}} associated with the given {{commit}}. (commit-author commit) => signature (commit-committer commit) => signature {{commit-author}} and {{commit-committer}} return the given {{commit}}'s respective {{signature}}s. (commit-parentcount commit) => int (commit-parent commit [n]) => commit {{commit-parentcount}} returns the number of parents for a given {{commit}}. {{commit-parent}} returns the {{n}}th parent of the given {{commit}}, or the first if no {{n}} is given. (create-commit repository #!key message tree [parents] author [committer] [reference]) => commit Creates & returns a new commit in the given {{repository}}. The string {{message}} will be used as the commit's message and {{tree}} will be the file tree of the commit. {{parents}} should be be a (possibly empty) list of commits to be used as this commit's parents. {{author}} and {{committer}} should be signatures; if {{committer}} is not given, {{author}} will be used for both. {{reference}}, if given and not {{#f}}, should be the {{reference}} that will be updated to point to the newly-created commit. Note that if no {{reference}} is given, the commit will be created in Git's database but will not be reflected in any of the repository's branches. To update the the working branch with the new commit, for example, use "HEAD". On success, the on-disk repository is updated immediately. ==== Tag tag (tag? obj) => boolean A {{tag}} corresponds to Git's Tag object type, which is a way to mark a specific object as special in some way. (tag repository name) => tag Creates & returns the {{tag}} specified by the given {{ref}} from the repository. {{ref}} may be a SHA1 string, {{oid}}, or {{tag}}. An error is signaled if no such {{tag}} exists. (tags repository) => list Returns a list of all tags in the given {{repository}}. (tag-id tag) => oid Returns the {{oid}} for the given {{tag}}. (tag-type tag) => symbol Returns the object type symbol of the target of the given {{tag}}, which will be one of {{commit}}, {{tree}}, {{blob}}, or {{tag}}. (tag-name tag) => string (tag-message tag) => string Return the name or message strings of the given {{tag}}. (tag-tagger tag) => signature Returns the {{signature}} of the {{tag}}'s creator. (tag-target tag) => object Returns the object referred to by {{tag}}, which will be of type {{commit}}, {{tree}}, {{blob}} or {{tag}}. (tag-delete tag) => void Destroys the given {{tag}}. On success, the on-disk repository is updated immediately. (create-tag repository #!key target name message tagger [force?]) => tag Creates & returns a new tag in the given {{repository}} for the specified {{name}}, {{message}} and {{target}}. {{name}} and {{message}} must be strings, {{tagger}} must be a {{signature}},and {{target}} must be a {{commit}}, {{tree}} or {{blob*}}. If a tag of the given {{name}} exists and {{force?}} is not given or {{#f}}, an error is signalled. Otherwise, creation is forced and the old tag will be overwritten. On success, the on-disk repository is updated immediately. ==== Tree tree (tree? obj) => boolean A {{tree}} corresponds to Git's Tree object type, which represents a directory tree. (tree repository ref) => tree Returns the {{tree}} specified by the given {{ref}} from the repository. {{ref}} may be a SHA1 string, {{oid}}, or {{tree}}. An error is signaled if no such {{tree}} exists. (tree-id tree) => oid Returns the {{oid}} for the given {{tree}}. (tree-entrycount tree) => int Returns the number of entries in the given {{tree}}. This count does not include entries of contained directories. (tree-ref tree key) => tree-entry Returns a {{tree-entry}} object for the given {{key}}, or {{#f}} if no such object is found. {{key}} may be a numerical index or the string of an entry name. (tree->list tree [repository]) => list Returns a list of {{tree-entry}} objects for the given {{tree}}. If a {{repository}} is given, this function will recurse into it, returning a nested list of entries spanning the full directory tree. (create-tree repository index) => tree Creates and returns a {{tree}} object from the state of the given {{index}}. ==== Tree Entry tree-entry (tree-entry? obj) => boolean A {{tree-entry}} represents a single node in a {{tree}} object. (tree-entry-id tree-entry) => oid Returns the {{oid}} of the given {{tree-entry}}. (tree-entry-name tree-entry) => string Returns the name of the given {{tree-entry}}. (tree-entry-attributes tree-entry) => int Returns the Unix file attributes of the given {{tree-entry}}. (tree-entry-type tree-entry) => symbol Returns the object type symbol, either {{tree}} or {{blob}}, of the given {{tree-entry}}. (tree-entry->object repository tree-entry) => object Returns an object of type {{tree}} or {{blob*}} from the given {{tree-entry}} and {{repository}}, which must be the owner of the {{tree-entry}}. ==== Index index (index? obj) => boolean (index-open repo-or-path) => index (index-entrycount index) => int (index-entrycount-unmerged index) => int (index-read index) => void (index-write index) => void (index-clear index) => void (index-add index path [stage]) => void (index-remove index ref) => void (index-find index) => int (index-ref index key) => index-entry (index->list index [type]) => list TODO ==== Index Entry index-entry (index-entry? obj) => boolean (index-entry-id index-entry) => oid (index-entry-path index-entry) => string (index-entry-ctime index-entry) => int (index-entry-mtime index-entry) => int (index-entry-dev index-entry) => int (index-entry-ino index-entry) => int (index-entry-size index-entry) => int (index-entry-stage index-entry) => int (index-entry-uid index-entry) => int (index-entry-gid index-entry) => int (index-entry-mode index-entry) => int (index-entry-flags index-entry) => int (index-entry-extended index-entry) => int (index-entry->object repository index-entry) => object TODO ==== ODB odb (odb? obj) => boolean (odb-new) => odb (odb-open repo-or-path) => odb (odb-has-object? odb ref) => boolean (odb-read odb ref) => odb-object (odb-write odb data [type]) => oid (odb-hash odb data [type]) => oid TODO ==== ODB Object odb-object (odb-object? obj) => boolean An {{odb-object}} is a reference to a blob of data in a Git object database. (odb-object-id odb-object) => oid Returns the {{oid}} for the given {{odb-object}}. (odb-object-size odb-object) => int Returns the size of the {{odb-object}}'s data in bytes. (odb-object-type odb-object) => symbol Returns the object type symbol of the given {{odb-object}}. (odb-object-data odb-object) => blob Returns a blob consisting of the {{odb-object}}'s data. ==== Signature signature (signature? obj) => boolean A signature is a record of the name, email, time and UTC offset of a given Git object. (make-signature name email [time [offset]]) => signature Returns a new {{signature}} for the given name and email strings. If a timestamp {{time}} and integer {{offset}} are given, they will be used as the signature time; otherwise, the current time will be used. Unlike the {{create-*}} functions, no representation of this signature is created in the repository; it exists only in memory until associated with a {{commit}} or {{tag}}. (signature-name signature) => string (signature-email signature) => string {{signature-name}} and {{signature-email}} return strings for the given {{signature}}'s respective fields. (signature-time signature) => int (signature-time-offset signature) => int {{signature-time}} and {{signature-time-offset}} return the timestamp of the given {{signature}} and its UTC offset in minutes, respectively. === Author Evan Hanson === License Copyright (c) 2011, Evan Hanson, 3-Clause BSD License