git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC] gitweb wishlist and TODO list (templating)

From
Jakub Narebski <jnareb@gmail.com>
Date
Sep 30, 2008, 12:45 UTC
Message-ID
<200809301445.28025.jnareb@gmail.com>
In-Reply-To
<20080925171029.GQ10360@machine.or.cz>
On Thu, 25 Sep 2008, Petr Baudis wrote:
> On Thu, Sep 25, 2008 at 06:52:22PM +0200, Jakub Narebski wrote:
Show 37 quoted lines
> > I think that making gitweb use something like Gitweb::Template, where
> > action appearance is governed by templates, be it something like
> > git-for-each-ref --format or StGit *.tmpl files, or XSLT / XSL,
> > could be a good idea.  But I think _that_ would require almost writing
> > from scratch, certainly making it long-term gitweb fork, perhaps even
> > with different name (and not residing inside git.git repository).
> > 
> > We can discuss this idea here in this subthread.  For example: do
> > create Gitweb::Template like HTML::Template or use Template Toolkit;
> > which parts put in template and which in "gitweb" driver, etc.
> 
> Actually, my implementation works quite differently - the idea of the
> templates is that you just specify data from which files to show and
> whether to take them right away or tabulate them in some way - so it is
> something very abstract, and agnostic to _presentation_ layer, which is
> still provided by gitweb. An example of made-up template configuration
> file would look something like:
> 
> [action "summary"]
> 	sections = metadata overview README shortlog forks
> 
> [section "overview"]
> 	type = csv
> 	row = Project Title,(info.txt:title)
> 	row = Project Authors,(info.txt:authors)
> 	row = Bussiness Impact,(info.txt:bizimpact)
> 	row = Base Equation,[formula.png]
> 
> [section "README"]
> 	type = html
> 	content = (README.html)
> 
> (where info.txt is another gitconfig-ish file in tree root, one that
> the user actually touches).
> 
> When I post the patch, I will probably apply it to repo.or.cz too so
> that I can show-case this in practice.

After reading above I'm not sure if what you think about as templating system for gitweb is the same as I am talking about when thinking about something like Gitweb::Template.

It looks like you are thinking about having templating system inside gitweb, with templates describing page layout and view. Reusing git ini-like config syntax as (from what I understand) a kind of declarative layout language (like for example Metafont and MetaPost used in TeX) would be not that bad idea then; it certainly would avoid adding extra dependencies on additional Perl modules, and reduce a bit size of code to be added to deal with templating... if only git config syntax was not such _limited_ language. Git ini-like syntax is domain-specific language meant for storing 2-level and 3+-level hierarchical configuration; abusing it for templating system would be like writing A.I. in COBOL. Also to write all this constraint declarative part of templating language would be lot of work, I'm not sure if more work than implementing simple templating system from scratch.

I am thinking about something which would be rather alternate to gitweb, rather than expanding it. Gitweb started as simple single-file CGI script to view and browse git repositories on the web; it is not modular, and not much embeddable. But it is easy to install; somewhat harder than when it was single file (now there is script itself, CSS and images), but in some parts easier (you don't have to edit file by hand to make it find repositories and git binary, and to configure it). Nevertheless easy installation is one of its advantages (see also git-instaweb).

Currently (after a bit of research and asking on #perl) I am thinking about having it either as Template Toolkit[1] plugin (Template::Git or Template::Plugin::Git) for getting data from git repositories, used in place of usual DBI/database access module, and as Template Toolkit filter (Template::Plugin::Gitweb or something like that) for massaging output, like for example relative/absolute date formats and such, or as plugin for Catalyst[2] MVC framework. (Well TT (Template Toolkit) can be used by Catalyst, so if it is TT module it can be used in Catalyst).

But this won't be gitweb; more like GitHub.

For example if there was 'gitweb' Template Toolkit the 'shortlog' view could look like this:

  [% USE Git(projectroot,project) %]
  [% INCLUDE header project=project %]
  ...
  [% FOREACH commit IN repo.log %]
  ...
  [% END %]
Note: I do not know TT, so there might be glaring errors there

References: =========== [1] http://template-toolkit.org [2] http://www.catalystframework.org/

P.S. Do anybody know any declarative (constraints based) templating engine (templating system)? Preferably in Perl...

-- 
Jakub Narebski
Poland
Previous: Jakub NarebskiNext: Jakub Narebski
Message 11 of 16 in “[RFC] gitweb wishlist and TODO list”
  1. Jakub NarebskiSep 25, 2008
  2. Pedro MeloSep 25, 2008
  3. Jakub NarebskiSep 25, 2008
  4. Pedro MeloSep 25, 2008
  5. Jakub NarebskiSep 25, 2008
  6. Wincent ColaiutaSep 25, 2008
  7. Petr BaudisSep 25, 2008
  8. Jakub NarebskiSep 25, 2008
  9. Petr BaudisSep 25, 2008
  10. Jakub NarebskiSep 25, 2008
  11. Jakub NarebskiSep 30, 2008
  12. Jakub NarebskiSep 25, 2008
  13. Jakub NarebskiSep 28, 2008
  14. Petr BaudisSep 28, 2008
  15. Ask Bjørn HansenOct 1, 2008
  16. Jakub NarebskiOct 1, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.