Extract filepair_cb from ui-patch.c
Move filepair_cb() from ui-patch.c to ui-shared.c and rename it to filepair_cb_raw(). This callback will be used in ui-diff.c in a follow-up patch. Note that it is not straightforward to extract filepair_cb() from ui-diff.c which is why it is not done here as well. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
This commit is contained in:
parent
cf152604c3
commit
747b035dda
74
ui-patch.c
74
ui-patch.c
@ -11,78 +11,6 @@
|
||||
#include "html.h"
|
||||
#include "ui-shared.h"
|
||||
|
||||
static void print_line(char *line, int len)
|
||||
{
|
||||
char c = line[len-1];
|
||||
|
||||
line[len-1] = '\0';
|
||||
htmlf("%s\n", line);
|
||||
line[len-1] = c;
|
||||
}
|
||||
|
||||
static void header(unsigned char *sha1, char *path1, int mode1,
|
||||
unsigned char *sha2, char *path2, int mode2)
|
||||
{
|
||||
char *abbrev1, *abbrev2;
|
||||
int subproject;
|
||||
|
||||
subproject = (S_ISGITLINK(mode1) || S_ISGITLINK(mode2));
|
||||
htmlf("diff --git a/%s b/%s\n", path1, path2);
|
||||
|
||||
if (mode1 == 0)
|
||||
htmlf("new file mode %.6o\n", mode2);
|
||||
|
||||
if (mode2 == 0)
|
||||
htmlf("deleted file mode %.6o\n", mode1);
|
||||
|
||||
if (!subproject) {
|
||||
abbrev1 = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV));
|
||||
abbrev2 = xstrdup(find_unique_abbrev(sha2, DEFAULT_ABBREV));
|
||||
htmlf("index %s..%s", abbrev1, abbrev2);
|
||||
free(abbrev1);
|
||||
free(abbrev2);
|
||||
if (mode1 != 0 && mode2 != 0) {
|
||||
htmlf(" %.6o", mode1);
|
||||
if (mode2 != mode1)
|
||||
htmlf("..%.6o", mode2);
|
||||
}
|
||||
|
||||
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)) {
|
||||
if (S_ISGITLINK(pair->one->mode))
|
||||
print_line(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52);
|
||||
if (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, &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, const char *prefix)
|
||||
{
|
||||
struct commit *commit;
|
||||
@ -130,7 +58,7 @@ void cgit_print_patch(char *hex, const char *prefix)
|
||||
html("---\n");
|
||||
if (prefix)
|
||||
htmlf("(limited to '%s')\n\n", prefix);
|
||||
cgit_diff_tree(old_sha1, sha1, filepair_cb, prefix, 0);
|
||||
cgit_diff_tree(old_sha1, sha1, filepair_cb_raw, prefix, 0);
|
||||
html("--\n");
|
||||
htmlf("cgit %s\n", cgit_version);
|
||||
cgit_free_commitinfo(info);
|
||||
|
72
ui-shared.c
72
ui-shared.c
@ -950,3 +950,75 @@ void cgit_print_snapshot_links(const char *repo, const char *head,
|
||||
}
|
||||
strbuf_release(&filename);
|
||||
}
|
||||
|
||||
static void print_line_raw(char *line, int len)
|
||||
{
|
||||
char c = line[len-1];
|
||||
|
||||
line[len-1] = '\0';
|
||||
htmlf("%s\n", line);
|
||||
line[len-1] = c;
|
||||
}
|
||||
|
||||
static void header_raw(unsigned char *sha1, char *path1, int mode1,
|
||||
unsigned char *sha2, char *path2, int mode2)
|
||||
{
|
||||
char *abbrev1, *abbrev2;
|
||||
int subproject;
|
||||
|
||||
subproject = (S_ISGITLINK(mode1) || S_ISGITLINK(mode2));
|
||||
htmlf("diff --git a/%s b/%s\n", path1, path2);
|
||||
|
||||
if (mode1 == 0)
|
||||
htmlf("new file mode %.6o\n", mode2);
|
||||
|
||||
if (mode2 == 0)
|
||||
htmlf("deleted file mode %.6o\n", mode1);
|
||||
|
||||
if (!subproject) {
|
||||
abbrev1 = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV));
|
||||
abbrev2 = xstrdup(find_unique_abbrev(sha2, DEFAULT_ABBREV));
|
||||
htmlf("index %s..%s", abbrev1, abbrev2);
|
||||
free(abbrev1);
|
||||
free(abbrev2);
|
||||
if (mode1 != 0 && mode2 != 0) {
|
||||
htmlf(" %.6o", mode1);
|
||||
if (mode2 != mode1)
|
||||
htmlf("..%.6o", mode2);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
void filepair_cb_raw(struct diff_filepair *pair)
|
||||
{
|
||||
unsigned long old_size = 0;
|
||||
unsigned long new_size = 0;
|
||||
int binary = 0;
|
||||
|
||||
header_raw(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)) {
|
||||
if (S_ISGITLINK(pair->one->mode))
|
||||
print_line_raw(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52);
|
||||
if (S_ISGITLINK(pair->two->mode))
|
||||
print_line_raw(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52);
|
||||
return;
|
||||
}
|
||||
if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
|
||||
&new_size, &binary, 0, 0, print_line_raw))
|
||||
html("Error running diff");
|
||||
if (binary)
|
||||
html("Binary files differ\n");
|
||||
}
|
||||
|
@ -67,4 +67,5 @@ extern void cgit_print_snapshot_links(const char *repo, const char *head,
|
||||
const char *hex, int snapshots);
|
||||
extern void cgit_add_hidden_formfields(int incl_head, int incl_search,
|
||||
const char *page);
|
||||
extern void filepair_cb_raw(struct diff_filepair *pair);
|
||||
#endif /* UI_SHARED_H */
|
||||
|
Loading…
Reference in New Issue
Block a user