summaryrefslogtreecommitdiff
path: root/stagit.c
diff options
context:
space:
mode:
authorOscar Benedito <oscar@oscarbenedito.com>2020-09-10 17:42:18 +0200
committerOscar Benedito <oscar@oscarbenedito.com>2020-09-10 19:23:55 +0200
commitd833220215f924e6b165a949640af450975fb3af (patch)
tree3fd9276ad80768ee11aa155c28f7cf3458329997 /stagit.c
parentecd0f6fb42cc6ca1ed4d9756a1e1cd4f04f8df0a (diff)
Improve directory navigation UX
Current directory path is now shown and navigation to parent directory has been added. The style for directory entries has changed to diferentiate from files.
Diffstat (limited to 'stagit.c')
-rw-r--r--stagit.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/stagit.c b/stagit.c
index f33431d..bcd5002 100644
--- a/stagit.c
+++ b/stagit.c
@@ -1020,15 +1020,41 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
git_off_t filesize;
FILE *fp_subtree;
const char *entryname, *oldrelpath;
- char filepath[PATH_MAX], rawpath[PATH_MAX], entrypath[PATH_MAX], tmp[PATH_MAX];
+ char filepath[PATH_MAX], rawpath[PATH_MAX], entrypath[PATH_MAX], tmp[PATH_MAX], tmp2[PATH_MAX];
+ char* parent;
size_t count, i;
int lc, r, rf, ret;
+ if (strlen(path) > 0) {
+ fputs("<h2>Directory: ", fp);
+ xmlencode(fp, path, strlen(path));
+ fputs("</h2>\n", fp);
+ }
+
fputs("<table id=\"files\"><thead>\n<tr>"
"<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 (strlen(path) > 0) {
+ if (strlcpy(tmp, path, sizeof(tmp)) >= sizeof(tmp))
+ errx(1, "path truncated: '%s'", path);
+ parent = strrchr(tmp, '/');
+ if (parent == NULL)
+ parent = "files";
+ else {
+ *parent = '\0';
+ parent = strrchr(tmp, '/');
+ if (parent == NULL)
+ parent = tmp;
+ else
+ ++parent;
+ }
+ fputs("<tr><td>d---------</td><td><a class=\"dir\" href=\"../", fp);
+ xmlencode(fp, parent, strlen(parent));
+ fputs(".html\">..</a></td><td class=\"num\" align=\"right\"></td></tr>\n", fp);
+ }
+
count = git_tree_entrycount(tree);
for (i = 0; i < count; i++) {
if (!(entry = git_tree_entry_byindex(tree, i)) ||
@@ -1063,7 +1089,10 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
oldrelpath = relpath;
relpath = tmp;
fp_subtree = efopen(filepath, "w");
- writeheader(fp_subtree, "Files");
+ strlcpy(tmp2, "Files - ", sizeof(tmp2));
+ if (strlcat(tmp2, entrypath, sizeof(tmp2)) >= sizeof(tmp2))
+ errx(1, "path truncated: '%s'", tmp2);
+ writeheader(fp_subtree, tmp2);
/* NOTE: recurses */
ret = writefilestree(fp_subtree, (git_tree *)obj,
entrypath);
@@ -1081,7 +1110,10 @@ writefilestree(FILE *fp, git_tree *tree, const char *path)
fputs("<tr><td>", fp);
fputs(filemode(git_tree_entry_filemode(entry)), fp);
- fprintf(fp, "</td><td><a href=\"%s", relpath);
+ fputs("</td><td><a ", fp);
+ if (git_object_type(obj) == GIT_OBJ_TREE)
+ fputs("class=\"dir\" ", fp);
+ fprintf(fp, "href=\"%s", relpath);
xmlencode(fp, filepath, strlen(filepath));
fputs("\">", fp);
xmlencode(fp, entryname, strlen(entryname));