Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support the commit --no-gpg-sign flag #589

Merged
merged 5 commits into from Aug 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Expand Up @@ -244,6 +244,9 @@ g.commit('message', gpg_sign: true)
key_id = '0A46826A'
g.commit('message', gpg_sign: key_id)

# Skip signing a commit (overriding any global gpgsign setting)
g.commit('message', no_gpg_sign: true)

g = Git.clone(repo, 'myrepo')
g.chdir do
new_file('test-file', 'blahblahblah')
Expand Down
10 changes: 8 additions & 2 deletions lib/git/lib.rb
Expand Up @@ -647,7 +647,8 @@ def remove(path = '.', opts = {})
# :date
# :no_verify
# :allow_empty_message
# :gpg_sign
# :gpg_sign (accepts true or a gpg key ID as a String)
# :no_gpg_sign (conflicts with :gpg_sign)
#
# @param [String] message the commit message to be used
# @param [Hash] opts the commit options to be used
Expand All @@ -661,13 +662,18 @@ def commit(message, opts = {})
arr_opts << "--date=#{opts[:date]}" if opts[:date].is_a? String
arr_opts << '--no-verify' if opts[:no_verify]
arr_opts << '--allow-empty-message' if opts[:allow_empty_message]
if opts[:gpg_sign]

if opts[:gpg_sign] && opts[:no_gpg_sign]
raise ArgumentError, 'cannot specify :gpg_sign and :no_gpg_sign'
elsif opts[:gpg_sign]
arr_opts <<
if opts[:gpg_sign] == true
'--gpg-sign'
else
"--gpg-sign=#{opts[:gpg_sign]}"
end
elsif opts[:no_gpg_sign]
arr_opts << '--no-gpg-sign'
end

command('commit', arr_opts)
Expand Down
25 changes: 25 additions & 0 deletions tests/units/test_commit_with_gpg.rb
Expand Up @@ -34,4 +34,29 @@ def test_with_specific_gpg_keyid
assert_match(/commit.*--gpg-sign=keykeykey['"]/, actual_cmd)
end
end

def test_disabling_gpg_sign
Dir.mktmpdir do |dir|
git = Git.init(dir)
actual_cmd = nil
git.lib.define_singleton_method(:run_command) do |git_cmd, &block|
actual_cmd = git_cmd
`true`
end
message = 'My commit message'
git.commit(message, no_gpg_sign: true)
assert_match(/commit.*--no-gpg-sign['"]/, actual_cmd)
end
end

def test_conflicting_gpg_sign_options
Dir.mktmpdir do |dir|
git = Git.init(dir)
message = 'My commit message'

assert_raises ArgumentError do
git.commit(message, gpg_sign: true, no_gpg_sign: true)
end
end
end
end