GitPHP Changelog
- 20120128 – 0.2.6:
- 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
- Fixes:
- 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
- 20110827 – 0.2.5
- Enhancements:
- Move a lot of the data loading to using raw php file parsing instead of relying on the git executable. This causes an enormous performance boost, especially on webservers that have very expensive process forking (I’m looking at you Apache)
- Add a ‘compat’ config option that can be specified globally or per-project, to fall back on the old method of loading data if you run into issues with the previous enhancement. (PHP will not process repository packfiles larger than 2GB)
- Add a ‘largeskip’ config option. Using raw PHP data loading, we have to walk commits down the log as you page down earlier and earlier in the history, which has decreasing performance as you go back. This determines at what threshold gitphp will instead just use the git executable.
- Display merge commits in the shortlog with grayed-out titles, thanks to Tanguy Pruvot
- Subdirectory snapshots now include the subdirectory as part of the archive name
- Support for the xdiff php extension. If you have the xdiff php extension installed, that will be used for diffing, which is faster and completely eliminates the need to have a separate diff executable or temp dir configured.
- Support for loading the project list from an SCM-Manager config. Only projects marked public are loaded. Based on work done by Craig Sparks
- Add debug info when searching directory for projects. If you aren’t seeing certain or any projects appear when letting GitPHP find all projects in the project root, turn on the ‘debug’ config option to see more about what it’s doing.
- Benchmarking info is now turned on separately from debug info, with a new config option ‘benchmark’
- Cache list of projects if the object cache is turned on, instead of searching the project root every time. Based on work done by Tanguy Pruvot
- Archives are now delivered incrementally to the user’s browser, instead of being loaded entirely into memory first. This avoids PHP out-of-memory errors when trying to snapshot a very large project. Note: as a result of this change, snapshot tarballs are no longer cached to Memcache, even if Memcache support is turned on. They will always be cached to the cache directory on disk.
- Minify CSS for performance
- Support tags pointing directly to blobs. This isn’t commonly done but can be used to embed something like a GPG key in a repository
- Allow displaying a website URL for a project. Because this can’t really be automatically calculated the way clone/push urls can, this is a per-project setting only.
- Fixes:
- Fixed how the default diff executable is determined if not specified in the config
- Fixed issues diffing when the temp dir had spaces in the name (common on Windows)
- Fixed issues diffing on windows when the temp dir didn’t have a trailing backslash
- Avoid floods of warning messages when the fileinfo magic database is incorrectly compiled
- Avoid warning messages when the project doesn’t have a description file. (sometimes happens with repositories created by third party software other than the standard git program)
- Fixed some display issues on the project list with owner/age/links columns wrapping too much when the project has an extremely long description
- Avoid warning messages when listing all projects in the projectroot and the webserver user doesn’t have read access to one of the directories. Based on a fix by Justyn Shull
- Fixed issue where using the diff link by a single file on the commit page showed the wrong commit at the top of the diff
- 20110624 – 0.2.4
- Chinese translation – thanks to seefan
- Side-by-side diffs for blobdiff and commitdiff – based on work by Mattias Ulbrich and Tanguy Pruvot
- Fix clone and push urls using ssh colon notation – thanks to mdevilz
- Allow specifying hashbases by branch/tag name in URLs
- Fix crash in blobdiff_plain when specifying hashbase without a hash
- 20110224 – 0.2.3
- Degrade gracefully when the system doesn’t have posix functions
- Make the language setting a permanent cookie
- Escape HTML in the title header
- Add attribution and link back to GitPHP page in the footer
- Run javascript project livesearch after the user stops typing
- Remove containing tag from object cache
- Improve performance of projects with lots of tags or heads
- Clean up stylesheets
- 20101212 – 0.2.2
- Enhancements:
- Atom feed support, thanks to Christian Weiske
- Error pages now return proper HTTP error codes to avoid search engine indexing
- Users can now choose the file format of snapshot they want, based on what’s supported by the system. The config value still controls the default for non-javascript users.
- Directories in the config file no longer require you to specify the trailing slash
- Overriding project settings (category, owner, description, clone url, etc) can now be done for all project listing methods – directory list, file list, and array list. Previously it could only be done with the array
- The tree view can now be drilled down using AJAX
- Memcache support
- Support for linking bug numbers in commit messages to a bug tracker
- Search box to search projects on the project list. This is a live search if you have javascript
- Object cache, for caching immutable git data – more info on what this is and why you want it is here
- Javascript is now minified to decrease its size
- Clone/push urls on the project page are now links, thanks to Cory Thomas
- Project owners are now read from the git config value gitweb.owner if set; thanks to Cory Thomas
- Translations:
- Russian, thanks to Aidsoid
- German, thanks to Andy Tandler
- Bugfixes:
- Fix issue where commit tooltips didn’t escape HTML characters correctly
- Project ages on the project list page now use a more accurate method to get the age
- The default tmpdir, if not specified in the config, is read from the system/php config rather than hardcoding it. This also fixes an issue where the default tmpdir for windows was incorrect
- Fix the default git binary for windows x64 installs
- An error message now displays when the diff/git executable isn’t found or doesn’t work, rather than just failing silently
- 20101009 – 0.2.1
- GitPHP now uses gettext for internationalization. I’ve also provided a short howto in doc/TRANSLATING
- Language can now be changed on the fly by the user using a drop-down menu in the upper right. The initial default for this is the user’s preferred language from their browser. If there is no translation for the user’s language, it will fall back to the locale in the config, then to English as the final default. But of course, the user can always change the language whenever they want. The user’s language choice is remembered by a browser cookie.
- French translation, thanks to Zaran
- On the log and shortlog pages, arbitrary diffs can be selected and diffed. You can select one commit, then diff with any other. Your selected diff will persist across pages, in case you want to diff between two different pages. The selected diff, if there is one, will appear in the top header, above the log/shortlog. This selection will also persist when switching from the shortlog to the log and vice versa.
- New pieces of metadata can now be specified for a project using the advanced project array format (in projects.conf.php): description, owner, clone url, and push url. Specifying any of these for a project will override that data for that project only.
- Tree view and commit view now provide a “plain” link by blobs to go right to the plaintext view of that blob
- Added a file history link to the blob page
- To make things a little easier to track, the home text template that configures the header of the project list (templates/hometext.tpl) is no longer provided in the tarball. The system will show the default hometext, but you can create templates/hometext.tpl with your content to customize the header. Therefore, this is backwards compatible for everyone who already has a customized hometext.tpl template.
- The “projects” link in the upper left that takes you to the main project list can be customized. Please be advised that if you override this, you’re also hardcoding the language that it appears in.
- Fixed a bug where search wouldn’t work on git < 1.5.3
- Fixed a bug where some dates wouldn’t show up correctly on windows
- Fixed a bug where an exception would be thrown if no config file existed
- Fixed bugs where GitPHP would crash when an empty project with no commits was being loaded
- Fixed a bug in reading projects from a list file, where owners with multiple words in the name would only display the first word
- Fixed a bug on the commit page, where the history link by a deleted file wouldn’t work
- Fixed a bug where the javascript commit tooltip would appear out of the browser window for a commit close to the bottom of the page
- XHTML validation fixes, thanks to Christian Weiske
- Minor visual fix where source files in commit diffs were missing the “a/” prefix (but destinations files still had the “b/” prefix)
- 20100918 – 0.2.0
- Major architectural rewrite – end users aren’t heavily affected, but developers will appreciate it. On the other hand, PHP 4 is no longer supported
- Much more simplified config that works on an override strategy – so your config file can be much cleaner
- Can fetch snapshots of a subtree (subdirectory), rather than the entire tree – thanks to Tejas Dinkar
- When listing out projects in the projectroot (instead of explicitly listing them in the config), can optionally respect the git-daemon-export-ok magic file used by git-daemon to include/exclude projects – thanks to Calen Pennington
- When listing out projects in the projectroot (instead of explicitly listing them in the config), projects in subdirectories will be automatically “categorized” by their directories – thanks to Calen Pennington
- AJAX javascript tooltips to display the full commit message when hoving over a commit link, and the full tag message for a tag object
- Use AJAX javascript to load blame info right into the blob page, instead of posting to a separate page
- Internationalization support, although we don’t have any translations yet
- Blame page now supports syntax highlighting
- New way of specifying categories for projects – in preparation for more metadata to be added to projects
- The little colored ref badges now have different colors to distinguish between heads and tags
- File sizes by blobs in the tree view
- File searching shows the matching line number
- And honestly maybe a few more little things that I’m not thinking of – it’s possible small “features” have made it in just by virtue of the entire codebase being rewritten from scratch
- 20100214 – 0.1.1
- Support for specifying a project list file, rather than listing out projects manually in the config file. It was done with Gitosis in mind, but will work with any flat file of projects. Thanks to Jonathan Kolb
- Switch to using GeSHi’s CSS mode to make highlighted blob support more lightweight (less traffic)
- Basic blame support
- Smarty and GeSHi are now included with GitPHP so you don’t have to install it yourself, and the example config now points to these
- Fix a bug that prevented filesearch from working, thanks to Christiaan Kortekaas
- Fix a bug that caused RSS to generate an error for a project with a small number of commits, thanks to Zaran
- Fix a security hole that allowed users to access any project using the p= parameter, even if it was not listed in the project list. Thanks to Jonathan Kolb
- 20091110 – 0.1.0
- Security fix: prevent directory traversal using project path
- Support displaying project clone/push urls
- 20091024 – 0.0.9
- PHP 5.3 fixes – Patch from Khee Chin
- Project description on front page project list links to project page – Patch from Khee Chin
- Packed ref support – Based on work by Khee Chin
- Fixed display of non-english UTF-8 characters
- Disabled smarty’s compile check for production releases, for a small performance boost
- 20090725 – 0.0.8
- Caching
- Unified templates
- Debugging/benchmarking
- Fix log/shortlog/search with git versions less than 1.5.0
- Fix blob page not displaying ref tags for HEAD
- Preserve whitespace for readability of non-html pages
- Use utf-8 charset
- Avoid large snapshots getting truncated to the output buffer size
- 20090703 – 0.0.7
- Readable names in diffs (I only changed these in some places in the last release, but missed other places)
- The current path in treeview now has links to each directory, so you can jump to any parent directory easily
- Ref icons now appear next to commit titles in more places
- 20090519 – 0.0.6
- Mime type support, to display images inline
- Searching of commit logs, authors, committers, filenames, and file contents
- Blob diffs show the filenames instead of the hashes to be more readable
- Fixed blank entries that appeared at the end of the log/shortlog
- Added a link to the tree from the main project list
- Some performance fixes for projects with many commits
- Snapshots can be sent as tar.gz or zip
- templates_c directory created already
- Single tag view page
- 20080610 – 0.0.5
- Move config to its own dir
- Break up function library into a file for each function that’s loaded on demand
- Use a more sane versioning scheme (e.g. 0.0.4 instead of v01d)
- Fix broken snapshot URL on some pages
- Fix missing header that broke formatting on tag page
- Fix duplicated “…” that appeared on truncated shortlogs
- Fix sorting functions on main project list page
- Project lists searching a directory (rather than using a predefined list in the config) now search recursively
- Add “TXT” plaintext project list link on front page
- Fix ref icons next to commits with tags/heads
- Some adjustments to links on pages to match more closely with current gitweb
- Links to files on commitdiff pages now work
- Diff binary path is now configurable
- Now works on Windows with msysgit! Thanks to testing and bugfixes from Slash
- 20060814 – v01d:
- Fix bug preventing snapshots from working
- 20060513 – v01c: