Fix squash rebase not working when diff contained encoded data
When the applied diff contains UTF-8 or some other encoded data, the diff returned back from the git process may be in ASCII-8BIT format. Writing this data to stdin may fail if the data because stdin expects this data to be in UTF-8. By switching the output to binmode, we ensure that the diff will always be written as-is. Closes gitlab-org/gitlab-ee#4960
This commit is contained in:
parent
557db7e635
commit
8d32dfef9b
3 changed files with 18 additions and 0 deletions
5
changelogs/unreleased/sh-fix-squash-rebase-utf8-data.yml
Normal file
5
changelogs/unreleased/sh-fix-squash-rebase-utf8-data.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix squash rebase not working when diff contained encoded data
|
||||
merge_request:
|
||||
author:
|
||||
type: fixed
|
|
@ -2195,6 +2195,7 @@ module Gitlab
|
|||
# Apply diff of the `diff_range` to the worktree
|
||||
diff = run_git!(%W(diff --binary #{diff_range}))
|
||||
run_git!(%w(apply --index), chdir: squash_path, env: env) do |stdin|
|
||||
stdin.binmode
|
||||
stdin.write(diff)
|
||||
end
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# coding: utf-8
|
||||
require "spec_helper"
|
||||
|
||||
describe Gitlab::Git::Repository, seed_helper: true do
|
||||
|
@ -2221,6 +2222,17 @@ describe Gitlab::Git::Repository, seed_helper: true do
|
|||
subject
|
||||
end
|
||||
end
|
||||
|
||||
context 'with an ASCII-8BIT diff', :skip_gitaly_mock do
|
||||
let(:diff) { "diff --git a/README.md b/README.md\nindex faaf198..43c5edf 100644\n--- a/README.md\n+++ b/README.md\n@@ -1,4 +1,4 @@\n-testme\n+✓ testme\n ======\n \n Sample repo for testing gitlab features\n" }
|
||||
|
||||
it 'applies a ASCII-8BIT diff' do
|
||||
allow(repository).to receive(:run_git!).and_call_original
|
||||
allow(repository).to receive(:run_git!).with(%W(diff --binary #{start_sha}...#{end_sha})).and_return(diff.force_encoding('ASCII-8BIT'))
|
||||
|
||||
expect(subject.length).to eq(40)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue