| @@ -248,6 +248,43 @@ xmlencode(FILE *fp, const char *s, size_t len)
}
}
+void
+trim(char *buf, size_t bufsiz, const char *src)
+{
+ size_t d = 0, i, len, n = 0, s;
+
+ len = strlen(src);
+ for (s = 0; s < len && d < bufsiz - 1; s++) {
+ if (src[s] == '\n')
+ n = 0;
+
+ switch (src[s]) {
+ case '\t':
+ if (d + 8 >= bufsiz - 1)
+ goto end;
+ for (i = 0; i < 8; i++)
+ buf[d++] = ' ';
+ break;
+ case '|':
+ case '\r':
+ buf[d++] = ' ';
+ break;
+ case 't':
+ if (!n && src[s] == 't') {
+ if (d + 1 >= bufsiz - 1)
+ goto end;
+ buf[d++] = src[s];
+ }
+ default:
+ buf[d++] = src[s];
+ break;
+ }
+ n++;
+ }
+end:
+ buf[d] = '\0';
+}
+
/* Escape characters in text in geomyidae .gph format */
void
gphtext(FILE *fp, const char *s, size_t len)
@@ -264,10 +301,10 @@ gphtext(FILE *fp, const char *s, size_t len)
n = 1;
}
- if (s[i] == '\t') {
- fputs(" ", fp);
- } else {
- fputc(s[i], fp);
+ switch (s[i]) {
+ case '\r': break;
+ case '\t': fputs(" ", fp); break;
+ default: fputc(s[i], fp);
}
n++;
}
@@ -415,10 +452,11 @@ writeblobgph(FILE *fp, const git_blob *blob)
n++;
fprintf(fp, nfmt, n, n, n);
for (j = prev; s[j] && j <= i; j++) {
- if (s[j] == '\t')
- fputs(" ", fp);
- else
- fputc(s[j], fp);
+ switch (s[j]) {
+ case '\r': break;
+ case '\t': fputs(" ", fp); break;
+ default: fputc(s[j], fp);
+ }
}
prev = i + 1;
}
@@ -427,10 +465,11 @@ writeblobgph(FILE *fp, const git_blob *blob)
n++;
fprintf(fp, nfmt, n, n, n);
for (j = prev; s[j] && j < len - prev; j++) {
- if (s[j] == '\t')
- fputs(" ", fp);
- else
- fputc(s[j], fp);
+ switch (s[j]) {
+ case '\r': break;
+ case '\t': fputs(" ", fp); break;
+ default: fputc(s[j], fp);
+ }
}
}
}
@@ -567,18 +606,24 @@ printshowfile(FILE *fp, struct commitinfo *ci)
void
writelogline(FILE *fp, struct commitinfo *ci)
{
+ char buf[1024];
+
fputs("[1|", fp);
if (ci->author)
printtimeshort(fp, &(ci->author->when));
fputs(" ", fp);
- if (ci->summary)
- gphlink(fp, ci->summary, strlen(ci->summary));
+ if (ci->summary) {
+ trim(buf, sizeof(buf), ci->summary);
+ fprintf(fp, "%-50.50s", buf);
+ }
fputs(" ", fp);
- if (ci->author)
- gphlink(fp, ci->author->name, strlen(ci->author->name));
- fprintf(fp, " %zu", ci->filecount);
- fprintf(fp, " +%zu", ci->addcount);
- fprintf(fp, " -%zu", ci->delcount);
+ if (ci->author) {
+ trim(buf, sizeof(buf), ci->author->name);
+ fprintf(fp, "%-25.25s", buf);
+ }
+ fprintf(fp, " %5zu", ci->filecount);
+ fprintf(fp, " %5zu+", ci->addcount);
+ fprintf(fp, " %5zu-", ci->delcount);
fprintf(fp, "|%scommit/%s.gph", relpath, ci->oid);
fputs("|server|port]\n", fp);
}
@@ -796,6 +841,7 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
git_off_t filesize;
const char *entryname;
char filepath[PATH_MAX], entrypath[PATH_MAX];
+ char buf[1024];
size_t count, i;
int lc, r, ret;
@@ -834,12 +880,12 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
fputs("[1|", fp);
fputs(filemode(git_tree_entry_filemode(entry)), fp);
fputs(" ", fp);
- gphlink(fp, entrypath, strlen(entrypath));
- fputs(" ", fp);
+ trim(buf, sizeof(buf), entrypath);
+ fprintf(fp, "%-50.50s ", buf);
if (lc > 0)
- fprintf(fp, "%dL", lc);
+ fprintf(fp, "%7dL", lc);
else
- fprintf(fp, "%juB", (uintmax_t)filesize);
+ fprintf(fp, "%7juB", (uintmax_t)filesize);
fprintf(fp, "|%s%s", relpath, filepath);
fputs("|server|port]\n", fp);
git_object_free(obj);
@@ -862,7 +908,9 @@ writefiles(FILE *fp, const git_oid *id)
git_commit *commit = NULL;
int ret = -1;
- fputs("Mode Name Size\n", fp);
+ fprintf(fp, "%-10.10s ", "Mode");
+ fprintf(fp, "%-50.50s ", "Name");
+ fprintf(fp, "%8.8s\n", "Size");
if (!git_commit_lookup(&commit, repo, id) &&
!git_commit_tree(&tree, commit))
@@ -899,8 +947,8 @@ writerefs(FILE *fp)
git_reference **refs = NULL;
size_t count, i, j, refcount;
const char *titles[] = { "Branches", "Tags" };
- const char *ids[] = { "branches", "tags" };
const char *name;
+ char buf[1024];
if (git_reference_iterator_new(&it, repo))
return -1;
@@ -943,20 +991,24 @@ writerefs(FILE *fp)
/* print header if it has an entry (first). */
if (++count == 1) {
- gphtext(fp, titles[j], strlen(titles[j]));
- fputs("Name Last commit date Author\n\n", fp);
+ fprintf(fp, "%s\n", titles[j]);
+ fprintf(fp, " %-25.25s", "Name");
+ fprintf(fp, " %-16.16s", "Last commit date");
+ fprintf(fp, " %-25.25s\n", "Author");
}
name = git_reference_shorthand(r);
fputs(" ", fp);
- xmlencode(fp, name, strlen(name));
- fputs(" ", fp);
+ trim(buf, sizeof(buf), name);
+ fprintf(fp, "%-25.25s ", name);
if (ci->author)
printtimeshort(fp, &(ci->author->when));
fputs(" ", fp);
- if (ci->author)
- xmlencode(fp, ci->author->name, strlen(ci->author->name));
+ if (ci->author) {
+ trim(buf, sizeof(buf), ci->author->name);
+ fprintf(fp, "%-25.25s\n", buf);
+ }
fputs("\n", fp);
commitinfo_free(ci);
@@ -1099,9 +1151,12 @@ main(int argc, char *argv[])
fp = efopen("log.gph", "w");
mkdir("commit", 0755);
writeheader(fp, "Log");
- fputs("Date "
- "Commit message "
- "Author Files + -\n", fp);
+ fprintf(fp, "%-16.16s ", "Date");
+ fprintf(fp, "%-50.50s ", "Commit message");
+ fprintf(fp, "%-25.25s ", "Author");
+ fprintf(fp, "%5.5s ", "Files");
+ fprintf(fp, "%6.6s ", "+");
+ fprintf(fp, "%6.6s\n", "-");
if (cachefile) {
/* read from cache file (does not need to exist) */ |