diff options
author | Patrick Steinhardt <ps@pks.im> | 2016-08-16 10:06:17 +0200 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2016-10-10 09:04:42 +0200 |
commit | 29d9afc0fb2d673d41bf27f57ac205299c393aeb (patch) | |
tree | 3ae3553119451d706b0303611e365bda9375e8c1 | |
parent | b009adad3506ba634611bb17ab332b1226bcb116 (diff) | |
download | libgit2-29d9afc0fb2d673d41bf27f57ac205299c393aeb.tar.gz |
examples: general: extract function demonstrating ODB
-rw-r--r-- | examples/general.c | 128 |
1 files changed, 77 insertions, 51 deletions
diff --git a/examples/general.c b/examples/general.c index 56fa11bb2..685dce01c 100644 --- a/examples/general.c +++ b/examples/general.c @@ -43,6 +43,7 @@ #include <stdio.h> #include <string.h> +static void object_database(git_repository *repo, git_oid *oid); static void commit_writing(git_repository *repo); static void commit_parsing(git_repository *repo); static void tag_parsing(git_repository *repo); @@ -116,80 +117,105 @@ int main (int argc, char** argv) git_oid_fmt(out, &oid); printf("SHA hex string: %s\n", out); - // ### Working with the Object Database + object_database(repo, &oid); + commit_writing(repo); + commit_parsing(repo); + tag_parsing(repo); + tree_parsing(repo); + blob_parsing(repo); + revwalking(repo); + index_walking(repo); + reference_listing(repo); + config_files(repo_path); - // **libgit2** provides [direct access][odb] to the object database. The - // object database is where the actual objects are stored in Git. For - // working with raw objects, we'll need to get this structure from the - // repository. - // - // [odb]: http://libgit2.github.com/libgit2/#HEAD/group/odb + // Finally, when you're done with the repository, you can free it as well. + git_repository_free(repo); + + return 0; +} + +/** + * ### Working with the Object Database + * + * **libgit2** provides [direct access][odb] to the object database. The + * object database is where the actual objects are stored in Git. For + * working with raw objects, we'll need to get this structure from the + * repository. + * + * [odb]: http://libgit2.github.com/libgit2/#HEAD/group/odb + */ +static void object_database(git_repository *repo, git_oid *oid) +{ + char oid_hex[GIT_OID_HEXSZ+1] = { 0 }; + const unsigned char *data; + const char *str_type; + int error; + git_odb_object *obj; git_odb *odb; + git_otype otype; + git_repository_odb(&odb, repo); - // #### Raw Object Reading + /** + * #### Raw Object Reading + */ printf("\n*Raw Object Read*\n"); - git_odb_object *obj; - git_otype otype; - const unsigned char *data; - const char *str_type; - // We can read raw objects directly from the object database if we have - // the oid (SHA) of the object. This allows us to access objects without - // knowing their type and inspect the raw bytes unparsed. - error = git_odb_read(&obj, odb, &oid); + /** + * We can read raw objects directly from the object database if we have + * the oid (SHA) of the object. This allows us to access objects without + * knowing their type and inspect the raw bytes unparsed. + */ + error = git_odb_read(&obj, odb, oid); check_error(error, "finding object in repository"); - // A raw object only has three properties - the type (commit, blob, tree - // or tag), the size of the raw data and the raw, unparsed data itself. - // For a commit or tag, that raw data is human readable plain ASCII - // text. For a blob it is just file contents, so it could be text or - // binary data. For a tree it is a special binary format, so it's unlikely - // to be hugely helpful as a raw object. + /** + * A raw object only has three properties - the type (commit, blob, tree + * or tag), the size of the raw data and the raw, unparsed data itself. + * For a commit or tag, that raw data is human readable plain ASCII + * text. For a blob it is just file contents, so it could be text or + * binary data. For a tree it is a special binary format, so it's unlikely + * to be hugely helpful as a raw object. + */ data = (const unsigned char *)git_odb_object_data(obj); otype = git_odb_object_type(obj); - // We provide methods to convert from the object type which is an enum, to - // a string representation of that value (and vice-versa). + /** + * We provide methods to convert from the object type which is an enum, to + * a string representation of that value (and vice-versa). + */ str_type = git_object_type2string(otype); printf("object length and type: %d, %s\n", (int)git_odb_object_size(obj), str_type); - // For proper memory management, close the object when you are done with - // it or it will leak memory. + /** + * For proper memory management, close the object when you are done with + * it or it will leak memory. + */ git_odb_object_free(obj); - // #### Raw Object Writing + /** + * #### Raw Object Writing + */ printf("\n*Raw Object Write*\n"); - // You can also write raw object data to Git. This is pretty cool because - // it gives you direct access to the key/value properties of Git. Here - // we'll write a new blob object that just contains a simple string. - // Notice that we have to specify the object type as the `git_otype` enum. - git_odb_write(&oid, odb, "test data", sizeof("test data") - 1, GIT_OBJ_BLOB); - - // Now that we've written the object, we can check out what SHA1 was - // generated when the object was written to our database. - git_oid_fmt(out, &oid); - printf("Written Object: %s\n", out); - - commit_writing(repo); - commit_parsing(repo); - tag_parsing(repo); - tree_parsing(repo); - blob_parsing(repo); - revwalking(repo); - index_walking(repo); - reference_listing(repo); - config_files(repo_path); - - // Finally, when you're done with the repository, you can free it as well. - git_repository_free(repo); + /** + * You can also write raw object data to Git. This is pretty cool because + * it gives you direct access to the key/value properties of Git. Here + * we'll write a new blob object that just contains a simple string. + * Notice that we have to specify the object type as the `git_otype` enum. + */ + git_odb_write(oid, odb, "test data", sizeof("test data") - 1, GIT_OBJ_BLOB); - return 0; + /** + * Now that we've written the object, we can check out what SHA1 was + * generated when the object was written to our database. + */ + git_oid_fmt(oid_hex, oid); + printf("Written Object: %s\n", oid_hex); } /** |