git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 3/4] git gui: de-dup selected repo from recentrepo history

From
Philip Oakley <philipoakley@iee.org>
Date
Jan 22, 2017, 19:53 UTC
Message-ID
<20170122195301.1784-4-philipoakley@iee.org>
In-Reply-To
<20170122195301.1784-1-philipoakley@iee.org>

When the gui/user selects a repo for display, that repo is brought to the end of the recentrepo config list. The logic can fail if there are duplicate old entries for the repo (you cannot unset a single config entry when duplicates are present).

Similarly, the maxrecentrepo logic could fail if older duplicate entries are present.

The first commit of this series ({this}~2) fixed the config unsetting issue. Rather than manipulating a local copy of the $recent list (one cannot know how many entries were removed), simply re-read it.

We must also catch the error when the attempt to remove the second copy from the re-read list is performed.

Signed-off-by: Philip Oakley <philipoakley@iee.org>
---
 lib/choose_repository.tcl | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl
index aa87bcc..f39636f 100644
--- a/lib/choose_repository.tcl
+++ b/lib/choose_repository.tcl
@@ -247,7 +247,7 @@ proc _get_recentrepos {} {
 
 proc _unset_recentrepo {p} {
 	regsub -all -- {([()\[\]{}\.^$+*?\\])} $p {\\\1} p
-	git config --global --unset-all gui.recentrepo "^$p\$"
+	catch {git config --global --unset-all gui.recentrepo "^$p\$"}
 	load_config 1
 }
 
@@ -262,12 +262,11 @@ proc _append_recentrepos {path} {
 	set i [lsearch $recent $path]
 	if {$i >= 0} {
 		_unset_recentrepo $path
-		set recent [lreplace $recent $i $i]
 	}
 
-	lappend recent $path
 	git config --global --add gui.recentrepo $path
 	load_config 1
+	set recent [get_config gui.recentrepo]
 
 	if {[set maxrecent [get_config gui.maxrecentrepo]] eq {}} {
 		set maxrecent 10
@@ -275,7 +274,7 @@ proc _append_recentrepos {path} {
 
 	while {[llength $recent] > $maxrecent} {
 		_unset_recentrepo [lindex $recent 0]
-		set recent [lrange $recent 1 end]
+		set recent [get_config gui.recentrepo]
 	}
 }
 
-- 
2.9.0.windows.1.323.g0305acf
Previous: Philip OakleyNext: Philip Oakley
Message 3 of 6 in “git gui: allow for a long recentrepo list”
  1. 0/4 git gui: allow for a long recentrepo listPhilip Oakley, Jan 22, 2017
  2. 2/4 git gui: cope with duplicates in _get_recentrepoPhilip Oakley, Jan 22, 2017
  3. 3/4 git gui: de-dup selected repo from recentrepo historyPhilip Oakley, Jan 22, 2017
  4. 1/4 git-gui: remove duplicate entries from .gitconfig's gui.recentrepoPhilip Oakley, Jan 22, 2017
  5. 4/4 git gui: allow for a long recentrepo listPhilip Oakley, Jan 22, 2017
  6. Philip OakleyFeb 11, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.