Revision: 6966
          http://gar.svn.sourceforge.net/gar/?rev=6966&view=rev
Author:   trygvis
Date:     2009-10-25 19:55:04 +0000 (Sun, 25 Oct 2009)

Log Message:
-----------
o Using my own fork of cgit.

Modified Paths:
--------------
    csw/mgar/pkg/cgit/trunk/Makefile

Removed Paths:
-------------
    
csw/mgar/pkg/cgit/trunk/files/8071e18dcbf56b98ecea4332e85884cdd91236cc-d8eb68d5d487014a16b680e7d52122d3415303da.diff

Modified: csw/mgar/pkg/cgit/trunk/Makefile
===================================================================
--- csw/mgar/pkg/cgit/trunk/Makefile    2009-10-25 19:40:41 UTC (rev 6965)
+++ csw/mgar/pkg/cgit/trunk/Makefile    2009-10-25 19:55:04 UTC (rev 6966)
@@ -24,8 +24,7 @@
 # We define upstream file regex so we can be notifed of new upstream software 
release
 UFILES_REGEX = $(GARNAME)-(\d+(?:\.\d+)*).tar.gz
 
-#GIT_REPOS  = git://github.com/trygvis/cgit.git
-GIT_REPOS  = http://localhost/cgit/cgit
+GIT_REPOS  = git://github.com/trygvis/cgit.git
 #GIT_TREEISH_cgit = v$(GARVERSION)$(if $(PATCHLEVEL),-$(PATCHLEVEL))
 GIT_TREEISH_cgit = solaris
 
@@ -39,7 +38,6 @@
 # UPSTREAM_MASTER_SITES = 
 
 PATCHFILES  = 0001-cgit.conf
-PATCHFILES += 
8071e18dcbf56b98ecea4332e85884cdd91236cc-d8eb68d5d487014a16b680e7d52122d3415303da.diff
 
 CONFIGURE_SCRIPTS = 
 

Deleted: 
csw/mgar/pkg/cgit/trunk/files/8071e18dcbf56b98ecea4332e85884cdd91236cc-d8eb68d5d487014a16b680e7d52122d3415303da.diff
===================================================================
--- 
csw/mgar/pkg/cgit/trunk/files/8071e18dcbf56b98ecea4332e85884cdd91236cc-d8eb68d5d487014a16b680e7d52122d3415303da.diff
        2009-10-25 19:40:41 UTC (rev 6965)
+++ 
csw/mgar/pkg/cgit/trunk/files/8071e18dcbf56b98ecea4332e85884cdd91236cc-d8eb68d5d487014a16b680e7d52122d3415303da.diff
        2009-10-25 19:55:04 UTC (rev 6966)
@@ -1,887 +0,0 @@
-diff --git a/Makefile b/Makefile
-index 60d8c58..cb7875e 100644
---- a/Makefile
-+++ b/Makefile
-@@ -90,6 +90,7 @@ OBJECTS += ui-refs.o
- OBJECTS += ui-repolist.o
- OBJECTS += ui-shared.o
- OBJECTS += ui-snapshot.o
-+OBJECTS += ui-ssdiff.o
- OBJECTS += ui-stats.o
- OBJECTS += ui-summary.o
- OBJECTS += ui-tag.o
-diff --git a/cgit.c b/cgit.c
-index bd37788..84f44ba 100644
---- a/cgit.c
-+++ b/cgit.c
-@@ -182,6 +182,8 @@ void config_cb(const char *name, const char *value)
-               ctx.cfg.summary_branches = atoi(value);
-       else if (!strcmp(name, "summary-tags"))
-               ctx.cfg.summary_tags = atoi(value);
-+      else if (!strcmp(name, "side-by-side-diffs"))
-+              ctx.cfg.ssdiff = atoi(value);
-       else if (!strcmp(name, "agefile"))
-               ctx.cfg.agefile = xstrdup(value);
-       else if (!strcmp(name, "renamelimit"))
-@@ -209,6 +211,8 @@ static void querystring_cb(const char *name, const char 
*value)
-       } else if (!strcmp(name, "p")) {
-               ctx.qry.page = xstrdup(value);
-       } else if (!strcmp(name, "url")) {
-+              if (*value == '/')
-+                      value++;
-               ctx.qry.url = xstrdup(value);
-               cgit_parse_url(value);
-       } else if (!strcmp(name, "qt")) {
-@@ -238,6 +242,8 @@ static void querystring_cb(const char *name, const char 
*value)
-               ctx.qry.showmsg = atoi(value);
-       } else if (!strcmp(name, "period")) {
-               ctx.qry.period = xstrdup(value);
-+      } else if (!strcmp(name, "ss")) {
-+              ctx.qry.ssdiff = atoi(value);
-       }
- }
- 
-@@ -279,6 +285,7 @@ static void prepare_context(struct cgit_context *ctx)
-       ctx->cfg.summary_branches = 10;
-       ctx->cfg.summary_log = 10;
-       ctx->cfg.summary_tags = 10;
-+      ctx->cfg.ssdiff = 0;
-       ctx->env.cgit_config = xstrdupn(getenv("CGIT_CONFIG"));
-       ctx->env.http_host = xstrdupn(getenv("HTTP_HOST"));
-       ctx->env.https = xstrdupn(getenv("HTTPS"));
-diff --git a/cgit.css b/cgit.css
-index c47ebc9..3f37165 100644
---- a/cgit.css
-+++ b/cgit.css
-@@ -601,3 +601,92 @@ table.hgraph div.bar {
-       background-color: #eee;
-       height: 1em;
- }
-+
-+table.ssdiff {
-+      width: 100%;
-+}
-+
-+table.ssdiff td {
-+      font-size: 75%;
-+      font-family: monospace;
-+      white-space: pre;
-+      padding: 1px 4px 1px 4px;
-+      border-left: solid 1px #aaa;
-+      border-right: solid 1px #aaa;
-+}
-+
-+table.ssdiff td.add {
-+      color: black;
-+      background: #cfc;
-+      min-width: 50%;
-+}
-+
-+table.ssdiff td.add_dark {
-+      color: black;
-+      background: #aca;
-+      min-width: 50%;
-+}
-+
-+table.ssdiff td.del {
-+      color: black;
-+      background: #fcc;
-+      min-width: 50%;
-+}
-+
-+table.ssdiff td.del_dark {
-+      color: black;
-+      background: #caa;
-+      min-width: 50%;
-+}
-+
-+table.ssdiff td.changed {
-+      color: black;
-+      background: #ffc;
-+      min-width: 50%;
-+}
-+
-+table.ssdiff td.changed_dark {
-+      color: black;
-+      background: #cca;
-+      min-width: 50%;
-+}
-+
-+table.ssdiff td.lineno {
-+      color: black;
-+      background: #eee;
-+      text-align: right;
-+      width: 3em;
-+      min-width: 3em;
-+}
-+
-+table.ssdiff td.hunk {
-+      color: #black;
-+      background: #ccf;
-+      border-top: solid 1px #aaa;
-+      border-bottom: solid 1px #aaa;
-+}
-+
-+table.ssdiff td.head {
-+      border-top: solid 1px #aaa;
-+      border-bottom: solid 1px #aaa;
-+}
-+
-+table.ssdiff td.head div.head {
-+      font-weight: bold;
-+      color: black;
-+}
-+
-+table.ssdiff td.foot {
-+      border-top: solid 1px #aaa;
-+        border-left: none;
-+        border-right: none;
-+        border-bottom: none;
-+}
-+
-+table.ssdiff td.space {
-+      border: none;
-+}
-+
-+table.ssdiff td.space div {
-+      min-height: 3em;
-+}
-\ No newline at end of file
-diff --git a/cgit.h b/cgit.h
-index 6c6c460..b7b0adb 100644
---- a/cgit.h
-+++ b/cgit.h
-@@ -143,6 +143,7 @@ struct cgit_query {
-       int nohead;
-       char *sort;
-       int showmsg;
-+      int ssdiff;
- };
- 
- struct cgit_config {
-@@ -194,6 +195,7 @@ struct cgit_config {
-       int summary_branches;
-       int summary_log;
-       int summary_tags;
-+      int ssdiff;
-       struct string_list mimetypes;
-       struct cgit_filter *about_filter;
-       struct cgit_filter *commit_filter;
-diff --git a/cgitrc.5.txt b/cgitrc.5.txt
-index 0c13485..d0fd9a1 100644
---- a/cgitrc.5.txt
-+++ b/cgitrc.5.txt
-@@ -241,6 +241,10 @@ section::
-       after this option will inherit the current section name. Default value:
-       none.
- 
-+side-by-side-diffs::
-+      If set to "1" shows side-by-side diffs instead of unidiffs per
-+      default. Default value: "0".
-+
- snapshots::
-       Text which specifies the default set of snapshot formats generated by
-       cgit. The value is a space-separated list of zero or more of the
-diff --git a/ui-commit.c b/ui-commit.c
-index f5b0ae5..b5e3c01 100644
---- a/ui-commit.c
-+++ b/ui-commit.c
-@@ -58,9 +58,14 @@ void cgit_print_commit(char *hex)
-       html("</td></tr>\n");
-       html("<tr><th>commit</th><td colspan='2' class='sha1'>");
-       tmp = sha1_to_hex(commit->object.sha1);
--      cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp);
-+      cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp, 0);
-       html(" (");
-       cgit_patch_link("patch", NULL, NULL, NULL, tmp);
-+      html(") (");
-+      if ((ctx.qry.ssdiff && !ctx.cfg.ssdiff) || (!ctx.qry.ssdiff && 
ctx.cfg.ssdiff))
-+              cgit_commit_link("unidiff", NULL, NULL, ctx.qry.head, tmp, 1);
-+      else
-+              cgit_commit_link("side-by-side diff", NULL, NULL, ctx.qry.head, 
tmp, 1);
-       html(")</td></tr>\n");
-       html("<tr><th>tree</th><td colspan='2' class='sha1'>");
-       tmp = xstrdup(hex);
-@@ -78,10 +83,10 @@ void cgit_print_commit(char *hex)
-               html("<tr><th>parent</th>"
-                    "<td colspan='2' class='sha1'>");
-               cgit_commit_link(sha1_to_hex(p->item->object.sha1), NULL, NULL,
--                               ctx.qry.head, 
sha1_to_hex(p->item->object.sha1));
-+                               ctx.qry.head, 
sha1_to_hex(p->item->object.sha1), 0);
-               html(" (");
-               cgit_diff_link("diff", NULL, NULL, ctx.qry.head, hex,
--                             sha1_to_hex(p->item->object.sha1), NULL);
-+                             sha1_to_hex(p->item->object.sha1), NULL, 0);
-               html(")</td></tr>");
-               parents++;
-       }
-diff --git a/ui-diff.c b/ui-diff.c
-index 2196745..a92a768 100644
---- a/ui-diff.c
-+++ b/ui-diff.c
-@@ -9,6 +9,7 @@
- #include "cgit.h"
- #include "html.h"
- #include "ui-shared.h"
-+#include "ui-ssdiff.h"
- 
- unsigned char old_rev_sha1[20];
- unsigned char new_rev_sha1[20];
-@@ -32,6 +33,7 @@ static struct fileinfo {
-       int binary:1;
- } *items;
- 
-+static int use_ssdiff = 0;
- 
- static void print_fileinfo(struct fileinfo *info)
- {
-@@ -83,7 +85,7 @@ static void print_fileinfo(struct fileinfo *info)
-       }
-       htmlf("</td><td class='%s'>", class);
-       cgit_diff_link(info->new_path, NULL, NULL, ctx.qry.head, ctx.qry.sha1,
--                     ctx.qry.sha2, info->new_path);
-+                     ctx.qry.sha2, info->new_path, 0);
-       if (info->status == DIFF_STATUS_COPIED || info->status == 
DIFF_STATUS_RENAMED)
-               htmlf(" (%s from %s)",
-                     info->status == DIFF_STATUS_COPIED ? "copied" : "renamed",
-@@ -158,7 +160,7 @@ void cgit_print_diffstat(const unsigned char *old_sha1,
- 
-       html("<div class='diffstat-header'>");
-       cgit_diff_link("Diffstat", NULL, NULL, ctx.qry.head, ctx.qry.sha1,
--                     ctx.qry.sha2, NULL);
-+                     ctx.qry.sha2, NULL, 0);
-       html("</div>");
-       html("<table summary='diffstat' class='diffstat'>");
-       max_changes = 0;
-@@ -246,26 +248,54 @@ static void header(unsigned char *sha1, char *path1, int 
mode1,
-       html("</div>");
- }
- 
-+static void print_ssdiff_link()
-+{
-+      if (!strcmp(ctx.qry.page, "diff")) {
-+              if (use_ssdiff)
-+                      cgit_diff_link("Unidiff", NULL, NULL, ctx.qry.head,
-+                                     ctx.qry.sha1, ctx.qry.sha2, 
ctx.qry.path, 1);
-+              else
-+                      cgit_diff_link("Side-by-side diff", NULL, NULL,
-+                                     ctx.qry.head, ctx.qry.sha1,
-+                                     ctx.qry.sha2, ctx.qry.path, 1);
-+      }
-+}
-+
- static void filepair_cb(struct diff_filepair *pair)
- {
-       unsigned long old_size = 0;
-       unsigned long new_size = 0;
-       int binary = 0;
-+      linediff_fn print_line_fn = print_line;
- 
-+      if (use_ssdiff) {
-+              cgit_ssdiff_header_begin();
-+              print_line_fn = cgit_ssdiff_line_cb;
-+      }
-       header(pair->one->sha1, pair->one->path, pair->one->mode,
-              pair->two->sha1, pair->two->path, pair->two->mode);
-+      if (use_ssdiff)
-+              cgit_ssdiff_header_end();
-       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);
-+                      print_line_fn(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);
-+                      print_line_fn(fmt("+Subproject %s", 
sha1_to_hex(pair->two->sha1)), 52);
-+              if (use_ssdiff)
-+                      cgit_ssdiff_footer();
-               return;
-       }
--      if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, 
--                          &new_size, &binary, print_line))
-+      if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
-+                          &new_size, &binary, print_line_fn))
-               cgit_print_error("Error running diff");
--      if (binary)
--              html("Binary files differ");
-+      if (binary) {
-+              if (use_ssdiff)
-+                      html("<tr><td colspan='4'>Binary files 
differ</td></tr>");
-+              else
-+                      html("Binary files differ");
-+      }
-+      if (use_ssdiff)
-+              cgit_ssdiff_footer();
- }
- 
- void cgit_print_diff(const char *new_rev, const char *old_rev, const char 
*prefix)
-@@ -303,11 +333,21 @@ void cgit_print_diff(const char *new_rev, const char 
*old_rev, const char *prefi
-               if (!commit2 || parse_commit(commit2))
-                       cgit_print_error(fmt("Bad commit: %s", 
sha1_to_hex(old_rev_sha1)));
-       }
-+
-+      if ((ctx.qry.ssdiff && !ctx.cfg.ssdiff) || (!ctx.qry.ssdiff && 
ctx.cfg.ssdiff))
-+              use_ssdiff = 1;
-+
-+      print_ssdiff_link();
-       cgit_print_diffstat(old_rev_sha1, new_rev_sha1);
- 
--      html("<table summary='diff' class='diff'>");
--      html("<tr><td>");
-+      if (use_ssdiff) {
-+              html("<table summary='ssdiff' class='ssdiff'>");
-+      } else {
-+              html("<table summary='diff' class='diff'>");
-+              html("<tr><td>");
-+      }
-       cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb, prefix);
--      html("</td></tr>");
-+      if (!use_ssdiff)
-+              html("</td></tr>");
-       html("</table>");
- }
-diff --git a/ui-log.c b/ui-log.c
-index f3132c9..0947604 100644
---- a/ui-log.c
-+++ b/ui-log.c
-@@ -66,7 +66,7 @@ void show_commit_decorations(struct commit *commit)
-               else {
-                       strncpy(buf, deco->name, sizeof(buf) - 1);
-                       cgit_commit_link(buf, NULL, "deco", ctx.qry.head,
--                              sha1_to_hex(commit->object.sha1));
-+                              sha1_to_hex(commit->object.sha1), 0);
-               }
-               deco = deco->next;
-       }
-@@ -89,7 +89,7 @@ void print_commit(struct commit *commit)
-       htmlf("</td><td%s>",
-               ctx.qry.showmsg ? " class='logsubject'" : "");
-       cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
--                       sha1_to_hex(commit->object.sha1));
-+                       sha1_to_hex(commit->object.sha1), 0);
-       show_commit_decorations(commit);
-       html("</td><td>");
-       html_txt(info->author);
-diff --git a/ui-refs.c b/ui-refs.c
-index d3b4f6e..33d9bec 100644
---- a/ui-refs.c
-+++ b/ui-refs.c
-@@ -74,7 +74,7 @@ static int print_branch(struct refinfo *ref)
-       html("</td><td>");
- 
-       if (ref->object->type == OBJ_COMMIT) {
--              cgit_commit_link(info->subject, NULL, NULL, name, NULL);
-+              cgit_commit_link(info->subject, NULL, NULL, name, NULL, 0);
-               html("</td><td>");
-               html_txt(info->author);
-               html("</td><td colspan='2'>");
-diff --git a/ui-repolist.c b/ui-repolist.c
-index 3ef2e99..0a0b6ca 100644
---- a/ui-repolist.c
-+++ b/ui-repolist.c
-@@ -94,7 +94,7 @@ int is_in_url(struct cgit_repo *repo)
- 
- void print_sort_header(const char *title, const char *sort)
- {
--      htmlf("<th class='left'><a href='./?s=%s", sort);
-+      htmlf("<th class='left'><a href='%s?s=%s", cgit_rooturl(), sort);
-       if (ctx.qry.search) {
-               html("&q=");
-               html_url_arg(ctx.qry.search);
-diff --git a/ui-shared.c b/ui-shared.c
-index 07d5dd4..48c2395 100644
---- a/ui-shared.c
-+++ b/ui-shared.c
-@@ -317,7 +317,7 @@ void cgit_log_link(char *name, char *title, char *class, 
char *head,
- }
- 
- void cgit_commit_link(char *name, char *title, char *class, char *head,
--                    char *rev)
-+                    char *rev, int toggle_ssdiff)
- {
-       if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) {
-               name[ctx.cfg.max_msg_len] = '\0';
-@@ -325,7 +325,23 @@ void cgit_commit_link(char *name, char *title, char 
*class, char *head,
-               name[ctx.cfg.max_msg_len - 2] = '.';
-               name[ctx.cfg.max_msg_len - 3] = '.';
-       }
--      reporevlink("commit", name, title, class, head, rev, NULL);
-+
-+      char *delim;
-+
-+      delim = repolink(title, class, "commit", head, NULL);
-+      if (rev && strcmp(rev, ctx.qry.head)) {
-+              html(delim);
-+              html("id=");
-+              html_url_arg(rev);
-+              delim = "&amp;";
-+      }
-+      if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && 
toggle_ssdiff)) {
-+              html(delim);
-+              html("ss=1");
-+      }
-+      html("'>");
-+      html_txt(name);
-+      html("</a>");
- }
- 
- void cgit_refs_link(char *name, char *title, char *class, char *head,
-@@ -341,7 +357,8 @@ void cgit_snapshot_link(char *name, char *title, char 
*class, char *head,
- }
- 
- void cgit_diff_link(char *name, char *title, char *class, char *head,
--                  char *new_rev, char *old_rev, char *path)
-+                  char *new_rev, char *old_rev, char *path,
-+                  int toggle_ssdiff)
- {
-       char *delim;
- 
-@@ -356,6 +373,11 @@ void cgit_diff_link(char *name, char *title, char *class, 
char *head,
-               html(delim);
-               html("id2=");
-               html_url_arg(old_rev);
-+              delim = "&amp;";
-+      }
-+      if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && 
toggle_ssdiff)) {
-+              html(delim);
-+              html("ss=1");
-       }
-       html("'>");
-       html_txt(name);
-@@ -383,7 +405,7 @@ void cgit_object_link(struct object *obj)
-       shortrev[10] = '\0';
-       if (obj->type == OBJ_COMMIT) {
-                 cgit_commit_link(fmt("commit %s...", shortrev), NULL, NULL,
--                               ctx.qry.head, fullrev);
-+                               ctx.qry.head, fullrev, 0);
-               return;
-       } else if (obj->type == OBJ_TREE)
-               page = "tree";
-@@ -695,9 +717,9 @@ void cgit_print_pageheader(struct cgit_context *ctx)
-               cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head,
-                              ctx->qry.sha1, NULL);
-               cgit_commit_link("commit", NULL, hc(cmd, "commit"),
--                               ctx->qry.head, ctx->qry.sha1);
-+                               ctx->qry.head, ctx->qry.sha1, 0);
-               cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
--                             ctx->qry.sha1, ctx->qry.sha2, NULL);
-+                             ctx->qry.sha1, ctx->qry.sha2, NULL, 0);
-               if (ctx->repo->max_stats)
-                       cgit_stats_link("stats", NULL, hc(cmd, "stats"),
-                                       ctx->qry.head, NULL);
-@@ -760,13 +782,18 @@ void cgit_print_snapshot_links(const char *repo, const 
char *head,
-                              const char *hex, int snapshots)
- {
-       const struct cgit_snapshot_format* f;
-+      char *prefix;
-       char *filename;
-+      unsigned char sha1[20];
- 
-+      if (get_sha1(fmt("refs/tags/%s", hex), sha1) == 0 &&
-+          (hex[0] == 'v' || hex[0] == 'V') && isdigit(hex[1]))
-+              hex++;
-+      prefix = xstrdup(fmt("%s-%s", cgit_repobasename(repo), hex));
-       for (f = cgit_snapshot_formats; f->suffix; f++) {
-               if (!(snapshots & f->bit))
-                       continue;
--              filename = fmt("%s-%s%s", cgit_repobasename(repo), hex,
--                             f->suffix);
-+              filename = fmt("%s%s", prefix, f->suffix);
-               cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename);
-               html("<br/>");
-       }
-diff --git a/ui-shared.h b/ui-shared.h
-index bff4826..9ebc1f9 100644
---- a/ui-shared.h
-+++ b/ui-shared.h
-@@ -3,6 +3,7 @@
- 
- extern char *cgit_httpscheme();
- extern char *cgit_hosturl();
-+extern char *cgit_rooturl();
- extern char *cgit_repourl(const char *reponame);
- extern char *cgit_fileurl(const char *reponame, const char *pagename,
-                         const char *filename, const char *query);
-@@ -22,7 +23,7 @@ extern void cgit_log_link(char *name, char *title, char 
*class, char *head,
-                         char *rev, char *path, int ofs, char *grep,
-                         char *pattern, int showmsg);
- extern void cgit_commit_link(char *name, char *title, char *class, char *head,
--                           char *rev);
-+                           char *rev, int toggle_ssdiff);
- extern void cgit_patch_link(char *name, char *title, char *class, char *head,
-                           char *rev);
- extern void cgit_refs_link(char *name, char *title, char *class, char *head,
-@@ -30,7 +31,8 @@ extern void cgit_refs_link(char *name, char *title, char 
*class, char *head,
- extern void cgit_snapshot_link(char *name, char *title, char *class,
-                              char *head, char *rev, char *archivename);
- extern void cgit_diff_link(char *name, char *title, char *class, char *head,
--                         char *new_rev, char *old_rev, char *path);
-+                         char *new_rev, char *old_rev, char *path,
-+                         int toggle_ssdiff);
- extern void cgit_stats_link(char *name, char *title, char *class, char *head,
-                           char *path);
- extern void cgit_object_link(struct object *obj);
-diff --git a/ui-ssdiff.c b/ui-ssdiff.c
-new file mode 100644
-index 0000000..5673642
---- /dev/null
-+++ b/ui-ssdiff.c
-@@ -0,0 +1,274 @@
-+#include "cgit.h"
-+#include "html.h"
-+#include "ui-shared.h"
-+
-+extern int use_ssdiff;
-+
-+static int current_old_line, current_new_line;
-+
-+struct deferred_lines {
-+      int line_no;
-+      char *line;
-+      struct deferred_lines *next;
-+};
-+
-+static struct deferred_lines *deferred_old, *deferred_old_last;
-+static struct deferred_lines *deferred_new, *deferred_new_last;
-+
-+static int line_from_hunk(char *line, char type)
-+{
-+      char *buf1, *buf2;
-+      int len;
-+
-+      buf1 = strchr(line, type);
-+      if (buf1 == NULL)
-+              return 0;
-+      buf1 += 1;
-+      buf2 = strchr(buf1, ',');
-+      if (buf2 == NULL)
-+              return 0;
-+      len = buf2 - buf1;
-+      buf2 = xmalloc(len + 1);
-+      strncpy(buf2, buf1, len);
-+      buf2[len] = '\0';
-+      int res = atoi(buf2);
-+      free(buf2);
-+      return res;
-+}
-+
-+static char *replace_tabs(char *line)
-+{
-+      char *prev_buf = line;
-+      char *cur_buf;
-+      int linelen = strlen(line);
-+      int n_tabs = 0;
-+      int i;
-+      char *result;
-+      char *spaces = "        ";
-+
-+      if (linelen == 0) {
-+              result = xmalloc(1);
-+              result[0] = '\0';
-+              return result;
-+      }
-+
-+      for (i = 0; i < linelen; i++)
-+              if (line[i] == '\t')
-+                      n_tabs += 1;
-+      result = xmalloc(linelen + n_tabs * 8 + 1);
-+      result[0] = '\0';
-+
-+      while (1) {
-+              cur_buf = strchr(prev_buf, '\t');
-+              if (!cur_buf) {
-+                      strcat(result, prev_buf);
-+                      break;
-+              } else {
-+                      strcat(result, " ");
-+                      strncat(result, spaces, 8 - (strlen(result) % 8));
-+                      strncat(result, prev_buf, cur_buf - prev_buf);
-+              }
-+              prev_buf = cur_buf + 1;
-+      }
-+      return result;
-+}
-+
-+static void deferred_old_add(char *line, int line_no)
-+{
-+      struct deferred_lines *item = xmalloc(sizeof(struct deferred_lines));
-+      item->line = xstrdup(line);
-+      item->line_no = line_no;
-+      item->next = NULL;
-+      if (deferred_old) {
-+              deferred_old_last->next = item;
-+              deferred_old_last = item;
-+      } else {
-+              deferred_old = deferred_old_last = item;
-+      }
-+}
-+
-+static void deferred_new_add(char *line, int line_no)
-+{
-+      struct deferred_lines *item = xmalloc(sizeof(struct deferred_lines));
-+      item->line = xstrdup(line);
-+      item->line_no = line_no;
-+      item->next = NULL;
-+      if (deferred_new) {
-+              deferred_new_last->next = item;
-+              deferred_new_last = item;
-+      } else {
-+              deferred_new = deferred_new_last = item;
-+      }
-+}
-+
-+static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
-+                            int new_line_no, char *new_line)
-+{
-+      html("<tr>");
-+      if (old_line_no > 0)
-+              htmlf("<td class='lineno'>%d</td><td class='%s'>",
-+                    old_line_no, class);
-+      else if (old_line)
-+              htmlf("<td class='lineno'></td><td class='%s'>", class);
-+      else
-+              htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
-+
-+      if (old_line) {
-+              old_line = replace_tabs(old_line + 1);
-+              html_txt(old_line);
-+              free(old_line);
-+      }
-+
-+      html("</td>");
-+
-+      if (new_line_no > 0)
-+              htmlf("<td class='lineno'>%d</td><td class='%s'>",
-+                    new_line_no, class);
-+      else if (new_line)
-+              htmlf("<td class='lineno'></td><td class='%s'>", class);
-+      else
-+              htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
-+
-+      if (new_line) {
-+              new_line = replace_tabs(new_line + 1);
-+              html_txt(new_line);
-+              free(new_line);
-+      }
-+
-+      html("</td></tr>");
-+}
-+
-+static void print_deferred_old_lines()
-+{
-+      struct deferred_lines *iter_old, *tmp;
-+
-+      iter_old = deferred_old;
-+      while (iter_old) {
-+              print_ssdiff_line("del", iter_old->line_no,
-+                                iter_old->line, -1, NULL);
-+              tmp = iter_old->next;
-+              free(iter_old);
-+              iter_old = tmp;
-+      }
-+}
-+
-+static void print_deferred_new_lines()
-+{
-+      struct deferred_lines *iter_new, *tmp;
-+
-+      iter_new = deferred_new;
-+      while (iter_new) {
-+              print_ssdiff_line("add", -1, NULL, iter_new->line_no,
-+                                iter_new->line);
-+              tmp = iter_new->next;
-+              free(iter_new);
-+              iter_new = tmp;
-+      }
-+}
-+
-+static void print_deferred_changed_lines()
-+{
-+      struct deferred_lines *iter_old, *iter_new, *tmp;
-+
-+      iter_old = deferred_old;
-+      iter_new = deferred_new;
-+      while (iter_old || iter_new) {
-+              if (iter_old && iter_new)
-+                      print_ssdiff_line("changed", iter_old->line_no,
-+                                        iter_old->line,
-+                                        iter_new->line_no, iter_new->line);
-+              else if (iter_old)
-+                      print_ssdiff_line("changed", iter_old->line_no,
-+                                        iter_old->line, -1, NULL);
-+              else if (iter_new)
-+                      print_ssdiff_line("changed", -1, NULL,
-+                                        iter_new->line_no, iter_new->line);
-+
-+              if (iter_old) {
-+                      tmp = iter_old->next;
-+                      free(iter_old);
-+                      iter_old = tmp;
-+              }
-+
-+              if (iter_new) {
-+                      tmp = iter_new->next;
-+                      free(iter_new);
-+                      iter_new = tmp;
-+              }
-+      }
-+}
-+
-+void cgit_ssdiff_print_deferred_lines()
-+{
-+      if (!deferred_old && !deferred_new)
-+              return;
-+
-+      if (deferred_old && !deferred_new)
-+              print_deferred_old_lines();
-+      else if (!deferred_old && deferred_new)
-+              print_deferred_new_lines();
-+      else
-+              print_deferred_changed_lines();
-+
-+      deferred_old = deferred_old_last = NULL;
-+      deferred_new = deferred_new_last = NULL;
-+}
-+
-+/*
-+ * print a single line returned from xdiff
-+ */
-+void cgit_ssdiff_line_cb(char *line, int len)
-+{
-+      char c = line[len - 1];
-+
-+      line[len - 1] = '\0';
-+
-+      if (line[0] == '@') {
-+              current_old_line = line_from_hunk(line, '-');
-+              current_new_line = line_from_hunk(line, '+');
-+      }
-+
-+      if (line[0] == ' ') {
-+              if (deferred_old || deferred_new)
-+                      cgit_ssdiff_print_deferred_lines();
-+              print_ssdiff_line("ctx", current_old_line, line,
-+                                current_new_line, line);
-+              current_old_line += 1;
-+              current_new_line += 1;
-+      } else if (line[0] == '+') {
-+              deferred_new_add(line, current_new_line);
-+              current_new_line += 1;
-+      } else if (line[0] == '-') {
-+              deferred_old_add(line, current_old_line);
-+              current_old_line += 1;
-+      } else if (line[0] == '@') {
-+              html("<tr><td colspan='4' class='hunk'>");
-+              html_txt(line);
-+              html("</td></tr>");
-+      } else {
-+              html("<tr><td colspan='4' class='ctx'>");
-+              html_txt(line);
-+              html("</td></tr>");
-+      }
-+      line[len - 1] = c;
-+}
-+
-+void cgit_ssdiff_header_begin()
-+{
-+      current_old_line = -1;
-+      current_new_line = -1;
-+      html("<tr><td class='space' colspan='4'><div></div></td></tr>");
-+      html("<tr><td class='head' colspan='4'>");
-+}
-+
-+void cgit_ssdiff_header_end()
-+{
-+      html("</td><tr>");
-+}
-+
-+void cgit_ssdiff_footer()
-+{
-+      if (deferred_old || deferred_new)
-+              cgit_ssdiff_print_deferred_lines();
-+      html("<tr><td class='foot' colspan='4'></td></tr>");
-+}
-diff --git a/ui-ssdiff.h b/ui-ssdiff.h
-new file mode 100644
-index 0000000..64b4b12
---- /dev/null
-+++ b/ui-ssdiff.h
-@@ -0,0 +1,13 @@
-+#ifndef UI_SSDIFF_H
-+#define UI_SSDIFF_H
-+
-+extern void cgit_ssdiff_print_deferred_lines();
-+
-+extern void cgit_ssdiff_line_cb(char *line, int len);
-+
-+extern void cgit_ssdiff_header_begin();
-+extern void cgit_ssdiff_header_end();
-+
-+extern void cgit_ssdiff_footer();
-+
-+#endif /* UI_SSDIFF_H */
-diff --git a/ui-tag.c b/ui-tag.c
-index c2d72af..39e4cb8 100644
---- a/ui-tag.c
-+++ b/ui-tag.c
-@@ -30,6 +30,14 @@ static void print_tag_content(char *buf)
-       }
- }
- 
-+void print_download_links(char *revname)
-+{
-+      html("<tr><th>download</th><td class='sha1'>");
-+      cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head,
-+                                revname, ctx.repo->snapshots);
-+      html("</td></tr>");
-+}
-+
- void cgit_print_tag(char *revname)
- {
-       unsigned char sha1[20];
-@@ -56,16 +64,16 @@ void cgit_print_tag(char *revname)
-                       return;
-               }
-               html("<table class='commit-info'>\n");
--              htmlf("<tr><td>Tag name</td><td>");
-+              htmlf("<tr><td>tag name</td><td>");
-               html_txt(revname);
-               htmlf(" (%s)</td></tr>\n", sha1_to_hex(sha1));
-               if (info->tagger_date > 0) {
--                      html("<tr><td>Tag date</td><td>");
-+                      html("<tr><td>tag date</td><td>");
-                       cgit_print_date(info->tagger_date, FMT_LONGDATE, 
ctx.cfg.local_time);
-                       html("</td></tr>\n");
-               }
-               if (info->tagger) {
--                      html("<tr><td>Tagged by</td><td>");
-+                      html("<tr><td>tagged by</td><td>");
-                       html_txt(info->tagger);
-                       if (info->tagger_email && !ctx.cfg.noplainemail) {
-                               html(" ");
-@@ -73,19 +81,23 @@ void cgit_print_tag(char *revname)
-                       }
-                       html("</td></tr>\n");
-               }
--              html("<tr><td>Tagged object</td><td>");
-+              html("<tr><td>tagged object</td><td class='sha1'>");
-               cgit_object_link(tag->tagged);
-               html("</td></tr>\n");
-+              if (ctx.repo->snapshots)
-+                      print_download_links(revname);
-               html("</table>\n");
-               print_tag_content(info->msg);
-       } else {
-               html("<table class='commit-info'>\n");
--              htmlf("<tr><td>Tag name</td><td>");
-+              htmlf("<tr><td>tag name</td><td>");
-               html_txt(revname);
-               html("</td></tr>\n");
--              html("<tr><td>Tagged object</td><td>");
-+              html("<tr><td>Tagged object</td><td class='sha1'>");
-               cgit_object_link(obj);
-               html("</td></tr>\n");
-+              if (ctx.repo->snapshots)
-+                      print_download_links(revname);
-               html("</table>\n");
-         }
-       return;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.
_______________________________________________
devel mailing list
[email protected]
https://lists.opencsw.org/mailman/listinfo/devel

Reply via email to