about summary refs log tree commit diff
path: root/ui-shared.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui-shared.c')
-rw-r--r--ui-shared.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 4f84b7c..6be0c2e 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -303,7 +303,8 @@ void cgit_plain_link(const char *name, const char *title, const char *class,
 
 void cgit_log_link(const char *name, const char *title, const char *class,
 		   const char *head, const char *rev, const char *path,
-		   int ofs, const char *grep, const char *pattern, int showmsg)
+		   int ofs, const char *grep, const char *pattern, int showmsg,
+		   int follow)
 {
 	char *delim;
 
@@ -332,6 +333,11 @@ void cgit_log_link(const char *name, const char *title, const char *class,
 	if (showmsg) {
 		html(delim);
 		html("showmsg=1");
+		delim = "&";
+	}
+	if (follow) {
+		html(delim);
+		html("follow=1");
 	}
 	html("'>");
 	html_txt(name);
@@ -373,6 +379,10 @@ void cgit_commit_link(char *name, const char *title, const char *class,
 		html("ignorews=1");
 		delim = "&";
 	}
+	if (ctx.qry.follow) {
+		html(delim);
+		html("follow=1");
+	}
 	html("'>");
 	if (name[0] != '\0')
 		html_txt(name);
@@ -429,6 +439,10 @@ void cgit_diff_link(const char *name, const char *title, const char *class,
 		html("ignorews=1");
 		delim = "&";
 	}
+	if (ctx.qry.follow) {
+		html(delim);
+		html("follow=1");
+	}
 	html("'>");
 	html_txt(name);
 	html("</a>");
@@ -469,7 +483,7 @@ static void cgit_self_link(char *name, const char *title, const char *class)
 			      ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
 			      ctx.qry.path, ctx.qry.ofs,
 			      ctx.qry.grep, ctx.qry.search,
-			      ctx.qry.showmsg);
+			      ctx.qry.showmsg, ctx.qry.follow);
 	else if (!strcmp(ctx.qry.page, "commit"))
 		cgit_commit_link(name, title, class, ctx.qry.head,
 				 ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
@@ -945,7 +959,7 @@ void cgit_print_pageheader(void)
 			       ctx.qry.sha1, NULL);
 		cgit_log_link("log", NULL, hc("log"), ctx.qry.head,
 			      NULL, ctx.qry.vpath, 0, NULL, NULL,
-			      ctx.qry.showmsg);
+			      ctx.qry.showmsg, ctx.qry.follow);
 		cgit_tree_link("tree", NULL, hc("tree"), ctx.qry.head,
 			       ctx.qry.sha1, ctx.qry.vpath);
 		cgit_commit_link("commit", NULL, hc("commit"),
@@ -993,6 +1007,14 @@ void cgit_print_pageheader(void)
 		html("<div class='path'>");
 		html("path: ");
 		cgit_print_path_crumbs(ctx.qry.vpath);
+		if (ctx.cfg.enable_follow_links && !strcmp(ctx.qry.page, "log")) {
+			html(" (");
+			ctx.qry.follow = !ctx.qry.follow;
+			cgit_self_link(ctx.qry.follow ? "follow" : "unfollow",
+					NULL, NULL);
+			ctx.qry.follow = !ctx.qry.follow;
+			html(")");
+		}
 		html("</div>");
 	}
 	html("<div class='content'>");