Code

git.git
17 years agoMerge branch 'maint'
Shawn O. Pearce [Sun, 3 Jun 2007 01:05:13 +0000 (21:05 -0400)]
Merge branch 'maint'

* maint:
  Revert "Make the installation target of git-gui a little less chatty"
  git-gui: Verify Tcl/Tk is new enough for our needs
  git-gui: Attach font_ui to all spinbox widgets

17 years agoRevert "Make the installation target of git-gui a little less chatty"
Shawn O. Pearce [Sun, 3 Jun 2007 00:09:00 +0000 (20:09 -0400)]
Revert "Make the installation target of git-gui a little less chatty"

This reverts commit c289f6fa1f8642a5caf728ef8ff87afd5718cd99.

Junio pointed out that Alex's change breaks in some cases, like
when V=1, and is more verbose than it should be even if that worked.
I'm backing it out and redoing it.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Verify Tcl/Tk is new enough for our needs
Shawn O. Pearce [Sat, 2 Jun 2007 20:11:26 +0000 (16:11 -0400)]
git-gui: Verify Tcl/Tk is new enough for our needs

For quite a while we have been assuming the user is running on
a Tcl/Tk 8.4 or later platform.  This may not be the case on
some very old systems.  Unfortunately I am pretty far down the
path of using the Tcl/Tk 8.4 commands and options and cannot
easily work around them to support earlier versions of Tcl/Tk.
So we'll check that we are using the correct version up front,
and if not we'll stop with a related error message.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Attach font_ui to all spinbox widgets
Shawn O. Pearce [Sat, 2 Jun 2007 21:18:46 +0000 (17:18 -0400)]
git-gui: Attach font_ui to all spinbox widgets

Earlier I missed making sure our spinbox widgets used the same font
as the other widgets around them.  This meant that using a main font
with a size of 20 would make every widget in the options dialog huge,
but the spinboxes would be left with whatever the OS native font is.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint'
Shawn O. Pearce [Sat, 2 Jun 2007 03:28:15 +0000 (23:28 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Don't quit when we destroy a child widget
  Make the installation target of git-gui a little less chatty

17 years agogit-gui: Don't quit when we destroy a child widget
Shawn O. Pearce [Fri, 1 Jun 2007 22:20:30 +0000 (18:20 -0400)]
git-gui: Don't quit when we destroy a child widget

Its wrong to exit the application if we destroy a random widget
contained withing something else; especially if its some small
trivial thing that has no impact on the overall operation.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMake the installation target of git-gui a little less chatty
Alex Riesen [Fri, 1 Jun 2007 23:09:56 +0000 (01:09 +0200)]
Make the installation target of git-gui a little less chatty

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Internalize symbolic-ref HEAD reading logic
Shawn O. Pearce [Thu, 31 May 2007 00:39:46 +0000 (20:39 -0400)]
git-gui: Internalize symbolic-ref HEAD reading logic

To improve performance on fork+exec impoverished systems (such as
Windows) we want to avoid running git-symbolic-ref on every rescan
if we can do so.  A quick way to implement such an avoidance is to
just read the HEAD ref ourselves; we'll either see it as a symref
(starts with "ref: ") or we'll see it as a detached head (40 hex
digits).  In either case we can treat that as our current branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint'
Shawn O. Pearce [Fri, 1 Jun 2007 03:34:24 +0000 (23:34 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Allow as few as 0 lines of diff context

17 years agogit-gui: Allow as few as 0 lines of diff context
Shawn O. Pearce [Fri, 1 Jun 2007 03:32:54 +0000 (23:32 -0400)]
git-gui: Allow as few as 0 lines of diff context

Johannes Sixt pointed out that dropping to 0 lines of context
does allow the user to get more fine-grained hunk selection,
especially since we don't currently support "highlight and
apply (or revert)".

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint'
Shawn O. Pearce [Wed, 30 May 2007 23:34:49 +0000 (19:34 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Allow creating a branch when none exists

17 years agogit-gui: Allow creating a branch when none exists
Shawn O. Pearce [Wed, 30 May 2007 15:27:49 +0000 (11:27 -0400)]
git-gui: Allow creating a branch when none exists

If the user has no branches at all (their refs/heads/ is empty)
and they are on a detached HEAD we have a valid repository but
there are no branches to populate into the branch pulldown in
the create branch dialog.  Instead of erroring out we can skip
that part of the dialog, much like we do with tracking branches
or tags when the user doesn't have any.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Expose the merge.diffstat configuration option
Shawn O. Pearce [Mon, 28 May 2007 21:58:07 +0000 (17:58 -0400)]
git-gui: Expose the merge.diffstat configuration option

Recently git-merge learned to avoid generating the diffstat after
a merge by reading the merge.diffstat configuration option.  By
default this option is assumed to be true, as that is the old
behavior.  However we can force it to false by setting it as a
standard boolean option.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow users to delete remote branches
Shawn O. Pearce [Mon, 28 May 2007 19:23:32 +0000 (15:23 -0400)]
git-gui: Allow users to delete remote branches

Git has supported remote branch deletion for quite some time, but
I've just never gotten around to supporting it in git-gui.  Some
workflows have users push short-term branches to some remote Git
repository, then delete them a few days/weeks later when that topic
has been fully merged into the main trunk.  Typically in that style
of workflow the user will want to remove the branches they created.

We now offer a "Delete..." option in the Push menu, right below the
generic "Push..." option.  When the user opens our generic delete
dialog they can select a preconfigured remote, or enter a random
URL.  We run `git ls-remote $url` to obtain the list of branches and
tags known there, and offer this list in a listbox for the user to
select one or more from.

Like our local branch delete dialog we offer the user a way to filter
their selected branch list down to only those branches that have been
merged into another branch.  This is a very common operation as the
user will likely want to select a range of topic branches, but only
delete them if they have been merged into some sort of common trunk.

Unfortunately our remote merge base detection is not nearly as strict
as the local branch version.  We only offer remote heads as the test
commit (not any local ones) and we require that all necessary commits
to successfully run git-merge-base are available locally.  If one or
more is missing we suggest that the user run a fetch first.

Since the Git remote protocol doesn't let us specify what the tested
commit was when we evaluated our decision to execute the remote delete
there is a race condition here.  The user could do a merge test against
the trunk, determine a topic branch was fully merged, but before they
can start pushing the delete request another user could fast-forward
the remote topic branch to a new commit that is not merged into the
trunk.  The delete will arrive after, and remove the topic, even though
it was not fully merged.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow users to rename branches through 'branch -m'
Shawn O. Pearce [Mon, 28 May 2007 16:52:57 +0000 (12:52 -0400)]
git-gui: Allow users to rename branches through 'branch -m'

Git's native command line interface has had branch renaming
support for quite a while, through the -m/-M options to the
git-branch command line tool.  This is an extremely useful
feature as users may decide that the name of their current
branch is not an adequate description, or was just entered
incorrectly when it was created.

Even though most people would consider git-branch to be a
Porcelain tool I'm using it here in git-gui as it is the
only code that implements the rather complex set of logic
needed to successfully rename a branch in Git.  Currently
that is along the lines of:

 *) Backup the ref
 *) Backup the reflog
 *) Delete the old ref
 *) Create the new ref
 *) Move the backed up reflog to the new ref
 *) Record the rename event in the reflog
 *) If the current branch was renamed, update HEAD
 *) If HEAD changed, record the rename event in the HEAD reflog
 *) Rename the [branch "$name"] section in the config file

Since that is some rather ugly set of functionality to implement
and get right, and some of it isn't easily accessible through the
raw plumbing layer I'm just cheating by relying on the Porcelain.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Disable tearoff menus on Windows, Mac OS X
Shawn O. Pearce [Mon, 28 May 2007 15:34:47 +0000 (11:34 -0400)]
git-gui: Disable tearoff menus on Windows, Mac OS X

The Windows and Mac OS X platforms do not generally use the tearoff
menu feature found on traditional X11 based systems.  On Windows the
Tk engine does support the feature, but it really is out of place and
just confuses people who aren't used to working on a UNIX system.  On
Mac OS X its not supported for the root menu bar and its submenus, as
it doesn't fit into the overall platform UI model.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Provide fatal error if library is unavailable
Shawn O. Pearce [Mon, 28 May 2007 15:28:16 +0000 (11:28 -0400)]
git-gui: Provide fatal error if library is unavailable

If we cannot locate our git-gui library directory, or we find it
but the tclIndex file is not present there (or it is present but
is not something we are allowed to read) the user cannot use the
application.  Rather than silently ignoring the errors related to
the tclIndex file being unavailable we report them up front and
display to the user why we cannot start.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Enable verbose Tcl loading earlier
Shawn O. Pearce [Mon, 28 May 2007 15:22:13 +0000 (11:22 -0400)]
git-gui: Enable verbose Tcl loading earlier

When we are using our "non-optimized" tclIndex format (which is
just a list of filenames, in the order necessary for source'ing)
we are doing all of our loading before we even tested to see if
GITGUI_VERBOSE was set in the environment.  This meant we never
showed the files as we sourced them into the environment.

Now we setup our overloaded auto_load and source scripts before
we attempt to define our library path, or source the scripts that
it mentions.  This way GITGUI_VERBOSE is always honored if set.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Show the git-gui library path in 'About git-gui'
Shawn O. Pearce [Mon, 28 May 2007 15:11:56 +0000 (11:11 -0400)]
git-gui: Show the git-gui library path in 'About git-gui'

Because we now try to automatically guess the library directory
in certain installations users may wonder where git-gui is getting
its supporting files from.  We now display this location in our
About dialog, and we also include the location we are getting our
Git executables from.

Unfortunately users cannot use this 'About git-gui' dialog to
troubleshoot library loading problems; the dialog is defined by
code that exists in the library directory, creating a catch-22.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: GUI support for running 'git remote prune <name>'
Shawn O. Pearce [Mon, 28 May 2007 15:04:59 +0000 (11:04 -0400)]
git-gui: GUI support for running 'git remote prune <name>'

In some workflows it is common for a large number of temporary
branches to be created in a remote repository, get fetched to
clients that typically only use git-gui, and then later have
those branches deleted from the remote repository once they have
been fully merged into all destination branches.  Users of git-gui
would obviously like to have their local tracking branches cleaned
up for them, otherwise their local tracking branch namespace would
grow out of control.

The best known way to remove these tracking branches is to run
"git remote prune <remotename>".  Even though it is more of a
Porcelain command than plumbing I'm invoking it through the UI,
because frankly I don't see a reason to reimplement its ls-remote
output filtering and config file parsing.

A new configuration option (gui.pruneduringfetch) can be used to
automatically enable running "git remote prune <remotename>" after
the fetch of that remote also completes successfully.  This is off
by default as it require an additional network connection and is
not very fast on Cygwin if a large number of tracking branches have
been removed (due to the 2 fork+exec calls per branch).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit gui 0.8.0
Shawn O. Pearce [Mon, 28 May 2007 21:50:22 +0000 (17:50 -0400)]
git gui 0.8.0

Open the git-gui 0.8.0 development branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Guess our share/git-gui/lib path at runtime if possible gitgui-0.7.2
Shawn O. Pearce [Sun, 27 May 2007 04:03:37 +0000 (00:03 -0400)]
git-gui: Guess our share/git-gui/lib path at runtime if possible

Johannes Sixt asked me to try to avoid embedding the runtime location
of git-gui's library directory in the executable script.  Not embedding
it helps the MinGW to be relocatable to another directory should a user
wish to install the programs in a directory other than the location the
packager wanted them to be installed into.

Most of this is a hack.  We try to determine if the path of our master
git-gui script will be able to locate the lib by ../share/git-gui/lib.
This should be true if $(gitexecdir) and $(libdir) have the same prefix.
If they do then we defer the assignment of $(libdir) until runtime, and
we get it from $argv0 rather than embedding it into the script itself.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoCorrect key bindings to Control-<foo>
Shawn O. Pearce [Thu, 24 May 2007 06:33:13 +0000 (02:33 -0400)]
Correct key bindings to Control-<foo>

Alberto Bertogli reported on #git that git-gui was exiting with
alt-q, while gitk on the same system was exiting with ctrl-q.
That was not what I wanted.  I really wanted M1B to be bound to
the Control key on most non-Mac OS X platforms, but according to
Sam Vilain M1 on most systems means alt.  Since gitk always does
control, I'm doing the same thing for all non-Mac OS X systems.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Tighten internal pattern match for lib/ directory
Shawn O. Pearce [Tue, 22 May 2007 07:22:51 +0000 (03:22 -0400)]
git-gui: Tighten internal pattern match for lib/ directory

Our GITGUI_LIBDIR macro was testing only for @@ at the start of
the path, assuming nobody would ever find that to be a reasonable
prefix for a directory to install our library into.  That is most
likely a valid assumption, but its even more unlikely they would
have the start be @@GITGUI_ and the end be @@.  Note that we
cannot use the full string here because that would get expanded
by the sed replacement in our Makefile.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Gracefully handle bad TCL_PATH at compile time gitgui-0.7.1
Shawn O. Pearce [Thu, 17 May 2007 22:01:50 +0000 (18:01 -0400)]
git-gui: Gracefully handle bad TCL_PATH at compile time

Petr Baudis pointed out the main git.git repository's Makefile dies
now if git-gui 0.7.0-rc1 or later is being used and TCL_PATH was not
set to a working tclsh program path.  This breaks people who may have
a working build configuration today and suddenly upgrade to the latest
git release.

The tclIndex is required for git-gui to load its associated lib files,
but using the Tcl auto_load procedure to source only the files we need
is a performance optimization.  We can emulate the auto_load by just
source'ing every file in that directory, assuming we source class.tcl
first to initialize our crude class system.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit gui 0.7.0 gitgui-0.7.0
Shawn O. Pearce [Thu, 10 May 2007 21:54:45 +0000 (17:54 -0400)]
git gui 0.7.0

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Paperbag fix blame in subdirectory
Shawn O. Pearce [Wed, 9 May 2007 22:35:04 +0000 (18:35 -0400)]
git-gui: Paperbag fix blame in subdirectory

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Format author/committer times in ISO format
Shawn O. Pearce [Wed, 9 May 2007 04:48:27 +0000 (00:48 -0400)]
git-gui: Format author/committer times in ISO format

This is a simple change to match what gitk does when it shows
a commit; we format using ISO dates (yyyy-mm-dd HH:MM:SS).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Cleanup minor nits in blame code
Shawn O. Pearce [Wed, 9 May 2007 04:36:25 +0000 (00:36 -0400)]
git-gui: Cleanup minor nits in blame code

We can use [list ...] rather than "", especially when we are talking
about values as then they are properly escaped if necessary.  Small
nit, but probably not a huge deal as the only data being inlined here
is Tk paths.

Some of the lines in the parser code were longer than 80 characters
wide, and they actually were all the same value on the end part of
the line.  Rather than keeping the mess copied-and-pasted around we
can set the last argument into a local variable and reuse it many
times.

The commit display code was also rather difficult to read on an 80
character wide terminal, so I'm moving it all into a double quoted
string that is easier to read.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Generate blame on uncommitted working tree file
Shawn O. Pearce [Wed, 9 May 2007 02:48:47 +0000 (22:48 -0400)]
git-gui: Generate blame on uncommitted working tree file

If the user doesn't give us a revision parameter to our blame
subcommand then we can generate blame against the working tree
file by passing the file path off to blame with the --contents
argument.  In this case we cannot obtain the contents of the
file from the ODB; instead we must obtain the contents by
reading the working directory file as-is.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Smarter command line parsing for browser, blame
Shawn O. Pearce [Wed, 9 May 2007 02:36:01 +0000 (22:36 -0400)]
git-gui: Smarter command line parsing for browser, blame

The browser subcommand now optionally accepts a single revision
argument; if no revision argument is supplied then we use the
current branch as the tree to browse.  This is very common, so
its a nice option.

Our blame subcommand now tries to perform the same assumptions
as the command line git-blame; both the revision and the file
are optional.  We assume the argument is a filename if the file
exists in the working directory, otherwise we assume the argument
is a revision name.  A -- can be supplied between the two to force
parsing, or before the filename to force it to be a filename.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Use prefix if blame is run in a subdirectory
Shawn O. Pearce [Wed, 9 May 2007 01:58:25 +0000 (21:58 -0400)]
git-gui: Use prefix if blame is run in a subdirectory

I think it was Andy Parkins who pointed out that git gui blame HEAD f
does not work if f is in a subdirectory and we are currently running
git-gui within that subdirectory.  This is happening because we did
not take the user's prefix into account when we computed the file
path in the repository.

We now assume the prefix as returned by rev-parse --show-prefix is
valid and we use that during the command line blame subcommand when
we apply the parameters.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Convert blame to the "class" way of doing things
Shawn O. Pearce [Wed, 9 May 2007 01:33:14 +0000 (21:33 -0400)]
git-gui: Convert blame to the "class" way of doing things

Our blame viewer code has historically been a mess simply
because the data for multiple viewers was all crammed into
a single pair of Tcl arrays.  This made the code hard to
read and even harder to maintain.

Now that we have a slightly better way of tracking the data
for our "meta-widgets" we can make use of it here in the
blame viewer to cleanup the code and make it easier to work
with long term.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Don't attempt to inline array reads in methods
Shawn O. Pearce [Wed, 9 May 2007 01:31:31 +0000 (21:31 -0400)]
git-gui: Don't attempt to inline array reads in methods

If a variable reference to a field is to an array, and it is
the only reference to that field in that method we cannot make
it an inlined [set foo] call as the regexp was converting the
Tcl code wrong.  We were producing "[set foo](x)" for "$foo(x)",
and that isn't valid Tcl when foo is an array.  So we just punt
if the only occurance has a ( after it.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Convert browser, console to "class" format
Shawn O. Pearce [Wed, 9 May 2007 00:33:47 +0000 (20:33 -0400)]
git-gui: Convert browser, console to "class" format

Now that we have a slightly easier method of working with per-widget
data we should make use of that technique in our browser and console
meta-widgets, as both have a decent amount of information that they
store on a per-widget basis and our current approach of handling
it is difficult to follow.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Define a simple class/method system
Shawn O. Pearce [Tue, 8 May 2007 23:54:05 +0000 (19:54 -0400)]
git-gui: Define a simple class/method system

As most of the git-gui interface is based upon "meta-widgets"
that need to carry around a good deal of state (e.g. console
windows, browser windows, blame viewer) we have a good deal
of messy code that tries to store this meta-widget state in
global arrays, where keys into the array are formed from a
union of a unique "object instance id" and the field name.

This is a simple class system for Tcl that allows us to
hide much of that mess by making Tcl do what it does best;
process strings to manipulate its own code during startup.

Each object instance is placed into its own namespace.  The
namespace is created when the object instance is created and
the namespace is destroyed when the object instance is removed
from the system.  Within that namespace we place variables for
each field within the class; these variables can themselves be
scalar values or full-blown Tcl arrays.

A simple class might be defined as:

  class map {
    field data
    field size 0

    constructor {} {
      return $this
    }
    method set {name value} {
      set data($name) $value
      incr size
    }
    method size {} {
      return $size
    } ifdeleted { return 0 }
  }

All fields must be declared before any constructors or methods.  This
allows our class to generate a list of the fields so it can properly
alter the definition of the constructor and method bodies prior to
passing them off to Tcl for definition with proc. A field may optionally
be given a default/initial value.  This can only be done for non-array
type fields.

Constructors are given full access to all fields of the class, so they
can initialize the data values.  The default values of fields (if any)
are set before the constructor runs, and the implicit local variable
$this is initialized to the instance identifier.

Methods are given access to fields they actually use in their body.
Every method has an implicit "this" argument inserted as its first
parameter; callers of methods must be sure they supply this value.

Some basic optimization tricks are performed (but not much).  We
try to only upvar (locally bind) fields that are accessed within a
method, but we err on the side of caution and may upvar more than
we need to.  If a variable is accessed only once within a method
and that access is by $foo (read) we avoid the upvar and instead
use [set foo] to obtain the value.  This is slightly faster as Tcl
does not need to lookup the variable twice.

We also offer some small syntatic sugar for interacting with Tk and
the fileevent callback system in Tcl.  If a field (say "foo") is used
as "@foo" we insert instead the true global variable name of that
variable into the body of the constructor or method.  This allows easy
binding to Tk textvariable options, e.g.:

  label $w.title -textvariable @title

Proper namespace callbacks can also be setup with the special cb proc
that is defined in each namespace.  [cb _foo a] will invoke the method
_foo in the current namespace, passing it $this as the first (implied)
parameter and a as the second parameter.  This makes it very simple to
connect an object instance to a -command option for a Tk widget or to
a fileevent readable or writable for a file channel.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow shift-{k,j} to select a range of branches to merge
Shawn O. Pearce [Wed, 9 May 2007 01:38:46 +0000 (21:38 -0400)]
git-gui: Allow shift-{k,j} to select a range of branches to merge

I found it useful to be able to use j/k (vi-like keys) to move
up and down the list of branches to merge and shift-j/k to do
the selection, much as shift-up/down (arrow keys) would alter
the selection.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint'
Shawn O. Pearce [Tue, 8 May 2007 14:42:16 +0000 (10:42 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Call changes "Staged" and "Unstaged" in file list titles.

17 years agogit-gui: Call changes "Staged" and "Unstaged" in file list titles.
Johannes Sixt [Tue, 8 May 2007 11:33:06 +0000 (13:33 +0200)]
git-gui: Call changes "Staged" and "Unstaged" in file list titles.

All menu entries talk about "staging" and "unstaging" changes, but the
titles of the file lists use different wording, which may confuse
newcomers.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Use vi-like keys in merge dialog gitgui-0.7.0-rc1
Shawn O. Pearce [Sat, 5 May 2007 06:28:41 +0000 (02:28 -0400)]
git-gui: Use vi-like keys in merge dialog

Since we support vi-like keys for scrolling in other UI contexts
we can easily do so here too.  Tk's handy little `event generate'
makes this a lot easier than I thought it would be.  We may want
to go back and fix some of the other vi-like bindings to redirect
to the arrow and pageup/pagedown keys, rather than running the
view changes directly.

I've bound 'v' to visualize, as this is a somewhat common thing
to want to do in the merge dialog.  Control (or Command) Return
is also bound to start the merge, much as it is bound in the
main window to activate the commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Include commit id/subject in merge choices
Shawn O. Pearce [Thu, 3 May 2007 22:21:39 +0000 (18:21 -0400)]
git-gui: Include commit id/subject in merge choices

When merging branches using our local merge feature it can be
handy to know the first few digits of the commit the ref points
at as well as the short description of the branch name.

Unfortunately I'm unable to use three listboxes in a row, as Tcl
freaks out and refuses to let me have a selection in more than
one of them at any given point in time.  So instead we use a
fixed width font in the existing listbox and organize the data
into three columns.  Not nearly as nice looking, but users can
continue to use the listbox's features.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Show all possible branches for merge
Shawn O. Pearce [Wed, 2 May 2007 18:25:22 +0000 (14:25 -0400)]
git-gui: Show all possible branches for merge

Johannes Sixt pointed out that git-gui was randomly selecting
which branch (or tag!) it will show in the merge dialog when
more than one ref points at the same commit.  This can be a
problem for the user if they want to merge a branch, but the
ref that git-gui selected to display was actually a tag that
points at the commit at the tip of that branch.  Since the
user is looking for the branch, and not the tag, its confusing
to not find it, and worse, merging the tag causes git-merge to
generate a different message than if the branch was selected.

While I am in here and am messing around I have changed the
for-each-ref usage to take advantage of its --tcl formatting,
and to fetch the subject line of the commit (or tag) we are
looking at.  This way we could present the subject line in the
UI to the user, given them an even better chance to select
the correct branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Move merge support into a namespace
Shawn O. Pearce [Wed, 2 May 2007 17:56:27 +0000 (13:56 -0400)]
git-gui: Move merge support into a namespace

Like the console procs I have moved the code related to merge
support into their own namespace, so that they are isolated
from the rest of the world.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow vi keys to scroll the diff/blame regions
Shawn O. Pearce [Tue, 1 May 2007 19:51:09 +0000 (15:51 -0400)]
git-gui: Allow vi keys to scroll the diff/blame regions

Users who are used to vi and recent versions of gitk may want
to scroll the diff region using vi style keybindings.  Since
these aren't bound to anything else and that widget does not
accept focus for data input, we can easily support that too.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Move console procs into their own namespace
Shawn O. Pearce [Tue, 1 May 2007 06:59:53 +0000 (02:59 -0400)]
git-gui: Move console procs into their own namespace

To help modularize git-gui better I'm isolating the code and
variables required to handle our little console windows into
their own namespace.  This way we can say console::new rather
than new_console, and the hidden internal procs to create the
window and read data from our filehandle are off in their own
private little land, where most users don't see them.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Refactor into multiple files to save my sanity
Shawn O. Pearce [Tue, 8 May 2007 03:35:48 +0000 (23:35 -0400)]
git-gui: Refactor into multiple files to save my sanity

I'm finding it difficult to work with a 6,000+ line Tcl script
and not go insane while looking for a particular block of code.
Since most of the program is organized into different units of
functionality and not all users will need all units immediately
on startup we can improve things by splitting procs out into
multiple files and let auto_load handle things for us.

This should help not only to better organize the source, but
it may also improve startup times for some users as the Tcl
parser does not need to read as much script before it can show
the UI.  In many cases the user can avoid reading at least half
of git-gui now.

Unfortunately we now need a library directory in our runtime
location.  This is currently assumed to be $(sharedir)/git-gui/lib
and its expected that the Makefile invoker will setup some sort of
reasonable sharedir value for us, or let us assume its going to be
$(gitexecdir)/../share.

We now also require a tclsh (in TCL_PATH) to just run the Makefile,
as we use tclsh to generate the tclIndex for our lib directory.  I'm
hoping this is not an unncessary burden on end-users who are building
from source.

I haven't really made any functionality changes here, this is just a
huge migration of code from one file to many smaller files.  All of
the new changes are to setup the library path and install the library
files.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Track our own embedded values and rebuild when they change
Shawn O. Pearce [Sun, 29 Apr 2007 07:02:10 +0000 (03:02 -0400)]
git-gui: Track our own embedded values and rebuild when they change

Like core-Git we now track the values that we embed into our shell
script wrapper, and we "recompile" that wrapper if they are changed.
This concept was lifted from git.git's Makefile, where a similar
thing was done by Eygene Ryabinkin.  Too bad it wasn't just done
here in git-gui from the beginning, as the git.git Makefile support
for GIT-GUI-VARS was really just because git-gui doesn't do it on
its own.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Refactor to use our git proc more often
Shawn O. Pearce [Sun, 29 Apr 2007 05:54:57 +0000 (01:54 -0400)]
git-gui: Refactor to use our git proc more often

Whenever we want to execute a git subcommand from the plumbing
layer (and on rare occasion, the more porcelain-ish layer) we
tend to use our proc wrapper, just to make the code slightly
cleaner at the call sites.  I wasn't doing that in a couple of
places, so this is a simple cleanup to correct that.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Use option database defaults to set the font
Shawn O. Pearce [Sun, 29 Apr 2007 03:14:08 +0000 (23:14 -0400)]
git-gui: Use option database defaults to set the font

Rather than passing "-font font_ui" to every widget that we
create we can instead reconfigure the option database for
all widget classes to use our font_ui as the default widget
font.  This way Tk will automatically setup their defaults
for us, and we can reduce the size of the application.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Cleanup common font handling for font_ui
Shawn O. Pearce [Sun, 29 Apr 2007 02:00:02 +0000 (22:00 -0400)]
git-gui: Cleanup common font handling for font_ui

An earlier change tossed these optionMenu font configurations
all over the code, when really we can just rename the proc to
a hidden internal name and provide our own wrapper to install
the font configuration we really want.

We also don't need to set these option database entries in all
of the procedures that open dialogs; instead we should just set
one time, them after we have the font configuration ready for use.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Correct line wrapping for too many branch message
Shawn O. Pearce [Sun, 29 Apr 2007 01:32:27 +0000 (21:32 -0400)]
git-gui: Correct line wrapping for too many branch message

Since Tk automatically wraps lines for us in tk_messageBox
widgets we don't need to try to wrap them ourselves.  Its
actually worse that we linewrapped this here in the script,
as not all fonts will render this dialog nicely.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Warn users before making an octopus merge
Shawn O. Pearce [Sun, 29 Apr 2007 01:26:27 +0000 (21:26 -0400)]
git-gui: Warn users before making an octopus merge

A coworker who was new to git-gui recently tried to make an octopus
merge when he did not quite mean to.  Unfortunately in his case the
branches had file level conflicts and failed to merge with the octopus
strategy, and he didn't quite know why this happened.  Since most users
really don't want to perform an octopus merge this additional safety
valve in front of the merge process is a good thing.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Include the subject in the status bar after commit
Shawn O. Pearce [Sun, 29 Apr 2007 00:49:22 +0000 (20:49 -0400)]
git-gui: Include the subject in the status bar after commit

Now that the command line git-commit has made displaying
the subject (first line) of the newly created commit popular
we can easily do the same thing here in git-gui, without the
ugly part of forking off a child process to obtain that first
line.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint'
Shawn O. Pearce [Wed, 2 May 2007 16:45:31 +0000 (12:45 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Allow spaces in path to 'wish'

17 years agogit-gui: Allow spaces in path to 'wish'
Shawn O. Pearce [Wed, 2 May 2007 16:44:44 +0000 (12:44 -0400)]
git-gui: Allow spaces in path to 'wish'

If the path of our wish executable that are running under
contains spaces we need to make sure they are escaped in
a proper Tcl list, otherwise we are unable to start gitk.

Reported by Randal L. Schwartz on #git.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Correctly handle UTF-8 encoded commit messages
Shawn O. Pearce [Tue, 24 Apr 2007 06:11:40 +0000 (02:11 -0400)]
git-gui: Correctly handle UTF-8 encoded commit messages

Uwe Kleine-König discovered git-gui mangled his surname and did
not send the proper UTF-8 byte sequence to git-commit-tree when
his name appeared in the commit message (e.g. Signed-Off-By line).

Turns out this was related to other trouble that I had in the past
with trying to use "fconfigure $fd -encoding $enc" to select the
stream encoding and let Tcl's IO engine do all of the encoding work
for us.  Other parts of git-gui were just always setting the file
channels to "-encoding binary" and then performing the encoding
work themselves using "encoding convertfrom" and "convertto", as
that was the only way I could make UTF-8 filenames work properly.

I found this same bug in the amend code path, and in the blame
display.  So its fixed in all three locations (commit creation,
reloading message for amend, viewing  message in blame).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Honor TCLTK_PATH if supplied
Junio C Hamano [Tue, 17 Apr 2007 10:31:47 +0000 (03:31 -0700)]
git-gui: Honor TCLTK_PATH if supplied

Mimick what we do for gitk.  Since you do have a source file,
git-gui.sh, which is separate from the target, it should be much
easier in git-gui's Makefile.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoRevert "Allow wish interpreter to be defined with TCLTK_PATH"
Shawn O. Pearce [Tue, 17 Apr 2007 17:15:56 +0000 (13:15 -0400)]
Revert "Allow wish interpreter to be defined with TCLTK_PATH"

This reverts commit e2a1bc67d321a0c03737179f331c39a52e7049d7.

Junio rightly pointed out this patch doesn't handle the
`make install` target very well:

Junio C Hamano <junkio@cox.net> writes:
> You should never generate new files in the source tree from
> 'install' target.  Otherwise, the usual pattern of "make" as
> yourself and then "make install" as root would not work from a
> "root-to-nobody-squashing" NFS mounted source tree to local
> filesystem.  You should know better than accepting such a patch.

17 years agogit-gui: Display the directory basename in the title
Shawn O. Pearce [Sat, 14 Apr 2007 19:10:48 +0000 (15:10 -0400)]
git-gui: Display the directory basename in the title

By showing the basename of the directory very early in the
title bar I can more easily locate a particular git-gui
session when I have 8 open at once and my  Windows taskbar
is overflowing with items.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'er/ui'
Shawn O. Pearce [Sun, 15 Apr 2007 04:34:28 +0000 (00:34 -0400)]
Merge branch 'er/ui'

* er/ui:
  Always bind the return key to the default button
  Do not break git-gui messages into multiple lines.
  Improve look-and-feel of the git-gui tool.
  Teach git-gui to use the user-defined UI font everywhere.
  Allow wish interpreter to be defined with TCLTK_PATH

17 years agogit-gui: Brown paper bag fix division by 0 in blame
Shawn O. Pearce [Wed, 4 Apr 2007 16:08:46 +0000 (12:08 -0400)]
git-gui: Brown paper bag fix division by 0 in blame

If we generate a blame status string before we have obtained
any annotation data at all from the input file, or if the input
file is empty, our total_lines will be 0.  This causes a division
by 0 error when we blindly divide by the 0 to compute the total
percentage of lines loaded.  Instead we should report 0% done.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoAlways bind the return key to the default button
Shawn O. Pearce [Wed, 4 Apr 2007 15:45:33 +0000 (11:45 -0400)]
Always bind the return key to the default button

If a dialog/window has a default button registered not every
platform associates the return key with that button, but all
users do.  We have to register the binding of the return key
ourselves to make sure the user's expectations of pressing
return will activate the default button are met.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoDo not break git-gui messages into multiple lines.
Eygene Ryabinkin [Tue, 27 Mar 2007 10:31:55 +0000 (14:31 +0400)]
Do not break git-gui messages into multiple lines.

Many git-gui messages were broken into a multiple lines to make
good paragraph width. Unfortunately in reality it breaks the paragraph
width completely, because the dialog window width does not coincide
with the paragraph width created by the current font.

Tcl/Tk's standard dialog boxes are breaking the long lines
automatically, so it is better to make long lines and let the
interpreter do the job.

Signed-off-by: Eygene Ryabinkin <rea-git@codelabs.ru>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoImprove look-and-feel of the git-gui tool.
Eygene Ryabinkin [Tue, 27 Mar 2007 10:31:02 +0000 (14:31 +0400)]
Improve look-and-feel of the git-gui tool.

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, but on console output dialogs as well.

Signed-off-by: Eygene Ryabinkin <rea-git@codelabs.ru>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoTeach git-gui to use the user-defined UI font everywhere.
Eygene Ryabinkin [Tue, 27 Mar 2007 10:29:08 +0000 (14:29 +0400)]
Teach git-gui to use the user-defined UI font everywhere.

Some parts of git-gui 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: Shawn O. Pearce <spearce@spearce.org>
17 years agoAllow wish interpreter to be defined with TCLTK_PATH
Eygene Ryabinkin [Wed, 4 Apr 2007 15:31:49 +0000 (11:31 -0400)]
Allow wish interpreter to be defined with TCLTK_PATH

Makefile got one external option:
- TCLTK_PATH: the path to the Tcl/Tk interpreter.

Users (or build wrappers) may set this variable to the
location of the wish executable.

Signed-off-by: Eygene Ryabinkin <rea-git@codelabs.ru>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint' gitgui-0.6.5
Shawn O. Pearce [Mon, 12 Mar 2007 17:26:59 +0000 (13:26 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Allow 'git gui version' outside of a repository
  git-gui: Revert "git-gui: Display all authors of git-gui."
  git-gui: Revert "Don't modify CREDITS-FILE if it hasn't changed."
  git-gui: Allow committing empty merges

17 years agogit-gui: Allow 'git gui version' outside of a repository gitgui-0.6.4
Shawn O. Pearce [Mon, 12 Mar 2007 17:24:10 +0000 (13:24 -0400)]
git-gui: Allow 'git gui version' outside of a repository

I got a little surprise one day when I tried to run 'git gui version'
outside of a Git repository to determine what version of git-gui was
installed on that system.  Turns out we were doing the repository
check long before we got around to command line argument handling.

We now look to see if the only argument we have been given is
'version' or '--version', and if so, print out the version and
exit immediately; long before we consider looking at the Git
version or working directory.  This way users can still get to
the git-gui version number even if Git's version cannot be read.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Revert "git-gui: Display all authors of git-gui."
Shawn O. Pearce [Mon, 12 Mar 2007 17:26:04 +0000 (13:26 -0400)]
git-gui: Revert "git-gui: Display all authors of git-gui."
This reverts commit 871f4c97ad7e021d1a0a98c80c5da77fcf70e4af.

Too many users have complained about the credits generator in
git-gui, so I'm backing the entire thing out.  This revert will
finish that series.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Revert "Don't modify CREDITS-FILE if it hasn't changed."
Shawn O. Pearce [Mon, 12 Mar 2007 17:25:58 +0000 (13:25 -0400)]
git-gui: Revert "Don't modify CREDITS-FILE if it hasn't changed."
This reverts commit 92446aba47b0e0db28f7b858ea387efcca30ab44.

Too many users have complained about the credits generator in
git-gui, so I'm backing the entire thing out.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow committing empty merges
Shawn O. Pearce [Mon, 12 Mar 2007 17:03:47 +0000 (13:03 -0400)]
git-gui: Allow committing empty merges

Johannes Sixt noticed that git-gui would not let the user commit
a merge created by `git merge -s ours` as the ours strategy does
not alter the tree (that is HEAD^1^{tree} = HEAD^{tree} after the
merge).  The same issue arises from amending such a merge commit.

We now permit an empty commit (no changed files) if we are doing
a merge commit.  Core Git does this with its command line based
git-commit tool, so it makes sense for the GUI to do the same.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Support of "make -s" in: do not output anything of the build itself
Alex Riesen [Tue, 6 Mar 2007 23:44:37 +0000 (00:44 +0100)]
git-gui: Support of "make -s" in: do not output anything of the build itself

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Make 'make' quieter by default gitgui-0.6.3
Shawn O. Pearce [Tue, 6 Mar 2007 07:13:23 +0000 (02:13 -0500)]
git-gui: Make 'make' quieter by default

To fit nicely into the output of the git.git project's own quieter
Makefile, we want to make the git-gui Makefile nice and quiet too.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Remove unnecessary /dev/null redirection.
Shawn O. Pearce [Thu, 1 Mar 2007 19:37:34 +0000 (14:37 -0500)]
git-gui: Remove unnecessary /dev/null redirection.

Git 1.5.0 and later no longer output useless messages to standard
error when making the initial (or what looks to be) commit of a
repository.  Since /dev/null does not exist on Windows in the
MinGW environment we can't redirect there anyway.  Since Git
does not output anymore, I'm removing the redirection.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Don't create empty (same tree as parent) commits. gitgui-0.6.2
Shawn O. Pearce [Mon, 26 Feb 2007 16:47:14 +0000 (11:47 -0500)]
git-gui: Don't create empty (same tree as parent) commits.

Mark Levedahl noticed that git-gui will let you create an empty
normal (non-merge) commit if the file state in the index is out
of whack.  The case Mark was looking at was with the new autoCRLF
feature in git enabled and is actually somewhat difficult to create.

I found a different way to create an empty commit:  turn on the
Trust File Modifications flag, touch a file, rescan, then move
the file into the "Changes To Be Committed" list without looking
at the file's diff.  This makes git-gui think there are files
staged for commit, yet the update-index call did nothing other
than refresh the stat information for the affected file.  In
this case git-gui allowed the user to make a commit that did
not actually change anything in the repository.

Creating empty commits is usually a pointless operation; rarely
does it record useful information.  More often than not an empty
commit is actually an indication that the user did not properly
update their index prior to commit.  We should help the user out
by detecting this possible mistake and guiding them through it,
rather than blindly recording it.

After we get the new tree name back from write-tree we compare
it to the parent commit's tree; if they are the same string and
this is a normal (non-merge, non-amend) commit then something
fishy is going on.  The user is making an empty commit, but they
most likely don't want to do that.  We now pop an informational
dialog and start a rescan, aborting the commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Add Reset to the Branch menu.
Shawn O. Pearce [Mon, 26 Feb 2007 16:22:10 +0000 (11:22 -0500)]
git-gui: Add Reset to the Branch menu.

cehteh on #git noticed that there was no way to perform a reset --hard
from within git-gui.  When I pointed out this was Merge->Abort Merge
cehteh said this is not very understandable, and that most users would
never guess to try that option unless they were actually in a merge.

So Branch->Reset is now also a way to cause a reset --hard from within
the UI.  Right now the confirmation dialog is the same as the one used
in Merge->Abort Merge.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Relocate the menu/transport menu code.
Shawn O. Pearce [Mon, 26 Feb 2007 16:17:11 +0000 (11:17 -0500)]
git-gui: Relocate the menu/transport menu code.

This code doesn't belong down in the main window UI creation,
its really part of the menu system and probably should be
located with it.  I'm moving it because I could not find
the code when I was looking for it earlier today, as it was
not where I expected it to be found.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoDon't modify CREDITS-FILE if it hasn't changed.
Junio C Hamano [Sun, 25 Feb 2007 07:18:11 +0000 (02:18 -0500)]
Don't modify CREDITS-FILE if it hasn't changed.

We should always avoid rewriting a built file during `make install`
if nothing has changed since `make all`.  This is to help support
the typical installation process of compiling a package as yourself,
then installing it as root.

Forcing CREDITS-FILE to be always be rebuilt in the Makefile means
that CREDITS-GEN needs to check for a change and only update
CREDITS-FILE if the file content actually differs.  After all,
content is king in Git.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Don't crash in citool mode on initial commit. gitgui-0.6.1
Shawn O. Pearce [Wed, 21 Feb 2007 06:33:59 +0000 (01:33 -0500)]
git-gui: Don't crash in citool mode on initial commit.

Attempting to use `git citool` to create an initial commit caused
git-gui to crash with a Tcl error as it tried to add the newly
born branch to the non-existant branch menu.  Moving this code
to after the normal commit cleanup logic resolves the issue, as
we only have a branch menu if we are not in singlecommit mode.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Remove TODO list.
Shawn O. Pearce [Wed, 21 Feb 2007 06:29:05 +0000 (01:29 -0500)]
git-gui: Remove TODO list.

I'm apparently not very good at keeping my own TODO file current.
I its also somewhat strange to keep the TODO list as part of the
software branch, as its meta-information that is not directly
related to the code.  I'm pulling the TODO list from git-gui and
moving it into a seperate branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Include browser in our usage message.
Shawn O. Pearce [Wed, 21 Feb 2007 06:24:57 +0000 (01:24 -0500)]
git-gui: Include browser in our usage message.

Now that the 'browser' subcommand can be used to startup the tree
browser, it should be listed as a possible subcommand option in
our usage message.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Change summary of git-gui.
Shawn O. Pearce [Mon, 19 Feb 2007 02:08:04 +0000 (21:08 -0500)]
git-gui: Change summary of git-gui.

Since git-gui does more than create commits, it is unfair to call
it "a commit creation tool".  Instead lets just call it a graphical
user interface.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Display all authors of git-gui.
Shawn O. Pearce [Mon, 19 Feb 2007 02:06:48 +0000 (21:06 -0500)]
git-gui: Display all authors of git-gui.

Now that git-gui has been released to the public as part of Git 1.5.0
I am starting to see some work from other people beyond myself and
Paul.  Consequently the copyright for git-gui is not strictly the
two of us anymore, and these others deserve to have some credit
given to them.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Use mixed path for docs on Cygwin.
Shawn O. Pearce [Mon, 19 Feb 2007 00:06:09 +0000 (19:06 -0500)]
git-gui: Use mixed path for docs on Cygwin.

The Firefox browser requires that a URL use / to delimit directories.
This is instead of \, as \ gets escaped by the browser into its hex
escape code and then relative URLs are incorrectly resolved, Firefox
no longer sees the directories for what they are.  Since we are
handing the browser a true URL, we better use the standard / for
directories.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Correct crash when saving options in blame mode.
Shawn O. Pearce [Sun, 18 Feb 2007 07:12:32 +0000 (02:12 -0500)]
git-gui: Correct crash when saving options in blame mode.

Martin Waitz noticed that git-gui crashed while saving the user's
options out if the application was started in blame mode.  This
was caused by the do_save_config procedure invoking reshow_diff
incase the number of context lines was modified by the user.
Because we bypassed main window UI setup to enter blame mode we
did not set many of the globals which were accessed by reshow_diff,
and reading unset variables is an error in Tcl.

Aside from moving the globals to be set earlier, I also modified
reshow_diff to not invoke clear_diff if there is no path currently
in the diff viewer.  This way reshow_diff does not crash when in
blame mode due to the $ui_diff command not being defined.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Expose the browser as a subcommand.
Shawn O. Pearce [Fri, 16 Feb 2007 05:24:03 +0000 (00:24 -0500)]
git-gui: Expose the browser as a subcommand.

Some users may find being able to browse around an arbitrary
branch to be handy, so we now expose our graphical browser
through `git gui browse <committish>`.

Yes, I'm being somewhat lazy and making the user give us
the name of the branch to browse.  They can always enter
HEAD.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Create new branches from a tag.
Martin Koegler [Thu, 15 Feb 2007 06:28:34 +0000 (01:28 -0500)]
git-gui: Create new branches from a tag.

I'm missing the possibility to base a new branch on a tag.
The following adds a tag drop down to the new branch dialog.

Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Prefer version file over git-describe.
Shawn O. Pearce [Wed, 14 Feb 2007 06:55:16 +0000 (01:55 -0500)]
git-gui: Prefer version file over git-describe.

Some distributions are using Git for part of their package
management system, but unpack Git's own source code for
delivery from the .tar.gz.  This means that when we walk
up the directory tree with git-describe to locate a Git
repository, the repository we find is for the distribution
and *not* for git-gui.  Consequently any tag we might find
there is bogus and does not apply to us.

In this case the version file should always exist and be
readable, as the packager is working from the released
.tar.gz sources.  So we should always favor the version
file over anything git-describe guess for us.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Print version on the console.
Shawn O. Pearce [Wed, 14 Feb 2007 05:28:00 +0000 (00:28 -0500)]
git-gui: Print version on the console.

Like `git version`, `git gui version` (or `git gui --version`) shows
the version of git-gui, in case the user needs to know this, without
looking at it in the GUI about dialog.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: More consistently display the application name.
Shawn O. Pearce [Wed, 14 Feb 2007 05:10:20 +0000 (00:10 -0500)]
git-gui: More consistently display the application name.

I started to find it confusing that git-gui would refer to itself
as git-citool when it was started through the citool hardlink, or
with the citool subcommand.  What was especially confusing was the
options dialog and the about dialog, as both seemed to imply they
were somehow different from the git-gui versions.  In actuality
there is no difference at all.

Now we just call our options menu item 'Options...' (skipping the
application name) and our About dialog now always shows git-gui
within the short description (above the copyleft notice) and in
the version field.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Permit merging tags into the current branch.
Shawn O. Pearce [Wed, 14 Feb 2007 04:43:48 +0000 (23:43 -0500)]
git-gui: Permit merging tags into the current branch.

It was pointed out on the git mailing list by Martin Koegler that
we did not show tags as possible things to merge into the current
branch.  They actually are, and core Git's Grand Unified Merge
Driver will accept them just like any other commit.

So our merge dialog now requests all refs/heads, refs/remotes and
refs/tags named refs and attempts to match them against the commits
not in HEAD.  One complicating factor here is that we must use the
%(*objectname) field when talking about an annotated tag, as they
will not appear in the output of rev-list.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Basic version check to ensure git 1.5.0 or later is used.
Shawn O. Pearce [Wed, 14 Feb 2007 04:15:25 +0000 (23:15 -0500)]
git-gui: Basic version check to ensure git 1.5.0 or later is used.

This is a very crude (but hopefully effective) check against the
`git` executable found in our PATH.  Some of the subcommands and
options that git-gui requires to be present to operate were created
during the 1.5.0 development cycle, so 1.5 is the minimum version
of git that we can expect to support.

There actually are early releases of 1.5 (e.g. 1.5.0-rc0) that
don't have everything we expect (like `blame --incremental`) but
these are purely academic at this point.  1.5.0 final was tagged
and released just a few hours ago.  The release candidates will
(hopefully) fade into the dark quickly.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Refactor 'exec git subcmd' idiom.
Shawn O. Pearce [Tue, 13 Feb 2007 03:48:56 +0000 (22:48 -0500)]
git-gui: Refactor 'exec git subcmd' idiom.

As we frequently need to execute a Git subcommand and obtain
its returned output we are making heavy use of [exec git foo]
to run foo.  As I'm concerned about possibly needing to carry
environment data through a shell on Cygwin for at least some
subcommands, I'm migrating all current calls to a new git
proc.  This actually makes the code look cleaner too, as
we aren't saying 'exec git' everywhere.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: fix typo in GIT-VERSION-GEN, "/dev/null" not "/devnull"
Andy Parkins [Tue, 13 Feb 2007 15:26:16 +0000 (15:26 +0000)]
git-gui: fix typo in GIT-VERSION-GEN, "/dev/null" not "/devnull"

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Change base version to 0.6. gitgui-0.6.0
Shawn O. Pearce [Mon, 12 Feb 2007 22:45:21 +0000 (17:45 -0500)]
git-gui: Change base version to 0.6.

This is the start of the 0.6 series of git-gui.  I'm calling it 0.6
(rather than any other value) as I already had a private tag on
one system based on 0.5, and that tag is quite a bit behind this
version.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Guess our version accurately as a subproject.
Shawn O. Pearce [Mon, 12 Feb 2007 22:05:10 +0000 (17:05 -0500)]
git-gui: Guess our version accurately as a subproject.

When we are included as a subproject, such as how git.git carries
us, we want to retain our own version number and not the version
number assigned by git.git's own tags.  Consequently we need to
locate the correct tag which applies to our tree content and
its commit lineage.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Handle gitgui tags in version gen.
Shawn O. Pearce [Mon, 12 Feb 2007 21:38:29 +0000 (16:38 -0500)]
git-gui: Handle gitgui tags in version gen.

I've decided to use gitgui-0.5 as the format for tags in the
git-gui repository.  The prefix of gitgui was chosen here to
make its namespace different from the namespace used by git
itself, allowing developers to pull both tag namespaces into
the same repository.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Generate a version file on demand.
Shawn O. Pearce [Mon, 12 Feb 2007 21:14:44 +0000 (16:14 -0500)]
git-gui: Generate a version file on demand.

Because git-gui is being shipped as a subproject of the main
Git project and will often have a different lifecycle than
the main Git project, we should ship our own version number
in the release tarball rather than relying on the main Git
version file.

Git's master Makefile will invoke our own with the target
dist-version, asking us to save off our GITGUI_VERSION value
into our own version file, so that our GIT-VERSION-GEN script
can recover it at build time.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Rename GIT_VERSION to GITGUI_VERSION.
Shawn O. Pearce [Mon, 12 Feb 2007 21:12:04 +0000 (16:12 -0500)]
git-gui: Rename GIT_VERSION to GITGUI_VERSION.

Now that the decision has been made to treat git-gui as a
subproject, rather than merging it directly into git, we
should use a different substitution for our version value
to avoid any possible confusion.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow gitexecdir, INSTALL to be set by the caller.
Shawn O. Pearce [Mon, 12 Feb 2007 20:37:50 +0000 (15:37 -0500)]
git-gui: Allow gitexecdir, INSTALL to be set by the caller.

When used as a subproject within git.git our Makefile must honor
the gitexecdir which git.git's Makefile is passing down to us,
ensuring that we install our executables into the libexec chosen
by the end-user or packager.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>