Subject: Re: [PATCH 0/3] Git::Repo API and gitweb caching

From: Lea Wiemann <[email-masked]>
Date: Mon, 18 Aug 2008 21:34:24 +0200

Lea Wiemann wrote:
> As follow-ups to this message, I'll be sending three patches for
> 
> 1) adding the Mechanize tests,
> 2) adding the Git::Repo API, and (the important part:)
> 3) making gitweb use the Git::Repo API, and adding caching to gitweb.

I'll be sending the next version of the patch series as a follow-up to
this message.  As the GSoC pencils-down deadline is in -0.5h, I'll try
to get the code out first and then I'll post some comments on a few
aspects it.

I unfortunately didn't end up being able to split up the third patch
(use Perl API in Gitweb, and add caching layer), since the two changes
are too intricately linked to be properly separated (I actually tried
splitting it two times, two different ways, and it just didn't work).
The only thing that's really not caching-specific to the third patch
(i.e. where using the Perl API merely prettifies the code) is where
Gitweb now uses $repo->get_sha1.  Those few occurrences are only a very
small part of the patch, and I don't think they'd warrant ripping it apart.

Here's the list of changes since the last patch series:

Patch 1/1 (Mechanize tests):

- typo

Patch 2/3 (Perl API):

- remove get_refs, get_path, and version methods

- rename cat_file to get_object

- remove unnecessary cmd_output and get_bidi_pipe methods -- they
  shouldn't be part of this API (because they don't fit into the
  design), and keeping and underscore-prefixing them isn't worth the
  code complexity -- so the Git::Repo methods now use 'open' calls
  directly

- rename the 'directory' options of RepoRoot->new, Repo->new, and
  RepoRoot->repo to 'repo_dir' and 'root_dir' respectively

- ignore (rather than die on) unrecognized header lines in tag/commit
  objects

- do not use unnecessary hash index optimization

- add design notes

- underscore-prefix assert_opts and assert_sha1

- remove dependency of the test suite (t9710) on non-standard modules;
  Git::Repo should now run on vanilla Perl 5.8

- respect PERL_PATH in test suite

- add "use perl 5.008" statement (so it dies for Perl <5.8) -- it
  needs Perl 5.8 for Unicode support

- do not "or" author/committer/tagger/type with '' (it's unnecessary
  and silly)

- improved documentation, per Jakub's suggestions mostly

- author, committer, tagger, and message now all return Unicode
  strings per <[email-masked]>

- some minor cleanups, typos

- remove warning about Git::Repo being unstable; this is a silly
  excuse that in theory allows you to make incompatible changes ("we
  told you so"), but in practice never holds up

Patch 3/3 (Gitweb):

- add installation note for the Git perl package to INSTALL

- accomodate removals/renamings in Git::Repo API

- remove two TODO markers in t9503 (gitweb tests) -- works now thanks
  to Git::Repo

- some minor cleanups, typos

- do not remove the Expires header (as was the case in the previous
  patch)

- remove option to assume case sensitive file system to unclutter the
  code -- the cache will now work on any file system

- elaborate on inefficient refs/ traversal code in
  get_last_modification method