#include "cgit.h"
#include "html.h"
+#include "ui-shared.h"
static void print_line(char *line, int len)
{
subproject = (S_ISGITLINK(mode1) || S_ISGITLINK(mode2));
htmlf("diff --git a/%s b/%s\n", path1, path2);
- if (is_null_sha1(sha1))
- path1 = "dev/null";
- if (is_null_sha1(sha2))
- path2 = "dev/null";
-
if (mode1 == 0)
htmlf("new file mode %.6o\n", mode2);
if (mode2 != mode1)
htmlf("..%.6o", mode2);
}
- htmlf("\n--- a/%s\n", path1);
- htmlf("+++ b/%s\n", path2);
+
+ if (is_null_sha1(sha1)) {
+ path1 = "dev/null";
+ htmlf("\n--- /%s\n", path1);
+ } else
+ htmlf("\n--- a/%s\n", path1);
+
+ if (is_null_sha1(sha2)) {
+ path2 = "dev/null";
+ htmlf("+++ /%s\n", path2);
+ } else
+ htmlf("+++ b/%s\n", path2);
}
}
static void filepair_cb(struct diff_filepair *pair)
{
+ unsigned long old_size = 0;
+ unsigned long new_size = 0;
+ int binary = 0;
+
header(pair->one->sha1, pair->one->path, pair->one->mode,
pair->two->sha1, pair->two->path, pair->two->mode);
if (S_ISGITLINK(pair->one->mode) || S_ISGITLINK(pair->two->mode)) {
print_line(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52);
return;
}
- if (cgit_diff_files(pair->one->sha1, pair->two->sha1, print_line))
+ if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
+ &new_size, &binary, 0, 0, print_line))
html("Error running diff");
+ if (binary)
+ html("Binary files differ\n");
}
-void cgit_print_patch(char *hex)
+void cgit_print_patch(char *hex, const char *prefix)
{
struct commit *commit;
struct commitinfo *info;
return;
}
info = cgit_parse_commit(commit);
- hashcpy(old_sha1, commit->parents->item->object.sha1);
+
+ if (commit->parents && commit->parents->item)
+ hashcpy(old_sha1, commit->parents->item->object.sha1);
+ else
+ hashclr(old_sha1);
patchname = fmt("%s.patch", sha1_to_hex(sha1));
ctx.page.mimetype = "text/plain";
ctx.page.filename = patchname;
cgit_print_http_headers(&ctx);
htmlf("From %s Mon Sep 17 00:00:00 2001\n", sha1_to_hex(sha1));
- htmlf("From: %s%s\n", info->author, info->author_email);
+ htmlf("From: %s", info->author);
+ if (!ctx.cfg.noplainemail) {
+ htmlf(" %s", info->author_email);
+ }
+ html("\n");
html("Date: ");
- cgit_print_date(info->author_date, "%a, %d %b %Y %H:%M:%S %z%n");
+ cgit_print_date(info->author_date, "%a, %d %b %Y %H:%M:%S %z%n", ctx.cfg.local_time);
htmlf("Subject: %s\n\n", info->subject);
if (info->msg && *info->msg) {
htmlf("%s", info->msg);
html("\n");
}
html("---\n");
- cgit_diff_tree(old_sha1, sha1, filepair_cb, NULL);
+ if (prefix)
+ htmlf("(limited to '%s')\n\n", prefix);
+ cgit_diff_tree(old_sha1, sha1, filepair_cb, prefix, 0);
html("--\n");
htmlf("cgit %s\n", CGIT_VERSION);
cgit_free_commitinfo(info);