636edb07cfa8605de2a53cf51256f65e5930d70c galt Wed Mar 3 03:55:44 2010 -0800 fixed bugs in output paths, added htmlEncode diff --git git-reports.c git-reports.c index ce57003..74adc97 100644 --- git-reports.c +++ git-reports.c @@ -6,6 +6,7 @@ #include "errabort.h" #include "hash.h" #include "linefile.h" +#include "htmshell.h" static char const rcsid[] = "$Id: git-reports.c,v 1.1 2010/03/02 08:43:07 galt Exp $"; @@ -109,7 +110,7 @@ w = nextWord(&line); if (!sameString("Date:", w)) errAbort("expected keyword Date: parsing commits.tmp\n"); - commit->date = cloneString(nextWord(&line)); + commit->date = cloneString(line); lineFileNext(lf, &line, &lineSize); if (!sameString("", line)) @@ -175,30 +176,27 @@ return commits; } -int makeHtml(char *diffPath, char *path, char *commitId) +int makeHtml(char *diffPath, char *htmlPath, char *path, char *commitId) /* Make a color-coded html diff * Return the number of lines changed */ { int linesChanged = 0; -char *ext = strrchr(diffPath,'.'); -*ext = 0; -char htmlPath[1024]; -safef(htmlPath, sizeof(htmlPath), "%s.html", diffPath); -*ext = '.'; FILE *h = mustOpen(htmlPath, "w"); struct lineFile *lf = lineFileOpen(diffPath, TRUE); int lineSize; char *line; +char *xline = NULL; boolean inBody = FALSE; boolean inBlock = TRUE; int blockP = 0, blockN = 0; fprintf(h, "\n\n%s %s\n\n\n
\n", path, commitId);
 while (lineFileNext(lf, &line, &lineSize))
     {
+    xline = htmlEncode(line);	
     if (line[0] == '-')
 	{
-	fprintf(h, "%s\n", line);
+	fprintf(h, "%s\n", xline);
 	if (inBody)
 	    {
 	    inBlock = TRUE;
@@ -207,7 +205,7 @@
 	}
     else if (line[0] == '+')
 	{
-	fprintf(h, "%s\n", line);
+	fprintf(h, "%s\n", xline);
 	if (inBody)
 	    {
 	    inBlock = TRUE;
@@ -216,7 +214,7 @@
 	}
     else
 	{
-	fprintf(h, "%s\n", line);
+	fprintf(h, "%s\n", xline);
 	if (inBody)
 	    {
 	    if (inBlock)
@@ -235,12 +233,13 @@
     if (line[0] == '@')
 	inBody = TRUE;
 
+    freeMem(xline);
+
     }
 
 lineFileClose(&lf);
 fprintf(h, "
\n\n\n"); fclose(h); - return linesChanged; } @@ -248,12 +247,29 @@ void doUser(char *u, struct commit *commits) /* process one user */ { + + +char userPath[1024]; +safef(userPath, sizeof(userPath), "%s/%s/%s/%s/index.html", outDir, outPrefix, "user", u); + +FILE *h = mustOpen(userPath, "w"); +fprintf(h, "\n\n%s Commits View\n\n\n
\n", u);
+fprintf(h, "

Commits for %s

\n", u); + + +char *cDiff = NULL, *cHtml = NULL, *fDiff = NULL, *fHtml = NULL; +char *relativePath = NULL; +char *commonPath = NULL; + struct commit *c = NULL; struct files *f = NULL; for(c = commits; c; c = c->next) { if (sameString(c->author, u)) { + fprintf(h, "%s\n", c->commitId); + fprintf(h, "%s\n", c->date); + fprintf(h, "%s\n", c->comment); for(f = c->files; f; f = f->next) { char path[1024]; @@ -272,37 +288,93 @@ } // context unified - safef(path, sizeof(path), "%s/%s/%s/%s/%s/%s%s.diff", outDir, outPrefix, "user", u, "context", f->path, c->commitId); - uglyf("path=%s\n", path); + safef(path, sizeof(path), "%s/%s%s", "context", f->path, c->commitId); + relativePath = cloneString(path); + + safef(path, sizeof(path), "%s/%s/%s/%s/%s", outDir, outPrefix, "user", u, relativePath); + commonPath = cloneString(path); + + safef(path, sizeof(path), "%s.html", commonPath); + cHtml = cloneString(path); + + safef(path, sizeof(path), "%s.diff", commonPath); + cDiff = cloneString(path); + uglyf("path=%s\n", path); safef(gitCmd,sizeof(gitCmd), "" "git show %s %s > %s" - , c->commitId, f->path, path); + , c->commitId, f->path, cDiff); uglyf("gitCmd=%s\n", gitCmd); system(gitCmd); // TODO error handling - f->linesChanged = makeHtml(path, f->path, c->commitId); + + // make context html page + f->linesChanged = makeHtml(cDiff, cHtml, f->path, c->commitId); + + freeMem(cDiff); + freeMem(cHtml); + safef(path, sizeof(path), "%s.html", relativePath); + cHtml = cloneString(path); + safef(path, sizeof(path), "%s.diff", relativePath); + cDiff = cloneString(path); + + // full text (up to 10,000 lines) - safef(path, sizeof(path), "%s/%s/%s/%s/%s/%s%s.diff", outDir, outPrefix, "user", u, "full", f->path, c->commitId); - uglyf("path=%s\n", path); + freeMem(relativePath); + safef(path, sizeof(path), "%s/%s%s", "full", f->path, c->commitId); + relativePath = cloneString(path); + + safef(path, sizeof(path), "%s/%s/%s/%s/%s", outDir, outPrefix, "user", u, relativePath); + freeMem(commonPath); + commonPath = cloneString(path); + + safef(path, sizeof(path), "%s.html", commonPath); + fHtml = cloneString(path); + + safef(path, sizeof(path), "%s.diff", commonPath); + fDiff = cloneString(path); safef(gitCmd,sizeof(gitCmd), "" "git show --unified=10000 %s %s > %s" - , c->commitId, f->path, path); + , c->commitId, f->path, fDiff); uglyf("gitCmd=%s\n", gitCmd); system(gitCmd); // TODO error handling - makeHtml(path, f->path, c->commitId); - //git show --unified=10000 11a20b6cd113d75d84549eb642b7f2ac7a2594fe src/utils/qa/weeklybld/buildEnv.csh + // make full html page + makeHtml(fDiff, fHtml, f->path, c->commitId); + + freeMem(fDiff); + freeMem(fHtml); + safef(path, sizeof(path), "%s.html", relativePath); + fHtml = cloneString(path); + safef(path, sizeof(path), "%s.diff", relativePath); + fDiff = cloneString(path); + + // make file view links + fprintf(h, " %s - lines changed %d, " + "context: html, text, " + "full: html, text\n" + , f->path, f->linesChanged + , cHtml, cDiff, fHtml, fDiff); + + freeMem(relativePath); + freeMem(commonPath); + freeMem(cDiff); + freeMem(cHtml); + freeMem(fDiff); + freeMem(fHtml); } + fprintf(h, "\n"); } } +fprintf(h, "
\n\n\n"); +fclose(h); }