ctucx.git: stagit

ctucx' stagit fork

commit d045340ea048e3aa45af719caadad413efdfda4d
parent 9128782aa848465c47928d4ce8f40bd3320a5661
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Wed, 6 Jan 2016 15:35:34 +0100

lookup commits of annotated tags

NOTE: as described in the TODO this will be rewritten more cleanly
      later using git_reference_*.
1 file changed, 16 insertions(+), 0 deletions(-)
M
stagit.c
|
16
++++++++++++++++
diff --git a/stagit.c b/stagit.c
@@ -875,6 +875,7 @@ writetags(FILE *fp)
 	struct commitinfo *ci;
 	git_strarray tagnames;
 	git_object *obj = NULL;
+	git_tag *tag = NULL;
 	const git_oid *id = NULL;
 	size_t i, len;
 

@@ -900,6 +901,18 @@ writetags(FILE *fp)
 		if (git_revparse_single(&obj, repo, tagnames.strings[i]))
 			continue;
 		id = git_object_id(obj);
+
+		/* lookup actual commit (from annotated tag etc) */
+		if (!git_tag_lookup(&tag, repo, id)) {
+			git_object_free(obj);
+			obj = NULL;
+			if (git_tag_peel(&obj, tag))
+				break;
+			git_tag_free(tag);
+			tag = NULL;
+			id = git_object_id(obj);
+		}
+
 		if (!(ci = commitinfo_getbyoid(id)))
 			break;
 

@@ -936,9 +949,12 @@ writetags(FILE *fp)
 
 		commitinfo_free(ci);
 		git_object_free(obj);
+		obj = NULL;
 	}
 	fputs("</tbody></table>", fp);
 	git_strarray_free(&tagnames);
+	git_tag_free(tag);
+	git_object_free(obj);
 
 	return 0;
 }