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

Re: [RFC] More diff possibilities in gitweb

From
MKMartin Koegler <mkoegler@auto.tuwien.ac.at>
Date
Mar 18, 2007, 15:02 UTC
Message-ID
<20070318150216.GB9607@auto.tuwien.ac.at>
In-Reply-To
<ethnog$cf6$1@sea.gmane.org>
On Sat, Mar 17, 2007 at 10:51:51PM +0100, Jakub Narebski wrote:
Show 15 quoted lines
> 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
Previous: Jakub NarebskiNext: Jakub Narebski
Message 8 of 9 in “[RFC] More diff possibilities in gitweb”
  1. Martin KoeglerMar 17, 2007
  2. Johannes SchindelinMar 17, 2007
  3. Martin KoeglerMar 18, 2007
  4. Jakub NarebskiMar 18, 2007
  5. Martin KoeglerMar 19, 2007
  6. Jakub NarebskiMar 20, 2007
  7. Jakub NarebskiMar 17, 2007
  8. Martin KoeglerMar 18, 2007
  9. Jakub NarebskiMar 18, 2007

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.