summaryrefslogtreecommitdiff
path: root/tests/t0403-write.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2010-10-07 00:42:55 +0300
committerVicent Marti <tanoku@gmail.com>2010-10-07 00:42:55 +0300
commit0ba7a0318652e5e89101e9ee72cb1356c21cef56 (patch)
tree45c5b86689315d68c238144805016b5a28bc81c8 /tests/t0403-write.c
parentec25391dbb5ee6800b48362deadd73599701224f (diff)
downloadlibgit2-0ba7a0318652e5e89101e9ee72cb1356c21cef56.tar.gz
Add unit tests for object write-back
Basic write-back & in-memory editing for objects is now tested in t0403 (commits), t0802 (tags) and t0902 (trees). Add new helper functions in test_helpers.c to remove the loose objects created when doing write-back tests. Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'tests/t0403-write.c')
-rw-r--r--tests/t0403-write.c127
1 files changed, 127 insertions, 0 deletions
diff --git a/tests/t0403-write.c b/tests/t0403-write.c
new file mode 100644
index 000000000..b1d088da7
--- /dev/null
+++ b/tests/t0403-write.c
@@ -0,0 +1,127 @@
+#include "test_lib.h"
+#include "test_helpers.h"
+#include "commit.h"
+
+#include <git/odb.h>
+#include <git/commit.h>
+#include <git/revwalk.h>
+
+static const char *odb_dir = "../resources/sample-odb";
+static const char *commit_ids[] = {
+ "a4a7dce85cf63874e984719f4fdd239f5145052f", /* 0 */
+ "9fd738e8f7967c078dceed8190330fc8648ee56a", /* 1 */
+ "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", /* 2 */
+ "c47800c7266a2be04c571c04d5a6614691ea99bd", /* 3 */
+ "8496071c1b46c854b31185ea97743be6a8774479", /* 4 */
+ "5b5b025afb0b4c913b4c338a42934a3863bf3644", /* 5 */
+};
+static const char *tree_oid = "1810dff58d8a660512d4832e740f692884338ccd";
+
+BEGIN_TEST(writenew_test)
+ git_odb *db;
+ git_repository *repo;
+ git_commit *commit, *parent;
+ git_tree *tree;
+ git_oid id;
+ /* char hex_oid[41]; */
+
+ git_person author = {"Vicent Marti", "vicent@github.com", 123456789};
+ git_person committer = {"Vicent Marti", "vicent@github.com", 987654321};
+
+ must_pass(git_odb_open(&db, odb_dir));
+
+ repo = git_repository_alloc(db);
+ must_be_true(repo != NULL);
+
+ /* Create commit in memory */
+ commit = git_commit_new(repo);
+ must_be_true(commit != NULL);
+
+ /* Add new parent */
+ git_oid_mkstr(&id, commit_ids[4]);
+ parent = git_commit_lookup(repo, &id);
+ must_be_true(parent != NULL);
+
+ git_commit_add_parent(commit, parent);
+
+ /* Set other attributes */
+ git_commit_set_committer(commit, &committer);
+ git_commit_set_author(commit, &author);
+ git_commit_set_message(commit,
+ "This commit has been created in memory\n\
+This is a commit created in memory and it will be written back to disk\n");
+
+ /* add new tree */
+ git_oid_mkstr(&id, tree_oid);
+ tree = git_tree_lookup(repo, &id);
+ must_be_true(tree != NULL);
+
+ git_commit_set_tree(commit, tree);
+
+ /* Test it has no OID */
+ must_be_true(git_commit_id(commit) == NULL);
+
+ /* Write to disk */
+ must_pass(git_object_write((git_object *)commit));
+
+ /* Show new SHA1 */
+/*
+ git_oid_fmt(hex_oid, git_commit_id(commit));
+ hex_oid[40] = 0;
+ printf("Written new commit, SHA1: %s\n", hex_oid);
+*/
+
+ must_pass(remove_loose_object(odb_dir, (git_object *)commit));
+
+ git_repository_free(repo);
+ git_odb_close(db);
+
+END_TEST
+
+BEGIN_TEST(writeback_test)
+ git_odb *db;
+ git_repository *repo;
+ git_oid id;
+ git_commit *commit, *parent;
+ const char *message;
+ /* char hex_oid[41]; */
+
+ must_pass(git_odb_open(&db, odb_dir));
+
+ repo = git_repository_alloc(db);
+ must_be_true(repo != NULL);
+
+ git_oid_mkstr(&id, commit_ids[0]);
+
+ commit = git_commit_lookup(repo, &id);
+ must_be_true(commit != NULL);
+
+ message = git_commit_message(commit);
+
+/*
+ git_oid_fmt(hex_oid, git_commit_id(commit));
+ hex_oid[40] = 0;
+ printf("Old SHA1: %s\n", hex_oid);
+*/
+
+ git_commit_set_message(commit, "This is a new test message. Cool!\n");
+
+ git_oid_mkstr(&id, commit_ids[4]);
+ parent = git_commit_lookup(repo, &id);
+ must_be_true(parent != NULL);
+
+ git_commit_add_parent(commit, parent);
+
+ must_pass(git_object_write((git_object *)commit));
+
+/*
+ git_oid_fmt(hex_oid, git_commit_id(commit));
+ hex_oid[40] = 0;
+ printf("New SHA1: %s\n", hex_oid);
+*/
+
+ must_pass(remove_loose_object(odb_dir, (git_object *)commit));
+
+ git_repository_free(repo);
+ git_odb_close(db);
+END_TEST