X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=stagit.c;h=bb8b404f49b7f70be9aa27284183a904f396a383;hb=dee83b1f1087f9f56114741c6dff52a01ed0d7cb;hp=093cdabb1c8ea7aac953e590522e61b7602192d8;hpb=3a151527e1d72aa75d9461ee9918bda3bd08bcb1;p=stagit.git diff --git a/stagit.c b/stagit.c index 093cdab..bb8b404 100644 --- a/stagit.c +++ b/stagit.c @@ -3,12 +3,13 @@ #include #include -#include #include #include +#include #include #include #include +#include #include #include @@ -76,7 +77,7 @@ joinpath(char *buf, size_t bufsiz, const char *path, const char *path2) r = snprintf(buf, bufsiz, "%s%s%s", path, path[0] && path[strlen(path) - 1] != '/' ? "/" : "", path2); - if (r == -1 || (size_t)r >= bufsiz) + if (r < 0 || (size_t)r >= bufsiz) errx(1, "path truncated: '%s%s%s'", path, path[0] && path[strlen(path) - 1] != '/' ? "/" : "", path2); } @@ -364,11 +365,11 @@ writeheader(FILE *fp, const char *title) xmlencode(fp, description, strlen(description)); fputs("", fp); if (cloneurl[0]) { - fputs("git clone git clone ", fp); xmlencode(fp, cloneurl, strlen(cloneurl)); - fputs("", fp); + fputs("", fp); } fputs("\n", fp); fprintf(fp, "Log | ", relpath); @@ -396,7 +397,7 @@ int writeblobhtml(FILE *fp, const git_blob *blob) { size_t n = 0, i, prev; - const char *nfmt = "%7d "; + const char *nfmt = "%7d"; const char *s = git_blob_rawcontent(blob); git_off_t len = git_blob_rawsize(blob); @@ -409,6 +410,7 @@ writeblobhtml(FILE *fp, const git_blob *blob) n++; fprintf(fp, nfmt, n, n, n); xmlencode(fp, &s[prev], i - prev + 1); + fprintf(fp, ""); prev = i + 1; } /* trailing data */ @@ -416,6 +418,7 @@ writeblobhtml(FILE *fp, const git_blob *blob) n++; fprintf(fp, nfmt, n, n, n); xmlencode(fp, &s[prev], len - prev); + fprintf(fp, ""); } } @@ -532,9 +535,15 @@ printshowfile(FILE *fp, struct commitinfo *ci) for (i = 0; i < ci->ndeltas; i++) { patch = ci->deltas[i]->patch; delta = git_patch_get_delta(patch); - fprintf(fp, "diff --git a/%s b/%s\n", - i, relpath, delta->old_file.path, delta->old_file.path, - relpath, delta->new_file.path, delta->new_file.path); + fprintf(fp, "diff --git a/old_file.path, strlen(delta->old_file.path)); + fputs(".html\">", fp); + xmlencode(fp, delta->old_file.path, strlen(delta->old_file.path)); + fprintf(fp, " b/new_file.path, strlen(delta->new_file.path)); + fprintf(fp, ".html\">"); + xmlencode(fp, delta->new_file.path, strlen(delta->new_file.path)); + fprintf(fp, "\n"); /* check binary data */ if (delta->flags & GIT_DIFF_FLAG_BINARY) { @@ -606,7 +615,6 @@ writelog(FILE *fp, const git_oid *oid) git_revwalk_new(&w, repo); git_revwalk_push(w, oid); - git_revwalk_sorting(w, GIT_SORT_TIME); git_revwalk_simplify_first_parent(w); while (!git_revwalk_next(&id, w)) { @@ -617,7 +625,7 @@ writelog(FILE *fp, const git_oid *oid) git_oid_tostr(oidstr, sizeof(oidstr), &id); r = snprintf(path, sizeof(path), "commit/%s.html", oidstr); - if (r == -1 || (size_t)r >= sizeof(path)) + if (r < 0 || (size_t)r >= sizeof(path)) errx(1, "path truncated: 'commit/%s.html'", oidstr); r = access(path, F_OK); @@ -688,11 +696,11 @@ printcommitatom(FILE *fp, struct commitinfo *ci) xmlencode(fp, ci->summary, strlen(ci->summary)); fputs("\n", fp); } - fprintf(fp, "", + fprintf(fp, "\n", ci->oid); if (ci->author) { - fputs("", fp); + fputs("\n", fp); xmlencode(fp, ci->author->name, strlen(ci->author->name)); fputs("\n", fp); xmlencode(fp, ci->author->email, strlen(ci->author->email)); @@ -736,7 +744,6 @@ writeatom(FILE *fp) git_revwalk_new(&w, repo); git_revwalk_push_head(w); - git_revwalk_sorting(w, GIT_SORT_TIME); git_revwalk_simplify_first_parent(w); for (i = 0; i < m && !git_revwalk_next(&id, w); i++) { @@ -858,7 +865,7 @@ writefilestree(FILE *fp, git_tree *tree, const char *path) r = snprintf(filepath, sizeof(filepath), "file/%s.html", entrypath); - if (r == -1 || (size_t)r >= sizeof(filepath)) + if (r < 0 || (size_t)r >= sizeof(filepath)) errx(1, "path truncated: 'file/%s.html'", entrypath); if (!git_tree_entry_to_object(&obj, repo, entry)) { @@ -883,7 +890,9 @@ writefilestree(FILE *fp, git_tree *tree, const char *path) fputs("", fp); fputs(filemode(git_tree_entry_filemode(entry)), fp); - fprintf(fp, "", relpath, filepath); + fprintf(fp, "", fp); xmlencode(fp, entrypath, strlen(entrypath)); fputs("", fp); if (lc > 0) @@ -1054,7 +1063,6 @@ main(int argc, char *argv[]) { git_object *obj = NULL; const git_oid *head = NULL; - const git_error *e = NULL; mode_t mask; FILE *fp, *fpread; char path[PATH_MAX], repodirabs[PATH_MAX + 1], *p; @@ -1090,6 +1098,13 @@ main(int argc, char *argv[]) git_libgit2_init(); #ifdef __OpenBSD__ + if (unveil(repodir, "r") == -1) + err(1, "unveil: %s", repodir); + if (unveil(".", "rwc") == -1) + err(1, "unveil: ."); + if (cachefile && unveil(cachefile, "rwc") == -1) + err(1, "unveil: %s", cachefile); + if (cachefile) { if (pledge("stdio rpath wpath cpath fattr", NULL) == -1) err(1, "pledge"); @@ -1101,8 +1116,7 @@ main(int argc, char *argv[]) if (git_repository_open_ext(&repo, repodir, GIT_REPOSITORY_OPEN_NO_SEARCH, NULL) < 0) { - e = giterr_last(); - fprintf(stderr, "%s: %s\n", argv[0], e->message); + fprintf(stderr, "%s: cannot open repository\n", argv[0]); return 1; }