When comparing a string of commits, when we find two non-merge commits
that differ, we now write the two commits to files and diff the files.
This pulls out the logic for creating a temporary directory from
external_diff into a separate procedure so that the new diffcommits
procedure can use it.
Because the diff command returns an exit status of 1 when the files
differ, and Tcl treats that as an error, this adds catch {} around the
close statements in getblobdiffline.
At present this only removes the temporary files when gitk exits. It
should remove them when the diff is done.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Also move the hide-remotes option up into the commit display options
in the Edit->Preferences panel, since it affects the commit display
more than the diff display.
Signed-off-by: Paul Mackerras <paulus@samba.org>
We only accepted either SHA1s or heads/tags that have been read. This
meant the user could not, e.g., enter HEAD to go back to the current
commit.
This adds code to call out to git rev-parse --verify if all other
methods of interpreting the string the user entered fail.
(git-rev-parse alone is not enough as we really want a single
revision.)
The error paths change slighly, because we now know from the rev-parse
invocation whether the expression was valid at all. The previous
"unknown" path is now only triggered if the revision does exist, but
is not in the current view display.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Paul Mackerras <paulus@samba.org>
ee66e08 (gitk: Make updates go faster, 2008-05-09) implemented an
optimized mode where gitk parses the arguments with rev-parse, and
manually reads history in chunks. As mentioned in the commit message,
symmetric differences are a problem there:
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).
However, git-rev-parse returns a...b in the swapped order
b a ^merge_base(a,b)
This has been the case since at least 1f8115b (the state of master at
the time of the abovementioned ee66e08; Merge branch 'maint',
2008-05-08). So gitk flipped the sides of symmetric differences
whenever it was in optimized mode.
Fix this by swapping the sides of the reconstruction code.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Paul Mackerras <paulus@samba.org>
In repositories with lots of remotes, looking at the history in gitk
can be borderline insane with all the red labels for remote refs.
Introduce a new option in the preferences that makes gitk ignore
remote refs entirely, so they don't take up space in the display.
Wished-for-by: Thell Fowler <tbfowler4@gmail.com>
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Commit 39ee47e (Clean up file encoding code and add enable/disable option,
2008-10-15) rewrote the attribute lookup functions gitattr and
cache_gitattr, but in the process hard-coded the attribute name "encoding"
instead of using the functions' parameters. This fixes it.
This is not a serious regression because currently all callers look only
for "encoding".
Further note that this fix assumes that future callers will not pass an
attribute name that contains regex special characters.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
When clicked, the option --simplify-by-decoration is added to gitk/git log.
This yields to a simplified history where only decorated commits are shown,
i.e. those with a yellow tag or a green branch flag.
Signed-off-by: Dirk Suesserott <newsletter@dirk.my1.cc>
Signed-off-by: Paul Mackerras <paulus@samba.org>
msysGit generates version strings with text appended which cannot
be used with vcompare; trying to use them generates a Tcl error.
Limit git_version to the first three digits which are the real git
version to avoid this error.
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Commit 218a900bd8 added a number of new
individual fields for the Edit View dialog to make them more accessible
to end users, while still allowing all options to be specified in the
"arguments to git log" field. This extends the dialog further, to
include refs, author, committer, commit message, and patch contents.
As before everything still remains accessible from the "arguments to
git log" input field.
Additionally, this provides hints for the format of the various input
fields (for example, listing some sample date strings in different
formats), and puts related query items into subsections to make it
easier to digest the number of options that exist.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Commit 785b7535 ("gitk: use --textconv to generate diff text")
added the --textconv flag to the git diff commands used to
display commit diffs. Since some people use newer gitk with older
git installations, this adds a check on the git version to check
that it understands --textconv before using it.
Signed-off-by: Paul Mackerras <paulus@samba.org>
For the most part gitk's focus is on showing history and changes in
a human readable form. For this reason, it makes sense to generate
the patch text in the diff view using --textconv so that textconv
drivers are used if they are defined.
gitk can also generate patches, but we do not use --textconv because
such patches could not be applied.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This fixes a typo in the commit selection combobox that prevented it
from working properly, and sets the width of the widget. This also
fixes show_error to handle errors arising before the gui is fully
configured (ie: invalid command line parameters)
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
With Tk 8.5+, this uses the themed widgets to improve the appearance
on Windows and MacOSX. On X11 less difference is apparent, but users
can select alternate themes by setting *TkTheme in the resource
database (eg: *TkTheme: clam).
With Tk 8.6 there is a built-in font selection dialog. This will make
use of that when available, as on Windows and MacOSX it calls the
native font selection dialog.
[paulus@samba.org - folded in subsequent patch to restore saved
pane sizes for ttk widgets, and trimmed trailing whitespace.]
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Thanks go to Dmitry Potapov for proofreading and suggested translation
of the word 'merge'.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This fixes a bug in the compare-commits function added in commit
010509f2 ("gitk: Add a command to compare two strings of commits")
where gitk would show an error dialog if the comparison of commits
got to a fake commit (one showing local changes). It extends
getpatchid to handle these fake commits by using [diffcmd] to get
the git diff command variant to use, and also handles the situation
where an error occurs.
Now that we can have the fake commit IDs showing up, which are
00..00 and 00..01, the short ID is ambiguous. To make sure the links
point to the right commit, this adds a new [appendshortlink] procedure
which takes the full link destination, and uses that rather than
appendwithlinks.
Signed-off-by: Paul Mackerras <paulus@samba.org>
As recorded in msysGit issue 125, if the user closes gitk while it
reports itself as still reading references then Tk will crash in the
geometry management code. This has been fixed for Tk 8.5.7 and above.
This patch avoids the problem by flushing outstanding geometry events
before calling the readrefs procedure.
See also http://code.google.com/p/msysgit/issues/detail?id=125
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This fixes the launching of external diff to handle a diff tool
that has spaces in the path. This ensures a correctly formed
tcl list is passed to the open command with a single pipe character
prefixing the list (as per the tcl manual page for open).
The specific fault observed was that selecting WinMerge as the diff
tool from the default installed location in Program Files failed to
be launched from the context menu.
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This records the window state in ~/.gitk. On startup, if the gitk
window was previously maximized (zoomed), then we restore that state.
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Commit 97bed034 changed the behavior of the '/' key on the keyboard,
but the '/' on the keypad was left unused. They now both do the same
thing.
Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This adds a row context menu command to compare this commit and its
descendants with the marked commit and its descendants. The results
are shown in the bottom-left pane. Commits are compared by checking
whether their headlines are the same and their patches have the same
patch ID as generated by git patch-id.
Merges are ignored and skipped over (as long as they have one
descendant). If two commits have the same patch ID then the process
will continue and compare their descendants, as long as they both have
exactly one descendant. If either commit has 0 or 2 or more descendants,
the comparison stops there. There is currently a limit of 100
comparisons.
This can be useful for checking whether one string of commits is just
a rebased version of another string of commits. Mark the end of one
string (i.e. the oldest commit in the string) and invoke "Compare with
marked commit" on the end of the other string.
As this is implemented, the UI will be unresponsive while the results
are being generated. This should be fixed.
Signed-off-by: Paul Mackerras <paulus@samba.org>
This adds a context-menu command to put a mark on this commit. There
is at most one marked commit at any time, and it is indicated by a box
drawn around the headline. Once a commit is marked, two other
context-menu commands become available: one to select the marked commit,
and another to find the closest common descendant of this commit and
the marked commit.
The "find common descendant" command uses the displayed parent/child
relationships (i.e. the rewritten parent pointers produced by git log),
not the real parent/child relationships. Currently the UI will be
unresponsive while gitk is working out the nearest common descendant;
this should be improved in future.
Signed-off-by: Paul Mackerras <paulus@samba.org>
- middle button is B3 on TkAqua
- add horizontal mousehweel scrolling
- nicer default fonts
- use OSX-specific extdifftool
- remove quit menu item, call doquit on quit event
- move about & preferences menu items into apple menu
- don't set menu font
Signed-off-by: Daniel A. Steffen <das@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This simply expands the 16x16 logo image to 32x32 and provides it as
an alternative icon image.
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Try to set up a 16x16 Tk photo image (based on the git logo) and use
it as window icon. The code is wrapped in a catch because it may fail
in earlier Tcl/Tk 8.4 releases that don't provide 'wm iconphoto'.
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
If a patchset contains an EOF marker (Ctrl-Z) the blob diff terminates
at that point. This permits gitk to ignore the eof and continue to
display any subsequent blobs and also displays a sensible representation
of the eof char.
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This fixes an issue reported by Johannes Sixt on the git mailing list:
> This recipe sends gitk into an endless loop. In git.git do:
>
> cd t
> # remove chmod a+x A near the end of the file
> sed -i 's/chmod/: chmod/' t3400-rebase.sh
> sh t3400-rebase.sh --debug
> cd trash\ directory.t3400-rebase/
> gitk master modechange modechange@{1}
>
>
> I briefly see the history chart, but the dot that should be modechange@{1}
> is missing. One automatically selected commit is shown in the diff section
> below. But then the commit list is cleared and gitk goes into an infinite
> loop.
>
> Things work alright if either modechange@{1} is dropped, or the 'chmod'
> line is left unchanged, which is a bit strange.
>
> This is with git version 1.6.1.2.390.gba743
There were actually two problems. This recipe created a situation where
git log would output a child commit after its parent. This meant that
we called fix_reversal which called splitvarc, which should call modify_arc
to note the fact that it has modified the arc that it has just split. It
wasn't, which meant that displayorder and other variables got into an
inconsistent state (a commit appearing twice in displayorder).
This then meant that the targetrow/targetid logic in drawvisible thought
it need to redraw each time. That, together with the fact that drawvisible
called drawcommits which called drawvisible if a redraw was needed, led
to the infinite loop.
In fact drawvisible is now the only caller of drawcommits. Thus, the
start and end row arguments to drawcommits always encompass the whole
visible area, so drawcommits doesn't need to call drawvisible to redraw;
it just needs to clear the screen and draw what it's been asked to.
This fixes these two problems by adding a call to modify_arc in
splitvarc and by taking out the call to drawvisible in drawcommits.
It also removes an unrelated left-over debugging puts in external_blame.
Signed-off-by: Paul Mackerras <paulus@samba.org>
On msysGit, the focus is first on the (Tk) console. This console is then
hidden, but keeps the focus. Work around that by forcing the focus onto
the gitk window.
This fixes msysGit issue 14. Diagnosed and originally fixed by
Johannes Schindelin.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
When parsing commits, gitk treats the headers of the commit as tcl
lists. This causes errors if the header contains an unbalanced quote
or open brace. Splitting the line on spaces allows us to treat it as
a set of words instead of as a tcl list, which prevents errors.
Signed-off-by: Kevin Ballard <kevin@sb.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Attached to avoid whitespace problems.
Regards,
Christian
From 282060ac531fee722142f9d39c4ff29570723cbb Mon Sep 17 00:00:00 2001
From: Christian Stimming <stimming@tuhh.de>
Date: Sat, 6 Dec 2008 20:47:15 +0100
Subject: [PATCH 2/2] gitk: Update German translation
Merged with most recent "make update-po" result.
Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Consider this sequence of events:
1. Detach HEAD and fire up gitk
2. Call the context menu on some commit. Notice that the last menu entry
says "Detached HEAD: can't reset" and it is disabled.
3. Now checkout some regular branch (e.g. 'master') using the context menu.
4. Call the context menu again on some commit.
Previously, at this point the last menu entry said "Reset master branch
to here", but it was still disabled. With this fix it is now enabled again.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Previously the check-buttons' labels in the Preferences were separate
widgets. This had the disadvantage that in order to toggle the
check-button with the mouse the check-box had to be clicked. With
this change the check-box can also be toggled by clicking the label.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
The / key is often used to initiate searches (less, vim, some web
browsers). This changes the binding for the / (slash) key from 'find
next' to 'focus the search box' to follow this convention.
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
The "show origin of this line" function wasn't working when gitk was
run in a subdirectory, since it passed the path relative to the
top-level directory to git blame. This fixes it by passing the
absolute path to the file instead of the relative path.
The same problem occurs when running git gui blame, except that
git gui blame appears not to be able to accept an absolute path to the
file, so we make a relative path using a new [make_relative] function.
Finally, this fixes a bug in [show_line_source] where we weren't
setting id, resulting in an error when trying to find the origin of
a line in the fake commit for local changes not checked in, when its
parent was a real commit (i.e. there were no changes checked in).
Signed-off-by: Paul Mackerras <paulus@samba.org>
Git gui already has menu commands to start gitk, and this makes the
relation symmetric.
[paulus@samba.org - changed "Git Gui" in the menu item to "git gui"]
Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Currently the 'show origin of this line' feature does not update the
status field of the gitk window, so it is not evident that any
processing is going on. It may seem at first that clicking the item
had no effect.
This commit adds calls to set and clear the busy status with an
appropriate title, similar to other search commands.
Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This takes into account the most recent po file merge.
Signed-off-by: Christian Stimming <stimming@tuhh.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
As pointed out by Johannes Sixt and Alexander Gavrilov, commit
2958228430 ("gitk: Fix switch statement
in parseviewargs") exposed a latent bug in that $notflag was never
initialized. Since it isn't used either, this removes it entirely.
Signed-off-by: Paul Mackerras <paulus@samba.org>
When the search type is "touching paths" or "adding/removing string",
it's not very useful to highlight instances of the search string in
the commit message, headline or author name, so this disables the
highlighting in those cases.
This was suggested by Mark Burton <markb@ordern.com>, but the
implementation is different to his patch, which tested $gdttype at
each place where $markingmatches was tested.
Signed-off-by: Paul Mackerras <paulus@samba.org>
This arranges to save the scrolling position of the diff display pane
when we move from displaying one thing to another, and then scroll the
pane to the same position when we go back to the previous thing using
the back or forward buttons. This works if we have clicked on a commit
and are in patch display mode, or if we have clicked on a line or a tag,
or have done a diff between two commits with the context menu. It
doesn't currently restore the pane to where it was if is was displaying
a commit in tree display mode.
For future extensibility, addtohistory now takes an extra optional
argument which is a script to invoke when moving from this thing to
another. The script needs to return a list of pairs of variable name
and value. If we go back to this thing, the godo procedure will set
the named variables to the values given. At present that is just used
to store the $ctext scrolling position, but in future we will use it
to store the state of which directories are open in the file list pane.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Currently, if you invoke the "diff this -> selected" or "diff selected
-> this" and gitk is in "Tree" mode rather than "Patch" mode, the
diff display pane will just show the header but not the actual diff,
unless gitk has done the diff before and thus has the list of files
that differ. This was because the logic in gettreediffline that
checked whether we had moved on to doing something else checked the
mode (Tree or Patch) before checking whether the ids we're diffing
had changed.
This fixes it. The new logic in gettreediffline is slightly hacky
and relies on the fact that the Tree/Patch mode only applies when
we're looking at a single commit, not at the diff between two commits.
Signed-off-by: Paul Mackerras <paulus@samba.org>