git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Scott Batchelor <scott.batchelor@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>, git@vger.kernel.org
Subject: [PATCH] gitk: refresh the index before running diff-files
Date: Fri, 28 Sep 2012 16:50:54 -0400	[thread overview]
Message-ID: <20120928205054.GA5985@sigill.intra.peff.net> (raw)
In-Reply-To: <20120928202330.GA5770@sigill.intra.peff.net>

On Fri, Sep 28, 2012 at 04:23:30PM -0400, Jeff King wrote:

> > I'm trying to figure out what the problem with "git diff-files" is
> > because gitk uses it under the hood, and I think that gitk is
> > reporting  erroneous changes (which are also reset by performing a
> > "git status" in the repo) in the "patch" files list.
> 
> gitk should probably be calling "update-index --refresh" on startup. If
> it already is, then it may be that whatever is updating the files is
> doing it while gitk is running.

Ah, it is not refreshing the index at all.  Try this (substitute
Makefile with some file in your repository):

  $ touch Makefile
  $ gitk  <-- reports uncommitted changes
  $ git update-index --refresh
  $ gitk  <-- changes go away

I am not a tcl hacker, but the patch below seems to fix it for me.

-- >8 --
Subject: [PATCH] gitk: refresh the index before running diff-files

If you have index entries that are stat-dirty but otherwise
unchanged, gitk will erroneously report that "local
uncommited changes" are present. This is because we call the
plumbing diff-files, which expects us to have updated the
index ourselves. So let's start doing so.

We only run this once per invocation of gitk, though. The
point of diff-files not running the update is that it does
not need to be run for every command, but generally only
once per high-level operation.

Signed-off-by: Jeff King <peff@peff.net>
---
Potentially the "reload" command should reset the need_index_refresh
flag, too.

 gitk | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gitk b/gitk
index 379582a..561be23 100755
--- a/gitk
+++ b/gitk
@@ -5112,6 +5112,14 @@ proc dodiffindex {} {
     filerun $fd [list readdiffindex $fd $lserial $i]
 }
 
+proc refresh_index {} {
+    global need_index_refresh
+    if { $need_index_refresh } {
+	exec sh -c "git update-index --refresh >/dev/null 2>&1 || true"
+	set need_index_refresh false
+    }
+}
+
 proc readdiffindex {fd serial inst} {
     global viewmainheadid nullid nullid2 curview commitinfo commitdata lserial
     global vfilelimit
@@ -5131,6 +5139,7 @@ proc readdiffindex {fd serial inst} {
     }
 
     # now see if there are any local changes not checked in to the index
+    refresh_index
     set cmd "|git diff-files"
     if {$vfilelimit($curview) ne {}} {
 	set cmd [concat $cmd -- $vfilelimit($curview)]
@@ -11670,6 +11679,7 @@ set want_ttk 1
 set autosellen 40
 set perfile_attrs 0
 set want_ttk 1
+set need_index_refresh true
 
 if {[tk windowingsystem] eq "aqua"} {
     set extdifftool "opendiff"
-- 
1.7.12.42.g8bdb6d3

  reply	other threads:[~2012-09-28 20:51 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-28 18:55 Git diff-file bug? Scott Batchelor
2012-09-28 20:23 ` Jeff King
2012-09-28 20:50   ` Jeff King [this message]
2012-09-28 21:40     ` [PATCH] gitk: refresh the index before running diff-files Junio C Hamano
2012-09-28 22:11     ` Andreas Schwab
2012-09-28 22:31       ` Jeff King
2012-09-28 23:02         ` Junio C Hamano
2012-09-28 23:04           ` Jeff King
2012-09-28 23:18             ` Junio C Hamano
2012-09-28 23:20           ` Andreas Schwab
2012-09-30  0:05     ` Paul Mackerras
2012-09-30  1:42       ` Jeff King
2012-09-30 20:34         ` Jonathan Nieder
2012-10-01 22:32           ` Jeff King
2012-10-01 22:54             ` Junio C Hamano
2012-09-28 20:40 ` Git diff-file bug? Junio C Hamano
2012-10-03  8:04   ` Scott Batchelor
2012-10-03 11:58     ` Drew Northup

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120928205054.GA5985@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=paulus@samba.org \
    --cc=scott.batchelor@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).