commit - 26ed57b23d183a3ea7aa46e7509f935e35e7554e
commit + 11528a829855823153f2aaa9438bdf400a2995d7
blob - c8a1143bff915c1c1c59d727dfcef953b0a84956
blob + a4134598a23ddc10569bfd34fb1e4250e3385913
--- got/got.c
+++ got/got.c
free(id);
got_repo_close(repo);
return error;
-}
-
-static const struct got_error *
-diff_blobs(struct got_object *obj1, struct got_object *obj2,
- struct got_repository *repo)
-{
- const struct got_error *err;
- struct got_blob_object *blob1 = NULL, *blob2 = NULL;
-
- err = got_object_blob_open(&blob1, repo, obj1, 8192);
- if (err)
- goto done;
- err = got_object_blob_open(&blob2, repo, obj2, 8192);
- if (err)
- goto done;
-
- err = got_diff_blob(blob1, blob2, NULL, NULL, stdout);
-done:
- if (blob1)
- got_object_blob_close(blob1);
- if (blob2)
- got_object_blob_close(blob2);
- return err;
-}
-
-static const struct got_error *
-diff_trees(struct got_object *obj1, struct got_object *obj2,
- struct got_repository *repo)
-{
- const struct got_error *err;
- struct got_tree_object *tree1 = NULL, *tree2 = NULL;
-
- err = got_object_tree_open(&tree1, repo, obj1);
- if (err)
- goto done;
- err = got_object_tree_open(&tree2, repo, obj2);
- if (err)
- goto done;
-
- err = got_diff_tree(tree1, tree2, repo, stdout);
-done:
- if (tree1)
- got_object_tree_close(tree1);
- if (tree2)
- got_object_tree_close(tree2);
- return err;
}
-static const struct got_error *
-diff_commits(struct got_object *obj1, struct got_object *obj2,
- struct got_repository *repo)
-{
- const struct got_error *err;
- struct got_commit_object *commit1 = NULL, *commit2 = NULL;
- struct got_object *tree_obj1 = NULL, *tree_obj2 = NULL;
-
- err = got_object_commit_open(&commit1, repo, obj1);
- if (err)
- goto done;
- err = got_object_commit_open(&commit2, repo, obj2);
- if (err)
- goto done;
-
- err = got_object_open(&tree_obj1, repo, commit1->tree_id);
- if (err)
- goto done;
- err = got_object_open(&tree_obj2, repo, commit2->tree_id);
- if (err)
- goto done;
-
- err = diff_trees(tree_obj1, tree_obj2, repo);
-done:
- if (tree_obj1)
- got_object_close(tree_obj1);
- if (tree_obj2)
- got_object_close(tree_obj2);
- if (commit1)
- got_object_commit_close(commit1);
- if (commit2)
- got_object_commit_close(commit2);
- return err;
-
-}
-
__dead void
usage_diff(void)
{
switch (got_object_get_type(obj1)) {
case GOT_OBJ_TYPE_BLOB:
- error = diff_blobs(obj1, obj2, repo);
+ error = got_diff_objects_as_blobs(obj1, obj2, repo, stdout);
break;
case GOT_OBJ_TYPE_TREE:
- error = diff_trees(obj1, obj2, repo);
+ error = got_diff_objects_as_trees(obj1, obj2, repo, stdout);
break;
case GOT_OBJ_TYPE_COMMIT:
- error = diff_commits(obj1, obj2, repo);
+ error = got_diff_objects_as_commits(obj1, obj2, repo, stdout);
break;
default:
error = got_error(GOT_ERR_OBJ_TYPE);
blob - 4673b9c5bf89bc6b2ed60ed83a5a1ee337865617
blob + 0f04bd8dc24610ab8b6aa4a71934829503df5230
--- include/got_diff.h
+++ include/got_diff.h
*/
const struct got_error *got_diff_tree(struct got_tree_object *,
struct got_tree_object *, struct got_repository *, FILE *);
+
+/*
+ * Diff two objects, assuming both objects are blobs.
+ * Write unified diff text to the provided output FILE.
+ */
+const struct got_error *got_diff_objects_as_blobs(struct got_object *,
+ struct got_object *, struct got_repository *, FILE *);
+
+/*
+ * Diff two objects, assuming both objects are trees.
+ * Write unified diff text to the provided output FILE.
+ */
+const struct got_error *got_diff_objects_as_trees(struct got_object *,
+ struct got_object *, struct got_repository *, FILE *);
+
+/*
+ * Diff two objects, assuming both objects are commits.
+ * Write unified diff text to the provided output FILE.
+ */
+const struct got_error *got_diff_objects_as_commits(struct got_object *,
+ struct got_object *, struct got_repository *, FILE *);
blob - 2edc9fdd16423ddcf986299d5139b69fdf772c6d
blob + 85c538615c4936d03916032ae8518959958e942f
--- lib/diff.c
+++ lib/diff.c
if (te2)
te2 = SIMPLEQ_NEXT(te2, entry);
} while (te1 || te2);
+
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_blobs(struct got_object *obj1, struct got_object *obj2,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_blob_object *blob1 = NULL, *blob2 = NULL;
+
+ err = got_object_blob_open(&blob1, repo, obj1, 8192);
+ if (err)
+ goto done;
+ err = got_object_blob_open(&blob2, repo, obj2, 8192);
+ if (err)
+ goto done;
+ err = got_diff_blob(blob1, blob2, NULL, NULL, outfile);
+done:
+ if (blob1)
+ got_object_blob_close(blob1);
+ if (blob2)
+ got_object_blob_close(blob2);
return err;
}
+
+const struct got_error *
+got_diff_objects_as_trees(struct got_object *obj1, struct got_object *obj2,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_tree_object *tree1 = NULL, *tree2 = NULL;
+
+ err = got_object_tree_open(&tree1, repo, obj1);
+ if (err)
+ goto done;
+ err = got_object_tree_open(&tree2, repo, obj2);
+ if (err)
+ goto done;
+
+ err = got_diff_tree(tree1, tree2, repo, outfile);
+done:
+ if (tree1)
+ got_object_tree_close(tree1);
+ if (tree2)
+ got_object_tree_close(tree2);
+ return err;
+}
+
+const struct got_error *
+got_diff_objects_as_commits(struct got_object *obj1, struct got_object *obj2,
+ struct got_repository *repo, FILE *outfile)
+{
+ const struct got_error *err;
+ struct got_commit_object *commit1 = NULL, *commit2 = NULL;
+ struct got_object *tree_obj1 = NULL, *tree_obj2 = NULL;
+
+ err = got_object_commit_open(&commit1, repo, obj1);
+ if (err)
+ goto done;
+ err = got_object_commit_open(&commit2, repo, obj2);
+ if (err)
+ goto done;
+
+ err = got_object_open(&tree_obj1, repo, commit1->tree_id);
+ if (err)
+ goto done;
+ err = got_object_open(&tree_obj2, repo, commit2->tree_id);
+ if (err)
+ goto done;
+
+ err = got_diff_objects_as_trees(tree_obj1, tree_obj2, repo, outfile);
+done:
+ if (tree_obj1)
+ got_object_close(tree_obj1);
+ if (tree_obj2)
+ got_object_close(tree_obj2);
+ if (commit1)
+ got_object_commit_close(commit1);
+ if (commit2)
+ got_object_commit_close(commit2);
+ return err;
+}
blob - beae1ba444da519f2b75a4992c9b4d1316a2775c
blob + 1eeab3c01b4b597a967bbbbd27de4658259cedac
--- tog/tog.c
+++ tog/tog.c
fprintf(stderr, "usage: %s diff [repository-path] object1 object2\n",
getprogname());
exit(1);
-}
-
-static const struct got_error *
-diff_blobs(FILE *outfile, struct got_object *obj1, struct got_object *obj2,
- struct got_repository *repo)
-{
- const struct got_error *err;
- struct got_blob_object *blob1 = NULL, *blob2 = NULL;
-
- err = got_object_blob_open(&blob1, repo, obj1, 8192);
- if (err)
- goto done;
- err = got_object_blob_open(&blob2, repo, obj2, 8192);
- if (err)
- goto done;
-
- err = got_diff_blob(blob1, blob2, NULL, NULL, outfile);
-done:
- if (blob1)
- got_object_blob_close(blob1);
- if (blob2)
- got_object_blob_close(blob2);
- return err;
-}
-
-static const struct got_error *
-diff_trees(FILE *outfile, struct got_object *obj1, struct got_object *obj2,
- struct got_repository *repo)
-{
- const struct got_error *err;
- struct got_tree_object *tree1 = NULL, *tree2 = NULL;
-
- err = got_object_tree_open(&tree1, repo, obj1);
- if (err)
- goto done;
- err = got_object_tree_open(&tree2, repo, obj2);
- if (err)
- goto done;
-
- err = got_diff_tree(tree1, tree2, repo, outfile);
-done:
- if (tree1)
- got_object_tree_close(tree1);
- if (tree2)
- got_object_tree_close(tree2);
- return err;
}
-static const struct got_error *
-diff_commits(FILE *outfile, struct got_object *obj1, struct got_object *obj2,
- struct got_repository *repo)
-{
- const struct got_error *err;
- struct got_commit_object *commit1 = NULL, *commit2 = NULL;
- struct got_object *tree_obj1 = NULL, *tree_obj2 = NULL;
-
- err = got_object_commit_open(&commit1, repo, obj1);
- if (err)
- goto done;
- err = got_object_commit_open(&commit2, repo, obj2);
- if (err)
- goto done;
-
- err = got_object_open(&tree_obj1, repo, commit1->tree_id);
- if (err)
- goto done;
- err = got_object_open(&tree_obj2, repo, commit2->tree_id);
- if (err)
- goto done;
-
- err = diff_trees(outfile, tree_obj1, tree_obj2, repo);
-done:
- if (tree_obj1)
- got_object_close(tree_obj1);
- if (tree_obj2)
- got_object_close(tree_obj2);
- if (commit1)
- got_object_commit_close(commit1);
- if (commit2)
- got_object_commit_close(commit2);
- return err;
-
-}
-
const struct got_error *
draw_diff(FILE *f, int *first_displayed_line, int *last_displayed_line,
int *eof, int max_lines)
switch (got_object_get_type(obj1)) {
case GOT_OBJ_TYPE_BLOB:
- err = diff_blobs(f, obj1, obj2, repo);
+ err = got_diff_objects_as_blobs(obj1, obj2, repo, f);
break;
case GOT_OBJ_TYPE_TREE:
- err = diff_trees(f, obj1, obj2, repo);
+ err = got_diff_objects_as_trees(obj1, obj2, repo, f);
break;
case GOT_OBJ_TYPE_COMMIT:
- err = diff_commits(f, obj1, obj2, repo);
+ err = got_diff_objects_as_commits(obj1, obj2, repo, f);
break;
default:
return got_error(GOT_ERR_OBJ_TYPE);