Permalink
Commits on May 8, 2007
  1. 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>
    spearce committed May 5, 2007
  2. 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>
    spearce committed May 3, 2007
  3. 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>
    spearce committed May 2, 2007
  4. 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>
    spearce committed May 2, 2007
  5. 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>
    spearce committed May 1, 2007
  6. 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>
    spearce committed May 1, 2007
  7. 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>
    spearce committed May 8, 2007
Commits on May 2, 2007
  1. 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>
    spearce committed Apr 29, 2007
  2. 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>
    spearce committed Apr 29, 2007
  3. 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>
    spearce committed Apr 29, 2007
  4. 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>
    spearce committed Apr 29, 2007
  5. 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>
    spearce committed Apr 29, 2007
  6. 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>
    spearce committed Apr 29, 2007
  7. 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>
    spearce committed Apr 29, 2007
  8. Merge branch 'maint'

    * maint:
      git-gui: Allow spaces in path to 'wish'
    spearce committed May 2, 2007
  9. 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>
    spearce committed May 2, 2007
Commits on Apr 24, 2007
  1. 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>
    spearce committed Apr 24, 2007
Commits on Apr 17, 2007
  1. 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>
    Junio C Hamano committed with spearce Apr 17, 2007
  2. Revert "Allow wish interpreter to be defined with TCLTK_PATH"

    This reverts commit e2a1bc6.
    
    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.
    spearce committed Apr 17, 2007
Commits on Apr 15, 2007
  1. 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>
    spearce committed Apr 14, 2007
  2. 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
    spearce committed Apr 15, 2007
Commits on Apr 4, 2007
  1. 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>
    spearce committed Apr 4, 2007
  2. 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>
    spearce committed Apr 4, 2007
  3. 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>
    Eygene Ryabinkin committed with spearce Mar 27, 2007
  4. 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>
    Eygene Ryabinkin committed with spearce Mar 27, 2007
  5. 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>
    Eygene Ryabinkin committed with spearce Mar 27, 2007
  6. 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>
    Eygene Ryabinkin committed with spearce Apr 4, 2007
Commits on Mar 12, 2007
  1. 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
    spearce committed Mar 12, 2007
  2. 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>
    spearce committed Mar 12, 2007
  3. git-gui: Revert "git-gui: Display all authors of git-gui."

    This reverts commit 871f4c9.
    
    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>
    spearce committed Mar 12, 2007
  4. git-gui: Revert "Don't modify CREDITS-FILE if it hasn't changed."

    This reverts commit 92446ab.
    
    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>
    spearce committed Mar 12, 2007
  5. 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>
    spearce committed Mar 12, 2007
Commits on Mar 7, 2007
  1. 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>
    raalkml committed with spearce Mar 6, 2007
Commits on Mar 6, 2007
  1. 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>
    spearce committed Mar 6, 2007
Commits on Mar 1, 2007
  1. 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>
    spearce committed Mar 1, 2007