aboutsummaryrefslogtreecommitdiff
path: root/gitk
Commit message (Collapse)AuthorAge
* gitk: Add a progress bar to show progress while resettingPaul Mackerras2007-06-26
| | | | | | | | | | | | | | | Since git reset now gets chatty while resetting, we were getting errors reported when a reset was done using the "reset branch to here" menu item. With this we now read the progress messages from git reset and update a progress bar. Because git reset outputs the progress messages to standard error, and Tcl treats messages to standard error as error messages, we have to invoke git reset via a shell and redirect standard error into standard output. This also fixes a bug in computing descendent heads when head ids are changed via a reset. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Improve handling of whitespace and special chars in filenamesPaul Mackerras2007-06-23
| | | | | | | | | | | | | | | | | | | | | | | | | The main thing here is better parsing of the diff --git lines in the output of git diff-tree -p. We now cope with filenames in quotes with special chars escaped. If the filenames contain spaces they aren't quoted, however, which can create difficulties in parsing. We get around the difficulties by detecting the case when the filename hasn't changed (chop the part after "diff --git " in two and see if the halves match apart from a/ in one and b/ in the other), and if it hasn't changed, we just use one half. If the filename has changed we wait for the "rename from" and "rename to" lines, which give the old and new filenames unambiguously. This also improves the parsing of the output of git diff-tree. Instead of using lindex to extract the filename, we take the part from the first tab on, and if it starts with a quote, we use [lindex $str 0] to remove the quotes and convert the escapes. This also gets rid of some unused tagging of the diff text, uses [string compare] instead of [regexp] in some places, and fixes the regexp for detecting the @@ hunk-separator lines (the regexp wasn't accepting a single number, as in "-0,0 +1" for example). Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Fix bug causing nearby tags/heads to sometimes not be displayedPaul Mackerras2007-06-23
| | | | | | | | | | When we compute descendent heads and descendent/ancestor tags, we cache the results. We need to be careful to invalidate the cache when we add stuff to the graph. Also make sure that when we cache descendent heads for a node we only cache the heads that are actually descendents of that node. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Limit how often we change the canvas scrolling regionPaul Mackerras2007-06-23
| | | | | | | | | | For some unknown reason, changing the scrolling region on the canvases provokes multiple milliseconds worth of computation in the X server, and this can end up slowing gitk down significantly. This works around the problem by limiting the rate at which we update the scrolling region after the first 100 rows to at most 2 per second. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Add a "reset branch to here" row context-menu operationPaul Mackerras2007-06-23
| | | | | | | | | | This adds an entry to the menu that comes up when the user does a right-click on a row. The new entry allows the user to reset the currently checked-out head to the commit for the row that they did the right-click on. The user has to select what type of reset to do, and confirm the reset, via a dialog box that pops up. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Get rid of the childlist variablePaul Mackerras2007-06-23
| | | | | | | | The information in childlist is a duplicate of what's in the children array, and it wasn't being accessed often enough to be really worth keeping the list around as well. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Speed up the reading of referencesPaul Mackerras2007-06-23
| | | | | | | | | | | We were doing two execs for each tag - one to map the tag ID to a commit ID and one to read the contents of the tag for later display. This speeds up the process by not reading the contents of the tag (instead it is read later if needed), and by using the -d flag to git show-ref, which gives us refs/tags/foo^{} lines which give us the commit ID. Also this uses string operations instead of regexps. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Show local uncommitted changes as a fake commitPaul Mackerras2007-06-23
| | | | | | | | | | | | | | | If there are local changes in the repository, i.e., git-diff-index HEAD produces some output, then this optionally displays an extra row in the graph as a child of the HEAD commit (but with a red circle to indicate that it's not a real commit). There is a checkbox in the preferences window to control whether gitk does this or not. Clicking on the extra row shows the diffs between the working directory and the HEAD (using git diff-index -p). The right-click menu on the extra row allows the user to generate a patch containing the local diffs, or to display the diffs between the working directory and any commit. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: New algorithm for drawing the graph linesPaul Mackerras2007-06-23
| | | | | | | | | | | | | | | | This only draws as much of the graph lines as is visible. This can happen by adding coordinates on to an existing graph line or by creating a new line. This means that we only need to have laid out and optimized as much of the graph as is actually visible in order to draw it, including the lines (previously we didn't draw a graph line until we had laid out and optimized to the end of a segment of the line, i.e. down to a down-arrow or to the row where the line's commit is displayed). This also lets us get rid of the linesegends list, and gives us an easy workaround for the X server bug that causes long lines to be misdrawn. This also gets rid of the use of rowoffsets in drawlineseg et al. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Store ids in rowrangelist and idrowranges rather than row numbersPaul Mackerras2007-06-23
| | | | | | | | | | | | This removes the need for insertrow to go through rowrangelist and idrowranges and adjust a lot of entries. The first entry for a given id is now the row number of the first child, not that row number + 1, and rowranges compensates for that so its callers didn't have to change. This adds a ranges argument to drawlineseg so that we can avoid calling rowranges a second time inside drawlineseg (all its callers already called rowranges). Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Disable the head context menu entries for the checked-out branchPaul Mackerras2007-06-23
| | | | | | | | Neither the "check out this branch" nor the "remove this branch" menu item can be used on the currently-checked out branch, so disable them. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Cope with commit messages with carriage-returns and initial blank linesPaul Mackerras2007-06-23
| | | | | | | | | | In some repositories imported from other systems we can get carriage return characters in the commit message, which leads to a multi-line headline being displayed in the summary window, which looks bad. Also some commit messages start with one or more blank lines, which leads to an empty headline. This fixes these problems. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Implement a simple scheduler for the compute-intensive stuffPaul Mackerras2007-06-23
| | | | | | | | | | | | | | This allows us to do compute-intensive processing, such as laying out the graph, relatively efficiently while also having the GUI be reasonably responsive. The problem previously was that file events were serviced before X events, so reading from another process which supplies data quickly (hi git rev-list :) could mean that X events didn't get processed for a long time. With this, gitk finishes laying out the graph slightly sooner and still responds to the GUI while doing so. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Improve the behaviour of the initial selectionPaul Mackerras2007-06-23
| | | | | | | | It used to be that if you clicked on a line while gitk was still drawing stuff, it would immediately re-select the first line of the display. This fixes that. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Add some more comments to the optimize_rows procedurePaul Mackerras2007-06-23
| | | | Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Don't try to list large numbers of tags or heads in the details panePaul Mackerras2007-06-23
| | | | | | | | | | | | | | | With some large repositories, a commit can end up on thousands of branches, which results in an extremely long "Branches:" line in the details window, and that results in the window being extremely slow to scroll. This fixes it by just showing "many (N)" after "Branches:", "Follows:" or "Precedes:", where N is the number of heads or tags. The limit is currently set at 20 but could be made configurable (and the "many" could be a link to pop up a window listing them all in case anyone really wants to know). Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: New infrastructure for working out branches & previous/next tagsPaul Mackerras2007-06-23
| | | | | | | | | | | | | | | | | | | | | | | | Instead of working out descendent heads and descendent & ancestor branches in a two-pass algorithm, this reads and stores a simplified version of the graph topology, and works out descendent/ancestor tags and descendent heads on demand (with a bit of caching). The advantages of this are, first, that we now don't have to use --topo-order on the git rev-list process. Secondly, we don't have to re-read the whole graph when tags or heads change or even when the graph changes. Since we can cope with parents coming before children, we can update the graph by running a git rev-list with arguments that just give us the new commits, and merge the new commits into the simplified graph. The graph is simplified in the sense that commits with exactly one parent and one child (which is >90% of them in most cases) are grouped together into arcs joining nodes or 'branch/merge points', which are the commits that don't have exactly 1 parent and 1 child. This reduces the size of the graph substantially and decreases the time to traverse it correspondingly. Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk: Allow specifying tabstop as other than default 8 characters.Mark Levedahl2007-05-22
| | | | | | | | | | | Not all projects use the convention that one tabstop = 8 characters, and a common convention is to use one tabstop = one level of indent. For such projects, using 8 characters per tabstop often shows too much whitespace per indent. This allows the user to configure the number of characters to use per tabstop. Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk: Update fontsize in patch / tree listMark Levedahl2007-05-22
| | | | | | | | When adjusting fontsize (using ctrl+/-), all panes except the lower right were updated. This fixes that. Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk: Make selection highlight color configurableMark Levedahl2007-05-22
| | | | | | | | | | | Cygwin's tk by default uses a very dark selection background color that makes the currently selected text almost unreadable. On linux, the default selection background is a light gray which is very usable. This makes the default a light gray everywhere but allows the user to configure the color as well. Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Use the -q flag to git checkoutPaul Mackerras2007-05-22
| | | | | | This avoids having gitk think that an error has occurred in the checkout. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Allow user to choose whether to see the diff, old file, or new filePaul Mackerras2007-04-19
| | | | | | | This adds a set of radiobuttons that select between displaying the full diff (both - and + lines), the old file (suppressing the + lines) and the new file (suppressing the - lines) in the diff display window. Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] Improve look-and-feel of the gitk tool.Eygene Ryabinkin2007-04-01
| | | | | | | | | | | | | | Made the default buttons on the dialog active and focused upon the dialog appearence. Bound 'Escape' and 'Return' keys to the dialog dismissal where it was appropriate: mainly for dialogs with only one button and no editable fields. Unified the look of the "About gitk" and "Key bindings" dialogs. Signed-off-by: Eygene Ryabinkin <rea-git@codelabs.ru> Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] Teach gitk to use the user-defined UI font everywhere.Eygene Ryabinkin2007-04-01
| | | | | | | | Some parts of gitk were not respecting the default GUI font. Most of them were catched and fixed. Signed-off-by: Eygene Ryabinkin <rea-git@codelabs.ru> Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] prefer "git COMMAND" over "git-COMMAND" in gitkBrandon Casey2007-03-21
| | | | | | | | Preferring git _space_ COMMAND over git _dash_ COMMAND allows the user to have only git and gitk in their path. e.g. when git and gitk are symbolic links in a personal bin directory to the real git and gitk. Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk: bind <F5> key to Update (reread commits)Eric Wong2007-03-12
| | | | | | | | | I chose <F5> because it's also the key to reload the current page in web browsers such as Konqueror and Firefox, so users are more likely to be familiar with it. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* Make gitk save and restore window pane position on Linux and Cygwin.Mark Levedahl2007-02-15
| | | | | | | | | | | | | | | Subtle bugs remained on both Cygwin and Linux that caused the various window panes to be restored in positions different than where the user last placed them. Sergey Vlasov posed a pair of suggested fixes to this, what is done here is slightly different. The basic fix here involves a) explicitly remembering and restoring the sash positions for the upper window, and b) using paneconfigure to redundantly set height and width of other elements. This redundancy is needed as Cygwin Tcl has a nasty habit of setting pane sizes to zero if their slaves are not configured with a specific size, but Linux Tcl does not honor the specific size given. Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
* Make gitk save and restore the user set window position.Mark Levedahl2007-02-15
| | | | | | | | | | | | | | | | gitk was saving widget sizes and positions when the main window was destroyed, which is after all child widgets are destroyed. The cure is to trap the WM_DELETE_WINDOW event before the gui is torn down. Also, the saved geometry was captured using "winfo geometry .", rather than "wm geometry ." Under Linux, these two return different answers and the latter one is correct. [jc: credit goes to Brett Schwarz for suggesting the use of "wm protocol"; I also squashed the follow-up patch to remove extraneous -0 from expressions.] Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
* [PATCH] gitk: Use show-ref instead of ls-remoteJunio C Hamano2007-02-15
| | | | | | | | | It used to be ls-remote on self was the only easy way to grab the ref information. Now we have show-ref which does not involve fork and IPC, so use it. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] Make gitk work reasonably well on Cygwin.Junio C Hamano2007-02-15
| | | | | | | | | | | | | | | | | | | | | | | | The gitk gui layout was completely broken on Cygwin. If gitk was started without previous geometry in ~/.gitk, the user could drag the window sashes to get a useable layout. However, if ~/.gitk existed, this was not possible at all. The fix was to rewrite makewindow, changing the toplevel containers and the particular geometry information saved between sessions. Numerous bugs in both the Cygwin and the Linux Tk versions make this a delicate balancing act: the version here works in both but many subtle variants are competely broken in one or the other environment. Three user visible changes result: 1 - The viewer is fully functional under Cygwin. 2 - The search bar moves from the bottom to the top of the lower left pane. This was necessary to get around a layout problem on Cygwin. 3 - The window size and position is saved and restored between sessions. Again, this is necessary to get around a layout problem on Cygwin. Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk - remove trailing whitespace from a few lines.Mark Levedahl2007-02-15
| | | | | | Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* Change git repo-config to git configPaul Mackerras2007-02-15
| | | | | | This is the gitk part of e0d10e1c63bc52b37bbec99b07deee794058d9b4 from Tom Prince. Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] Make gitk work when launched in a subdirectoryPeter Baumann2007-01-13
| | | | | | | Make gitk use git-rev-parse --git-dir to find the repository. Signed-off-by: Peter Baumann <siprbaum@stud.informatik.uni-erlangen.de> Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk: add current directory to main window titleDoug Maxey2007-01-13
| | | | | | | | This can help people keep track of which gitk is which, when they have several on the screen. Signed-off-by: Doug Maxey <dwm@enoyolf.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Fix enabling/disabling of menu items on Mac OS XPaul Mackerras2006-11-23
| | | | | | | | | | | | | | It seems that under Mac OS X, the menus get some extra entries (or possibly fewer entries), leading to references to entries by an absolute number being off. This leads to an error when invoking gitk --all under Mac OS X, because the "Edit view" and "Delete view" entries aren't were gitk expects them, and so enabling them gives an error. This changes the code so it refers to menu entries by their content, which should solve the problem. Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk: Fix nextfile() and add prevfile()OGAWA Hirofumi2006-10-19
| | | | | | | | | The current nextfile() jumps to last hunk, but I think this is not intention, probably, it's forgetting to add "break;". And this patch also adds prevfile(), it jumps to previous hunk. Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Fix some bugs in the new cherry-picking codePaul Mackerras2006-08-28
| | | | | When inserting the new commit row for the cherry-picked commit, we weren't advancing the selected line (if there is one), and we weren't updating commitlisted properly.
* gitk: Improve responsiveness while reading and layout out the graphPaul Mackerras2006-08-16
| | | | | | | | | | | | This restructures layoutmore so that it can take a time limit and do limited amounts of graph layout and graph optimization, and return 1 if it exceeded the time limit before finishing everything it could do. Also getcommitlines reads at most half a megabyte each time, to limit the time it spends parsing the commits to about a tenth of a second. Also got rid of the unused ncmupdate variable while I was at it. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Update preceding/following tag info when creating a tagPaul Mackerras2006-08-08
| | | | Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Add a menu item for cherry-picking commitsPaul Mackerras2006-08-06
| | | | | | | | | | | This does a git-cherry-pick -r to cherry-pick the commit that was right-clicked on to the head of the current branch. This would work better with some minor changes to the git-cherry-pick script. Along the way, this changes desc_heads to record the names of the descendent heads rather than their IDs. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Fix a couple of buglets in the branch head menu itemsPaul Mackerras2006-08-02
| | | | | | | This fixes a silly typo (an extra a) and fixes the condition for asking for confirmation of removing a branch. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Add a context menu for headsPaul Mackerras2006-08-02
| | | | | | | | | This menu allows you to check out a branch and to delete a branch. If you ask to delete a branch that has commits that aren't on any other branch, gitk will prompt for confirmation before doing the deletion. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Add a row context-menu item for creating a new branchPaul Mackerras2006-08-02
| | | | Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Recompute ancestor/descendent heads/tags when rereading refsPaul Mackerras2006-08-02
| | | | | | | | | We weren't updating the desc_heads, desc_tags and anc_tags arrays when rereading the set of heads/tags/etc. The tricky thing to get right here is restarting the computation correctly when we are only half-way through it. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Minor cleanupsPaul Mackerras2006-07-18
| | | | | | Removed some unnecessary quotes and globals, updated copyright notice. Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Show the currently checked-out head in bold fontPaul Mackerras2006-07-06
| | | | Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Allow the user to set some colorsPaul Mackerras2006-07-05
| | | | | | | | | This makes the colors for the diff old/new lines and hunk headers configurable, as well as the background and foreground (text color) of the various panes. There is now a GUI in the edit->preferences window to set them. Signed-off-by: Paul Mackerras <paulus@samba.org>
* [PATCH] gitk: rereadrefs needs listrefsJunio C Hamano2006-06-12
| | | | | | | | The listrefs procedure was inadvertently removed during the course of development, but there is still a user of it, so resurrect it. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Re-read the descendent/ancestor tag & head info on updatePaul Mackerras2006-06-07
| | | | Signed-off-by: Paul Mackerras <paulus@samba.org>
* gitk: Show branch name(s) as well, if "show nearby tags" is enabledPaul Mackerras2006-06-04
| | | | | | | | | | This is a small extension to the code that reads the complete commit graph, to make it compute descendent heads as well as descendent tags. We don't exclude descendent heads that are descendents of other descendent heads as we do for tags, since it is useful to know all the branches that a commit is on. Signed-off-by: Paul Mackerras <paulus@samba.org>