Seeing the diff stat for a single file is pretty useless, so reset the
diff type before generating the links to individual files in the diff
stat so that the links will show a useful diff.

Reported-by: Konstantin Ryabitsev <>
Signed-off-by: John Keeping <>
On Mon, Dec 29, 2014 at 03:09:55PM -0500, Konstantin Ryabitsev wrote:
> On 23/12/14 09:30 PM, Jason A. Donenfeld wrote:
> > Ahh yes, of course -- John has done it, and it's been merged
> > here: ddfaef6bb28e697491b25bff5a7b260d44ce6ccf
> I actually had a chance to try it out now. It looks pretty nice, but has
> an unintended downside in the sense that "dt=2" is sticky. E.g. for a
> link like:
> This will show the diffstat only, but then if I click on any of the
> files for more details, the "diffstat only" mode persists. The user
> would then need to know to change to "unified" in the dropdown on the
> right to see actual diff contents.
> It's not a bug per se, just wondering if we can improve the user experience.

Something like this, perhaps?

 ui-diff.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/ui-diff.c b/ui-diff.c
index bf2ec57..5b6df1f 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -428,6 +428,16 @@ void cgit_print_diff(const char *new_rev, const char 
        if (show_ctrls)
+       /*
+        * Clicking on a link to a file in the diff stat should show a diff
+        * of the file, showing the diff stat limited to a single file is
+        * pretty useless.  All links from this point on will be to
+        * individual files, so we simply reset the difftype in the query
+        * here to avoid propagating DIFF_STATONLY to the individual files.
+        */
+       if (difftype == DIFF_STATONLY)
+               ctx.qry.difftype = ctx.cfg.difftype;
        cgit_print_diffstat(old_rev_sha1, new_rev_sha1, prefix);
        if (difftype == DIFF_STATONLY)

CGit mailing list

Reply via email to