gergich 2.1.5 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a633dec2c1eb9cec61cba56c145a1c31c4022c19c7c75e91e368b0a3bc3cf89a
4
- data.tar.gz: 0721f82a0c12ce4069a00bed04d4097d8d712b6289e3a7f16d29865bf5220055
3
+ metadata.gz: 2d16295d82fb11923e2cb49cb0656420e3235d4a08cc573e34436ec32a341870
4
+ data.tar.gz: 2019c58f7af8b708787e27c05f6a41c99e927128d9288461b913fd90f129461c
5
5
  SHA512:
6
- metadata.gz: 4ecba879accbb6c196d3bad117360a6469e47a252043d3b4d71e6aaa50ac265294188d078b9798087cc92a17a83b319885dbf1e85e661dc4bd82566e77e182a3
7
- data.tar.gz: 4c40b055c23de9019776720c41167fec8a031f3592896f11131935b7641cf9ff34487377f552388e936e5349fe284b30d74d1870d1e6b2122964da1a40811605
6
+ metadata.gz: 6f99d44011d1358420564a0ffc7b2846c1ddd536e41f183c1e2da9a330e0a690bb25dc2110c5b5d4bae00bf6d5ffc166652229012dfa817047fd6d909e838f93
7
+ data.tar.gz: ed476739a4a99eafba3362a38c439cca37a08130ef81818e1537abe3112189a15b905eb636c9cb3f3fb628a10d7681427e48ce835c8e97e4cbdd81410f795bec
@@ -92,7 +92,8 @@ commands["publish"] = {
92
92
  commands["status"] = {
93
93
  summary: "Show the current draft for this patchset",
94
94
  action: -> {
95
- Gergich::Review.new.status
95
+ commit = Gergich::Commit.new
96
+ Gergich::Review.new(commit).status
96
97
  },
97
98
  help: -> {
98
99
  <<~TEXT
@@ -9,6 +9,9 @@ MASTER_BOUNCER_REVIEW_LABEL = ENV.fetch("GERGICH_REVIEW_LABEL", "Code-Review")
9
9
  require_relative "../../gergich"
10
10
 
11
11
  PROJECT = ENV["GERRIT_PROJECT"] || error("no GERRIT_PROJECT set")
12
+ # on Jenkins GERRIT_MAIN_BRANCH env var will default to empty string if not set
13
+ MAIN_BRANCH = ENV["GERRIT_MAIN_BRANCH"].nil? || ENV["GERRIT_MAIN_BRANCH"].empty? ? "master" :
14
+ ENV["GERRIT_MAIN_BRANCH"]
12
15
  # TODO: time-based thresholds
13
16
  WARN_DISTANCE = ENV.fetch("MASTER_BOUNCER_WARN_DISTANCE", 50).to_i
14
17
  ERROR_DISTANCE = ENV.fetch("MASTER_BOUNCER_ERROR_DISTANCE", 100).to_i
@@ -17,7 +20,7 @@ def potentially_mergeable_changes
17
20
  url = "/changes/?q=status:open+" \
18
21
  "p:#{PROJECT}+" \
19
22
  "label:Verified=1+" \
20
- "branch:master" \
23
+ "branch:#{MAIN_BRANCH}" \
21
24
  "&o=CURRENT_REVISION"
22
25
  changes = Gergich::API.get(url)
23
26
  changes.reject { |c| c["subject"] =~ /\Awip($|\W)/i }
@@ -27,8 +30,8 @@ def maybe_bounce_commit!(commit)
27
30
  draft = Gergich::Draft.new(commit)
28
31
  draft.reset!
29
32
 
30
- distance = Gergich.git("rev-list origin/master ^#{commit.ref} --count").to_i
31
- detail = "#{distance} commits behind master"
33
+ distance = Gergich.git("rev-list origin/#{MAIN_BRANCH} ^#{commit.ref} --count").to_i
34
+ detail = "#{distance} commits behind #{MAIN_BRANCH}"
32
35
 
33
36
  score = 0
34
37
  message = nil
@@ -84,10 +87,18 @@ commands["check"] = {
84
87
  commands["check_all"] = {
85
88
  summary: "Check the age of all potentially mergeable changes",
86
89
  action: -> {
87
- Gergich.git("fetch")
88
90
  gerrit_host = ENV["GERRIT_HOST"] || error("No GERRIT_HOST set")
91
+ Gergich.git("fetch")
89
92
 
90
93
  changes = potentially_mergeable_changes
94
+ # if changes is empty or nil, we don't need to iterate over it
95
+ # log that we're skipping, and return
96
+ if changes.nil? || changes.empty?
97
+ Logging.logger.info "No changes to check"
98
+ return
99
+ end
100
+ Logging.logger.info "Checking #{changes.size} changes"
101
+
91
102
  next if ENV["DRY_RUN"]
92
103
 
93
104
  changes.each do |change|
data/lib/gergich.rb CHANGED
@@ -4,6 +4,8 @@ require "erb"
4
4
  require "json"
5
5
  require "fileutils"
6
6
  require "base64"
7
+ require "open3"
8
+ require_relative "logging"
7
9
 
8
10
  GERGICH_REVIEW_LABEL = ENV.fetch("GERGICH_REVIEW_LABEL", "Code-Review")
9
11
  GERGICH_USER = ENV.fetch("GERGICH_USER", "gergich")
@@ -12,24 +14,35 @@ GERGICH_GIT_PATH = ENV.fetch("GERGICH_GIT_PATH", ".")
12
14
  GergichError = Class.new(StandardError)
13
15
 
14
16
  module Gergich
17
+ include Logging
15
18
  def self.use_git?
16
- Dir.chdir(GERGICH_GIT_PATH) do
17
- system "git rev-parse --show-toplevel >/dev/null 2>&1"
18
- end
19
+ !git("rev-parse --show-toplevel").nil?
19
20
  end
20
21
 
21
22
  def self.git(args)
22
23
  Dir.chdir(GERGICH_GIT_PATH) do
23
- `git #{args} 2>/dev/null`
24
+ raise(GergichError, "git not installed") unless system("which git > /dev/null 2>&1")
25
+
26
+ output, error, status = Open3.capture3("git #{args}")
27
+ if status.success?
28
+ Logging.logger.debug "git #{args}: #{output}"
29
+ output
30
+ else
31
+ Logging.logger.warn "Output: #{output}"
32
+ Logging.logger.warn "git #{args} failed: #{error}"
33
+ nil
34
+ end
24
35
  end
25
36
  end
26
37
 
27
38
  class Commit
39
+ include Logging
28
40
  attr_reader :ref
29
41
 
30
42
  def initialize(ref = ENV.fetch("GERRIT_PATCHSET_REVISION", "HEAD"), revision_number = nil)
31
43
  @ref = ref
32
44
  @revision_number = revision_number
45
+ logger.debug "Commit initialized with ref: #{ref}"
33
46
  end
34
47
 
35
48
  def info
@@ -89,7 +102,7 @@ module Gergich
89
102
  class Review
90
103
  attr_reader :commit, :draft
91
104
 
92
- def initialize(commit = Commit.new, draft = Draft.new)
105
+ def initialize(commit = Commit.new, draft = Draft.new(commit))
93
106
  @commit = commit
94
107
  @draft = draft
95
108
  end
data/lib/logging.rb ADDED
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: false
2
+
3
+ require "logger"
4
+
5
+ module Logging
6
+ def logger
7
+ Logging.logger
8
+ end
9
+
10
+ def self.logger
11
+ @logger ||= Logger.new($stdout)
12
+ @logger.formatter = proc do |severity, datetime, _progname, msg|
13
+ datefmt = datetime.strftime("%Y-%m-%d %H:%M:%S")
14
+ # ensure that there is only one newline at the end of the message
15
+ "#{severity} [#{datefmt}]: #{msg}\n".gsub!(/\n+/, "\n")
16
+ end
17
+ @logger
18
+ end
19
+
20
+ def self.log_level
21
+ # default to only showing errors
22
+ ENV.fetch("RUBY_LOG_LEVEL", "ERROR")
23
+ end
24
+
25
+ logger.level = log_level
26
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gergich
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Jensen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-03 00:00:00.000000000 Z
11
+ date: 2024-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -169,6 +169,7 @@ files:
169
169
  - lib/gergich/cli.rb
170
170
  - lib/gergich/cli/gergich.rb
171
171
  - lib/gergich/cli/master_bouncer.rb
172
+ - lib/logging.rb
172
173
  homepage: https://github.com/instructure/gergich
173
174
  licenses:
174
175
  - MIT
@@ -188,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
189
  - !ruby/object:Gem::Version
189
190
  version: '0'
190
191
  requirements: []
191
- rubygems_version: 3.5.8
192
+ rubygems_version: 3.3.26
192
193
  signing_key:
193
194
  specification_version: 4
194
195
  summary: Command-line tool for adding Gerrit comments