GitPHP 0.2.6
I've released GitPHP 0.2.6. This release has more internal changes than end-user ones, but there are still a few enhancements and fixes for users and administrators.
Enhancements:- Upgrade to Smarty 3. Some templates have been reorganized to take advantage of Smarty 3's hierarchical template features
- RequireJS is now used to serve javascript. RequireJS is a module loader that has allowed me to restructure the javascript code into clean reusable modules. My javascript code before was... let's just say gross. Using RequireJS does have some other benefits too:
- RequireJS loads modules asynchronously and in parallel. Many browsers still load javascript files from the web server one at a time, blocking each load until the previous one has finished loading. This improves page load time.
- The RequireJS javascript minification process (which I do for all packaged releases) will combine all modules for a page and their dependencies into a single file before compression, which reduces the number of separate files the user's browser has to load.
- GitPHP can now read project-specific config options from the git config in the repository directory itself (e.g. gitphp.git/config), to allow project-specific settings to carry across multiple gitphp installations. This file can be edited directly or accessed using the 'git config' command. The section is [gitphp], and the config values are each of the project specific settings currently supported in projects.conf.php. See the comments in projects.conf.php.example for more information. The project-specific config file will override global gitphp settings in gitphp.conf.php, but install-specific settings in projects.conf.php will override the project-specific config file.
- GitPHP can now use the Google Libraries API to serve the jQuery library, by setting the 'googlejs' config value. Using the Google Libraries API allows you to offload serving that library from your web server, and allows users to benefit from a single cached file for all sites using the Google Libraries API. The library is served from Google's servers, which means this won't work if you're running on an intranet without outside internet access.
- Signed-off-by lines in commit messages and PGP blocks in tags are styled differently to differentiate them from the actual commit/tag message
- The shortlog now displays abbreviated hashes for each commit. The abbreviation length is read from the project's git config file (core.abbrev setting), defaulting to 7. By default, abbreviated hashes are not checked for collisions. A gitphp config setting, 'uniqueabbrev', has been added which will turn on collision checking when abbreviating hashes. Note that this is performance intensive because it needs to search every hash in the project, which is why it's off by default. You might be better served just increasing the minimum abbreviation length.
- Japanese translation, thanks to Ishikawa Mutsumi
- Fix a collision when multiple users were downloading an uncached version of the exact same snapshot at the exact same time
- Fix direct line links on non-GeSHi blob pages, thanks to Steve Clay
- Fix order of shortlog/log commits when a branch is rebased
- Fix trimming of multibyte commit messages in shortlog, thanks to Ishikawa Mutsumi
- Fix handling of git's commit encoding header in commit messages
- Fix handling of non-ASCII filenames in tree view. Based on a fix by sh2ka
- Re-enable whitespace trimming to decrease the size of HTML files served. Was accidentally disabled during the big rewrite a year ago
- Fix a potential XSS vulnerability
Smarty 3 was a difficult transition that's been in the works for a long time. Smarty 3 was a complete rewrite from smarty 2 - and as I certainly found out during my big GitPHP rewrite, a complete rewrite tends to introduce slight unintentional functional changes. And for Smarty, as a library, those slight functional changes manifest themselves as bugs in the consuming app. I've spent a long time hunting Smarty 3 bugs in GitPHP using every single possible configuration combination I could think of. I believe I've gotten all the ones I can find, but I can't possibly reproduce every single setup and git repo out there - so if you run into issues, by all means let me know.
Smarty 2's compiled templates and cached files are incompatible with Smarty 3, so for safety I would suggest deleting the compiled templates in the template_c/ directory, any cached files in the cache/ directory, and bouncing Memcache if you use it. Smarty 3's template compilation takes longer than before due to the hierarchical templates, however this will only happen the first time a page is loaded after deleting the contents of templates_c, you won't have to do it again.
Comments