On Thu, 25 Sep 2008, Petr Baudis wrote: > On Thu, Sep 25, 2008 at 06:52:22PM +0200, Jakub Narebski wrote: > > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html