summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2019-01-03 12:58:41 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2019-01-03 13:15:05 +0100
commitfde4eb7331d5902044ed5bd53c914cbb47e49eaa (patch)
tree69e19703e1cb178f4bfa4b6481a8693a5bd394f3
parent32fbc12cc532f15392a4c4fa08b6229b06fe5bf0 (diff)
downloadgitlab-ce-fde4eb7331d5902044ed5bd53c914cbb47e49eaa.tar.gz
Improve `bin/secpick` script and add more options
This adds additional options that make it easier to use this script: 1. It adds `--dry-run` option that only displays Git commands that are going to be executed. 2. It adds `--remote` option that makes it possible to override Git remote name.
-rwxr-xr-xbin/secpick109
1 files changed, 80 insertions, 29 deletions
diff --git a/bin/secpick b/bin/secpick
index 11acdd82226..fa1c4003e75 100755
--- a/bin/secpick
+++ b/bin/secpick
@@ -8,7 +8,7 @@ require 'rainbow/refinement'
using Rainbow
BRANCH_PREFIX = 'security'.freeze
-REMOTE = 'dev'.freeze
+DEFAULT_REMOTE = 'dev'.freeze
NEW_MR_URL = 'https://dev.gitlab.org/gitlab/gitlabhq/merge_requests/new'.freeze
options = { version: nil, branch: nil, sha: nil }
@@ -27,6 +27,14 @@ parser = OptionParser.new do |opts|
options[:sha] = sha
end
+ opts.on('-r', '--remote abcd', 'Git remote name of dev.gitlab.org (optional, default to `dev`)') do |remote|
+ options[:remote] = remote
+ end
+
+ opts.on('-d', '--dry-run', 'Show resulting Git commands without calling them') do |remote|
+ options[:try] = true
+ end
+
opts.on('-h', '--help', 'Displays Help') do
puts opts
@@ -37,39 +45,82 @@ end
parser.parse!
options[:branch] ||= `git rev-parse --abbrev-ref HEAD`
+options[:remote] ||= DEFAULT_REMOTE
abort("Missing options. Use #{$0} --help to see the list of options available".red) if options.values.include?(nil)
abort("Wrong version format #{options[:version].bold}".red) unless options[:version] =~ /\A\d*\-\d*\Z/
-ee = File.exist?('./CHANGELOG-EE.md')
-original_branch = options[:branch].strip
-branch = "#{original_branch}-#{options[:version]}"
-branch.prepend("#{BRANCH_PREFIX}-") unless branch.start_with?("#{BRANCH_PREFIX}-")
-branch = branch.freeze
-stable_branch = "#{BRANCH_PREFIX}-#{options[:version]}".tap do |name|
- name << "-ee" if ee
-end.freeze
-
-command = "git fetch #{REMOTE} #{stable_branch} && git checkout #{stable_branch} && git pull #{REMOTE} #{stable_branch} && git checkout -B #{branch} && git cherry-pick #{options[:sha]} && git push #{REMOTE} #{branch} && git checkout #{original_branch}"
-
-stdin, stdout, stderr, wait_thr = Open3.popen3(command)
-
-puts stdout.read&.green
-puts stderr.read&.red
-
-if wait_thr.value.success?
- params = {
- merge_request: {
- source_branch: branch,
- target_branch: stable_branch,
- title: "WIP: [#{options[:version].tr('-', '.')}] ",
- description: '/label ~security'
+class SecurityFix
+ def initialize(options)
+ @options = options
+ end
+
+ def ee?
+ File.exist?('./CHANGELOG-EE.md')
+ end
+
+ def dry_run?
+ @options[:try] == true
+ end
+
+ def original_branch
+ @options[:branch].strip
+ end
+
+ def source_branch
+ branch = "#{original_branch}-#{@options[:version]}"
+ branch.prepend("#{BRANCH_PREFIX}-") unless branch.start_with?("#{BRANCH_PREFIX}-")
+ branch = branch.freeze
+ end
+
+ def security_branch
+ "#{BRANCH_PREFIX}-#{@options[:version]}".tap do |name|
+ name << "-ee" if ee?
+ end.freeze
+ end
+
+ def git_commands
+ ["git fetch #{@options[:remote]} #{security_branch}",
+ "git checkout #{security_branch}",
+ "git pull #{@options[:remote]} #{security_branch}",
+ "git checkout -B #{source_branch}",
+ "git cherry-pick #{@options[:sha]}",
+ "git push #{@options[:remote]} #{source_branch}",
+ "git checkout #{original_branch}"]
+ end
+
+ def gitlab_params
+ {
+ merge_request: {
+ source_branch: source_branch,
+ target_branch: security_branch,
+ title: "WIP: [#{@options[:version].tr('-', '.')}] ",
+ description: '/label ~security'
+ }
}
- }
+ end
- puts "#{NEW_MR_URL}?#{params.to_query}".blue
+ def create!
+ if dry_run?
+ puts git_commands.join("\n").green
+ puts "\nMerge request params: ".blue
+ pp gitlab_params
+ else
+ cmd = git_commands.join(' && ')
+ stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
+
+ puts stdout.read&.green
+ puts stderr.read&.red
+
+ if wait_thr.value.success?
+ puts "#{NEW_MR_URL}?#{gitlab_params.to_query}".blue
+ end
+
+ stdin.close
+ stdout.close
+ stderr.close
+ end
+ end
end
-stdin.close
-stdout.close
-stderr.close
+SecurityFix.new(options).create!