stagit

custom fork of stagit
Index Commits Files Refs README LICENSE
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_*.

Diffstat:
Mstagit.c | 16++++++++++++++++
1 file changed, 16 insertions(+), 0 deletions(-)
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;
 }