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 "html.h"
|
||||||
#include "ui-shared.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)
|
void cgit_print_patch(char *hex, const char *prefix)
|
||||||
{
|
{
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
@ -130,7 +58,7 @@ void cgit_print_patch(char *hex, const char *prefix)
|
|||||||
html("---\n");
|
html("---\n");
|
||||||
if (prefix)
|
if (prefix)
|
||||||
htmlf("(limited to '%s')\n\n", 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");
|
html("--\n");
|
||||||
htmlf("cgit %s\n", cgit_version);
|
htmlf("cgit %s\n", cgit_version);
|
||||||
cgit_free_commitinfo(info);
|
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);
|
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);
|
const char *hex, int snapshots);
|
||||||
extern void cgit_add_hidden_formfields(int incl_head, int incl_search,
|
extern void cgit_add_hidden_formfields(int incl_head, int incl_search,
|
||||||
const char *page);
|
const char *page);
|
||||||
|
extern void filepair_cb_raw(struct diff_filepair *pair);
|
||||||
#endif /* UI_SHARED_H */
|
#endif /* UI_SHARED_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user