Skip to content

Commit

Permalink
Support the commit --no-gpg-sign flag (#589)
Browse files Browse the repository at this point in the history
Support the commit --no-gpg-sign flag 
Signed-off-by: Bradley Buda <bradleybuda@gmail.com>
  • Loading branch information
bradleybuda committed Aug 18, 2022
1 parent 323383b commit e58cd29
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
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

0 comments on commit e58cd29

Please sign in to comment.