List for cgit developers and users
 help / color / mirror / Atom feed
* Welcome on board Lukas Fleischer
@ 2014-01-08 14:34 Jason
  2014-01-08 14:53 ` [RESEND PATCH 1/1] enable cgit to show gravatar for author, committer and tagger mail
  2014-01-09 19:38 ` Welcome on board Lukas Fleischer info
  0 siblings, 2 replies; 42+ messages in thread
From: Jason @ 2014-01-08 14:34 UTC (permalink / raw)


Hey folks,

To speed things up with the merges and reviews of patches on this
list, I've given Lukas Fleischer commit access. He's going to be
helping me maintain the project. We'll each be merging and committing
patches to jd/staging and lf/staging, and from there onto master. I'll
be updating the documentation to reflect this process. Lukas is also
preparing a patch that merges copyright headers and adds an AUTHORS
file with significant contributors.

If your patch has gotten lost in the queue in the last few months, now
would be a good time to resubmit. I expect to release a new version
before the end of the month.

Jason


^ permalink raw reply	[flat|nested] 42+ messages in thread
* [PATCH 1/1] enable cgit to show gravatar for author, committer and tagger
@ 2013-11-27 15:17 mail
  2013-11-27 16:17 ` list
                   ` (2 more replies)
  0 siblings, 3 replies; 42+ messages in thread
From: mail @ 2013-11-27 15:17 UTC (permalink / raw)


---
 cgit.c       |  3 +++
 cgit.h       |  5 +++++
 cgitrc.5.txt |  4 ++++
 parsing.c    | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 shared.c     |  6 ++++++
 ui-commit.c  | 10 ++++++++++
 ui-log.c     |  5 +++++
 ui-refs.c    | 10 ++++++++++
 ui-tag.c     |  5 +++++
 9 files changed, 95 insertions(+)

diff --git a/cgit.c b/cgit.c
index 861352a..fe82580 100644
--- a/cgit.c
+++ b/cgit.c
@@ -183,6 +183,8 @@ static void config_cb(const char *name, const char *value)
 		ctx.cfg.enable_index_owner = atoi(value);
 	else if (!strcmp(name, "enable-commit-graph"))
 		ctx.cfg.enable_commit_graph = atoi(value);
+	else if (!strcmp(name, "enable-gravatar"))
+		ctx.cfg.enable_gravatar = atoi(value);
 	else if (!strcmp(name, "enable-log-filecount"))
 		ctx.cfg.enable_log_filecount = atoi(value);
 	else if (!strcmp(name, "enable-log-linecount"))
@@ -368,6 +370,7 @@ static void prepare_context(struct cgit_context *ctx)
 	ctx->cfg.logo = "/cgit.png";
 	ctx->cfg.favicon = "/favicon.ico";
 	ctx->cfg.local_time = 0;
+	ctx->cfg.enable_gravatar = 0;
 	ctx->cfg.enable_http_clone = 1;
 	ctx->cfg.enable_index_owner = 1;
 	ctx->cfg.enable_tree_linenumbers = 1;
diff --git a/cgit.h b/cgit.h
index a474d77..ab22e67 100644
--- a/cgit.h
+++ b/cgit.h
@@ -107,9 +107,11 @@ struct commitinfo {
 	struct commit *commit;
 	char *author;
 	char *author_email;
+	char *author_gravatar;
 	unsigned long author_date;
 	char *committer;
 	char *committer_email;
+	char *committer_gravatar;
 	unsigned long committer_date;
 	char *subject;
 	char *msg;
@@ -119,6 +121,7 @@ struct commitinfo {
 struct taginfo {
 	char *tagger;
 	char *tagger_email;
+	char *tagger_gravatar;
 	unsigned long tagger_date;
 	char *msg;
 };
@@ -208,6 +211,7 @@ struct cgit_config {
 	int enable_index_links;
 	int enable_index_owner;
 	int enable_commit_graph;
+	int enable_gravatar;
 	int enable_log_filecount;
 	int enable_log_linecount;
 	int enable_remote_branches;
@@ -337,6 +341,7 @@ extern char *fmtalloc(const char *format,...);
 
 extern struct commitinfo *cgit_parse_commit(struct commit *commit);
 extern struct taginfo *cgit_parse_tag(struct tag *tag);
+char *cgit_get_gravatar(const char *email);
 extern void cgit_parse_url(const char *url);
 
 extern const char *cgit_repobasename(const char *reponame);
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 633cb00..b6017c2 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -180,6 +180,10 @@ enable-git-config::
 	to the corresponding "repo." key in cgit. Default value: "0". See also:
 	scan-path, section-from-path.
 
+enable-gravatar::
+	Flag which, when set to "1", will enable cgit to show gravatar icon
+	for author, committer and tagger email address. Default value: "0".
+
 favicon::
 	Url used as link to a shortcut icon for cgit. It is suggested to use
 	the value "/favicon.ico" since certain browsers will ignore other
diff --git a/parsing.c b/parsing.c
index 658621d..a8005f6 100644
--- a/parsing.c
+++ b/parsing.c
@@ -8,6 +8,9 @@
 
 #include "cgit.h"
 
+/* we need md5 hashing algorithm to calculate Gravatar URL */
+#include <openssl/md5.h>
+
 /*
  * url syntax: [repo ['/' cmd [ '/' path]]]
  *   repo: any valid repo url, may contain '/'
@@ -133,8 +136,10 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
 	ret->commit = commit;
 	ret->author = NULL;
 	ret->author_email = NULL;
+	ret->author_gravatar = NULL;
 	ret->committer = NULL;
 	ret->committer_email = NULL;
+	ret->committer_gravatar = NULL;
 	ret->subject = NULL;
 	ret->msg = NULL;
 	ret->msg_encoding = NULL;
@@ -155,11 +160,17 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
 			&ret->author_date);
 	}
 
+	if (ctx.cfg.enable_gravatar && ret->author_email != NULL) 
+		ret->author_gravatar = cgit_get_gravatar(ret->author_email);
+
 	if (p && !strncmp(p, "committer ", 9)) {
 		p = parse_user(p + 9, &ret->committer, &ret->committer_email,
 			&ret->committer_date);
 	}
 
+	if (ctx.cfg.enable_gravatar && ret->committer_email != NULL) 
+		ret->committer_gravatar = cgit_get_gravatar(ret->committer_email);
+
 	if (p && !strncmp(p, "encoding ", 9)) {
 		p += 9;
 		t = strchr(p, '\n');
@@ -230,6 +241,7 @@ struct taginfo *cgit_parse_tag(struct tag *tag)
 	ret = xmalloc(sizeof(*ret));
 	ret->tagger = NULL;
 	ret->tagger_email = NULL;
+	ret->tagger_gravatar = NULL;
 	ret->tagger_date = 0;
 	ret->msg = NULL;
 
@@ -249,6 +261,9 @@ struct taginfo *cgit_parse_tag(struct tag *tag)
 		}
 	}
 
+	if (ctx.cfg.enable_gravatar && ret->tagger_email != NULL)
+		ret->tagger_gravatar = cgit_get_gravatar(ret->tagger_email);
+
 	// skip empty lines between headers and message
 	while (p && *p == '\n')
 		p++;
@@ -258,3 +273,35 @@ struct taginfo *cgit_parse_tag(struct tag *tag)
 	free(data);
 	return ret;
 }
+
+char * cgit_get_gravatar(const char * email) {
+    	int n, length;
+	MD5_CTX c;
+	unsigned char digest[16];
+	char hex[33];
+	char * gravatar = malloc(67);
+
+	/* skip brackets! */
+	email++;
+	length = strlen(email) - 1;
+
+	MD5_Init(&c);
+
+	while (length > 0) {
+		if (length > 512)
+			MD5_Update(&c, email, 512);
+		else
+			MD5_Update(&c, email, length);
+		length -= 512;
+		email += 512;
+	}
+
+	MD5_Final(digest, &c);
+
+	for (n = 0; n < 16; ++n)
+		snprintf(&(hex[n*2]), 16*2, "%02x", (unsigned int)digest[n]);
+
+	sprintf(gravatar, "http://www.gravatar.com/avatar/%s?s=", hex);
+
+	return gravatar;
+}
diff --git a/shared.c b/shared.c
index 919a99e..8ae8c3b 100644
--- a/shared.c
+++ b/shared.c
@@ -93,8 +93,12 @@ void *cgit_free_commitinfo(struct commitinfo *info)
 {
 	free(info->author);
 	free(info->author_email);
+	if (info->author_gravatar)
+		free(info->author_gravatar);
 	free(info->committer);
 	free(info->committer_email);
+	if (info->committer_gravatar)
+		free(info->committer_gravatar);
 	free(info->subject);
 	free(info->msg);
 	free(info->msg_encoding);
@@ -204,6 +208,8 @@ static void cgit_free_taginfo(struct taginfo *tag)
 		free(tag->tagger);
 	if (tag->tagger_email)
 		free(tag->tagger_email);
+	if (tag->tagger_gravatar)
+		free(tag->tagger_gravatar);
 	if (tag->msg)
 		free(tag->msg);
 	free(tag);
diff --git a/ui-commit.c b/ui-commit.c
index ef85a49..eed3ab6 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -44,6 +44,11 @@ void cgit_print_commit(char *hex, const char *prefix)
 	cgit_print_diff_ctrls();
 	html("<table summary='commit info' class='commit-info'>\n");
 	html("<tr><th>author</th><td>");
+	if (ctx.cfg.enable_gravatar && info->author_gravatar) {
+		html("<img src='");
+		html(info->author_gravatar);
+		html("' width=16 height=16 alt='Gravatar' \\>");
+	}
 	html_txt(info->author);
 	if (!ctx.cfg.noplainemail) {
 		html(" ");
@@ -53,6 +58,11 @@ void cgit_print_commit(char *hex, const char *prefix)
 	cgit_print_date(info->author_date, FMT_LONGDATE, ctx.cfg.local_time);
 	html("</td></tr>\n");
 	html("<tr><th>committer</th><td>");
+	if (ctx.cfg.enable_gravatar && info->committer_gravatar) {
+		html("<img src='");
+		html(info->committer_gravatar);
+		html("' width=16 height=16 alt='Gravatar' \\>");
+	}
 	html_txt(info->committer);
 	if (!ctx.cfg.noplainemail) {
 		html(" ");
diff --git a/ui-log.c b/ui-log.c
index 6f1249b..9974139 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -168,6 +168,11 @@ static void print_commit(struct commit *commit, struct rev_info *revs)
 			 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
 	show_commit_decorations(commit);
 	html("</td><td>");
+	if (ctx.cfg.enable_gravatar && info->author_gravatar) {
+		html("<img src='");
+		html(info->author_gravatar);
+		html("' width=16 height=16 alt='Gravatar' \\>");
+	}
 	html_txt(info->author);
 
 	if (revs->graph) {
diff --git a/ui-refs.c b/ui-refs.c
index 0ae0612..8714b2d 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -77,6 +77,11 @@ static int print_branch(struct refinfo *ref)
 	if (ref->object->type == OBJ_COMMIT) {
 		cgit_commit_link(info->subject, NULL, NULL, name, NULL, NULL, 0);
 		html("</td><td>");
+		if (ctx.cfg.enable_gravatar && info->author_gravatar) {
+			html("<img src='");
+			html(info->author_gravatar);
+			html("' width=16 height=16 alt='Gravatar' \\>");
+		}
 		html_txt(info->author);
 		html("</td><td colspan='2'>");
 		cgit_print_age(info->commit->date, -1, NULL);
@@ -154,6 +159,11 @@ static int print_tag(struct refinfo *ref)
 		cgit_object_link(obj);
 	html("</td><td>");
 	if (info) {
+		if (ctx.cfg.enable_gravatar && info->tagger_gravatar) {
+			html("<img src='");
+			html(info->tagger_gravatar);
+			html("' width=16 height=16 alt='Gravatar' \\>");
+		}
 		if (info->tagger)
 			html(info->tagger);
 	} else if (ref->object->type == OBJ_COMMIT) {
diff --git a/ui-tag.c b/ui-tag.c
index aea7958..ad402da 100644
--- a/ui-tag.c
+++ b/ui-tag.c
@@ -77,6 +77,11 @@ void cgit_print_tag(char *revname)
 		}
 		if (info->tagger) {
 			html("<tr><td>tagged by</td><td>");
+			if (ctx.cfg.enable_gravatar && info->tagger_gravatar) {
+				html("<img src='");
+				html(info->tagger_gravatar);
+				html("' width=16 height=16 alt='Gravatar' \\>");
+			}
 			html_txt(info->tagger);
 			if (info->tagger_email && !ctx.cfg.noplainemail) {
 				html(" ");
-- 
1.8.4.2



^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2014-01-14 18:00 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-08 14:34 Welcome on board Lukas Fleischer Jason
2014-01-08 14:53 ` [RESEND PATCH 1/1] enable cgit to show gravatar for author, committer and tagger mail
2014-01-08 15:12   ` Jason
2014-01-08 15:23     ` [PATCH " mail
2014-01-08 15:56       ` Jason
2014-01-09  8:52         ` mail
2014-01-09 15:13           ` Jason
2014-01-08 16:00       ` Jason
2014-01-09  9:13         ` mail
2014-01-08 15:36     ` [RESEND PATCH " mathstuf
2014-01-08 17:15     ` normalperson
2014-01-08 17:29       ` Jason
2014-01-08 18:35         ` stefan
2014-01-09  9:18         ` list
2014-01-09 15:19           ` Jason
2014-01-13 14:18             ` list
2014-01-13 14:24               ` Jason
2014-01-14 17:22                 ` list
2014-01-14 17:23                   ` Jason
2014-01-14 17:35                     ` list
2014-01-14 17:45                       ` 
2014-01-14 17:51                       ` Jason
2014-01-14 17:58                         ` list
2014-01-14 18:00                           ` Jason
2014-01-09 15:21         ` RFE: author/committer/tagger links (enable cgit to show gravatar for author, committer and tagger) mricon
2014-01-09 17:50           ` Jason
2014-01-09 18:07             ` john
2014-01-09 18:59               ` Jason
2014-01-09 19:23                 ` john
2014-01-09 19:34                   ` cgit
2014-01-09 19:38 ` Welcome on board Lukas Fleischer info
  -- strict thread matches above, loose matches on Subject: below --
2013-11-27 15:17 [PATCH 1/1] enable cgit to show gravatar for author, committer and tagger mail
2013-11-27 16:17 ` list
2013-11-27 16:37 ` john
2013-11-27 20:51   ` list
2013-11-27 21:00     ` john
2013-11-27 16:46 ` lekensteyn
2013-11-27 20:59   ` list
2013-11-27 21:14     ` mail
2013-11-27 22:11       ` lekensteyn
2013-11-27 22:59         ` list
2013-11-27 23:00           ` mail

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).