From: Philip Oakley Date: Sat, 12 Oct 2019 20:34:06 GMT Subject: Re: Git Gui: Branch->create currently fails... Message-ID: In-Reply-To: <20191008000003.qlulu5ie36eij4uq@yadavpratyush.com> Hi Pratyus, On 08/10/2019 01:00, Pratyush Yadav wrote: > On 07/10/19 11:02PM, Philip Oakley wrote: >> I'd never used the Branch:Create before (this is via mouse) and it threw an >> error, which appears to be repeatable, so I'm reporting it at the moment so > I'm afraid I can't reproduce it. I tested by creating a worktree of > git.git by running: > > git worktree add ../git-2 > > Then I opened git-gui in the worktree and clicked the "Create" option > under the "Branch" menu. > > The dialog opened just fine, which I assume is what your error is. But > just to be sure, I created a branch too, and that also works pretty > well. > > Same behaviour with a "normal" branch, which is not inside a worktree. > > So is there anything else in your setup that would cause this problem? > >> I don't forget ... >> (I'm chasing down other issue at the moment ;-) >> >> This is with the version 0.21.GI git version 2.23.0.windows.1 Tcl/Tck 8.6.9 >> >> >> missing " >> missing " >>     while executing >> "list "refs/heads/redo-v0" [list "" >>     ("eval" body line 1) >>     invoked from within >> "eval $line" >>     (procedure "_new" line 87) >>     invoked from within >> "_new $path 0 $title" >>     (procedure "::choose_rev::new" line 2) >>     invoked from within >> "::choose_rev::new $w.rev [mc "Starting Revision"]" >>     (procedure "branch_create::dialog" line 35) >>     invoked from within >> "branch_create::dialog" >>     (menu invoke) > Looking at the log, the culprit seems to be the line: > > set line [eval $line] > > over at lib/choose_rev.tcl:159. The $line comes from reading the output > of a call to `git for-each-ref` with '--tcl' passed in. Looking at the > man page for 'for-each-ref', the description of the option is: > > --shell, --perl, --python, --tcl > If given, strings that substitute %(fieldname) placeholders are > quoted as string literals suitable for the specified host language. > This is meant to produce a scriptlet that > can directly be `eval`ed. > > So this might possibly me an upstream bug. > > If I had to guess a fix, I'd suggest trying to wrap the $line in > lib/choose_rev.tcl:159 in quotes like so: > > set line [eval "$line"] > > If this doesn't fix it, see if you can find out which $line is causing > problem by printing the variable before 'eval'ing it by adding a: > > puts "$line" > > before the call to eval. > I've tried both parts and seen that this looks like some form of buffer overrun or size limit with the mods I ran: $ git gui > branch_create.txt which produced the 'same' error missing ", but with a slightly different fragment. The branch_create.txt file is size 1.43 MB (1,502,103 bytes) (from the windows explorer file properties dialog..) opening in Notepad++ it's 4900 lines long with the final line trucated at col 188 (shorter than other lines). There is an empty line 4901 (CRLF) the last two lines are: list "refs/heads/branch-patterns" [list "commit" "b2453cea29b58f2ec57f9627b2456b41568ba5da" [concat "" "Philip Oakley"] [reformat_date [concat "" "Tue May 28 20:22:09 2019 +0100"]] "squash! doc branch: provide examples for listing remote tracking branches"] [list "" "" "" [reformat_date ""] ""] list "refs/heads/MSVC-README" [list "commit" "056fb95c8e983ec07e9f5f8baa0b119bf3d13fed" [concat "" "Philip Oakley"] [reformat_date [concat "" "Sun May 19 22:33:37 2019 +0100"]] "compat/vc the file starts with 1018 lines of refs/tags before listing the refs/remotes and finally the refs/heads. The repo is my local Git repo with multiple remotes (git.git, G-f-W, ggg, junio, gitster, dscho, t-b, tboeg, me), so plenty of refs there! So it does look to be specific to repos with a large number of refs/tags, refs/remotes, and refs/heads. something for the back-burner? Philip