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

Re: [PATCH 11/18] gitweb: add isDumbClient() check

From
Jakub Narebski <jnareb@gmail.com>
Date
Dec 11, 2010, 01:40 UTC
Message-ID
<201012110240.32854.jnareb@gmail.com>
In-Reply-To
<4D02D0C4.2020207@eaglescrag.net>
On Sat, 11 Dec 2010, J.H. wrote:
Show 27 quoted lines
> On 12/10/2010 04:15 PM, Jakub Narebski wrote:
>> Junio C Hamano wrote:
>>> "J.H." <warthog9@eaglescrag.net> writes:
>>>
>>>> My initial look indicated that perl-http-browserdetect wasn't available
>>>> for RHEL / CentOS 5 - it is however available in EPEL.
>>>>
>>>> However there are a couple of things to note about User Agents at all:
>>>> 	- They lie... a lot
>>>> 	- Robots lie even more
>>>>
>>>> Blacklisting is still the better option, by a lot.  I'll re-work this
>>>> some in v9, as I'm fine with the added dependency.
>>>
>>> Thanks, both.  I sense that we finally are going to get a single version
>>> of gitweb that can be used at larger sites ;-)
>> 
>> I wouldn't be so optimistic.  While we borrow features and ideas from
>> each other, the difference still remains that J.H. patches are bit hacky
>> but are tested, while my rewrite is IMHO cleaner but untested (well, 
>> untested on real life load).
> 
> At this point I'm not sure there is a way to rectify the two patch
> series, and while we may borrow ideas from each other it's becoming
> clear that we are both, generally speaking, heading in different
> directions for what we want and need out of gitweb.  Jakub's patches for
> the admin page are indicative of that.

Actually the cache administration page was just proof of concept. Perhaps a better solution would be to provide script that can be run to safely clean cache (or just heavily outdated entries).

What I want from caching series is a clean separation between capturing (so it can be replaced in the future e.g. by Capture::Tiny, or capturing to mmapped fragment for Cache::FastMmap-like cache, or simple capturing to memory for Memcached), caching engine (so it can be replaced by some good and tested caching engine, like Cache::Cache, Cache, Cache::Memcached, Cache::FastMmap, CHI and its drivers and options like cache levels), and caching output module. Modular build makes it easier to catch errors and allows for unit testing each component separately. And you can simply use 'require <Package>' instead of doing manual error handling and protecting against redefine errors / multiple include via 'do <file>'.

What I don't like is caching engine guts strewn all over the gitweb. I'd rather capturing engine was not tied too tightly with gitweb. The least controversial is "output caching" part...

Anyway I'd try to keep my rewrite feature-compatibile with J.H. series, including (from v7) also backward compatibility with cache config option names, including $cache_enable. (Grrr... API/ABI backwards compatibility).

Show 8 quoted lines
> 
>> Anyway the main issue that was discovered by PATCHv6 by me, and v8 by J.H.
>> is that die_error sucks... well, at least if background caching is enabled.
> 
> I'd agree with that, and as such I'm working on a complete re-work of
> error handling in gitweb for v9.  Things are looking pretty good so far,
> but to claim that it's a non-invasive patch would be akin to selling
> someone the Brooklyn bridge.
Hmmm... I am also thinking about changing the way error handling is done
in gitweb, but I don't think it would be very invasive: for a non-cached
case it would be simply one "eval" in run_request() or run(), and "die"
instead of "goto DONE_XXX" in die_error().
 
Now if only there were HTTP::Server::Simple::FCGI so I would be able to
test fastCGI support without need to install mod_fcgi / mod_fastcgi for
Apache... (local::lib and cpanm for the win!).
Show 6 quoted lines
> That said, the way Gitweb handles it's errors and things like exit are
> appalling and this has been something that's needed doing for a while
> anyway.  Guess now's the time to do it.  Might be a few days for me to
> get far enough for any of it to be worthwhile sharing, late next week
> maybe.  That said I hit vacation starting on the 20th so it might be
> next year before that is finalized.

I also don't think that output caching can be done before end of this year, sorry.

Hmmm... I guess that in shortened minimal version of my rewrite of output caching for gitweb (without zero-size check, adaptive cache lifetime, perhaps even without support for alternate caching engines) I should also include minimal improvement to die_error-handling. Just like there is "gitweb: Prepare for splitting gitweb" there.

-- 
Jakub Narebski
Poland
Previous: J.H.Next: John 'Warthog9' Hawley
Message 30 of 60 in “Gitweb caching v8”
  1. 00/18 Gitweb caching v8John 'Warthog9' Hawley, Dec 9, 2010
  2. 01/18 gitweb: Prepare for splitting gitwebJohn 'Warthog9' Hawley, Dec 9, 2010
  3. Jakub NarebskiDec 9, 2010
  4. 02/18 gitweb: add output buffering and associated functionsJohn 'Warthog9' Hawley, Dec 9, 2010
  5. 03/18 gitweb: File based caching layer (from git.kernel.org)John 'Warthog9' Hawley, Dec 9, 2010
  6. 04/18 gitweb: Minimal testing of gitweb cachingJohn 'Warthog9' Hawley, Dec 9, 2010
  7. 05/18 gitweb: Regression fix concerning binary output of filesJohn 'Warthog9' Hawley, Dec 9, 2010
  8. Jakub NarebskiDec 9, 2010
  9. 06/18 gitweb: Add more explicit means of disabling 'Generating...' pageJohn 'Warthog9' Hawley, Dec 9, 2010
  10. 07/18 gitweb: Revert back to $cache_enable vs. $caching_enabledJohn 'Warthog9' Hawley, Dec 9, 2010
  11. Jakub NarebskiDec 9, 2010
  12. J.H.Dec 10, 2010
  13. Jakub NarebskiDec 10, 2010
  14. 08/18 gitweb: Change is_cacheable() to return true alwaysJohn 'Warthog9' Hawley, Dec 9, 2010
  15. Jakub NarebskiDec 9, 2010
  16. 09/18 gitweb: Revert reset_output() back to original codeJohn 'Warthog9' Hawley, Dec 9, 2010
  17. Jakub NarebskiDec 9, 2010
  18. J.H.Dec 10, 2010
  19. 10/18 gitweb: Adding isBinaryAction() and isFeedAction() to determine the action typeJohn 'Warthog9' Hawley, Dec 9, 2010
  20. Jakub NarebskiDec 10, 2010
  21. J.H.Dec 10, 2010
  22. Jakub NarebskiDec 10, 2010
  23. Jakub NarebskiDec 10, 2010
  24. 11/18 gitweb: add isDumbClient() checkJohn 'Warthog9' Hawley, Dec 9, 2010
  25. Jakub NarebskiDec 10, 2010
  26. J.H.Dec 10, 2010
  27. Junio C HamanoDec 11, 2010
  28. Jakub NarebskiDec 11, 2010
  29. J.H.Dec 11, 2010
  30. Jakub NarebskiDec 11, 2010
  31. 12/18 gitweb: Change file handles (in caching) to lexical variables as opposed to globsJohn 'Warthog9' Hawley, Dec 9, 2010
  32. Jakub NarebskiDec 10, 2010
  33. Junio C HamanoDec 10, 2010
  34. Jakub NarebskiDec 10, 2010
  35. J.H.Dec 10, 2010
  36. 13/18 gitweb: Add commented url & url hash to page footerJohn 'Warthog9' Hawley, Dec 9, 2010
  37. Jakub NarebskiDec 10, 2010
  38. J.H.Dec 10, 2010
  39. 14/18 gitweb: add print_transient_header() function for central header printingJohn 'Warthog9' Hawley, Dec 9, 2010
  40. Jakub NarebskiDec 10, 2010
  41. J.H.Dec 10, 2010
  42. 15/18 gitweb: Add show_warning() to display an immediate warning, with refreshJohn 'Warthog9' Hawley, Dec 9, 2010
  43. Jakub NarebskiDec 10, 2010
  44. J.H.Dec 10, 2010
  45. Jakub NarebskiDec 10, 2010
  46. 16/18 gitweb: When changing output (STDOUT) change STDERR as wellJohn 'Warthog9' Hawley, Dec 9, 2010
  47. Jakub NarebskiDec 10, 2010
  48. J.H.Dec 12, 2010
  49. Jakub NarebskiDec 12, 2010
  50. 17/18 gitweb: Prepare for cached error pages & better error page handlingJohn 'Warthog9' Hawley, Dec 9, 2010
  51. Jakub NarebskiDec 10, 2010
  52. J.H.Dec 10, 2010
  53. Jakub NarebskiDec 10, 2010
  54. 18/18 gitweb: Add better error handling for gitweb cachingJohn 'Warthog9' Hawley, Dec 9, 2010
  55. Jakub NarebskiDec 10, 2010
  56. Jakub NarebskiDec 9, 2010
  57. J.H.Dec 10, 2010
  58. Jakub NarebskiDec 10, 2010
  59. Junio C HamanoDec 10, 2010
  60. J.H.Dec 10, 2010

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.