List for cgit developers and users
 help / color / mirror / Atom feed
From: andy at warmcat.com (Andy Green)
Subject: Rendering of README.md inline with inner tree view dirs
Date: Tue, 12 Jun 2018 13:53:27 +0800	[thread overview]
Message-ID: <c18aa803-4182-59c2-e004-dfdef960e067@warmcat.com> (raw)
In-Reply-To: <20180611153858.GJ1922@john.keeping.me.uk>



On 06/11/2018 11:38 PM, John Keeping wrote:
> On Mon, Jun 11, 2018 at 04:05:38PM +0800, Andy Green wrote:

>> I think what github did comes into its own when you are in the mode of
>> coming new to a project and trying to understand what you are even
>> looking at from the project layout in the filespace.  So they may well
>> be clicking around in the tree view, it's perfect if any project
>> documentation in that dir just magically appears after the already
>> expected navigation context explaining it.
>>
>> Basically any available docs follow along contextually.
>>
>> I think it's desirable under all circumstances, since it's only coming
>> if someone bothered to put relevant docs right there... if no way to do
>> it right now and no better ideas, I will try to understand how cgit
>> works for this tomorrow and see if any ideas.
> 
> I think this is a potentially useful feature; long before GitHub existed
> web interfaces to file servers have included README content with the
> directory listing.

Yes indeed.

> Given the render mode patches you listed above, I think it should be
> reasonably straightforward to add this feature in ui-tree.c with the
> following changes:
> 
> - Add fields to walk_tree_context to remember the filename and object_id
>    of a target README file (this needs some configuration to answer the
>    question: what is a README file?) and populate these during the normal
>    tree walk (probably in ls_item(), being careful to only accept blobs)
> - In ls_tail(), if the walk_tree_context has valid values for those
>    fields, then read the blob content from the object_id and call
>    render_buffer()
> 
> This will re-use the existing render filter for "inline" README content,
> which I think is a good thing.  I think the filenames for READMEs will
> have to be a new configuration (the existing "readme" configuration
> takes a blob ref whereas this option wants a simple filename).

Thanks for the suggestions, and the patches that are doing most of the 
work here.

I got quite far with it, you can see

https://libwebsockets.org/git/libwebsockets/tree/

and

https://libwebsockets.org/git/libwebsockets/tree/minimal-examples

are basically there.  If it's helpful to post a WIP series happy to do it.

1) I did not attempt to have it learn about suitable filenames from the 
config yet, I just have ls_item() looking for "README.md".  I saw 
there's already a way (readme=) for the config to list them for the 
about page... basically now tree view becomes a superset of the 
operation of the about page; the about page content appears in tree view.

So do you have any thoughts about just re-using that list?

2) In the current patches, I allowed for ls_item to discover a 
linked-list of files and render them later one after the other.  Eg, a 
dir of READMEs would render them like that.  It's welcome or preferable 
to just restrict it to one?

3) You can see on the top level of the tree, the README.md references

<img alt="lws-overview" src="./doc-assets/lws-overview.png">

This url format works in github.  In the cgit About view, this resolves to

/git/libwebsockets/about/doc-assets/lws-overview.png

which also serves the right mimetype and content.  So that kind of URL 
format is useful.  But when we render the same markup and relative path 
via /tree/, it tries to show an html page containing the content. 
That's why the picture is missing in the /tree/ view... other pictures 
in that markup are coming with absolute URLs outside of cgit and are 
working.

I can have the direct content from cgit generally, but either the markup 
needs fixing up to

/git/libwebsockets/plain/doc-assets/lws-overview.png

or /tree/ needs to learn to do what /about/ does.

I'm wondering whether mmd2html might grow an environment var to know the 
base part for URLS that want to direct-render from cgit.  Or if better 
to follow what /about/ did in /tree/.

4) Looking at read_sha1_file() in print_object(), I can't immediately 
see who frees that.  Running cgit from the commandline, with valgrind, 
he seems to leak some things.  Since it's a cgi, the policy is we don't 
worry too much about that, or I just miss the idea about where it's freed?

5) I get some gcc 8.1 warnings, I made a couple of patches to get around 
them.  In a couple of places, the code seemed legit really.

     gcc8.1: fix strncpy bounds warnings

     These warnings are coming on default Fedora 28 build and probably 
others using gcc 8.1

     ../shared.c: In function ?expand_macro?:
     ../shared.c:483:3: warning: ?strncpy? specified bound depends on 
the length of the source argument [-Wstringop-overflow=]
        strncpy(name, value, len);
        ^~~~~~~~~~~~~~~~~~~~~~~~~
     ../shared.c:480:9: note: length computed here
        len = strlen(value);
              ^~~~~~~~~~~~~

     ../ui-shared.c: In function ?cgit_repobasename?:
     ../ui-shared.c:135:2: warning: ?strncpy? specified bound 1024 
equals destination size [-Wstringop-truncation]
       strncpy(rvbuf, reponame, sizeof(rvbuf));
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

diff --git a/shared.c b/shared.c
index 21ac8f4..477db0a 100644
--- a/shared.c
+++ b/shared.c
@@ -480,7 +480,7 @@ static char *expand_macro(char *name, int maxlength)
                 len = strlen(value);
                 if (len > maxlength)
                         len = maxlength;
-               strncpy(name, value, len);
+               memcpy(name, value, len);
         }
         return name + len;
  }
diff --git a/ui-shared.c b/ui-shared.c
index 9d8f66b..6656bd5 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -129,11 +129,12 @@ char *cgit_pageurl(const char *reponame, const 
char *pagename,
  const char *cgit_repobasename(const char *reponame)
  {
         /* I assume we don't need to store more than one repo basename */
-       static char rvbuf[1024];
+       static char rvbuf[1025];
         int p;
         const char *rv;
-       strncpy(rvbuf, reponame, sizeof(rvbuf));
-       if (rvbuf[sizeof(rvbuf)-1])
+
+       strncpy(rvbuf, reponame, sizeof(rvbuf) - 1);
+       if (rvbuf[sizeof(rvbuf) - 2])
                 die("cgit_repobasename: truncated repository name 
'%s'", reponame);
         p = strlen(rvbuf)-1;
         /* strip trailing slashes */


and also

     gcc8.1: fix strcat warning

     ../ui-ssdiff.c: In function ?replace_tabs?:
     ../ui-ssdiff.c:142:4: warning: ?strncat? output truncated copying 
between 1 and 8 bytes from a string of length 8 [-Wstringop-truncation]
         strncat(result, spaces, 8 - (strlen(result) % 8));
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

diff --git a/ui-ssdiff.c b/ui-ssdiff.c
index 7f261ed..e520b95 100644
--- a/ui-ssdiff.c
+++ b/ui-ssdiff.c
@@ -118,7 +118,6 @@ static char *replace_tabs(char *line)
         int n_tabs = 0;
         int i;
         char *result;
-       char *spaces = "        ";

         if (linelen == 0) {
                 result = xmalloc(1);
@@ -138,8 +137,17 @@ static char *replace_tabs(char *line)
                         strcat(result, prev_buf);
                         break;
                 } else {
+                       char *p;
+                       int n;
+
                         strncat(result, prev_buf, cur_buf - prev_buf);
-                       strncat(result, spaces, 8 - (strlen(result) % 8));
+
+                       n = strlen(result);
+                       p = result + n;
+                       n = 8 - (n % 8);
+                       while (n--)
+                               *p++ = ' ';
+                       *p = '\0';
                 }
                 prev_buf = cur_buf + 1;
         }

I should include these or the slightly dubious warnings are just 
regarded as an annoyance?

Thanks,

-Andy

> 
> John
> 


  reply	other threads:[~2018-06-12  5:53 UTC|newest]

Thread overview: 140+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-11  7:08 andy
2018-06-11  7:31 ` list
2018-06-11  7:38   ` andy
2018-06-11  7:53     ` list
2018-06-11  8:05       ` andy
2018-06-11 15:38         ` john
2018-06-12  5:53           ` andy [this message]
2018-06-12  8:35             ` list
2018-06-12  9:24               ` john
2018-06-12  9:27                 ` andy
2018-06-12 12:07                   ` john
2018-06-12  9:31             ` john
2018-06-13  1:47               ` andy
2018-06-13  2:01                 ` [PATCH 00/11] Render READMEs inline in tree view andy
2018-06-13  2:01                   ` [PATCH 01/11] Use string list strdup_strings for mimetypes andy
2018-06-13  2:01                   ` [PATCH 02/11] Add source page andy
2018-06-13  2:01                   ` [PATCH 03/11] Parse render filters from the config andy
2018-06-13  2:01                   ` [PATCH 04/11] ui-tree: split out buffer printing andy
2018-06-13  2:01                   ` [PATCH 05/11] ui-tree: use render fileters to display content andy
2018-06-16 14:26                     ` john
2018-06-16 23:16                       ` andy
2018-06-13  2:02                   ` [PATCH 06/11] ui-tree: free read_sha1_file() buffer after use andy
2018-06-16 14:24                     ` john
2018-06-13  2:02                   ` [PATCH 07/11] ui-blame: " andy
2018-06-16 14:23                     ` john
2018-06-16 23:17                       ` andy
2018-06-13  2:02                   ` [PATCH 08/11] ui-tree: print_object: add is_inline param andy
2018-06-16 14:38                     ` john
2018-06-13  2:02                   ` [PATCH 09/11] ui-tree: ls_tail: add walk table param andy
2018-06-16 14:38                     ` john
2018-06-13  2:02                   ` [PATCH 10/11] config: add tree-readme list andy
2018-06-16 14:44                     ` john
2018-06-13  2:02                   ` [PATCH 11/11] ui-tree: render any matching README file in tree view andy
2018-06-16 14:58                     ` john
2018-06-14  3:47                   ` [PATCH 00/11] Render READMEs inline " andy
2018-06-16 14:17                     ` john
2018-06-19  9:01                   ` [PATCH v3 00/17] " andy
2018-06-19  9:01                     ` [PATCH v3 01/17] manpage: fix sorting order andy
2018-06-19 21:35                       ` john
2018-06-19  9:01                     ` [PATCH v3 02/17] blame: css: make blame highlight div absolute and at parent top andy
2018-06-19  9:01                     ` [PATCH v3 03/17] Use string list strdup_strings for mimetypes andy
2018-06-19  9:01                     ` [PATCH v3 04/17] Add source page andy
2018-06-19  9:01                     ` [PATCH v3 05/17] Parse render filters from the config andy
2018-06-19 21:37                       ` john
2018-06-19  9:01                     ` [PATCH v3 06/17] ui-tree: split out buffer printing andy
2018-06-19  9:02                     ` [PATCH v3 07/17] ui-tree: use render filters to display content andy
2018-06-19  9:02                     ` [PATCH v3 08/17] ui-blame: free read_sha1_file() buffer after use andy
2018-06-19 21:46                       ` john
2018-06-19  9:02                     ` [PATCH v3 09/17] ui-tree: ls_tail: add walk table param andy
2018-06-19  9:02                     ` [PATCH v3 10/17] config: add global inline-readme list andy
2018-06-19  9:02                     ` [PATCH v3 11/17] config: add repo " andy
2018-06-19  9:02                     ` [PATCH v3 12/17] ui-tree: render any matching README file in tree view andy
2018-06-19 21:49                       ` john
2018-06-20  0:00                         ` andy
2018-06-19  9:02                     ` [PATCH v3 13/17] md2html: add asset mapping andy
2018-06-19  9:02                     ` [PATCH v3 14/17] md2html-add-asset-postfix-arg andy
2018-06-19  9:02                     ` [PATCH v3 15/17] ui-shared: deduplicate some code in repolink andy
2018-06-19 21:48                       ` john
2018-06-19  9:02                     ` [PATCH v3 16/17] ui-shared: add helper for generating non-urlencoded links andy
2018-06-19 21:55                       ` john
2018-06-20  0:07                         ` andy
2018-06-19  9:02                     ` [PATCH v3 17/17] render: adapt for providing extra filter args for plain andy
2018-06-19 21:56                       ` john
2018-06-20 10:11                   ` [PATCH v4 00/16] Render READMEs inline in tree view andy
2018-06-20 10:12                     ` [PATCH v4 01/16] manpage: fix sorting order andy
2018-06-27 17:27                       ` Jason
2018-06-20 10:12                     ` [PATCH v4 02/16] Use string list strdup_strings for mimetypes andy
2018-06-27 17:28                       ` Jason
2018-06-20 10:12                     ` [PATCH v4 03/16] Add source page andy
2018-06-20 10:12                     ` [PATCH v4 04/16] Parse render filters from the config andy
2018-06-20 10:12                     ` [PATCH v4 05/16] ui-tree: split out buffer printing andy
2018-06-20 10:12                     ` [PATCH v4 06/16] ui-tree: use render filters to display content andy
2018-06-20 10:12                     ` [PATCH v4 07/16] ui-tree: ls_tail: add walk table param andy
2018-06-20 10:12                     ` [PATCH v4 08/16] config: add global inline-readme list andy
2018-06-20 10:12                     ` [PATCH v4 09/16] config: add repo " andy
2018-06-20 10:12                     ` [PATCH v4 10/16] ui-tree: render any matching README file in tree view andy
2018-06-20 10:12                     ` [PATCH v4 11/16] md2html: add asset mapping andy
2018-06-27 17:32                       ` Jason
2018-06-27 20:00                         ` john
2018-06-20 10:12                     ` [PATCH v4 12/16] md2html: add asset postfix arg andy
2018-06-20 10:13                     ` [PATCH v4 13/16] ui-shared: deduplicate some code in repolink andy
2018-06-27 17:29                       ` Jason
2018-06-27 17:50                         ` Jason
2018-06-20 10:13                     ` [PATCH v4 14/16] ui-shared: add helper for generating non-urlencoded links andy
2018-06-20 10:13                     ` [PATCH v4 15/16] render: adapt for providing extra filter args for plain andy
2018-06-20 10:41                       ` andy
2018-06-20 10:13                     ` [PATCH v4 16/16] md2html: change css name to not conflict with highlight andy
2018-06-27 17:37                       ` Jason
2018-06-27 21:58                         ` andy
2018-06-28  8:32                           ` john
2018-06-23 11:04                     ` [PATCH v4 00/16] Render READMEs inline in tree view john
2018-06-23 11:10                       ` andy
2018-06-27 17:18                     ` Jason
2018-06-27 17:26                       ` Fancier Source view [Was: Re: [PATCH v4 00/16] Render READMEs inline in tree view] Jason
2018-06-27 20:05                         ` john
2018-06-27 19:51                       ` [PATCH v4 00/16] Render READMEs inline in tree view john
2018-06-27 22:48                         ` andy
2018-06-27 23:22                         ` Jason
2018-06-28  8:28                           ` john
2018-07-03 19:34                             ` Jason
2018-07-03 19:53                               ` john
2018-07-03 19:58                                 ` Jason
2018-06-27 22:36                       ` andy
2018-06-27 22:46                         ` Jason
2018-06-27 23:08                           ` andy
2018-06-16 14:12                 ` Rendering of README.md inline with inner tree view dirs john
2018-06-16 17:35                   ` john
2018-06-18  2:22                     ` andy
2018-06-18  2:56               ` [PATCH v2 00/15] Render READMEs inline in tree view andy
2018-06-18  2:57                 ` [PATCH v2 01/15] manpage: fix sorting order andy
2018-06-18  2:57                 ` [PATCH v2 02/15] gcc8.1: fix strncat warning andy
2018-07-03 23:45                   ` Jason
2018-07-03 23:47                     ` andy
2018-07-03 23:50                       ` Jason
2018-06-18  2:57                 ` [PATCH v2 03/15] Use string list strdup_strings for mimetypes andy
2018-06-18  2:57                 ` [PATCH v2 04/15] Add source page andy
2018-06-18 19:08                   ` john
2018-06-18 19:27                     ` andy
2018-06-18  2:57                 ` [PATCH v2 05/15] Parse render filters from the config andy
2018-06-18  2:57                 ` [PATCH v2 06/15] ui-tree: split out buffer printing andy
2018-06-18  2:57                 ` [PATCH v2 07/15] ui-tree: use render filters to display content andy
2018-06-18  2:57                 ` [PATCH v2 08/15] ui-blame: free read_sha1_file() buffer after use andy
2018-06-18  2:58                 ` [PATCH v2 09/15] ui-tree: ls_tail: add walk table param andy
2018-06-18  2:58                 ` [PATCH v2 10/15] config: add global inline-readme list andy
2018-06-18 19:32                   ` john
2018-06-18  2:58                 ` [PATCH v2 11/15] config: add repo " andy
2018-06-18 19:30                   ` john
2018-06-18  2:58                 ` [PATCH v2 12/15] ui-tree: render any matching README file in tree view andy
2018-06-18 19:36                   ` john
2018-06-19  1:55                     ` andy
2018-06-19  8:31                       ` john
2018-06-19  8:38                         ` andy
2018-06-18  2:58                 ` [PATCH v2 13/15] md2html: add asset mapping andy
2018-06-18  2:58                 ` [PATCH v2 14/15] md2html-add-asset-postfix-arg andy
2018-06-18 19:21                   ` john
2018-06-19  3:55                     ` andy
2018-06-19  8:34                       ` john
2018-06-18  2:58                 ` [PATCH v2 15/15] render: adapt for providing extra filter args for plain andy
2018-06-18 19:25                   ` john
2018-06-19  3:34                     ` andy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c18aa803-4182-59c2-e004-dfdef960e067@warmcat.com \
    --to=cgit@lists.zx2c4.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).