path: root/gitk
AgeCommit message (Collapse)Author
2007-11-19Move gitk to its own subdirectoryJunio C Hamano
This is to prepare for gitk i18n effort that makes gitk not a single file project anymore. We may use subproject to bind git.git and gitk.git more loosely in the future, but we do not want to require everybody to have subproject aware git to be able to pull from git.git yet. Signed-off-by: Junio C Hamano <>
2007-10-27gitk: Use the UI font for the diff/old version/new version radio buttonsPaul Mackerras
This makes the radio buttons for selecting whether to see the full diff, the old version or the new version use the same font as the other user interface elements. Signed-off-by: Paul Mackerras <>
2007-10-27Merge branch 'dev'Paul Mackerras
2007-10-27gitk: Simplify the code for finding commitsPaul Mackerras
This unifies findmore and findmorerev, and adds the ability to do a search with or without wrap around from the end of the list of commits to the beginning (or vice versa for reverse searches). findnext and findprev are gone, and the buttons and keys for searching all call dofind now. dofind doesn't unmark the matches to start with. Shift-up and shift-down are back by popular request, and the searches they do don't wrap around. The other keys that do searches (/, ?, return, M-f) do wrapping searches except for M-g. Signed-off-by: Paul Mackerras <>
2007-10-24gitk: Fix a couple more bugs in the path limitingPaul Mackerras
First, paths ending in a slash were not matching anything. This fixes path_filter to handle paths ending in a slash (such entries have to match a directory, and can't match a file, e.g., foo/bar/ can't match a plain file called foo/bar). Secondly, clicking in the file list pane (bottom right) was broken because $treediffs($ids) contained all the files modified by the commit, not just those within the file list. This fixes that too. Signed-off-by: Paul Mackerras <>
2007-10-23Merge branch 'master' into devPaul Mackerras
2007-10-23gitk: Fix some bugs with path limiting in the diff displayPaul Mackerras
First, we weren't putting "--" between the ids and the paths in the git diff-tree/diff-index/diff-files command, so if there was a tag and a file with the same name, we could get an ambiguity in the command. This puts the "--" in to make it clear that the paths are paths. Secondly, this implements the path limiting for merge diffs as well as the normal 2-way diffs. Signed-off-by: Paul Mackerras <>
2007-10-23gitk: Use the status window for other functionsPaul Mackerras
This sets the status window when reading commits, searching through commits, cherry-picking or checking out a head. Signed-off-by: Paul Mackerras <>
2007-10-23gitk: Integrate the reset progress bar in the main framePaul Mackerras
This makes the reset function use a progress bar in the same location as the progress bars for reading in commits and for finding commits, instead of a progress bar in a separate detached window. The progress bar for resetting is red. This also puts "Resetting" in the status window while the reset is in progress. The setting of the status window is done through an extension of the interface used for setting the watch cursor. Signed-off-by: Paul Mackerras <>
2007-10-23gitk: Ensure tabstop setting gets restored by Cancel buttonPaul Mackerras
We weren't restoring the tabstop setting if the user pressed the Cancel button in the Edit/Preferences window. Also improved the label for the checkbox (made it "Tab spacing" rather than the laconic "tabstop") and moved it above the "Display nearby tags" checkbox. Signed-off-by: Paul Mackerras <>
2007-10-23gitk: Limit diff display to listed paths by defaultPaul Mackerras
When the user has specified a list of paths, either on the command line or when creating a view, gitk currently displays the diffs for all files that a commit has modified, not just the ones that match the path list. This is different from other git commands such as git log. This change makes gitk behave the same as these other git commands by default, that is, gitk only displays the diffs for files that match the path list. There is now a checkbox labelled "Limit diffs to listed paths" in the Edit/Preferences pane. If that is unchecked, gitk will display the diffs for all files as before. When gitk is run with the --merge flag, it will get the list of unmerged files at startup, intersect that with the paths listed on the command line (if any), and use that as the list of paths. Signed-off-by: Paul Mackerras <>
2007-10-21gitk: Fix "can't unset prevlines(...)" Tcl errorPaul Mackerras
This fixes the error reported by Michele Ballabio, where gitk will throw a Tcl error "can't unset prevlines(...)" when displaying a commit that has a parent commit listed more than once, and the commit is the first child of that parent. The problem was basically that we had two variables, prevlines and lineends, and were relying on the invariant that prevlines($id) was set iff $id was in the lineends($r) list for some $r. But having a duplicate parent breaks that invariant since we end up with the parent listed twice in lineends. This fixes it by simplifying the logic to use only a single variable, lineend. It also rearranges things a little so that we don't try to draw the line for the duplicated parent twice. Signed-off-by: Paul Mackerras <>
2007-10-20gitk: Avoid an error when cherry-picking if HEAD has moved onPaul Mackerras
This fixes an error reported by Adam Piątyszek: if the current HEAD is not in the graph that gitk knows about when we do a cherry-pick using gitk, then gitk hits an error when trying to update its internal representation of the topology. This avoids the error by not doing that update if the HEAD before the cherry-pick was a commit that gitk doesn't know about. Signed-off-by: Paul Mackerras <>
2007-10-20gitk: Check that we are running on at least Tcl/Tk 8.4Paul Mackerras
This checks that we have Tcl/Tk 8.4 or later, and puts up an error message in a window and quits if not. This was prompted by a patch submitted by Steffen Prohaska, but is done a bit differently (this uses package require rather than looking at [info tclversion], and uses show_error to display the error rather than printing it to stderr). Signed-off-by: Paul Mackerras <>
2007-10-20gitk: Do not pick up file names of "copy from" linesJohannes Sixt
A file copy would be detected only if the original file was modified in the same commit. This implies that there will be a patch listed under the original file name, and we would expect that clicking the original file name in the file list warps the patch window to that file's patch. (If the original file was not modified, the copy would not be detected in the first place, the copied file would be listed as "new file", and this whole matter would not apply.) However, if the name of the copy is sorted after the original file's patch, then the logic introduced by commit d1cb298b0b (which picks up the link information from the "copy from" line) would overwrite the link information that is already present for the original file name, which was parsed earlier. Hence, this patch reverts part of said commit. Signed-off-by: Johannes Sixt <> Signed-off-by: Shawn O. Pearce <>
2007-10-20gitk: Add support for OS X mouse wheelJonathan del Strother
(Väinö Järvelä supplied this patch a while ago for 1.5.2. It no longer applied cleanly, so I'm reposting it.) MacBook doesn't seem to recognize MouseRelease-4 and -5 events, at all. So i added a support for the MouseWheel event, which i limited to Tcl/tk aqua, as i couldn't test it neither on Linux or Windows. Tcl/tk needs to be updated from the version that is shipped with OS X 10.4 Tiger, for this patch to work. Signed-off-by: Jonathan del Strother <> Signed-off-by: Shawn O. Pearce <>
2007-10-19gitk: Fix Tcl error: can't unset findcurlinePaul Mackerras
The logic in stopfinding assumes that findcurline will be set if find_dirn is, but findnext and findprev can set find_dirn without setting findcurline. This makes sure we only set find_dirn in those places if findcurline is already set. Signed-off-by: Paul Mackerras <>
2007-10-17gitk: disable colours when calling git logSam Vilain
If the user specifies 'diff.color = 1' in their configuration file, then gitk will not start. Disable colours when calling git log. Signed-off-by: Sam Vilain <> Signed-off-by: Shawn O. Pearce <>
2007-10-06gitk: Get rid of the diffopts variablePaul Mackerras
The only thing that could be specified with diffopts was the number of lines of context, but there is already a spinbox for that. So this gets rid of it. Signed-off-by: Paul Mackerras <>
2007-10-06gitk: Fix bug where the last few commits would sometimes not be visiblePaul Mackerras
We weren't calling showstuff for the last few commits under some circumstances, causing the scrolling region not to be extended right to the end of the graph. This fixes it. Signed-off-by: Paul Mackerras <>
2007-10-06gitk: Add a font chooserPaul Mackerras
This adds buttons to the edit preferences window to allow the user to choose the main font, the text font (used for the diff display window) and the UI font. Pressing those buttons pops up a font chooser window that lets the user pick the font family, size, weight (bold/normal) and slant (roman/italic). Signed-off-by: Paul Mackerras <>
2007-10-06gitk: Keep track of font attributes ourselves instead of using font actualPaul Mackerras
Unfortunately there seems to be a bug in Tk8.5 where font actual -size sometimes gives the wrong answer (e.g. 12 for Bitstream Vera Sans 9), even though the font is actually displayed at the right size. This works around it by parsing and storing the family, size, weight and slant of the mainfont, textfont and uifont explicitly. Signed-off-by: Paul Mackerras <>
2007-10-04gitk: Use named fonts instead of the font specificationPaul Mackerras
This replaces the use of $mainfont, $textfont and $uifont with named fonts called mainfont, textfont and uifont. We also have variants called mainfontbold and textfontbold. This makes it much easier to make sure font size changes are reflected everywhere they should be, since configuring a named font automatically changes all the widgets that are using that font. Signed-off-by: Paul Mackerras <>
2007-10-04gitk: Fix bug causing Tcl error when changing find match typePaul Mackerras
When changing the selector for Exact/IgnCase/Regexp, we were getting a Tcl error. This fixes it. It also adds a workaround for a bug in alpha versions of Tk8.5 where wordprocessor-style tabs don't seem to work properly around column 1. Signed-off-by: Paul Mackerras <>
2007-09-28gitk: Fix the tab setting in the diff display windowPaul Mackerras
This fixes the bug where we were using the wrong font to calculate the width of the tab stops in the diff display window. If we're running on Tk 8.5 we also use the new -tabstyle wordprocessor option that makes tabs work as expected, i.e. a tab moves the cursor to the right until the next tab stop is reached. On Tk 8.5 we also get fancy and set the first tab stop at column 1 for a normal diff or column N for a merge diff with N parents. On Tk8.4 we can't do that because the tabs work in the "tabular" style, i.e. the nth tab character moves to the location of the nth tab position, *unless* you ask for the default tab setting, which gives 8-column tabs that work in the "wordprocessor" mode. So on Tk8.4 if the tab setting is 8 we ask for default tabs. This means that a tab setting of 7 or 9 can look quite different to 8 in some cases. Signed-off-by: Paul Mackerras <>
2007-09-27gitk: Add progress bars for reading in stuff and for findingPaul Mackerras
This uses the space formerly occupied by the find string entry field to make a status label (unused for now) and a canvas to display a couple of progress bars. The bar for reading in commits is a short green bar that oscillates back and forth as commits come in. The bar for showing the progress of a Find operation is yellow and advances from left to right. This also arranges to stop a Find operation if the user selects another commit or pops up a context menu, and fixes the "highlight this" popup menu items in the file list window. Signed-off-by: Paul Mackerras <>
2007-09-27gitk: Fix a couple of bugsPaul Mackerras
insertrow and removerow were trying to adjust rowidlist, rowisopt and rowfinal even if the row where we're inserting/deleting stuff hasn't been laid out yet, which resulted in Tcl errors. This fixes that. Also we weren't deleting the link$linknum tag in appendwithlinks, which resulted in SHA1 IDs in the body of a commit message sometimes getting shown in blue with underlining when they shouldn't. Signed-off-by: Paul Mackerras <>
2007-09-22gitk: Simplify highlighting interface and combine with Find functionPaul Mackerras
This effectively coaelesces the highlighting function and the search function. Instead of separate highlight and find controls, there is now one set of interface elements that controls both. The main selector is a drop-down menu that controls whether commits are highlighted and searched for on the basis of text in the commit (i.e. the commit object), files affected by the commit or strings added/removed by the commit. The functions to highlight by membership of a view or by ancestor/ descendent relation to the selected commit are gone, as is the move to next/previous highlighted commit (shift-up/down) function. Signed-off-by: Paul Mackerras <>
2007-09-15gitk: Fix bug in generating patchesPaul Mackerras
Commit 8f4893639129acfc866c71583317090aa2a46eab changed mkpatchgo to use diffcmd rather than constructing the diff command itself. Unfortunately diffcmd returns the command with a "|" as the first element (ready for use with open), but exec won't accept the "|". Thus we need to remove the "|". Signed-off-by: Paul Mackerras <>
2007-09-14gitk: Get rid of lookingforhead, use commitinterest insteadPaul Mackerras
Now that we have a general-purpose way of taking some action when a commit ID of interest is encountered, use that for triggering the git diff-index process when we find the currently checked-out head, rather than the special-purpose lookingforhead variable. Also do the commitinterest processing in getcommitlines rather than in showstuff. Signed-off-by: Paul Mackerras <>
2007-09-14gitk: Fix bugs in setting rowfinalPaul Mackerras
We weren't updating the rowfinal list in insertrow and removerow, so it was getting out of sync with rowidlist, which resulted in Tcl errors. This also optimizes the setting of rowfinal in layoutrows a bit. Signed-off-by: Paul Mackerras <>
2007-09-04gitk: Make it possible to lay out all the rows we have received so farPaul Mackerras
This arranges things so that we can do the layout all the way up to the last commit that we have received from git log. If we get more commits we re-lay and redisplay (if necessary) the visible rows. Signed-off-by: Paul Mackerras <>
2007-08-30gitk: Add a cache for the topology infoPaul Mackerras
This adds code to write out the topology information used to determine precedes/follows and branch information into a cache file (~3.5MB for the kernel tree). At startup we read the cache file and then do a git rev-list to update it, which is fast because we exclude all commits in the cache that have no children and commits reachable from them (which amounts to everything in the cache). If one of those commits without children no longer exists, then git rev-list will give an error, whereupon we throw away the cache and read in the whole tree again. This gives a significant speedup in the startup time for gitk. Signed-off-by: Paul Mackerras <>
2007-08-29gitk: Fix bug causing undefined variable error when cherry-pickingPaul Mackerras
When "Show nearby tags" is turned off and the user did a cherry-pick, we were trying to access variables relating to the descendent/ancestor tag & head computations in addnewchild though they hadn't been set. This makes sure we don't do that. Reported by Johannes Sixt. Signed-off-by: Paul Mackerras <>
2007-08-29gitk: Fix bug causing undefined variable error when cherry-pickingPaul Mackerras
When "Show nearby tags" is turned off and the user did a cherry-pick, we were trying to access variables relating to the descendent/ancestor tag & head computations in addnewchild though they hadn't been set. This makes sure we don't do that. Reported by Johannes Sixt. Signed-off-by: Paul Mackerras <>
2007-08-29gitk: Fix bug causing incorrect ref list contents when switching viewPaul Mackerras
If the view we're switching to hadn't been read in, we hit an early return in showview which meant we didn't update the ref list window. Signed-off-by: Paul Mackerras <>
2007-08-29gitk: Do only the parts of the layout that are neededPaul Mackerras
This changes layoutrows and optimize_rows to make it possible to lay out only a little bit more of the graph than is visible, rather than having to lay out the whole graph from top to bottom. To lay out some of the graph without starting at the top, we use the new make_idlist procedure for the first row, then lay it out proceeding downwards as before. Empty list elements in rowidlist are used to denote rows that haven't been laid out yet. Optimizing happens much as before except that we don't try to optimize unless we have three consecutive rows laid out (or the top 2 rows). We have a new list, rowisopt, to record which rows have been optimized. If we change a row that has already been drawn, we set a flag which causes drawcommits to throw away everything drawn on the canvas and redraw the visible rows. Signed-off-by: Paul Mackerras <>
2007-08-24gitk: Get rid of the rowchk arrayPaul Mackerras
Instead, when looking for lines that should be terminated with a down arrow, we look at the parents of the commit $downarrowlen + 1 rows before. This gets rid of one more place where we are assuming that all the rows are laid out in order from top to bottom. Signed-off-by: Paul Mackerras <>
2007-08-23gitk: Fix some problems with the display of ids as linksPaul Mackerras
First, this fixes the problem where a SHA1 id wouldn't be displayed as a link if it wasn't in the part of the graph that had been laid out at the time the details pane was filled in, even if that commit later became part of the graph. This arranges for us to turn the SHA1 id into a link when we get to that id in laying out the graph. Secondly, there was a problem where the cursor wouldn't always turn to a hand when over a link, because the areas for two links could overlap slightly. This fixes that by using a counter rather than always reverting to a counter when we leave the region of a link (which can happen just after we've entered a different link). Signed-off-by: Paul Mackerras <>
2007-08-23gitk: Get rid of idinlist arrayPaul Mackerras
This changes layoutrows to use information from rowidlist and children to work out which parent ids are appearing for the first time or need an up arrow, instead of using idinlist. To detect the situation where git log doesn't give us all the commits it references, this adds an idpending array that is updated and used by getcommitlines. This also fixes a bug where we weren't resetting the ordertok array when updating the list of commits; this fixes that too, and a bug where we could try to access an undefined element of commitrow if the user did an update before gitk had finished reading in the graph. Signed-off-by: Paul Mackerras <>
2007-08-22gitk: Get rid of idrowranges and rowrangelistPaul Mackerras
Instead make the rowranges procedure compute its result by looking in the rowidlist entries for the rows around the children of the id and the id itself. This turns out not to take too long, and not having to maintain idrowranges and rowrangelist speeds up the layout. This also makes optimize_rows not use rowranges, since all it really needed was a way to work out if one id is the first child of another, so it can just look at the children list. Signed-off-by: Paul Mackerras <>
2007-08-20Merge branch 'master' into devPaul Mackerras
2007-08-20gitk: Add a window to list branches, tags and other referencesPaul Mackerras
This adds an entry to the File menu labelled "List references" which pops up a window showing a sorted list of branches, tags, and other references, with a little icon beside each to indicate what sort it is. The list only shows refs that point to a commit that is included in the graph, and if you click on a ref, the corresponding commit is selected in the main window. The list of refs gets updated dynamically. Signed-off-by: Paul Mackerras <>
2007-08-17[PATCH] gitk: Handle 'copy from' and 'copy to' in diff headers.Johannes Sixt
If a commit contained a copy operation, the file name was not correctly determined, and the corresponding part of the patch could not be navigated to from the list of files. Signed-off-by: Johannes Sixt <> Signed-off-by: Paul Mackerras <>
2007-08-17gitk: Fix bug in fix for warning when removing a branchPaul Mackerras
My fix in commit b1054ac985aebc90c0a78202dab8477b74d7818a was only half-right, since it ignored the case where the descendent heads of the head being removed correspond to two or more different commits. This fixes it. Reported by Mark Levedahl. Signed-off-by: Paul Mackerras <>
2007-08-15[PATCH] gitk: Make the date/time display configurableArjen Laarhoven
The new 'datetimeformat' configuration variable in ~/.gitk can be set to a Tcl 'clock format' format string to modify the display of dates and times. has a list of allowed fields. Signed-off-by: Arjen Laarhoven <> Signed-off-by: Paul Mackerras <>
2007-08-15[PATCH] gitk: Let user easily specify lines of context in diff viewSteffen Prohaska
More lines of context sometimes help to better understand a diff. This patch introduces a text field above the box displaying the blobdiffs. You can type in the number of lines of context that you wish to view. The number of lines of context is saved to ~/.gitk. Signed-off-by: Steffen Prohaska <> Signed-off-by: Paul Mackerras <>
2007-08-15gitk: Fix warning when removing a branchPaul Mackerras
When we had two heads on the same commit, and the user tried to remove one of them, gitk was sometimes incorrectly saying that the commits on that branch weren't on any other branch. This fixes it. Signed-off-by: Paul Mackerras <>
2007-08-13Merge branch 'master' into devPaul Mackerras
2007-08-13gitk: Fix bug causing Tcl error when updating graphPaul Mackerras
If "Show nearby tags" is turned off, selecting "Update" from the File menu will cause a Tcl error. This fixes it. The problem was that we were calling regetallcommits unconditionally, but it assumed that getallcommits had been called previously. This also restructures {re,}getallcommits to be a bit simpler. Signed-off-by: Paul Mackerras <>