1. 08 11月, 2006 8 次提交
    • S
      2bc5b348
    • S
      git-gui: Grab the index lock while running pull. · 988b8a7d
      Shawn O. Pearce 提交于
      The user must not modify the index while a git pull operation is running,
      doing so might cause problems for the merge driver and specific strategy
      being used.  Normally on the command line people are just really good and
      don't try to run index altering operations while they are also running a
      pull.  But in a slick GUI like git-gui we can't trust the user quite as
      much.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      988b8a7d
    • S
      git-gui: Allow the user to disable update-index --refresh during rescan. · e534f3a8
      Shawn O. Pearce 提交于
      On very large projects (~1000 files) on Windows systems the update-index
      --refresh stage of the rescan process takes a nontrival amount of time.
      If the user is generally very careful with their file modification such
      that the modification timestamp of the file differs only when the content
      also differs then we can skip this somewhat expensive step and go right
      to the diff-index and diff-files processes.
      
      We save the user's prefernce in the current repository if they modify the
      setting during a git-gui session, but we also load it through our dump of
      repo-config --list so the user could move it to their ~/.gitconfig file
      if they wanted it globally disabled.
      
      We still keep update-index --refresh enabled by default however, as most
      users will probably want it.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      e534f3a8
    • S
      git-gui: Added repack database menu option, to invoke git repack. · d1536c48
      Shawn O. Pearce 提交于
      Most users of git-gui probably shouldn't be invoking git repack directly;
      instead we should be looking at how many loose objects they have and
      how many active packs they have and making the decision for them.  But
      that's more work to code, and there's always going to be discussion about
      what is the right default threshold and how do we know that the user is
      willing to do the repack when we decide its time, etc.
      
      So instead we'll just keep it simple and offer up the menu option.
      
      Unfortunately right now we get now progress indication back from
      git-pack-objects as its being invoked not through a tty, which makes
      it disable progress output and the git-repack.sh wrapper won't let us
      pass through --progress.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      d1536c48
    • S
      git-gui: Flip commit message buffer and diff area. · 0fb8f9ce
      Shawn O. Pearce 提交于
      Since Tk will only supply new space gained from growing the top level to
      the bottom/right most widget within a panedwindow and most users will be
      growing a git-gui main window for the purposes of seeing more of the
      currently shown diff, flipping the order around makes Tk do what the
      user wants by default.
      
      Of course because we also removed the paned window from the commit buffer
      area it is now impossible to increase the visible space for the commit
      message.  But I don't see this as a huge concern right now as its actually
      very awkward to try and balance three paned window dividers within the
      same top level window.  We could always add it back if users really want
      to expand the commit buffer and see more.
      
      I also corrected a number of bugs that I accidentally introduced in the
      last commit.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      0fb8f9ce
    • S
      git-gui: More performance improvements to rescan logic. · 6b292675
      Shawn O. Pearce 提交于
      Removed as much as possible from the merge_state proc, which is where
      we spent most of our time before UI update.  This change makes our
      running time match that of git status, except that we then need about
      7 additional seconds to draw 6900 files on screen.
      
      Apparently the [array names a -exact $v] operator in Tcl is O(n) rather
      than O(1), which is really quite disappointing given that each array can
      only have one entry for a given value.  Switching to a lookup with a
      catch (whose error we ignore) runs in O(1) time and bought us most of
      that improvement.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      6b292675
    • S
      git-gui: Performance improvements for large file sets. · 93f654df
      Shawn O. Pearce 提交于
      Loading 6900 newly added files required about 90 seconds on one system.
      This is just far too long to perform a "status" type of operation.
      git-status on the same system completes in just 8.2 seconds if it is
      redirected to /dev/null.
      
      Most of our performance improvement comes from moving all of the UI
      updating out of the main fileevent handlers for the status process.
      Instead we are only updating the file_states array and then only doing
      the UI update when all states are known and have been finally determined.
      
      The rescan execution is now down to almost 30 seconds for the same case,
      a good (but not really all that impressive) improvement.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      93f654df
    • S
      git-gui: Corrected diff-index/diff-files protocol parsing errors. · 868c8752
      Shawn O. Pearce 提交于
      When we were receiving a lot of output from diff-index we split records
      at the wrong locations and started using the file status information
      (mode and SHA1s) as path names, and then proceeded to try to use part
      of the path names as status data.  This caused all sorts of havoc.
      
      So I rewrote the parsing implementation to scan for the pair of null
      bytes along the buffer and stop scanning (waiting for more data) if
      both can't be found during this event.  This seems to work well under
      high load (like when processing 6,983 added files).
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      868c8752
  2. 07 11月, 2006 21 次提交