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

Re: git-gui patch staging errors

From
Pratyush Yadav <me@yadavpratyush.com>
Date
May 25, 2020, 13:08 UTC
Message-ID
<20200525130807.4ydporgaeva27del@yadavpratyush.com>
In-Reply-To
<20200512204233.GA31807@sigkill.com>
Hi,
Sorry for the late reply.
On 12/05/20 01:42PM, J. Paul Reed wrote:
> 
> Hey Richard,
You replied to the wrong person ;-)
Show 23 quoted lines
> Using your test case, I still get the error (which is, specifically an
> error dialog saying:
> 
>    Failed to stage selected line.
> 
>    error: patch failed: glacierupload.sh:55
>    error:glacierupload.sh: patch does not apply
> 
> Note that I'm highlighting the change in the source code, then
> right-clicking it and selecting "Stage lines for commit." ("Stage hunk for
> commit" also results in the error.)
> 
> If I stage the entire file by clicking on it in the upper-lefthand pane,
> things work fine.
> 
> This is a Gentoo box, so I wonder I happened to build Tcl without the
> appropriate unicode support (that one would find in most package-based
> distros)?
> 
> In briefly digging a bit more, it would seem that git gui is foisting the
> work onto "git apply" to create a patch and stage it? (If I'm reading the
> source correctly, It looks like the error dialog title is from
> https://github.com/prati0100/git-gui/blob/master/lib/diff.tcl#L700

You are close, but not quite there. We don't use "git apply" to _create_ a patch. We create the patch ourselves, and then pass it to git apply to stage/unstage the lines selected.

I suspect it is some encoding mismatch. Can you apply this patch below and send what the output is?

-- 8< --
diff --git a/lib/diff.tcl b/lib/diff.tcl
index 871ad48..6226a89 100644
--- a/lib/diff.tcl
+++ b/lib/diff.tcl
@@ -851,8 +851,13 @@ proc apply_or_revert_range_or_line {x y revert} {
 		set first_l [$ui_diff index "$next_l + 1 lines"]
 	}
 
+	puts "Diff we will send to git-apply:"
+	puts -nonewline "$current_diff_header"
+	puts -nonewline "$wholepatch"
+
 	if {[catch {
 		set enc [get_path_encoding $current_diff_path]
+		puts "\nEncoding: $enc"
 		set p [eval git_write $apply_cmd]
 		fconfigure $p -translation binary -encoding $enc
 		puts -nonewline $p $current_diff_header
-- >8 --
 
> and then the error strings that populate the dialog are bubbled up from git
> apply.
> 
> Any ideas on what would make "git apply" potentially choke? I wonder if it
> has to do with a mixed file encoding?

git-gui not preparing the patch text properly would be a prime 
candidate.
 
> I tried setting both:
> 
> core.checkRoundTripEncoding true 
> gui.encoding utf-8
> 
> on that repo; git gui still errored out in the same way. 
> 
> I also tried changing gui.encoding to utf-16; no dice...
> 
> To reiterate, git add -i worked fine...
-- 
Regards,
Pratyush Yadav
Previous: J. Paul ReedNext: J. Paul Reed
Message 6 of 7 in “git-gui patch staging errors”
  1. J. Paul ReedMay 12, 2020
  2. Pratyush YadavMay 12, 2020
  3. Kerry, RichardMay 12, 2020
  4. Pratyush YadavMay 12, 2020
  5. J. Paul ReedMay 12, 2020
  6. Pratyush YadavMay 25, 2020
  7. J. Paul ReedJul 26, 2020

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.