Introduction
Introduction Statistics Contact Development Disclaimer Help
trewrite writefiles, now works with bare repos - stagit - static git page gener…
git clone git://src.adamsgaard.dk/stagit
Log
Files
Refs
README
LICENSE
---
commit 75cba4e6fd3b32d5477312f0174f01d830a2d341
parent 09e1377c68cc2a9930c9a9f9c936120dbd0d7981
Author: Hiltjo Posthuma <[email protected]>
Date: Sun, 20 Dec 2015 20:42:53 +0100
rewrite writefiles, now works with bare repos
dont use the index but get the tree by the last commit id (revparse HEAD).
Diffstat:
M urmoms.c | 102 +++++++++++++++++++++++------…
1 file changed, 76 insertions(+), 26 deletions(-)
---
diff --git a/urmoms.c b/urmoms.c
t@@ -561,21 +561,14 @@ writeatom(FILE *fp)
}
int
-writeblob(const git_index_entry *entry)
+writeblob(git_object *obj, const char *filename, git_off_t filesize)
{
char fpath[PATH_MAX];
- char ref[PATH_MAX];
char tmp[PATH_MAX] = "";
char *p;
- git_object *obj = NULL;
FILE *fp;
- snprintf(fpath, sizeof(fpath), "file/%s.html", entry->path);
- snprintf(ref, sizeof(ref), "HEAD:%s", entry->path);
-
- if (git_revparse_single(&obj, repo, ref))
- return 1;
-
+ snprintf(fpath, sizeof(fpath), "file/%s.html", filename);
if (mkdirp(dirname(fpath)))
return 1;
t@@ -589,7 +582,11 @@ writeblob(const git_index_entry *entry)
fp = efopen(fpath, "w");
writeheader(fp);
- fprintf(fp, "<p>%s (%" PRIu32 "b)</p><hr/>", entry->path, entry->file_…
+ fputs("<p> ", fp);
+ xmlencode(fp, filename, strlen(filename));
+ fprintf(fp, " (%" PRIu32 "b)", filesize);
+ fputs("</p><hr/>", fp);
+
if (git_blob_is_binary((git_blob *)obj)) {
fprintf(fp, "<p>Binary file</p>\n");
} else {
t@@ -597,7 +594,6 @@ writeblob(const git_index_entry *entry)
if (ferror(fp))
err(1, "fwrite");
}
- git_object_free(obj);
writefooter(fp);
fclose(fp);
t@@ -607,35 +603,89 @@ writeblob(const git_index_entry *entry)
}
int
-writefiles(FILE *fp)
+writefilestree(FILE *fp, git_tree *tree, const char *path)
{
- const git_index_entry *entry;
- git_index *index;
+ const git_tree_entry *entry = NULL;
+ const char *filename;
+ char filepath[PATH_MAX];
+ git_object *obj = NULL;
+ git_off_t filesize;
size_t count, i;
+ int ret;
- fputs("<table id=\"files\"><thead>\n"
- "<tr><td>Mode</td><td>Name</td><td>Size</td></tr>\n"
- "</thead><tbody>\n", fp);
+ count = git_tree_entrycount(tree);
+ for (i = 0; i < count; i++) {
+ if (!(entry = git_tree_entry_byindex(tree, i)))
+ return -1;
- git_repository_index(&index, repo);
- count = git_index_entrycount(index);
+ filename = git_tree_entry_name(entry);
+ if (git_tree_entry_to_object(&obj, repo, entry))
+ return -1;
+ switch (git_object_type(obj)) {
+ case GIT_OBJ_BLOB:
+ break;
+ case GIT_OBJ_TREE:
+ ret = writefilestree(fp, (git_tree *)obj, filename);
+ git_object_free(obj);
+ if (ret)
+ return ret;
+ continue;
+ default:
+ git_object_free(obj);
+ continue;
+ }
+ if (path[0]) {
+ snprintf(filepath, sizeof(filepath), "%s/%s", path, fi…
+ filename = filepath;
+ }
- for (i = 0; i < count; i++) {
- entry = git_index_get_byindex(index, i);
+ filesize = git_blob_rawsize((git_blob *)obj);
fputs("<tr><td>", fp);
- fprintf(fp, "%u", entry->mode); /* TODO: fancy print, like: "-…
+ /* TODO: fancy print, like: "-rw-r--r--" */
+ fprintf(fp, "%u", git_tree_entry_filemode_raw(entry));
fprintf(fp, "</td><td><a href=\"%sfile/", relpath);
- xmlencode(fp, entry->path, strlen(entry->path));
+ xmlencode(fp, filename, strlen(filename));
fputs(".html\">", fp);
- xmlencode(fp, entry->path, strlen(entry->path));
+ xmlencode(fp, filename, strlen(filename));
fputs("</a></td><td class=\"num\">", fp);
- fprintf(fp, "%" PRIu32, entry->file_size);
+ fprintf(fp, "%" PRIu32, filesize);
fputs("</td></tr>\n", fp);
- writeblob(entry);
+ writeblob(obj, filename, filesize);
}
+ return 0;
+}
+
+int
+writefiles(FILE *fp)
+{
+ const git_oid *id;
+ git_tree *tree = NULL;
+ git_object *obj = NULL;
+ git_commit *commit = NULL;
+
+ fputs("<table id=\"files\"><thead>\n"
+ "<tr><td>Mode</td><td>Name</td><td>Size</td></tr>\n"
+ "</thead><tbody>\n", fp);
+
+ if (git_revparse_single(&obj, repo, "HEAD"))
+ return -1;
+ id = git_object_id(obj);
+ if (git_commit_lookup(&commit, repo, id))
+ return -1;
+ if (git_commit_tree(&tree, commit)) {
+ git_commit_free(commit);
+ return -1;
+ }
+ git_commit_free(commit);
+
+ writefilestree(fp, tree, "");
+
+ git_commit_free(commit);
+ git_tree_free(tree);
+
fputs("</tbody></table>", fp);
return 0;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.