summaryrefslogtreecommitdiff
path: root/gitk
AgeCommit message (Collapse)AuthorFilesLines
2007-07-26gitk: Fix bugs in the Find functionLibravatar Paul Mackerras1-35/+53
This fixes the problem reported by Brian Downing where searching for a string that doesn't exist would give a Tcl error. The basic problem was that we weren't reading the data for the last commit since it wasn't terminated with a null. This effectively adds a null on the end (if there isn't one already) to make sure we process the last commit. This also makes the yellow background behind instances of the search string appear more consistently, and fixes a bug where the "/" key would just find the same commit again and again instead of advancing. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-23gitk: Wait for the window to become visible after creating itLibravatar Paul Mackerras1-0/+2
When the git log process returned an error immediately, we were sometimes getting no main window and no error window displayed, with the gitk process just hanging waiting for something. It appears that the tkwait in show_error, which waits for the error window to be destroyed, wasn't sufficient to allow the main window or the error window to be mapped. This adds a wait in the main startup code after the main window has been created to wait until it is visible. This seems to fix the problem. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-22[PATCH] gitk: Bind keyboard actions to the command key on Mac OSLibravatar Shawn O. Pearce1-32/+43
git-gui already uses the command key for accelerators, but gitk has never done so. I'm actually finding it very hard to move back and forth between the two applications as git-gui is following the Mac OS X conventions and gitk is not. This trick is the same one that git-gui uses to determine which key to bind actions to. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-22[PATCH] gitk: Ignore ctrl-z as EOF on windowsLibravatar Mark Levedahl1-1/+1
Cygwin's Tcl is configured to honor any occurence of ctrl-z as an end-of-file marker, while some commits in the git repository and possibly elsewhere include that character in the commit comment. This causes gitk ignore commit history following such a comment and incorrect graphs. This change affects only Windows as Tcl on other platforms already has eofchar == {}. This fixes problems noted by me and by Ray Lehtiniemi, and the fix was suggested by Shawn Pierce. Signed-off-by: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-22gitk: Make the fake commit for the index changes green rather than magentaLibravatar Paul Mackerras1-1/+1
The magenta was a bit close in color to the normal blue commits. This makes them green instead as suggested by Linus. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-13gitk: Show changes in index and changes in working directory separatelyLibravatar Paul Mackerras1-57/+138
This makes gitk show up to two fake commits when there are local changes in the repository; one to represent the state of the index and one to represent the state of the working directory. The commit representing the working directory is colored red as before; the commit representing the index state is colored magenta (as being between red and blue in some sense). Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-13gitk: Fix bug introduced by previous commitLibravatar Paul Mackerras1-3/+3
When I added the "--" case to the code scanning the arguments, I missed the fact that since the switch statement uses -regexp, the "--" case will match any argument containing "--", e.g. "--all". This fixes it by taking out the -regexp (since we don't actually need regular expression matching) and adjusting the match strings. A side effect of this is that previously any argument starting with "-d" would be taken to indicate date mode; now the argument has to be exactly "-d" if you want date mode. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-12gitk: Improve handling of -- and ambiguous argumentsLibravatar Paul Mackerras1-20/+29
This makes gitk more consistent with git rev-list and git log in its handling of arguments that could be either a revision or a filename; now gitk displays an error message and quits, rather than treating it as a revision and getting an error in the underlying git log. Now gitk always passes "--" to git log even if no filenames are being specified. It also makes gitk display errors in invoking git log in a window rather than on stderr, and makes gitk stop looking for a -d flag when it sees a "--" argument. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-09gitk: Use git log and add support for --left-rightLibravatar Paul Mackerras1-12/+34
This is based on patches from Linus Torvalds and Junio Hamano, so the ideas here are theirs. This makes gitk use "git log -z --pretty=raw" instead of "git rev-list" to generate the list of commits, and also makes it grok the "<" and ">" markers that git log (and git rev-list) output with the --left-right flag to indicate which side of a symmetric diff a commit is reachable from. Left-side commits are drawn with a triangle pointing leftwards instead of a circle, and right-side commits are drawn with a triangle pointing rightwards. The commitlisted list is used to store the left/right information as well as the information about whether each commit is on the boundary. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-09gitk: Fix bug causing "can't read commitrow(0,n)" errorLibravatar Paul Mackerras1-2/+2
In commit 66e46f37de3ed3211a8ae0e8fc09c063bc3a1e08 I changed gitk to store ids in rowrangelist and idrowranges rather than row numbers, but I missed two places in the layouttail procedure. This resulted in occasional errors such as the "can't read "commitrow(0,8572)": no such element in array" error reported by Mark Levedahl. This fixes it by using the id rather than the row number. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-09[PATCH] gitk: Fix for tree view ending in nested directoriesLibravatar Brian Downing1-0/+3
Unroll the prefix stack when assigning treeheights when leaving proc treeview. Previously, when the ls-tree output ended in multiple nested directories (for instance in a repository with a single file "foo/bar/baz"), $treeheight("foo/bar/") was assigned twice, and $treeheight("foo/") was never assigned. This led to an error when expanding the "foo" directory in the gitk treeview. Signed-off-by: Brian Downing <bdowning@lavos.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-04gitk: Remove the unused stopfindproc functionLibravatar Paul Mackerras1-19/+0
This was a hangover from before the "Files" and "Pickaxe" parts of the Find function were moved to the highlight facility in commit 60f7a7dc4904ba4baab44b70e2675a01e6172f54. It serves no useful purpose any more, so this removes it. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-04gitk: Fix bug in the anc_or_desc routineLibravatar Paul Mackerras1-1/+2
I missed the case where both nodes have no children and therefore have no incoming arcs. This fixes it. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-07-04gitk: Fix the find and highlight functionsLibravatar Paul Mackerras1-138/+185
This reworks the way that the "Find" button (and the /, ?, ^F, and ^G keys) works. Previously, pressing the "Find" button would cause gitk to go off and scan through every commit to see which commits matched, and the user interface was completely unreponsive during that time. Now the searching is done in chunks using the scheduler, so the UI still responds, and the search stops as soon as a matching commit is found. The highlighting of matches using a yellow background is now done in the commit-drawing code and the highlighting code. This ensures that all the commits that are visible that match are highlighted without the search code having to find them all. This also fixes a bug where previously-drawn commits that need to be highlighted were not being highlighted. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-06-28gitk: Update selection background colorbar in prefs dialogLibravatar Mark Levedahl1-1/+1
The callback function was incorrectly set to update the background colorbar when updated the selection background. This did not affect the colors chosen or their use, just their presentation in the preferences dialog box. Signed-off-by: Mark Levedahl <mdl123@verizon.net>
2007-06-28gitk: Use a spinbox for setting tabstop settingsLibravatar Mark Levedahl1-1/+1
The tabstop must be a smallish positive integer, and a spinbox is the accepted UI control to accomplish this limiting rather than the text entry box previously used. Signed-off-by: Mark Levedahl <mdl123@verizon.net>
2007-06-26gitk: Add a progress bar to show progress while resettingLibravatar Paul Mackerras1-7/+45
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>
2007-06-23gitk: Improve handling of whitespace and special chars in filenamesLibravatar Paul Mackerras1-51/+84
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>
2007-06-23gitk: Fix bug causing nearby tags/heads to sometimes not be displayedLibravatar Paul Mackerras1-3/+11
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>
2007-06-23gitk: Limit how often we change the canvas scrolling regionLibravatar Paul Mackerras1-1/+7
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>
2007-06-23gitk: Add a "reset branch to here" row context-menu operationLibravatar Paul Mackerras1-5/+57
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>
2007-06-23gitk: Get rid of the childlist variableLibravatar Paul Mackerras1-29/+17
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>
2007-06-23gitk: Speed up the reading of referencesLibravatar Paul Mackerras1-34/+31
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>
2007-06-23gitk: Show local uncommitted changes as a fake commitLibravatar Paul Mackerras1-53/+284
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>
2007-06-23gitk: New algorithm for drawing the graph linesLibravatar Paul Mackerras1-185/+297
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>
2007-06-23gitk: Store ids in rowrangelist and idrowranges rather than row numbersLibravatar Paul Mackerras1-48/+28
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>
2007-06-23gitk: Disable the head context menu entries for the checked-out branchLibravatar Paul Mackerras1-1/+8
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>
2007-06-23gitk: Cope with commit messages with carriage-returns and initial blank linesLibravatar Paul Mackerras1-6/+14
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>
2007-06-23gitk: Implement a simple scheduler for the compute-intensive stuffLibravatar Paul Mackerras1-253/+310
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>
2007-06-23gitk: Improve the behaviour of the initial selectionLibravatar Paul Mackerras1-8/+30
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>
2007-06-23gitk: Add some more comments to the optimize_rows procedureLibravatar Paul Mackerras1-0/+12
Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-06-23gitk: Don't try to list large numbers of tags or heads in the details paneLibravatar Paul Mackerras1-18/+24
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>
2007-06-23gitk: New infrastructure for working out branches & previous/next tagsLibravatar Paul Mackerras1-350/+890
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>
2007-05-22[PATCH] gitk: Allow specifying tabstop as other than default 8 characters.Libravatar Mark Levedahl1-4/+13
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>
2007-05-22[PATCH] gitk: Update fontsize in patch / tree listLibravatar Mark Levedahl1-1/+2
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>
2007-05-22[PATCH] gitk: Make selection highlight color configurableLibravatar Mark Levedahl1-3/+23
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>
2007-05-22gitk: Use the -q flag to git checkoutLibravatar Paul Mackerras1-1/+1
This avoids having gitk think that an error has occurred in the checkout. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-04-19gitk: Allow user to choose whether to see the diff, old file, or new fileLibravatar Paul Mackerras1-0/+17
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>
2007-04-01[PATCH] Improve look-and-feel of the gitk tool.Libravatar Eygene Ryabinkin1-8/+15
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>
2007-04-01[PATCH] Teach gitk to use the user-defined UI font everywhere.Libravatar Eygene Ryabinkin1-6/+23
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>
2007-03-21[PATCH] prefer "git COMMAND" over "git-COMMAND" in gitkLibravatar Brandon Casey1-2/+2
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>
2007-03-12[PATCH] gitk: bind <F5> key to Update (reread commits)Libravatar Eric Wong1-0/+2
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>
2007-02-15Make gitk save and restore window pane position on Linux and Cygwin.Libravatar Mark Levedahl1-10/+13
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>
2007-02-15Make gitk save and restore the user set window position.Libravatar Mark Levedahl1-5/+6
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>
2007-02-15[PATCH] gitk: Use show-ref instead of ls-remoteLibravatar Junio C Hamano1-2/+2
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>
2007-02-15[PATCH] Make gitk work reasonably well on Cygwin.Libravatar Junio C Hamano1-126/+150
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>
2007-02-15[PATCH] gitk - remove trailing whitespace from a few lines.Libravatar Mark Levedahl1-4/+4
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>
2007-02-15Change git repo-config to git configLibravatar Paul Mackerras1-1/+1
This is the gitk part of e0d10e1c63bc52b37bbec99b07deee794058d9b4 from Tom Prince. Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-01-13[PATCH] Make gitk work when launched in a subdirectoryLibravatar Peter Baumann1-1/+1
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>
2007-01-13[PATCH] gitk: add current directory to main window titleLibravatar Doug Maxey1-0/+1
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>