Code

git.git
16 years agogitk: Arrange to kill diff-files & diff-index on quit
Alexander Gavrilov [Sun, 13 Jul 2008 12:40:47 +0000 (16:40 +0400)]
gitk: Arrange to kill diff-files & diff-index on quit

Local change analysis can take a noticeable amount of time on large
file sets, and produce no output if there are no changes.  Register
the back-ends in commfd, so that they get properly killed on window
close.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Kill back-end processes on window close
Alexander Gavrilov [Sat, 12 Jul 2008 12:09:28 +0000 (16:09 +0400)]
gitk: Kill back-end processes on window close

When collecting commits for a rarely changed, or recently
created file or directory, rev-list may work for a noticeable
period of time without producing any output.  Such processes
don't receive SIGPIPE for a while after gitk is closed, thus
becoming runaway CPU hogs.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Handle detached heads better
Paul Mackerras [Mon, 26 May 2008 00:11:33 +0000 (10:11 +1000)]
gitk: Handle detached heads better

This draws the currently checked-out head with a yellow circle, as
suggested by Linus Torvalds, and fixes various places in the code
where we assumed that the current head always had a branch.  Now we
can display the fake commits for local changes on a detached head.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix bug introduced by "gitk: Fix "wrong # coordinates" error on reload"
Paul Mackerras [Thu, 22 May 2008 11:12:19 +0000 (21:12 +1000)]
gitk: Fix bug introduced by "gitk: Fix "wrong # coordinates" error on reload"

Commit 94503a66c56c935e77a8fbe3622f1f56b7134ccc ("gitk: Fix "wrong #
coordinates" error on reload") was correct as far as it went, but
introduced a problem because it didn't also clear out boldrows and
boldnamerows in clear_display.  This resulted in Tcl errors after
scrolling through the graph for a while if some rows were highlighted.
This fixes it.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix bug where current row number display stops working
Paul Mackerras [Tue, 20 May 2008 10:51:06 +0000 (20:51 +1000)]
gitk: Fix bug where current row number display stops working

The display of the current row number would stop working if the user
clicked on a line, or if selectedline got unset for any other reason,
because the trace on it got lost when it was unselected.  This fixes
it by changing the places that unset selectedline to set it to the
empty string instead, and the places that tested for it being set or
unset to compare it with the empty string.  Thus it never gets unset
now.  This actually simplified the code in a few places since it can
be compared for equality with a row number now without first testing
if it is set.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Move es.po where it belongs
Michele Ballabio [Sat, 17 May 2008 17:16:31 +0000 (19:16 +0200)]
gitk: Move es.po where it belongs

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix "wrong # coordinates" error on reload
Paul Mackerras [Sun, 18 May 2008 23:48:45 +0000 (09:48 +1000)]
gitk: Fix "wrong # coordinates" error on reload

This fixes the Tk error "wrong # coordinates: expected 0 or 4, got 2"
that sometimes occurred when reloading.  The problem was that we didn't
unset the variables containing the canvas item id numbers for the
displayed rows when we cleared the canvases.  Thus make_secsel would
think it had something to do when it didn't.

Thanks to Michele Ballabio for finding a way to trigger the bug
reliably.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Add a progress bar for checking out a head
Paul Mackerras [Mon, 12 May 2008 00:18:38 +0000 (10:18 +1000)]
gitk: Add a progress bar for checking out a head

Now that git checkout reports progress when checking out files, we
can use that to provide a progress bar in gitk.  We re-use the green
progress bar (formerly used when reading stuff in) for that.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Show current row number and total number of rows
Paul Mackerras [Sun, 11 May 2008 12:13:02 +0000 (22:13 +1000)]
gitk: Show current row number and total number of rows

This adds a couple of fields in the bar just below the upper panes
that show the row number of the currently selected commit, and how
many rows are displayed in total.  The latter increments as commits
are read in, and thus functions to show that progress is being made.
This therefore also removes the code that showed progress using a
green oscillating bar in the progress bar window (which some people
disliked).

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agoMerge branch 'master' into dev
Paul Mackerras [Sun, 11 May 2008 00:50:14 +0000 (10:50 +1000)]
Merge branch 'master' into dev

16 years agogitk: Allow users to view diffs in external diff viewer
Thomas Arcila [Mon, 24 Mar 2008 11:55:36 +0000 (12:55 +0100)]
gitk: Allow users to view diffs in external diff viewer

This allows gitk to run an external diff viewer such as meld.

Right-click on a file in the file list view gives "External diff"
popup menu entry, which launches the selected external diff tool.
The menu entry is only active in "Patch" mode, not in "Tree" mode.

The program to run to display the diff is configurable through
Edit/Preference/External diff tool.  The program is run with two
arguments, being the names of files containing the two versions to
diff.  Gitk will create temporary directories called
.gitk-tmp.<pid>/<n> to place these files in, and remove them when
it's finished.

If the file doesn't exist in one or other revision, gitk will supply
/dev/null as the name of the file on that side of the diff.  This may
need to be adjusted for Windows or MacOS.

[paulus@samba.org - cleaned up and rewrote some parts of the patch.]

Signed-off-by: Thomas Arcila <thomas.arcila@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Synchronize highlighting in file view for 'f' and 'b' commands
Paul Mackerras [Sat, 10 May 2008 03:15:36 +0000 (13:15 +1000)]
gitk: Synchronize highlighting in file view for 'f' and 'b' commands

This is based on a patch by Eric Raible <raible@gmail.com>, but does
things a bit more simply.

Previously, 'b', backspace, and delete all did the same thing.
This changes 'b' to perform the inverse of 'f'.  And both of
them now highlight the filename of the currently diff.

This makes it easier to review and navigate the diffs associated
with a particular commit using only f, b, and space because the
filename of the currently display diff will be dynamically
highlighted.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Make updates go faster
Paul Mackerras [Fri, 9 May 2008 00:14:07 +0000 (10:14 +1000)]
gitk: Make updates go faster

This goes back to the method of doing updates where we translate the
revisions we're given to SHA1 ids and then remove the ones we've asked
for before or that we've already come across.  This speeds up updates
enormously in most cases since it means git log doesn't have to traverse
large parts of the tree.  We used to do this, but it had bugs, and commit
468bcaedbb1589f16955e63b6bfba01c2f53e433 (gitk: Don't filter view
arguments through git rev-parse) went to the slower method to avoid the
bugs.

In order to do this properly, we have to parse the command line and
understand all the flag arguments.  So this adds a parser that checks
all the flag arguments.  If there are any we don't know about, we
disable the optimization and just pass the whole lot to git log
(except for -d/--date-order, which we remove from the list).

With this we can then use git rev-parse on the non-flag arguments to
work out exactly what SHA1 ids are included and excluded in the list,
which then enables us to ask for just the new ones when updating.
One wrinkle is that we have to turn symmetric diff arguments (of the
form a...b) back into symmetric diff form so that --left-right still
works, as git rev parse turns a...b into a b ^merge_base(a,b).

This also updates a couple of copyright notices.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Disable "Reset %s branch to here" when on a detached head
Michele Ballabio [Fri, 2 May 2008 15:46:20 +0000 (17:46 +0200)]
gitk: Disable "Reset %s branch to here" when on a detached head

When we are on a detached head - since gitk does not display where
we are - reset has no sense, so disable the relevant line on the
context menu, and point out to the user that we are on a detached head.

Otherwise, a reset from gitk when on a detached head returns the
error:

can't read "headids()": no such element in array
can't read "headids()": no such element in array
    while executing
"removehead $headids($name) $name"
    (procedure "movehead" line 4)
    invoked from within
"movehead $newhead $mainhead"
    (procedure "readresetstat" line 20)
    invoked from within
"readresetstat file4"
    ("eval" body line 1)
    invoked from within
"eval $script"
    (procedure "dorunq" line 9)
    invoked from within
"dorunq"
    ("after" script)

[paulus@samba.org: changed menu item to "Detached head: can't reset"]

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: German translation again updated
Christian Stimming [Fri, 2 May 2008 19:33:34 +0000 (21:33 +0200)]
gitk: German translation again updated

This includes suggestions by Stephan Beyer.

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Update German translation
Christian Stimming [Thu, 1 May 2008 19:38:37 +0000 (21:38 +0200)]
gitk: Update German translation

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Makefile/install: force permissions when installing files and dirs
Gerrit Pape [Mon, 14 Apr 2008 08:27:09 +0000 (08:27 +0000)]
gitk: Makefile/install: force permissions when installing files and dirs

The msg-files msgs/*.msg used to be installed with mode 755 although
they're not executables.  With this commit, files are forced to be
installed with mode 644, directories and executables with mode 755.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Initial Swedish translation.
Peter Karlsson [Fri, 14 Mar 2008 15:13:17 +0000 (16:13 +0100)]
gitk: Initial Swedish translation.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Spanish translation of gitk
Santiago Gala [Tue, 25 Mar 2008 10:48:22 +0000 (11:48 +0100)]
gitk: Spanish translation of gitk

I copied the Italian translation and translated the strings
to Spanish starting from there.  This incorporates suggestions
from Wincent Colaiuta and Carlos Rica.

Signed-off-by: Santiago Gala <sgala@apache.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix handling of tree file list with special chars in names
Paul Mackerras [Sun, 27 Apr 2008 23:40:50 +0000 (09:40 +1000)]
gitk: Fix handling of tree file list with special chars in names

Alex Riesen pointed out that displaying a commit in 'tree' mode fails
if some files have names with special characters such as '{' or '}' in
them, due to the fact that we treat the line returned from git ls-tree
as a Tcl list at one point.

This fixes it by doing what I originally intended but didn't quite
get right.  We split the line from git ls-tree at the first tab and
treat the part before the tab as a list (which is OK since it doesn't
have special characters in it) and the part after the tab as the
filename.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Reorganize processing of arguments for git log
Paul Mackerras [Sat, 26 Apr 2008 06:00:00 +0000 (16:00 +1000)]
gitk: Reorganize processing of arguments for git log

This moves the scanning of the argument list for each view into a
new function, parseviewargs, which is called from start_rev_list.
This also makes the date mode and the merge mode be per-view rather
than global.  In merge mode, we work out the list of relevant files
in a new function called from start_rev_list, so it will be updated
on File->Reload.  Plus we now do that after running the argscmd, so
if we have one and it generates a -d or --merge option they will be
correctly handled now.

The other thing this does is to make errors detected in start_rev_list
not be fatal.  Now instead of doing exit 1 we just pop up and error
window and put "No commits selected" in the graph pane.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix changing colors through Edit->Preferences
Gerrit Pape [Wed, 26 Mar 2008 18:45:26 +0000 (18:45 +0000)]
gitk: Fix changing colors through Edit->Preferences

With tcl/tk8.5 the lset command seems to behave differently.  When
changing the background color through Edit->Preferences, the changes
are applied, but new dialogs, such as View->New view... barf with

 Error: unknown color name "{#ffffff}"

Additionally when closing gitk, and starting it up again, a bad value
has been saved to ~/.gitk, preventing gitk from running properly; it
fails with

 Error in startup script: unknown color name "{#ffffff}"
 ...

This commit fixes the problem by changing the color dialogs to pass
the empty string {} as the list index to choosecolor.  This causes
the lset and lindex commands used by choosecolor to use and set the
whole variable (bgcolor, fgcolor or selectbgcolor) rather than
treating them as a 1-element list.  Tested with tcl/tk8.4 and 8.5.

Dmitry Potapov reported this problem through
 http://bugs.debian.org/472615

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: initial Italian translation
Michele Ballabio [Thu, 13 Mar 2008 16:46:30 +0000 (17:46 +0100)]
gitk: initial Italian translation

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Default to using po2msg.sh if msgfmt doesn't grok --tcl, -l and -d
Paul Mackerras [Fri, 14 Mar 2008 09:24:31 +0000 (20:24 +1100)]
gitk: Default to using po2msg.sh if msgfmt doesn't grok --tcl, -l and -d

This is a similar change to that submitted by Junio C Hamano for
git-gui.  It tests whether the msgfmt command can be run successfully
with --tcl, -l and -d, and if not, falls back to using po/po2msg.sh.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agoMerge branch 'master' into dev
Paul Mackerras [Tue, 11 Mar 2008 11:21:39 +0000 (22:21 +1100)]
Merge branch 'master' into dev

16 years agogitk: Avoid Tcl error when switching views
Paul Mackerras [Tue, 11 Mar 2008 11:11:19 +0000 (22:11 +1100)]
gitk: Avoid Tcl error when switching views

Michele Ballabio <barra_cuda@katamail.com> pointed out that gitk
sometimes throws a Tcl error (can't read "yscreen") when switching
views, and proposed a patch.  This is a different way of fixing it
which is a bit neater.  Basically, in showview we only set yscreen if
the selected commit is on screen to start with, and then we only
scroll the canvas to bring it onscreen if yscreen is set and the
same commit exists in the new view.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Don't show local changes when we there is no work tree
David Aguilar [Mon, 10 Mar 2008 10:54:56 +0000 (03:54 -0700)]
[PATCH] gitk: Don't show local changes when we there is no work tree

Launching gitk on a bare repository or a .git directory
would previously show the work tree as having removed all
files.  We now inhibit showing local changes when gitk
is not launched from within a work tree.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Add horizontal scrollbar to the diff view
Pekka Kaitaniemi [Sat, 8 Mar 2008 12:27:23 +0000 (14:27 +0200)]
[PATCH] gitk: Add horizontal scrollbar to the diff view

Adding horizontal scroll bar makes the scrolling feature more
discoverable to the users.  The horizontal scrollbar is a bit narrower
than vertical ones so we don't make too big impact on available screen
real estate.  The text and scrollbar widget layout is done using grid
geometry manager.

An interesting side effect of Tk scrollbars is that the "elevator"
size changes depending on the visible content. So the horizontal
scrollbar "elevator" changes as the user scrolls the view up and down.

Signed-off-by: Pekka Kaitaniemi <kaitanie@cc.helsinki.fi>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: make autoselect optional
Jeff King [Thu, 6 Mar 2008 11:49:25 +0000 (06:49 -0500)]
[PATCH] gitk: make autoselect optional

Whenever a commit is selected in the graph pane, its SHA1 is
automatically put into the selection buffer for cut and paste.
However, some users may find this behavior annoying since it can
overwrite something they actually wanted to keep in the buffer.

This makes the behavior optional under the name "Auto-select SHA1",
but continues to default to "on".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Mark another string for translation
Michele Ballabio [Mon, 3 Mar 2008 20:12:47 +0000 (21:12 +0100)]
[PATCH] gitk: Mark another string for translation

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] Add an --argscmd flag to get the list of refs to show
Yann Dirson [Thu, 21 Feb 2008 20:23:31 +0000 (21:23 +0100)]
[PATCH] Add an --argscmd flag to get the list of refs to show

This allows gitk to be used to display a different set of refs each
the display is refreshed.  This is useful when gitk is called from
other porcelain suites, for doing such things as displaying the set of
patches in a patch stack.

The user specifies a command as the argument to the --argscmd option.
The command is run initially and each time the display is refreshed,
and is expected to generate a list of commit IDs, one per line.  Those
commits are appended to the commits passed on the command-line when
constructing the git log command to be executed.

The command is considered to be an attribute of a view, and has its
own field in the saved view, and an edit field in the view editor.

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Only restore window size from ~/.gitk, not position
Paul Mackerras [Mon, 10 Mar 2008 05:50:34 +0000 (16:50 +1100)]
gitk: Only restore window size from ~/.gitk, not position

This also limits the window size to the screen size.  That is better
than nothing, but it isn't perfect, since ideally we would take into
account window decorations, and things such as gnome panels or the
Mac OS X dock and menu bar, but I don't know how to do that.

On Cygwin this is as good as restoring the whole geometry (size and
position) at working around the Cygwin Tk bugs, according to Mark
Levedahl.

Tested-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix problem with target row not being in scroll region
Paul Mackerras [Fri, 7 Mar 2008 11:51:55 +0000 (22:51 +1100)]
gitk: Fix problem with target row not being in scroll region

Since we limit the rate at which we do updates to the canvas scrolling
regions, it's possible to get into selectline for a row that is
outside the currently-set scrolling region.  When this happens,
selectline can't scroll to show the selected line, and as a
consequence, drawvisible chooses some other bogus row to be the
target row.

This fixes it by calling setcanvscroll from selectline in this case.
We also set selectedline (and currentid) before calling drawvisible
so that drawvisible makes the right choice of target row.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Avoid a crash in selectline if commitinfo($id) isn't set
Paul Mackerras [Fri, 7 Mar 2008 10:19:18 +0000 (21:19 +1100)]
gitk: Avoid a crash in selectline if commitinfo($id) isn't set

Occasionally I see a crash in selectline with commitinfo($id) not
set.  This makes sure it is set by calling getcommit $id if it isn't.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix some corner cases in computing vrowmod and displayorder
Paul Mackerras [Tue, 4 Mar 2008 10:32:38 +0000 (21:32 +1100)]
gitk: Fix some corner cases in computing vrowmod and displayorder

First, insertfakerow and removefakerow weren't updating vrowmod,
and hence displayorder was not getting updated when it needed to,
in the case where the fake row was being inserted into or removed
from the last arc.  The comparison of varctok vs vtokmod was moved
into modify_arc for these cases (and for the call in rewrite_commit)
to avoid duplicating the extra code needed.  Second, the logic in
update_arcrows didn't end up truncating displayorder and unsetting
cached_commitrow if the first modified row was in the last arc.
This fixes these problems.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Correct a few strings and comments to say "git log"
Paul Mackerras [Tue, 4 Mar 2008 10:14:17 +0000 (21:14 +1100)]
gitk: Correct a few strings and comments to say "git log"

... instead of "git rev-list", since we now use git log for
generating the list of commits.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Don't filter view arguments through git rev-parse
Paul Mackerras [Sun, 2 Mar 2008 23:19:35 +0000 (10:19 +1100)]
gitk: Don't filter view arguments through git rev-parse

Previously we passed the arguments indicating what commits the user
wants to view through git rev-parse to get a list of IDs (positive and
negative), then gave that to git log.  This had a couple of problems,
notably that --merge and --left-right didn't get handled properly.

Instead we now just pass the original arguments to git log.  When doing
an update, we append --not followed by the list of commits we have seen
that have no children, since we have got (or will get) their ancestors
from the first git log.  If the first git log isn't finished yet, we
might get some duplicates from the second git log, but that doesn't
cause any problem.

Also get rid of the unused vnextroot variable.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix problems with target row stuff
Paul Mackerras [Sun, 2 Mar 2008 23:11:08 +0000 (10:11 +1100)]
gitk: Fix problems with target row stuff

Occasionally the target row stuff would scroll the display to some
uninteresting commit while reading.  There were two problems: one
was that drawvisible would set targetrow even if there was no target
previously and no row selected, and the other was that it was possible
for the target row to get pushed down past numcommits, if drawvisible
was called after rows were added but before layoutmore got run.

The first problem is fixed by just not setting targetrow/id unless
there is a selected row or they were set previously.

The second problem is fixed by updating numcommits immediately new
rows are added.  This leads to a simplification of layoutmore and
chewcommits but also means that some of the things that were done in
layoutmore now need to be done elsewhere, since layoutmore can no
longer use numcommits to know how much it has seen previously.
Hence the changes to getcommits, initlayout and setcanvscroll.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Handle updating with path limiting better
Paul Mackerras [Sun, 24 Feb 2008 01:16:56 +0000 (12:16 +1100)]
gitk: Handle updating with path limiting better

When updating the graph, gitk uses a git log command with commit
limiting in order to get just the new commits.  When path limiting
is also in effect, git log rewrites the parents of the commits it
outputs in order to represent just the subgraph that modifies the
listed paths, but it doesn't rewrite the parents on the boundary
of the graph.  The result is that when updating, git log does not
give gitk the information about where the new commits join in to
the existing graph.

This solves the problem by explicitly rewriting boundary parents
when updating.  If we are updating and are doing path limiting,
then when gitk finds an unlisted commit (one where git log puts a
"-" in front of the commit ID to indicate that it isn't actually
part of the graph), then gitk will execute:

    git rev-list --first-parent --max-count=1 $id -- paths...

which returns the first ancestor that affects the listed paths.
(Currently gitk executes this synchronously; it could do it
asynchronously, which would be more complex but would avoid the
possibility of the UI freezing up if git rev-list takes a long time.)

Then, if the result is a commit that we know about, we rewrite the
parents of the children of the original commit to point to the new
commit.  That is mostly a matter of adjusting the parents and children
arrays and calling fix_reversal to fix up the graph.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix bug where arcs could get lost
Paul Mackerras [Sun, 17 Feb 2008 23:44:33 +0000 (10:44 +1100)]
gitk: Fix bug where arcs could get lost

Because we weren't fixing up vlastins when moving an arc from one
place to another, it was possible for us later to decide to move
an arc to the wrong place, and end up with an arc disconnected from
the rest of the graph.  This fixes it by updating vlastins when
necessary.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agoMerge branch 'master' into dev
Paul Mackerras [Sat, 16 Feb 2008 11:24:52 +0000 (22:24 +1100)]
Merge branch 'master' into dev

16 years agogitk: Cope better with getting commits that we have already seen
Paul Mackerras [Sat, 16 Feb 2008 06:47:31 +0000 (17:47 +1100)]
gitk: Cope better with getting commits that we have already seen

This fixes a bug in updating the graph after we have cherry-picked
a commit in gitk and then added some new stuff externally.  First,
we weren't updating viewincl with the new head added by the cherry-
pick.  Secondly, getcommitlines was doing bad things if it saw a
commit that was already in the graph (was already in an arc).  This
fixes both things.  If getcommitlines sees a commit that is already
in the graph, it ignores it unless it was not listed before and is
listed now.  In that case it doesn't assign it a new arc now, and
doesn't re-add the commit to its arc.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Heed the lines of context in merge commits
Johannes Sixt [Wed, 13 Feb 2008 16:27:30 +0000 (17:27 +0100)]
[PATCH] gitk: Heed the lines of context in merge commits

There is an edit box where the number of context lines can be chosen.
But it was only used when regular diffs were displayed, not for
merge commits.   This fixes it.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: learn --show-all output
Linus Torvalds [Sat, 9 Feb 2008 22:02:07 +0000 (14:02 -0800)]
[PATCH] gitk: learn --show-all output

It's really not very easy to visualize the commit walker,
because - on purpose - it obvously doesn't show the
uninteresting commits!

We will soon add a "--show-all" flag to the revision walker,
which will make it show uninteresting commits too, and they'll
have a '^' in front of them.

This is to update 'gitk' to show those negative commits in gray
to futureproof it.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix cherry-picking to insert a real row not a fake row
Paul Mackerras [Wed, 13 Feb 2008 11:12:31 +0000 (22:12 +1100)]
gitk: Fix cherry-picking to insert a real row not a fake row

The insertrow/removerow functions were really only suitable for
inserting/removing a fake row such as the ones used for showing
the local changes.  When used to insert a real new row from a
cherry-pick, they left things in an inconsistent state which then
caused various strange layout errors.

This renames insertrow/removerow to insertfakerow/removefakerow
and adds a new insertrow that does actually go to all the trouble
of creating a new arc and setting it up.  This is more work but
keeps things consistent.

This also fixes a bug where cherrypick was not setting mainheadid,
and one where selectline wasn't always resulting in targetrow/id
being set to the selected row/id.  Also insert/removefakerow now
adjust numcommits and call setcanvscroll.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: properly deal with tag names containing / (slash)
Gerrit Pape [Mon, 11 Feb 2008 10:57:40 +0000 (10:57 +0000)]
[PATCH] gitk: properly deal with tag names containing / (slash)

When creating a tag through gitk, and the tag name includes a slash (or
slashes), gitk errors out in a popup window.  This patch makes gitk use
'git tag' to create the tag instead of modifying files in refs/tags/,
which fixes the issue; if 'git tag' throws an error, gitk pops up with
the error message.

The problem was reported by Frédéric Brière through
 http://bugs.debian.org/464104

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Add checkbutton to ignore space changes
Steffen Prohaska [Thu, 17 Jan 2008 22:42:55 +0000 (23:42 +0100)]
[PATCH] gitk: Add checkbutton to ignore space changes

Ignoring space changes can be helpful.  For example, a commit
claims to only reformat source code and you quickly want to
verify if this claim is true.  Or a commit accidentally changes
code formatting and you want to focus on the real changes.

In such cases a button to toggle of whitespace changes would be
quite handy.  You could quickly toggle between seeing and
ignoring whitespace changes.

This commit adds such a checkbutton right above the diff view.

However, in general it is a good thing to see whitespace changes
and therefore the state of the checkbutton is not saved. For
example, space changes might happen unintentionally.  But they are
real changes yielding different sha1s for the blobs involved.

Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Fix "Key bindings" message
Michele Ballabio [Tue, 15 Jan 2008 22:31:49 +0000 (23:31 +0100)]
[PATCH] gitk: Fix "Key bindings" message

The "Key bindings" message under the "Help" menu was too long
and could not be parsed by the translation engine.

Fix both issues by translating one line at a time.

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix bug causing Tcl error when no commits are selected
Paul Mackerras [Tue, 15 Jan 2008 11:45:36 +0000 (22:45 +1100)]
gitk: Fix bug causing Tcl error when no commits are selected

Some of the stuff that commit 31c0eaa8cc10944ebca8aa31fb59f0b77b1b6e77
added to drawvisible isn't appropriate to do when we have no commits,
and this was causing a Tcl error if gitk was invoked in such a fashion
that no commits were selected.  This fixes it by bailing out of
drawvisible early if there are no commits displayed.

Bug reported by Johannes Sixt.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix bug where editing an existing view would cause an infinite loop
Paul Mackerras [Tue, 15 Jan 2008 11:30:40 +0000 (22:30 +1100)]
gitk: Fix bug where editing an existing view would cause an infinite loop

This fixes a bug where changing the commit range or file list for an
existing view and then clicking OK would cause gitk to go into an
infinite loop.  The problem was that newviewok was invoking reloadcommits
via "run reloadcommits", but reloadcommits wasn't explicitly returning
0, and whatever it was returning was causing dorunq to run it over
and over again.  This fixes it by making reloadcommits return 0.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Select something appropriate on cherry-pick, branch reset and checkout
Paul Mackerras [Tue, 15 Jan 2008 11:16:32 +0000 (22:16 +1100)]
gitk: Select something appropriate on cherry-pick, branch reset and checkout

This makes gitk select the new commit when cherry-picking, and select
the new checked-out head when resetting or checking out a branch.
This feels more natural because the user is usually more interested
in that commit now than whatever was selected before.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: make Ctrl "+" really increase the font size
Johannes Schindelin [Fri, 11 Jan 2008 12:39:33 +0000 (12:39 +0000)]
[PATCH] gitk: make Ctrl "+" really increase the font size

Only Ctrl "=" was bound to increase the font size, probably because
English keyboards have the plus on the same key as the equal sign.
However, not the whole world is English, and at least with some
other keyboard layouts, Ctrl "+" did not work as documented.

Noticed by Stephan Hennig.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Select head of current branch by default
Paul Mackerras [Sun, 13 Jan 2008 06:26:30 +0000 (17:26 +1100)]
gitk: Select head of current branch by default

Instead of selecting the first commit that appears, this makes gitk
select the currently checked out head, if the user hasn't explicitly
selected some other commit by the time it appears.  If the head hasn't
appeared by the time the graph is complete, then we select the first
real commit.

This applies both for graph updates and when the graph is being read
in initially.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix a bug in make_disporder
Paul Mackerras [Sat, 12 Jan 2008 10:46:31 +0000 (21:46 +1100)]
gitk: Fix a bug in make_disporder

The make_disporder function has an optimization where it assumed that
if displayorder was already long enough and the first entry in it for
a particular arc was non-null, then the whole arc was present.  This
turns out not to be true in some circumstances, since we can add a
commit to an arc (which truncates displayorder to the previous end of
that arc), then call make_disporder for later arcs (which will pad
displayorder with null elements), then call make_disporder for the
first arc - which won't update the null elements.

This fixes it by changing the optimization to check the last element
for the arc instead of the first.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Update German translation.
Christian Stimming [Wed, 9 Jan 2008 21:21:58 +0000 (22:21 +0100)]
gitk: Update German translation.

Now 100% complete (163 strings).

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogitk: Fix typo in user message.
Christian Stimming [Wed, 9 Jan 2008 21:23:18 +0000 (22:23 +0100)]
gitk: Fix typo in user message.

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogitk: Fix the Makefile to cope with systems lacking msgfmt
Charles Bailey [Wed, 9 Jan 2008 14:31:09 +0000 (14:31 +0000)]
gitk: Fix the Makefile to cope with systems lacking msgfmt

The po2msg.sh script and the .gitignore in the po directory have been
shamelessly copied from the current git-gui.  This enables the top
level "make NO_MSGFMT" to work consistently for git across the git-gui
and gitk sub-projects.

This is the same effective patch that has previously been posted as a
git.git patch which more succinctly described the copying of
po/.gitignore and po/po2msg.sh from git-gui.

Signed-off-by: Charles Bailey <charles@hashpling.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogitk: Fix handling of flag arguments
Paul Mackerras [Thu, 10 Jan 2008 10:44:39 +0000 (21:44 +1100)]
gitk: Fix handling of flag arguments

Despite the name, the --revs-only flag to git rev-parse doesn't make
it output only revision IDs.  It makes it output only arguments that
are suitable for giving to git rev-list.  So make start_rev_list and
updatecommits cope with arguments output by git rev-parse that aren't
revision IDs.  This way we won't get an error when an argument such as
"-300" has been given to gitk and the view is updated.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agoMerge branch 'master' into dev
Paul Mackerras [Wed, 9 Jan 2008 03:23:30 +0000 (14:23 +1100)]
Merge branch 'master' into dev

16 years ago[PATCH] gitk: use user-configured background in view definition dialog
Gerrit Pape [Wed, 9 Jan 2008 03:19:47 +0000 (14:19 +1100)]
[PATCH] gitk: use user-configured background in view definition dialog

Have the text fields in the view definition dialog (View->New view...)
use the background color as configured through the preferences, instead
of hard-coded 'white'.

This was suggested by Paul Wise through http://bugs.debian.org/457124

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Update German translation
Christian Stimming [Wed, 9 Jan 2008 03:13:22 +0000 (14:13 +1100)]
[PATCH] gitk: Update German translation

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk: Update and fix Makefile
Christian Stimming [Wed, 9 Jan 2008 03:12:18 +0000 (14:12 +1100)]
[PATCH] gitk: Update and fix Makefile

This Makefile uses the template provided at git.git/gitk-git/Makefile
by Junio and adds the rules for the i18n files.

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Index [fnvr]highlights by id rather than row
Paul Mackerras [Mon, 7 Jan 2008 11:16:31 +0000 (22:16 +1100)]
gitk: Index [fnvr]highlights by id rather than row

This means that we don't have to keep clearing them out whenever we
change the row numbers for some commits.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agoMerge branch 'master' into dev
Paul Mackerras [Sun, 6 Jan 2008 11:19:03 +0000 (22:19 +1100)]
Merge branch 'master' into dev

16 years agogitk: Restore some widget options whose defaults changed in Tk 8.5
Paul Mackerras [Sun, 6 Jan 2008 04:54:46 +0000 (15:54 +1100)]
gitk: Restore some widget options whose defaults changed in Tk 8.5

The default options for panedwindows in Tk 8.5 make the sash
virtually invisible -- the handle is not shown and the relief is
flat.  This puts the defaults back to showing the handle and a
raised relief on the sash, as in Tk 8.4.

This uses the option command to do this, and also uses the option
command to set the default font for various UI elements to the
UI font ("uifont").

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix potential bug with fake commit IDs in renumbervarc
Paul Mackerras [Sun, 6 Jan 2008 02:54:58 +0000 (13:54 +1100)]
gitk: Fix potential bug with fake commit IDs in renumbervarc

When a fake row is added, we add its (fake) ID to the children list
for its (fake) parent.  If renumbervarc were to then renumber the
parent it would incorrectly use the fake child.  This avoids the
problem by adding a last_real_child procedure which won't return
a fake ID, and using it in renumbervarc.  For symmetry this also adds
a first_real_child procedure and uses it in ordertoken.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix a couple of bugs in the find function
Paul Mackerras [Wed, 2 Jan 2008 10:44:06 +0000 (21:44 +1100)]
gitk: Fix a couple of bugs in the find function

First, findmore would sometimes get a Tcl error due to relying on
varcorder and vrownum having valid values for the rows being searched,
but they may not be valid unless update_arcrows is called, so this
makes findmore call update_arcrows if necessary.

Secondly, in the "touching paths" and "adding/removing string" modes,
findmore was treating fhighlights($row) == -1 as meaning the row
matches, whereas it only means that we haven't received an answer from
the external git diff-tree process about it yet.  This fixes it.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix some corner cases in the targetid/targetrow stuff
Paul Mackerras [Tue, 1 Jan 2008 22:59:39 +0000 (09:59 +1100)]
gitk: Fix some corner cases in the targetid/targetrow stuff

* Make sure targetrow is never >= numcommits
* Don't try to do anything about the target row if the targetid is
  no longer in the view; it'll just cause Tcl errors
* In insertrow, increment targetrow if we are inserting the fake
  commit at or before the target row
* In removerow, if we are removing the target row, make it the next
  one instead.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agoMerge branch 'master' into dev
Paul Mackerras [Mon, 31 Dec 2007 01:49:22 +0000 (12:49 +1100)]
Merge branch 'master' into dev

16 years agogitk: Recode de.po to UTF-8
Paul Mackerras [Mon, 31 Dec 2007 01:49:13 +0000 (12:49 +1100)]
gitk: Recode de.po to UTF-8

Somehow de.po got recoded to latin-1 in the process of committing it.
This recodes it back to UTF-8.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Keep the same commits visible as other commits come in
Paul Mackerras [Sun, 30 Dec 2007 11:41:14 +0000 (22:41 +1100)]
gitk: Keep the same commits visible as other commits come in

Since commits come in out of order and get sorted as we see them,
we can have commits coming in and being placed before the commits
that are visible in the graph display pane.  Previously we just
displayed a certain range of row numbers, meaning that when
incoming commits were placed before the displayed range, the
displayed commits were displaced downwards.  This makes it so
that we keep the same set of commits displayed, unless the user
explicitly scrolls the pane, in which case it scrolls as expected.

We do this by having a "target" commit which we try to keep in the
same visible position.  If commits have come in before it we scroll
the canvases by the number of rows that it has moved in the display
order.

This also fixes a bug in rowofcommit where it would test
cached_commitrow before possibly calling update_arcrows, which is
where cached_commitrow gets invalidated if things have changed.
Now we call update_arcrows if necessary first.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Don't try to show local changes from a head that isn't shown
Paul Mackerras [Sat, 29 Dec 2007 10:13:34 +0000 (21:13 +1100)]
gitk: Don't try to show local changes from a head that isn't shown

When updating the display, if the checked-out head has moved on and
isn't currently shown, and there are local changes, we could try to
insert a fake row with a parent that isn't displayed, leading to a
Tcl error.  This is because we check whether the checked-out head
is displayed before rereading the references (which is when we discover
that the head has moved).  This fixes it.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix another collection of bugs
Paul Mackerras [Wed, 26 Dec 2007 12:03:43 +0000 (23:03 +1100)]
gitk: Fix another collection of bugs

* Fixed a bug that occasionally resulted in Tcl "can't use empty string
  as argument to incr" errors - rowofcommit was sometimes not calling
  update_arcrows when it needed to.

* Fixed a "no such element in array" error when removing a fake row,
  by unsetting currentid and selectedline in removerow if the row we
  are removing is the currently selected row.

* Made the "update commits" function always do "reread references".

* Made dodiffindex et al. remove the fake row(s) if necessary.

* Fixed a bug where clicking on a row in the graph display pane didn't
  account for horizontal scrolling of the pane.

* Started changing things that cached information based on row numbers
  to use commit IDs instead -- this converts the "select line" items
  that are put into the history list to use "select by ID" instead.

* Simplified redrawtags a bit, and fixed a bug where it would use the
  mainfont for working out how far it extends to the right in the graph
  display pane rather than the actual font (which might be bold).

* Fixed a bug where "reread references" wouldn't notice if the currently
  checked-out head had changed.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agoMerge branch 'master' into dev
Paul Mackerras [Wed, 19 Dec 2007 23:25:50 +0000 (10:25 +1100)]
Merge branch 'master' into dev

16 years ago[PATCH] gitk i18n: Recode gitk from latin1 to utf8 so that the (c) copyright characte...
Christian Stimming [Wed, 7 Nov 2007 17:47:04 +0000 (18:47 +0100)]
[PATCH] gitk i18n: Recode gitk from latin1 to utf8 so that the (c) copyright character is valid utf8.

When using translations, the target language must be encoded in utf-8
because almost all target languages will contain non-ascii characters.
For that reason, the non-translated strings should be in utf-8 as well
so that there isn't any encoding mixup inside the program.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk i18n: More markup -- various options menus
Christian Stimming [Wed, 7 Nov 2007 17:44:35 +0000 (18:44 +0100)]
[PATCH] gitk i18n: More markup -- various options menus

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk i18n: Initial German translation
Christian Stimming [Wed, 7 Nov 2007 17:44:02 +0000 (18:44 +0100)]
[PATCH] gitk i18n: Initial German translation

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk i18n: Markup several strings for translation
Christian Stimming [Wed, 7 Nov 2007 17:42:55 +0000 (18:42 +0100)]
[PATCH] gitk i18n: Markup several strings for translation

This just marks up plain strings, that aren't used in any unusual way.

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk i18n: Import msgcat for message string translation; load translation...
Christian Stimming [Wed, 7 Nov 2007 17:40:59 +0000 (18:40 +0100)]
[PATCH] gitk i18n: Import msgcat for message string translation; load translation catalogs

By setting the environment variable GITK_MSGSDIR, one can manually set
the directory where the .msg files are located.  This is quite handy
during development with GITK_MSGSDIR=po.

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years ago[PATCH] gitk i18n: Add Makefile with rules for po file creation and installation
Christian Stimming [Wed, 7 Nov 2007 17:39:08 +0000 (18:39 +0100)]
[PATCH] gitk i18n: Add Makefile with rules for po file creation and installation

The compiled .msg files will be installed into $(sharedir)/gitk/lib/msgs
according to Junio's mailing list proposal on 2007-07-28.

Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Implement date mode in the new framework
Paul Mackerras [Wed, 19 Dec 2007 23:03:35 +0000 (10:03 +1100)]
gitk: Implement date mode in the new framework

This restores date mode, which lists commits by date, as far as possible
given the constraint that parents come after all their children.  To
implement this in the new framework, we (1) only join a new commit onto
an existing arc if the arc is the last arc created, (2) treat arcs as
seeds unless they have a child arc that comes later, and (3) never
decrease the token value for an arc.

This means we get lots of "seeds", which exposed some quadratic behaviour
in adding and removing seeds.  To fix this, we add a vbackptr array, which
points to the arc whose vleftptr entry points to us, and a vlastins array,
which shows where in an arc's vdownptr/vleftptr list we last inserted a
parent, which acts as a hint of a good place to start looking for where to
insert a new child.

This also ensures the children array elements stay in sorted order at all
times.  We weren't resorting the children lists when reassigning tokens
in renumbervarc.  Since the children lists are now always sorted, we don't
have to search through all elements to find the one with the highest token;
we can just use the last element.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: More bug fixes and cleanups
Paul Mackerras [Tue, 18 Dec 2007 22:35:33 +0000 (09:35 +1100)]
gitk: More bug fixes and cleanups

* Add/remove fake commits (for local changes) when updating the view
  even if nothing else has changed.
* Get rid of unused getdbg variable.
* Get rid of vseeds and uat.
* Fix bug where removerow would throw a "no such element in array" error.
* Clear out cached highlights when line numbers change.
* Make dodiffindex remove the fake commit rows if they currently exist
  but there are now no local changes.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix more bugs resulting in Tcl "no such element in array" errors
Paul Mackerras [Wed, 12 Dec 2007 07:13:51 +0000 (18:13 +1100)]
gitk: Fix more bugs resulting in Tcl "no such element in array" errors

First, update_arcrows was being overly aggressive in trimming
displayorder, resulting in calls to rowofcommit sometimes trimming off
commits that layoutrows had asked for in make_disporder and was relying
on having present.  This adds a vrowmod($view) variable that lets
update_arcrows be more precise in trimming off the invalid bits of
displayorder (and it also simplifies the check in make_disporder).
This modifies modify_arc and its callers so that vrowmod($view) is
updated appropriately.

Secondly, we were sometimes calling idcol with $i==-1, which resulted
in a call to ordertoken with the null string.  This fixes it by
forcing $i to 0 if it is less than zero.

This also fixes a possible infinite recursion with rowofcommit and
update_arcrows calling each other ad infinitum.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix a couple of bugs
Paul Mackerras [Tue, 11 Dec 2007 09:09:53 +0000 (20:09 +1100)]
gitk: Fix a couple of bugs

First, if we invalidate the layout for all rows (i.e. from row 0 on),
we were calling undolayout with an empty string as the argument.
Second, the comparison in make_disporder that tests if we need to
call update_arcrows was the wrong way around.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Compute row numbers and order tokens lazily
Paul Mackerras [Mon, 10 Dec 2007 23:45:38 +0000 (10:45 +1100)]
gitk: Compute row numbers and order tokens lazily

Instead of computing ordertok values and arc row numbers in
getcommitlines, this defers computing them until they are needed.
So getcommitlines no longer calls update_arcrows; instead it gets
called from rowofcommit and make_disporder.  Things that modify arcs
now call modify_arc instead of setting vtokmod/varcmod directly,
and modify_arc does the undolayout that used to be in update_arcrows.

Also, idcol and make_idlist now use a new ordertoken function instead
of the ordertok variable.  ordertoken uses ordertok as a cache, but
can itself compute the ordering tokens from scratch.  This means that
the ordering tokens (and hence the layout of the graph) is once again
determined by the topological ordering we put on the graph, not on the
order in which we see the commits from git log, which improves the
appearance of the graph.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix bug in parsing multiple revision arguments
Paul Mackerras [Fri, 7 Dec 2007 09:50:09 +0000 (20:50 +1100)]
gitk: Fix bug in parsing multiple revision arguments

If the user specified multiple revisions arguments on the command
line or for a view, we were passing the whole list of arguments to
git rev-parse as a single argument, and thus git rev-parse didn't
interpret it as revisions.  This fixes it by adding an eval so the
arguments get passed to git rev-parse as separate arguments.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Fix bug in assigning row numbers to arcs
Paul Mackerras [Thu, 6 Dec 2007 09:50:31 +0000 (20:50 +1100)]
gitk: Fix bug in assigning row numbers to arcs

We weren't setting vtokmod and varcmod in renumbervarc, so after a
call to renumbervarc we sometimes weren't reassigning row numbers to
all the arcs whose row numbers had changed.  This fixes it.

This also collapses layoutmore and showstuff into one procedure and
gets rid of the phase variable.

Signed-off-by: Paul Mackerras <paulus@samba.org>
16 years agogitk: Use git log without --topo-order and reorganize the commits ourselves
Paul Mackerras [Sun, 2 Dec 2007 23:33:01 +0000 (10:33 +1100)]
gitk: Use git log without --topo-order and reorganize the commits ourselves

This very large patch implements code to organize the commits from
git log into "arcs" (sequences of commits where each pair of adjacent
commits are the only parent and child of each other), and orders the
arcs so as to get a topological ordering of the commits.  This means
we can use git log without --topo-order and display the commits as we
get them, incrementally, which makes the cold-cache start up time much
faster, particularly on unpacked repos.

One beneficial effect of this is that the File->Update menu item now
just adds any new commits to the existing graph instead of rereading
the whole thing from scratch, which is much faster.  (If you do want
to reread the whole graph from scratch you can use File->Reload.)

At an implementation level, this means that the displayorder and
parentlist lists are no longer fully valid at all times, and the
commitrow array has gone.  New procedures commitinview and commitonrow
replace the commitrow array, and make_disporder ensures that
displayorder and parentlist are valid for a range of rows.

The overall time to load the kernel repository has gone up a bit, from
~9 seconds to ~11 seconds on my G5, but I think that is worth it given
that the time to get a window up with commits displayed in it has gone
from ~3 seconds to under 1 second.

Signed-off-by: Paul Mackerras <paulus@samba.org>
17 years agogitk: Use the UI font for the diff/old version/new version radio buttons
Paul Mackerras [Sat, 27 Oct 2007 11:31:07 +0000 (21:31 +1000)]
gitk: Use the UI font for the diff/old version/new version radio buttons

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 <paulus@samba.org>
17 years agoMerge branch 'dev'
Paul Mackerras [Sat, 27 Oct 2007 11:23:20 +0000 (21:23 +1000)]
Merge branch 'dev'

17 years agogitk: Simplify the code for finding commits
Paul Mackerras [Sat, 27 Oct 2007 11:16:56 +0000 (21:16 +1000)]
gitk: Simplify the code for finding commits

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 <paulus@samba.org>
17 years agogitk: Fix a couple more bugs in the path limiting
Paul Mackerras [Wed, 24 Oct 2007 00:16:56 +0000 (10:16 +1000)]
gitk: Fix a couple more bugs in the path limiting

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 <paulus@samba.org>
17 years agoMerge branch 'master' into dev
Paul Mackerras [Tue, 23 Oct 2007 12:40:50 +0000 (22:40 +1000)]
Merge branch 'master' into dev

17 years agogitk: Fix some bugs with path limiting in the diff display
Paul Mackerras [Tue, 23 Oct 2007 12:37:23 +0000 (22:37 +1000)]
gitk: Fix some bugs with path limiting in the diff display

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 <paulus@samba.org>
17 years agogitk: Use the status window for other functions
Paul Mackerras [Tue, 23 Oct 2007 11:19:06 +0000 (21:19 +1000)]
gitk: Use the status window for other functions

This sets the status window when reading commits, searching through
commits, cherry-picking or checking out a head.

Signed-off-by: Paul Mackerras <paulus@samba.org>
17 years agogitk: Integrate the reset progress bar in the main frame
Paul Mackerras [Tue, 23 Oct 2007 11:12:49 +0000 (21:12 +1000)]
gitk: Integrate the reset progress bar in the main frame

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 <paulus@samba.org>
17 years agogitk: Ensure tabstop setting gets restored by Cancel button
Paul Mackerras [Tue, 23 Oct 2007 00:33:38 +0000 (10:33 +1000)]
gitk: Ensure tabstop setting gets restored by Cancel button

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 <paulus@samba.org>
17 years agogitk: Limit diff display to listed paths by default
Paul Mackerras [Tue, 23 Oct 2007 00:15:11 +0000 (10:15 +1000)]
gitk: Limit diff display to listed paths by default

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 <paulus@samba.org>
17 years agogitk: Fix "can't unset prevlines(...)" Tcl error
Paul Mackerras [Sun, 21 Oct 2007 02:58:42 +0000 (12:58 +1000)]
gitk: Fix "can't unset prevlines(...)" Tcl error

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 <paulus@samba.org>
17 years agogitk: Avoid an error when cherry-picking if HEAD has moved on
Paul Mackerras [Sat, 20 Oct 2007 12:10:52 +0000 (22:10 +1000)]
gitk: Avoid an error when cherry-picking if HEAD has moved on

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 <paulus@samba.org>