aicommit 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/aicommit +3 -0
  3. data/lib/aicommit.rb +75 -0
  4. metadata +61 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5ba45c59ec36dfb07db5dd8ded3a9ad82d18e09704af6d3f4b1cd1a52aea7dd7
4
+ data.tar.gz: 4bfe81b4701456aa93d6a79f107127e6dc80b319a9590ff38ecfed92555bc144
5
+ SHA512:
6
+ metadata.gz: 77658e495e9b2ab39e4bb7b487b0c55e538b38ab84d78239d1cc95ebc7c7ea591bdbcff261fe72add4c5d06049528ddda8ea835e7010d3b018143f363efe1ba5
7
+ data.tar.gz: '08473a1ed46acb3411bb070ccca89fbc7f0564a441f4bf1d215755d2463052b71362d0323af78654490fa518b703c9a93bfbbe540e68169435d50d9a1aa0003b'
data/bin/aicommit ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "aicommit"
data/lib/aicommit.rb ADDED
@@ -0,0 +1,75 @@
1
+ require "git"
2
+ require "openai"
3
+ require "dotenv/load"
4
+
5
+ def save_api_key_to_env
6
+ puts "Please enter your OpenAI API key (or 'q' to quit):"
7
+ api_key = gets.chomp
8
+ if api_key.downcase == "q"
9
+ puts "Exiting program."
10
+ exit
11
+ end
12
+ File.write(".env", "OPENAI_API_KEY=#{api_key}")
13
+ ENV["OPENAI_API_KEY"] = api_key
14
+ puts "Your API key has been saved to .env"
15
+ end
16
+
17
+ def generate_commit_message(diff)
18
+ diff = diff[-3800..] || diff
19
+ client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"])
20
+ content = "Please generate a commit message based on the following diff in one sentance and less than 80 letters:\n#{diff}"
21
+
22
+ response = client.chat(
23
+ parameters: {
24
+ model: "gpt-3.5-turbo",
25
+ messages: [{role: "user", content: content}]
26
+ }
27
+ )
28
+
29
+ if response.code == 401
30
+ puts "Invalid API key."
31
+ save_api_key_to_env
32
+
33
+ return generate_commit_message(diff)
34
+ end
35
+
36
+ response.dig("choices", 0, "message", "content")
37
+ end
38
+
39
+ if !Dir.exist?(".git")
40
+ raise "Not a git repository!"
41
+ end
42
+
43
+ if ENV["OPENAI_API_KEY"].nil?
44
+ save_api_key_to_env
45
+ end
46
+
47
+ patch_str = ""
48
+
49
+ git = Git.open(".")
50
+ git.diff.each do |diff|
51
+ patch = diff.patch
52
+ patch_str += "\n\n#{diff.path}\n"
53
+ patch_str += patch
54
+ end
55
+
56
+ commit_message = generate_commit_message(patch_str)
57
+
58
+ loop do
59
+ puts "commit_message: #{commit_message}"
60
+ puts "Do you want to keep this commit_message? (Y/N) (or Q to quit)"
61
+ command = gets.chomp
62
+ if command.match?(/^[Yy]$/)
63
+ git.commit_all(commit_message)
64
+ puts "Committed all changes with message: #{commit_message}"
65
+ break
66
+ elsif command.match?(/^[Nn]$/)
67
+ puts "Please enter your new commit_message:"
68
+ commit_message = gets.chomp
69
+ elsif command.match?(/^[Qq]$/)
70
+ puts "Quit without committing."
71
+ exit
72
+ else
73
+ puts "Invalid command. Please enter Y, N, or Q."
74
+ end
75
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aicommit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - jackal998
8
+ - LinGaryTW
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2023-03-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: git
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 1.14.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 1.14.0
28
+ description: You dare use my own spells against me, Human?
29
+ email:
30
+ - ej_lin2000@yahoo.com.tw
31
+ executables:
32
+ - aicommit
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - bin/aicommit
37
+ - lib/aicommit.rb
38
+ homepage: https://github.com/jackal998/aicommit
39
+ licenses:
40
+ - MIT
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubygems_version: 3.3.7
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: Use your own spell against you.
61
+ test_files: []