On Sat, Mar 17, 2007 at 10:51:51PM +0100, Jakub Narebski wrote: > Martin Koegler wrote: > > > The whole is implemented in JavaScript on the client side (tested with > > IE 6 and Mozilla). On the server side, only the JavaScript file is > > included in the output (see below). > > I'd rather not use JavaScript for that, but perhaps add in the history > view (shortlog, history) selectbox to select commits (for shortlog, and > history of a directory) or versions of a blob/file (history of a file) > like in an "info" view e.g. in MoinMoin wiki: > http://git.or.cz/gitwiki/GitSurvey?action=info > JavaScript can be used to beautify this like e.g. MediaWiki engine > does: > http://en.wikipedia.org/w/index.php?title=Darcs&action=history > (to allow selection of diff only in forward direction). Let's focus on the UI first: Using a select box, as shown above, exposes only a small part of all possible combinations, eg. how to compare commits on different branches. In my solution, I add to each link to a compareable object (commit, tree, blob) two new link, eg: link "commit" becomes "commit (base | diff)". "base" stores the ID of the object in a cookie. "diff" retrieves the cookie and compares it with it's associated object. Currently, only few combinations are implemented. Future version could integrate tags (as an tag links to one commit). Additionally, comparing tags/commits with a tree could be enabled, as a tag/commit link to one tree. Storing the base object in a cookie enables the user to use multiple windows/tabs showing, eg. different branches. He can select in on window the base object, switch to an other window, where he selects the diff option. He can also go back in the browser history, without losing his selection. Any sugesstions, how the UI can be improved or designed better? To the implementation: The whole thing can be implemented without any JavaScript on the server side. For an out of tree implementation, my prototype is simpler to maintain, as it needs only a few small changes to gitweb. If there is an interesst in this feature (and nobody opposes including it), I can reimplement it in perl. I would do it in the following way: 1) introduce git_treediff 2) Add the generation of a base and diff link to each object 3) If a base link is selected, the server sends a Set-Cookie header and redirects to the page, where it came from. So maybe the broser can fetch the page out of its cash in some situation. 4) If a diff link is selected, based on the base object in the cookie, the url to do the diff and redirects the browser to it. This should simplify caching. If depending on cookies is a problem for some out there, the base object can be passed in the URLs as fallback. It would require, that the select base object is included in every link, which gitweb generates. mfg Martin Kögler - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html