]> granicus.if.org Git - cgit/commitdiff
Extract filepair_cb from ui-patch.c
authorLukas Fleischer <cgit@cryptocrack.de>
Wed, 14 Aug 2013 08:50:31 +0000 (10:50 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 16 Aug 2013 19:15:37 +0000 (13:15 -0600)
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>
ui-patch.c
ui-shared.c
ui-shared.h

index fbb92cc4eca31de7cf9d998c3cec46a0e1937ccb..3922a4411772dcf3934e1b67d9b8aff0de839383 100644 (file)
 #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);
index 7ab2ab187d5f3cc9ce6e835c72ab2f47af2ef13e..1e19421617fe85b26b9a9554ff19b6bc6d428e17 100644 (file)
@@ -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");
+}
index 5987e77cafb2cfce3f589a7c89ab3c425152a0f4..a337dce2c76caf0bd2e2891c47c40f681cdffa6b 100644 (file)
@@ -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 */