Skip to contentSkip to conversation

gitk: Fix missing commits when using -S or -G

PATCH Superseded Stefan Dotterweich 2 participants 6 messages Jun 16, 2016 – Dec 12, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 gitk: Fix missing commits when using -S or -G

When -S or -G is used as a filter option, the resulting commit list rarely contains all matching commits. Only a certain number of commits are displayed and the rest are missing.

"git log --boundary -S" does not return as many boundary commits as you might expect. gitk makes up for this in closevargs() by adding missing parent (boundary) commits. However, it does not change $numcommits, which limits how many commits are shown. In the end, some commits at the end of the commit list are simply not shown.

Change $numcommits whenever a missing parent is added.

---
 gitk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
gitk +2 -2
index 805a1c7..b0da174 100755
@@ -1315,7 +1315,7 @@ proc commitonrow {row} {
  proc closevarcs {v} {
     global varctok varccommits varcid parents children
-    global cmitlisted commitidx vtokmod
+    global cmitlisted commitidx vtokmod numcommits
      set missing_parents 0
     set scripts {}
@@ -1339,7 +1339,7 @@ proc closevarcs {v} {
 		modify_arc $v $b
 	    }
 	    lappend varccommits($v,$b) $p
-	    incr commitidx($v)
+	    set numcommits [incr commitidx($v)]
 	    set scripts [check_interest $p $scripts]
 	}
     }
Signature · 1 line
2.7.4
#1 lore raw

When -S or -G is used as a filter option, the resulting commit list rarely contains all matching commits. Only a certain number of commits are displayed and the rest are missing.

"git log --boundary -S" does not return as many boundary commits as you might expect. gitk makes up for this in closevargs() by adding missing parent (boundary) commits. However, it does not change $numcommits, which limits how many commits are shown. In the end, some commits at the end of the commit list are simply not shown.

Change $numcommits whenever a missing parent is added.

---
 gitk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
gitk +2 -2
index 805a1c7..b0da174 100755
@@ -1315,7 +1315,7 @@ proc commitonrow {row} {
 
 proc closevarcs {v} {
     global varctok varccommits varcid parents children
-    global cmitlisted commitidx vtokmod
+    global cmitlisted commitidx vtokmod numcommits
 
     set missing_parents 0
     set scripts {}
@@ -1339,7 +1339,7 @@ proc closevarcs {v} {
 		modify_arc $v $b
 	    }
 	    lappend varccommits($v,$b) $p
-	    incr commitidx($v)
+	    set numcommits [incr commitidx($v)]
 	    set scripts [check_interest $p $scripts]
 	}
     }
Signature · 1 line
2.7.4
#2 lore raw
Quoted 11 lines · Stefan Dotterweich

When -S or -G is used as a filter option, the resulting commit list rarely contains all matching commits. Only a certain number of commits are displayed and the rest are missing.

"git log --boundary -S" does not return as many boundary commits as you might expect. gitk makes up for this in closevargs() by adding missing parent (boundary) commits. However, it does not change $numcommits, which limits how many commits are shown. In the end, some commits at the end of the commit list are simply not shown.

Change $numcommits whenever a missing parent is added.

Nice catch; however, we should only update numcommits if the commits are for the current view, i.e. if $v == $curview.

Do you want to update the patch? If you prefer, I can update the patch and put a note in the commit message about the issue.

Paul.

#3 lore raw
Quoted 5 lines

Nice catch; however, we should only update numcommits if the commits are for the current view, i.e. if $v == $curview.

Do you want to update the patch? If you prefer, I can update the patch and put a note in the commit message about the issue.

Sure, feel free to update the patch as you see fit.

#4 lore raw

PATCH v3 1/1 gitk: Fix missing commits when using -S or -G

When -S or -G is used as a filter option, the resulting commit list rarely contains all matching commits. Only a certain number of commits are displayed and the rest are missing.

"git log --boundary -S" does not return as many boundary commits as you might expect. gitk makes up for this in closevargs() by adding missing parent (boundary) commits. However, it does not change $numcommits, which limits how many commits are shown. In the end, some commits at the end of the commit list are simply not shown.

Change $numcommits whenever a missing parent is added.

---

Here is an updated version of the patch. Feel free to change it if anything is missing.

 gitk-git/gitk | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
gitk-git/gitk +4 -1
index 805a1c7..572da4a 100755
@@ -1315,7 +1315,7 @@ proc commitonrow {row} {
 
 proc closevarcs {v} {
     global varctok varccommits varcid parents children
-    global cmitlisted commitidx vtokmod
+    global cmitlisted commitidx vtokmod curview numcommits
 
     set missing_parents 0
     set scripts {}
@@ -1340,6 +1340,9 @@ proc closevarcs {v} {
 	    }
 	    lappend varccommits($v,$b) $p
 	    incr commitidx($v)
+	    if {$v == $curview} {
+		set numcommits $commitidx($v)
+	    }
 	    set scripts [check_interest $p $scripts]
 	}
     }
Signature · 1 line
2.8.0
#5 lore raw
Quoted 10 lines · Stefan Dotterweich

When -S or -G is used as a filter option, the resulting commit list rarely contains all matching commits. Only a certain number of commits are displayed and the rest are missing.

"git log --boundary -S" does not return as many boundary commits as you might expect. gitk makes up for this in closevargs() by adding missing parent (boundary) commits. However, it does not change $numcommits, which limits how many commits are shown. In the end, some commits at the end of the commit list are simply not shown.

Quoted 3 lines

Change $numcommits whenever a missing parent is added.

Thanks, applied, with slight tweaks to the commit message.

Paul.