On the user's first visit, default language from HTTP_ACCEPT_LANGUAGE
On the very first visit when no language preference cookie is set,
attempt to guess what the user wants from their HTTP_ACCEPT_LANGUAGE
setting from their browser. (Their OS language)
This will attempt to match the preferences in the order they're
specified by the browser, which should be the user's order of
For full language + country code preferences (eg en_US) it
will attempt to match the whole thing. For just language preferences
(eg en) it will match the first locale with that same language code.
Allow user to change language without explicitly clicking "Set"
language selection box, rather than having to also click "Set". It
removes the Set button also. Since this is done in the jQuery ready
event, there is a bit of time while the page is loading where the
onchange won't work and the set button will still be visible, then it'll
"disappear" when the page finishes loading. There's no good way around
This only adds the GET variable to do the switch, the UI option isn't
This parsing needs to be done really early because we need to do the
language switch/load before anything else happens... however I really
don't like parsing get variables so early in the index like this because
it's breaking the controller scheme that everything else uses. I may
not be able to get around that, but I'd at least like to clean it up and
maybe move this code out of the index into a function or something.
Allow setting owner, description, clone/push url metadata in the project array
This adds four new keys to the project array metadata:
'owner': overrides the owner of the project
'description': overrides the description of the project
'cloneurl': overrides the clone url of the project, can be an empty
string to explicitly remove the clone url
'pushurl': overrides the push url of the project, can be an empty string
to explicitly remove the push url
Add selection and diffing of arbitrary commits to shortlog
Currently this tries to minimize the footprint by only allowing
selection on the shortlog/log, and just uses an additional GET variable to
indicate the presence of a selection. The selection persists while
paging prev/next through the log/shortlog. The current selection is shown
abbreviated in the top link bar, with a commit link to allow the
cluttering the text by each commit (so we can avoid repeating commit
messages or hashes in the UI over and over), and allows the user to
clear the selection from wherever they are - so they could select
something, page through a couple pages, then decide they don't want the
selection anymore and clear it, without having to page back to the
selected commit to deselect it.
This disables or hides pretty much all links - shortlog, log, commit,
commitdiff, tree, snapshot, etc - for an empty project with no commits.
None of those actions make any sense if the project is empty. There are
still outstanding crashes if the user crafts a url manually to directly
access a page for a project, but since that won't happen nearly as often
it's not quite as high a priority.
This also extracts the nav links at the top of each page into a shared
template, so we only need to check if a commit exists in one place.
Some browsers don't properly determine the base url, when you use a
relative path in an href/src (eg "images/tooltip-loader.gif") - they
will treat slashes in a GET variable as a part of the actual path. So
when you have a URL like
(http://server/gitphp/index.php?p=php/gitphp.git), despite the slash in
the GET variable being escaped in the url, trying to load the images
path above resolves as
actual dirname of the instance, to give the loading img tags a full url.
Add support for tags pointing to other tag objects
Tags now store the object they point to and the commit separately. (For
tags pointing right to commits, the object and the commit are the same)
This keeps the object link working correctly by pointing to the direct
object (as opposed to dereferencing all the way down to the commit), so
you can use the object link to trace tagged tags all the way down to the
Also, the project and the tag list page now use the same tag listing
template fragment to make things easier.
The tree link by heads was passing the old style h=refs/heads/[head]
piece of the url, from the old version. It actually wasn't worth it to
implement the translation of the ref path to the tree object in the tree
controller, because we were already passing the hash of the head's HEAD
commit as the hashbase parameter (hb=) - in that case the tree
controller is already automatically looking up the tree for that