]> git.armaanb.net Git - stagit.git/blobdiff - stagit.c
stagit-index: remove Content-Language: en
[stagit.git] / stagit.c
index d9832945177342903d3ff2696ab6d4e86a6b03ed..f438a02292f31ad8badeb9e790a972fe2d817adb 100644 (file)
--- a/stagit.c
+++ b/stagit.c
@@ -114,6 +114,7 @@ commitinfo_getstats(struct commitinfo *ci)
                        err(1, "calloc");
                if (git_patch_from_diff(&patch, ci->diff, i)) {
                        git_patch_free(patch);
+                       free(di);
                        goto err;
                }
                di->patch = patch;
@@ -178,6 +179,7 @@ commitinfo_free(struct commitinfo *ci)
        git_tree_free(ci->parent_tree);
        git_commit_free(ci->commit);
        git_commit_free(ci->parent);
+       free(ci);
 }
 
 struct commitinfo *
@@ -221,7 +223,6 @@ commitinfo_getbyoid(const git_oid *id)
 
 err:
        commitinfo_free(ci);
-       free(ci);
 
        return NULL;
 }
@@ -247,7 +248,7 @@ xmlencode(FILE *fp, const char *s, size_t len)
                switch(*s) {
                case '<':  fputs("&lt;",   fp); break;
                case '>':  fputs("&gt;",   fp); break;
-               case '\'': fputs("&apos;", fp); break;
+               case '\'': fputs("&#39;",  fp); break;
                case '&':  fputs("&amp;",  fp); break;
                case '"':  fputs("&quot;", fp); break;
                default:   fputc(*s, fp);
@@ -377,28 +378,31 @@ writefooter(FILE *fp)
 int
 writeblobhtml(FILE *fp, const git_blob *blob)
 {
-       off_t i;
-       size_t n = 0;
-       char *nfmt = "<a href=\"#l%d\" id=\"l%d\">%d</a>\n";
+       size_t n = 0, i, prev;
+       const char *nfmt = "<a href=\"#l%d\" class=\"line\" id=\"l%d\">%6d</a> ";
        const char *s = git_blob_rawcontent(blob);
        git_off_t len = git_blob_rawsize(blob);
 
-       fputs("<table id=\"blob\"><tr><td class=\"num\"><pre>\n", fp);
+       fputs("<pre id=\"blob\">\n", fp);
 
-       if (len) {
-               n++;
-               fprintf(fp, nfmt, n, n, n);
-               for (i = 0; i < len - 1; i++) {
-                       if (s[i] == '\n') {
-                               n++;
-                               fprintf(fp, nfmt, n, n, n);
-                       }
+       if (len > 0) {
+               for (i = 0, prev = 0; i < (size_t)len; i++) {
+                       if (s[i] != '\n')
+                               continue;
+                       n++;
+                       fprintf(fp, nfmt, n, n, n);
+                       xmlencode(fp, &s[prev], i - prev + 1);
+                       prev = i + 1;
+               }
+               /* trailing data */
+               if ((i - prev) > 0) {
+                       n++;
+                       fprintf(fp, nfmt, n, n, n);
+                       xmlencode(fp, &s[prev], len - prev);
                }
        }
 
-       fputs("</pre></td><td><pre>\n", fp);
-       xmlencode(fp, s, (size_t)len);
-       fputs("</pre></td></tr></table>\n", fp);
+       fputs("</pre>\n", fp);
 
        return n;
 }
@@ -485,7 +489,7 @@ printshowfile(FILE *fp, struct commitinfo *ci)
                fwrite(&linestr[add], 1, del, fp);
                fputs("</span></td></tr>\n", fp);
        }
-       fprintf(fp, "</table>%zu file%s changed, %zu insertion%s(+), %zu deletion%s(-)\n",
+       fprintf(fp, "</table></pre><pre>%zu file%s changed, %zu insertion%s(+), %zu deletion%s(-)\n",
                ci->filecount, ci->filecount == 1 ? "" : "s",
                ci->addcount,  ci->addcount  == 1 ? "" : "s",
                ci->delcount,  ci->delcount  == 1 ? "" : "s");
@@ -555,11 +559,11 @@ writelogline(FILE *fp, struct commitinfo *ci)
        fputs("</td><td>", fp);
        if (ci->author)
                xmlencode(fp, ci->author->name, strlen(ci->author->name));
-       fputs("</td><td class=\"num\">", fp);
+       fputs("</td><td class=\"num\" align=\"right\">", fp);
        fprintf(fp, "%zu", ci->filecount);
-       fputs("</td><td class=\"num\">", fp);
+       fputs("</td><td class=\"num\" align=\"right\">", fp);
        fprintf(fp, "+%zu", ci->addcount);
-       fputs("</td><td class=\"num\">", fp);
+       fputs("</td><td class=\"num\" align=\"right\">", fp);
        fprintf(fp, "-%zu", ci->delcount);
        fputs("</td></tr>\n", fp);
 }
@@ -696,7 +700,7 @@ writeatom(FILE *fp)
        }
        git_revwalk_free(w);
 
-       fputs("</feed>", fp);
+       fputs("</feed>\n", fp);
 
        return 0;
 }
@@ -834,7 +838,7 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
                        fputs(filemode(git_tree_entry_filemode(entry)), fp);
                        fprintf(fp, "</td><td><a href=\"%s%s\">", relpath, filepath);
                        xmlencode(fp, entrypath, strlen(entrypath));
-                       fputs("</a></td><td class=\"num\">", fp);
+                       fputs("</a></td><td class=\"num\" align=\"right\">", fp);
                        if (showlinecount && lc > 0)
                                fprintf(fp, "%dL", lc);
                        else
@@ -846,7 +850,7 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
                                relpath);
                        xmlencode(fp, entrypath, strlen(entrypath));
                        git_submodule_free(module);
-                       fputs("</a></td><td class=\"num\"></td></tr>\n", fp);
+                       fputs("</a></td><td class=\"num\" align=\"right\"></td></tr>\n", fp);
                }
        }
 
@@ -861,7 +865,8 @@ writefiles(FILE *fp, const git_oid *id)
        int ret = -1;
 
        fputs("<table id=\"files\"><thead>\n<tr>"
-             "<td>Mode</td><td>Name</td><td class=\"num\">Size</td>"
+             "<td><b>Mode</b></td><td><b>Name</b></td>"
+             "<td class=\"num\" align=\"right\"><b>Size</b></td>"
              "</tr>\n</thead><tbody>\n", fp);
 
        if (!git_commit_lookup(&commit, repo, id) &&
@@ -945,9 +950,12 @@ writerefs(FILE *fp)
 
                        /* print header if it has an entry (first). */
                        if (++count == 1) {
-                               fprintf(fp, "<h2>%s</h2><table id=\"%s\"><thead>\n<tr><td>Name</td>"
-                                     "<td>Last commit date</td><td>Author</td>\n</tr>\n</thead><tbody>\n",
-                                     titles[j], ids[j]);
+                               fprintf(fp, "<h2>%s</h2><table id=\"%s\">"
+                                       "<thead>\n<tr><td><b>Name</b></td>"
+                                       "<td><b>Last commit date</b></td>"
+                                       "<td><b>Author</b></td>\n</tr>\n"
+                                       "</thead><tbody>\n",
+                                        titles[j], ids[j]);
                        }
 
                        relpath = "";
@@ -1101,9 +1109,11 @@ main(int argc, char *argv[])
        relpath = "";
        mkdir("commit", 0755);
        writeheader(fp, "Log");
-       fputs("<table id=\"log\"><thead>\n<tr><td>Date</td><td>Commit message</td>"
-                 "<td>Author</td><td class=\"num\">Files</td><td class=\"num\">+</td>"
-                 "<td class=\"num\">-</td></tr>\n</thead><tbody>\n", fp);
+       fputs("<table id=\"log\"><thead>\n<tr><td><b>Date</b></td>"
+             "<td><b>Commit message</b></td>"
+             "<td><b>Author</b></td><td class=\"num\" align=\"right\"><b>Files</b></td>"
+             "<td class=\"num\" align=\"right\"><b>+</b></td>"
+             "<td class=\"num\" align=\"right\"><b>-</b></td></tr>\n</thead><tbody>\n", fp);
 
        if (cachefile) {
                /* read from cache file (does not need to exist) */