gitlab-branch-rename 0.1.0 → 0.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: f33aa63fa0d74d53308136f89910a11d861daa231ba279f670188e4e832981f3
4
- data.tar.gz: 8661fecb4807479d6df798baa2ea01f58173a6492dd3c8ffee60df42f953e9fd
3
+ metadata.gz: 60976abc74b540c7fdd90ee169c5c7f49e67d71514728f4ee41194cf2b70c1fc
4
+ data.tar.gz: b91a114cbc9603200823ddad6d36c0e0fd8a6d1988c36a9a5fbb67c03a10722e
5
5
  SHA512:
6
- metadata.gz: 486bd423917b401e3d0a98485a621a0c3a3b7b63606721d1a1c47bf366014eb6e5b5b1079377633d5d91d824a97e985325ca89547c200b44d9f6b0006e628534
7
- data.tar.gz: 220b75c80baa11007d68b7c3504438b7472ee937fac7b333225b0d51c570a6c067f3c7fcaab2caa0b9a43bebe4307a474ec35516b2d2653a2e4ecbbbac27fb74
6
+ metadata.gz: 2382c0b192541311af1488e071ee3c1415d24c59b57ff4f512bae9fed1f3d8c479ca2359a6ba6637f3cd0ba5d282d350472bf3b6927bb944462b8eeda255ac47
7
+ data.tar.gz: af8db546cbdcd9850f17f3b9944403ff162f053a71ce0c65e4acf7665ade7f8bb0ed570aff174f5c6cd9f8f76dfa0ce601964820a954ab6e0d7a59ed37504a20
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-branch-rename (0.1.0)
4
+ gitlab-branch-rename (0.2.0)
5
5
  gitlab (~> 4.16)
6
6
 
7
7
  GEM
@@ -0,0 +1,16 @@
1
+ all:
2
+ rake
3
+
4
+ build:
5
+ rake
6
+ gem build ./gitlab-branch-rename.gemspec
7
+
8
+ clean:
9
+ rm .rspec_status
10
+ rm gitlab-branch-rename-*.gem
11
+
12
+ install: build
13
+ gem install ./gitlab-branch-rename-*.gem
14
+
15
+ push: clean build
16
+ gem push gitlab-branch-rename-*.gem
data/README.md CHANGED
@@ -30,6 +30,10 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
30
30
 
31
31
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
32
 
33
+ During development, I used these references:
34
+ - https://docs.gitlab.com/ce/api/projects.html#edit-project
35
+ - https://www.rubydoc.info/gems/gitlab/Gitlab/Client/Projects
36
+
33
37
  ## Contributing
34
38
 
35
39
  Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/gitlab-branch-rename. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/gitlab-branch-rename/blob/master/CODE_OF_CONDUCT.md).
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "rename"
4
+ require "main"
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "rename"
3
+ require "gitlab_branch_rename/main"
4
4
 
5
- GitlabBranchRename.new.main
5
+ GitlabBranchRename.launch
@@ -1,4 +1,4 @@
1
- require_relative 'lib/version'
1
+ require_relative 'lib/gitlab_branch_rename/version'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "gitlab-branch-rename"
@@ -6,10 +6,10 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["AP Fritts"]
7
7
  spec.email = ["ap@apfritts.com"]
8
8
 
9
- spec.summary = 'Tool to rename your Gitlab project branches en-mass'
10
- spec.description = "To support Black Lives Matter and try to create safer spaces, I wanted to rename" +
9
+ spec.summary = "Tool to rename your Gitlab project branches en-mass"
10
+ spec.description = "To support Black Lives Matter and try to create safer spaces, I wanted to rename " +
11
11
  "all of my own default branches in Gitlab. I wasn't able to find any tools to do that, so I wrote " +
12
- "this one. If you're unsure why this is important or want to better understand my personal understanding" +
12
+ "this one. If you're unsure why this is important or want to better understand my personal understanding " +
13
13
  "of why I wanted to make these changes, see this Twitter thread: https://twitter.com/mislav/status/1270388510684598272"
14
14
  spec.homepage = "https://gitlab.com/apfritts/gitlab-branch-rename"
15
15
  spec.license = "MIT"
@@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
26
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
27
27
  end
28
28
  spec.bindir = "exe"
29
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
+ executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ puts executables
31
+ spec.executables = executables
30
32
  spec.require_paths = ["lib"]
31
33
  end
@@ -0,0 +1,3 @@
1
+ PLATFORMS
2
+
3
+ DEPENDENCIES
@@ -0,0 +1,81 @@
1
+ require "optparse"
2
+
3
+ module GitlabBranchRename
4
+ class Configuration
5
+ attr_accessor :token, :branch_to_rename, :new_branch_name,
6
+ :endpoint, :is_default_branch, :has_visibility, :minimum_access_level,
7
+ :skip_confirm, :pretend, :logfile
8
+
9
+ def initialize
10
+ # Required parameters
11
+ self.branch_to_rename = nil
12
+ self.new_branch_name = nil
13
+
14
+ # Criteria parameters with defaults
15
+ self.endpoint = "https://gitlab.com/api/v4"
16
+ self.token = ENV["GITLAB_ACCESS_TOKEN"]
17
+ self.is_default_branch = false
18
+ self.has_visibility = %w[private internal public]
19
+ self.minimum_access_level = 40
20
+
21
+ # Optional parameters
22
+ self.skip_confirm = false
23
+ self.pretend = false
24
+ self.logfile = STDOUT
25
+ end
26
+
27
+ def self.configure
28
+ configuration = Configuration.new
29
+ optparse = OptionParser.new do |opts|
30
+ opts.banner = "Usage: gitlab-branch-rename --from <branch to rename> --to <new branch name> [options]"
31
+ opts.separator ""
32
+ opts.separator "Specific options:"
33
+ opts.on("--from OLD_BRANCH", "Branch to rename") do |from|
34
+ configuration.branch_to_rename = from
35
+ end
36
+ opts.on("--to NEW_BRANCH", "New branch name") do |to|
37
+ configuration.new_branch_name = to
38
+ end
39
+ opts.on("--endpoint ENDPOINT", "Gitlab server endpoint. default: Gitlab cloud") do |endpoint|
40
+ configuration.endpoint = endpoint
41
+ end
42
+ opts.on("--token-env-var ENV_VAR_NAME", "Environment variable to pull token out of") do |token_env_var|
43
+ configuration.token = ENV[token_env_var]
44
+ end
45
+ opts.on("--only-if-default", "Rename only if it is the default branch") do
46
+ configuration.is_default_branch = true
47
+ end
48
+ opts.on("--visibility VISIBILITIES", "Comma-separated list of project visibilities default: public,internal,private") do |visibility|
49
+ configuration.has_visibility = visibility.split ","
50
+ end
51
+ opts.on("--skip-confirm", "Skip confirmation before executing rename") do
52
+ configuration.skip_confirm = true
53
+ end
54
+ opts.on("--pretend", "Pretend to perform actions. Overrides confirm option") do
55
+ configuration.pretend = true
56
+ end
57
+ opts.on("--logfile LOGFILE", "Logfile destination. Use - for STDOUT") do |logfile|
58
+ if logfile == "-"
59
+ configuration.logfile = STDOUT
60
+ else
61
+ configuration.logfile = logfile
62
+ end
63
+ end
64
+ opts.separator ""
65
+ opts.separator "Visit https://gitlab.com/apfritts/gitlab-branch-rename for more details."
66
+ end
67
+
68
+ begin
69
+ optparse.parse!
70
+ raise OptionParser::MissingArgument.new('old branch name') if configuration.branch_to_rename.nil?
71
+ raise OptionParser::MissingArgument.new('new branch name') if configuration.new_branch_name.nil?
72
+ rescue OptionParser::InvalidOption, OptionParser::MissingArgument
73
+ puts $!.to_s
74
+ puts optparse
75
+ exit 1
76
+ end
77
+
78
+ configuration
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,14 @@
1
+ require "gitlab"
2
+
3
+ module GitlabBranchRename
4
+ class GitlabConfigure
5
+ def self.configure(configuration)
6
+ Gitlab.endpoint = configuration.endpoint
7
+ Gitlab.private_token = configuration.token
8
+
9
+ #Gitlab.http_proxy("proxyhost", 8888)
10
+ #Gitlab.http_proxy("proxyhost", 8888, "proxyuser", "strongpasswordhere")
11
+ #ENV["GITLAB_API_HTTPARTY_OPTIONS"] = "{read_timeout: 60}"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module GitlabBranchRename
2
+ class LoggerConfigure
3
+ def self.configure(configuration)
4
+ logger = Logger.new(STDOUT)
5
+ logger.formatter = proc do |severity, datetime, progname, msg|
6
+ date_format = datetime.to_datetime.strftime("%Q")
7
+ if severity == "INFO" or severity == "WARN"
8
+ "#{severity} #{date_format} #{msg}\n"
9
+ else
10
+ "#{severity} #{date_format} #{msg}\n"
11
+ end
12
+ end
13
+ logger
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,32 @@
1
+ require "gitlab_branch_rename/configuration"
2
+ require "gitlab_branch_rename/gitlab_configure"
3
+ require "gitlab_branch_rename/logger_configure"
4
+ require "gitlab_branch_rename/operation"
5
+ require "gitlab_branch_rename/version"
6
+
7
+ module GitlabBranchRename
8
+ def self.launch
9
+ c = Configuration.configure
10
+ logger = LoggerConfigure.configure c
11
+ logger.debug("Gitlab instance configuration:")
12
+ logger.debug("Endpoint: #{c.endpoint}")
13
+ logger.debug("Token: #{c.token.nil? ? "set" : "not set"}")
14
+ logger.debug("Project filter criteria:")
15
+ logger.debug("Visibility: #{c.has_visibility.join(', ')}")
16
+ logger.debug("Operation options:")
17
+ logger.debug("Old branch: #{c.branch_to_rename}")
18
+ logger.debug("New branch: #{c.new_branch_name}")
19
+ logger.debug("Skip confirm: #{c.skip_confirm.nil? ? "yes" : "no"}")
20
+ logger.debug("Pretend: #{c.pretend.nil? ? "yes" : "no"}")
21
+ logger.debug("Log file: #{c.logfile == STDOUT ? "-" : c.logfile}")
22
+ GitlabConfigure.configure c
23
+ operation = Operation.new c, logger
24
+ operation.execute
25
+ logger.info("For any local repositories, use these commands to update:")
26
+ logger.info(" git fetch `git remote` --prune")
27
+ logger.info(" git checkout #{c.new_branch_name}")
28
+ logger.info(" git remote set-head `git remote` #{c.new_branch_name}")
29
+ logger.info(" git branch -d #{c.branch_to_rename}")
30
+ logger.close
31
+ end
32
+ end
@@ -0,0 +1,133 @@
1
+ require "gitlab"
2
+
3
+ module GitlabBranchRename
4
+ class Operation
5
+ def initialize(configuration, logger)
6
+ @configuration = configuration
7
+ @logger = logger
8
+ end
9
+
10
+ def execute
11
+ projects = Gitlab.projects(min_access_level: @configuration.minimum_access_level,
12
+ owned: true,
13
+ per_page: 5)
14
+ projects.auto_paginate do |project|
15
+ @logger.info("Evaluating #{project.path_with_namespace}")
16
+
17
+ # Verify this project meets criteria for renaming
18
+ unless @configuration.has_visibility.include?(project.visibility)
19
+ @logger.debug("Project has visibility #{project.visibility}, skipping")
20
+ next
21
+ end
22
+ if project.archived
23
+ @logger.debug("Project is archived")
24
+ next
25
+ end
26
+
27
+ # Feature: Skip forks?
28
+
29
+ # Skip projects you don"t have proper permission to change
30
+ # Verify it meets your criteria for renaming default branch
31
+ if @configuration.is_default_branch and project.default_branch != @configuration.branch_to_rename
32
+ @logger.debug("Project default branch does not match is_default_branch criteria")
33
+ next
34
+ end
35
+
36
+ # Feature: verify new branch doesn't already exist
37
+
38
+ # Verify new branch doesn't exist already
39
+ begin
40
+ Gitlab.branch(project.id, @configuration.new_branch_name)
41
+ @logger.debug("Destination branch #{@configuration.new_branch_name} already exists")
42
+ next
43
+ rescue Gitlab::Error::NotFound => e
44
+ @logger.debug("Destination branch #{@configuration.new_branch_name} does not exist yet")
45
+ end
46
+
47
+ # Save branch protection parameters
48
+ old_branch = begin
49
+ Gitlab.branch(project.id, @configuration.branch_to_rename)
50
+ rescue Gitlab::Error::NotFound => e
51
+ @logger.warn("Project #{project.path_with_namespace} doesn't have branch #{@configuration.branch_to_rename}")
52
+ next
53
+ end
54
+ branch_protection_parameters = nil
55
+ if old_branch.protected
56
+ # Save branch protection information
57
+ bpp_raw = Gitlab.protected_branch(project.id, old_branch.name)
58
+ bpp_hash = bpp_raw.to_hash
59
+ branch_protection_parameters = bpp_hash.slice("push_access_levels", "merge_access_levels", "unprotect_access_levels", "code_owner_approval_required")
60
+ @logger.debug("Will transfer branch protection parameters: #{branch_protection_parameters}")
61
+ end
62
+
63
+ # Confirm or pretend
64
+ msg = "Rename #{project.path_with_namespace} branch #{@configuration.branch_to_rename} to #{@configuration.new_branch_name} " +
65
+ (branch_protection_parameters ? "with" : "without") + " protection"
66
+ if @configuration.pretend
67
+ puts(msg)
68
+ @logger.info(msg)
69
+ next
70
+ end
71
+ unless @configuration.skip_confirm
72
+ puts(msg)
73
+ print("\tContinue with rename and delete? (y/N) ")
74
+ input = gets.chomp
75
+ if input != "y"
76
+ msg = "Skipping branch rename for #{project.path_with_namespace} based on user input #{input}"
77
+ puts(msg)
78
+ @logger.info(msg)
79
+ next
80
+ end
81
+ @logger.info("User confirmed branch rename for #{project.path_with_namespace}")
82
+ end
83
+
84
+ # Create new branch
85
+ begin
86
+ Gitlab.create_branch(project.id, @configuration.new_branch_name, old_branch.name)
87
+ @logger.debug("Created new branch with name #{@configuration.new_branch_name}")
88
+ rescue StandardError => e
89
+ @logger.error(e)
90
+ next
91
+ end
92
+
93
+ # Protect branch
94
+ unless branch_protection_parameters
95
+ begin
96
+ Gitlab.protect_branch(project.id, @configuration.new_branch_name, branch_protection_parameters)
97
+ @logger.debug("Protected branch with parameters #{branch_protection_parameters}")
98
+ rescue StandardError => e
99
+ @logger.error(e)
100
+ end
101
+ end
102
+
103
+ # Feature: Update PRs? Issues?
104
+
105
+ # Change default branch
106
+ begin
107
+ Gitlab.edit_project(project.id, {default_branch: @configuration.new_branch_name})
108
+ @logger.debug("Changed default branch")
109
+ rescue StandardError => e
110
+ @logger.error(e)
111
+ end
112
+
113
+ # Unprotect protected branches
114
+ unless branch_protection_parameters
115
+ begin
116
+ Gitlab.unprotect_branch(project.id, old_branch.name)
117
+ @logger.debug("Unprotected old branch")
118
+ rescue StandardError => e
119
+ @logger.error(e)
120
+ end
121
+ end
122
+
123
+ # Delete master branch
124
+ begin
125
+ Gitlab.delete_branch(project.id, old_branch.name)
126
+ @logger.debug("Deleted old branch")
127
+ rescue StandardError => e
128
+ @logger.error(e)
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
@@ -1,3 +1,3 @@
1
1
  module GitlabBranchRename
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-branch-rename
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AP Fritts
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-25 00:00:00.000000000 Z
11
+ date: 2020-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gitlab
@@ -25,9 +25,9 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.16'
27
27
  description: 'To support Black Lives Matter and try to create safer spaces, I wanted
28
- to renameall of my own default branches in Gitlab. I wasn''t able to find any tools
28
+ to rename all of my own default branches in Gitlab. I wasn''t able to find any tools
29
29
  to do that, so I wrote this one. If you''re unsure why this is important or want
30
- to better understand my personal understandingof why I wanted to make these changes,
30
+ to better understand my personal understanding of why I wanted to make these changes,
31
31
  see this Twitter thread: https://twitter.com/mislav/status/1270388510684598272'
32
32
  email:
33
33
  - ap@apfritts.com
@@ -44,15 +44,20 @@ files:
44
44
  - Gemfile
45
45
  - Gemfile.lock
46
46
  - LICENSE.txt
47
+ - Makefile
47
48
  - README.md
48
49
  - Rakefile
49
50
  - bin/console
50
51
  - bin/setup
51
52
  - exe/gitlab-branch-rename
52
53
  - gitlab-branch-rename.gemspec
53
- - lib/rename.rb
54
- - lib/version.rb
55
- - rename.rb
54
+ - gitlab-branch-rename.gemspec.lock
55
+ - lib/gitlab_branch_rename/configuration.rb
56
+ - lib/gitlab_branch_rename/gitlab_configure.rb
57
+ - lib/gitlab_branch_rename/logger_configure.rb
58
+ - lib/gitlab_branch_rename/main.rb
59
+ - lib/gitlab_branch_rename/operation.rb
60
+ - lib/gitlab_branch_rename/version.rb
56
61
  homepage: https://gitlab.com/apfritts/gitlab-branch-rename
57
62
  licenses:
58
63
  - MIT
@@ -1,9 +0,0 @@
1
- require "version"
2
-
3
- module GitlabBranchRename
4
- class Error < StandardError; end
5
-
6
- def main
7
- puts "hi"
8
- end
9
- end
data/rename.rb DELETED
@@ -1,153 +0,0 @@
1
- require "gitlab"
2
-
3
- ACCESS_LEVEL_MAINTAINER = 40
4
-
5
- puts("Create a Gitlab API key at https://gitlab.com/profile/personal_access_tokens")
6
-
7
- default_endpoint = "https://gitlab.com/api/v4"
8
- options = {
9
- # Required parameters
10
- endpoint: default_endpoint,
11
- token: ENV["GITLAB_ACCESS_TOKEN"],
12
- branch_to_rename: "master",
13
- new_branch_name: "trunk",
14
-
15
- # Criteria parameters with defaults
16
- is_default_branch: true,
17
- has_visibility: %w[private internal public],
18
-
19
- # Optional parameters
20
- confirm: true,
21
- pretend: false,
22
- }
23
-
24
- logfile = "/tmp/gitlab-branch-rename.log"
25
-
26
- logger = Logger.new(STDOUT)
27
- logger.formatter = proc do |severity, datetime, progname, msg|
28
- date_format = datetime.to_datetime.strftime("%Q")
29
- if severity == "INFO" or severity == "WARN"
30
- "#{severity} #{date_format} #{msg}\n"
31
- else
32
- "#{severity} #{date_format} #{msg}\n"
33
- end
34
- end
35
-
36
- Gitlab.endpoint = options[:endpoint]
37
- Gitlab.private_token = options[:token]
38
-
39
- #Gitlab.http_proxy("proxyhost", 8888)
40
- #Gitlab.http_proxy("proxyhost", 8888, "proxyuser", "strongpasswordhere")
41
- #ENV["GITLAB_API_HTTPARTY_OPTIONS"] = "{read_timeout: 60}"
42
-
43
- logger.info("Starting run with options: #{options}")
44
-
45
- # loop through all projects
46
- projects = Gitlab.projects(min_access_level: ACCESS_LEVEL_MAINTAINER,
47
- owned: true,
48
- per_page: 5)
49
- projects.auto_paginate do |project|
50
- logger.info("Evaluating #{project.path_with_namespace}")
51
- # Verify this project meets criteria for renaming
52
- unless options[:has_visibility].include?(project.visibility)
53
- logger.debug("Project has visibility #{project.visibility}, skipping")
54
- next
55
- end
56
- if project.archived
57
- logger.debug("Project is archived")
58
- next
59
- end
60
- # Feature: Skip forks?
61
- # Skip projects you don"t have proper permission to change
62
- # Verify it meets your criteria for renaming default branch
63
- if options[:is_default_branch] and project.default_branch != options[:branch_to_rename]
64
- logger.debug("Project default branch does not match is_default_branch criteria")
65
- next
66
- end
67
- # Feature: verify new branch doesn't already exist
68
- begin
69
- Gitlab.branch(project.id, options[:new_branch_name])
70
- logger.debug("Destination branch #{options[:new_branch_name]} already exists")
71
- next
72
- rescue Gitlab::Error::NotFound => e
73
- logger.debug("Destination branch #{options[:new_branch_name]} does not exist yet")
74
- end
75
- # Save branch protection parameters
76
- old_branch = Gitlab.branch(project.id, options[:branch_to_rename])
77
- branch_protection_parameters = nil
78
- if old_branch.protected
79
- # Save branch protection information
80
- bpp_raw = Gitlab.protected_branch(project.id, old_branch.name)
81
- bpp_hash = bpp_raw.to_hash
82
- branch_protection_parameters = bpp_hash.slice("push_access_levels", "merge_access_levels", "unprotect_access_levels", "code_owner_approval_required")
83
- logger.debug("Will transfer branch protection parameters: #{branch_protection_parameters}")
84
- end
85
- msg = "Rename #{project.path_with_namespace} branch #{options[:branch_to_rename]} to #{options[:new_branch_name]} " +
86
- (branch_protection_parameters ? "with" : "without") + " protection"
87
- if options[:pretend]
88
- puts(msg)
89
- logger.info(msg)
90
- next
91
- elsif options[:confirm]
92
- puts(msg)
93
- print("\tContinue with branch? (y/N) ")
94
- input = gets.chomp
95
- if input != "y"
96
- msg = "Skipping branch rename for #{project.path_with_namespace} based on user input #{input}"
97
- puts(msg)
98
- logger.info(msg)
99
- next
100
- end
101
- logger.info("User confirmed branch rename for #{project.path_with_namespace}")
102
- end
103
- # Create new branch
104
- begin
105
- new_branch = Gitlab.create_branch(project.id, options[:new_branch_name], old_branch.name)
106
- logger.debug("Created new branch with name options[:new_branch_name]")
107
- rescue StandardError => e
108
- logger.error(e)
109
- next
110
- end
111
- # Protect branch
112
- unless branch_protection_parameters
113
- begin
114
- Gitlab.protect_branch(project.id, options[:new_branch_name], branch_protection_parameters)
115
- logger.debug("Protected branch with parameters #{branch_protection_parameters}")
116
- rescue StandardError => e
117
- logger.error(e)
118
- end
119
- end
120
- # Feature: Update PRs? Issues?
121
- # Change default branch
122
- begin
123
- Gitlab.edit_project(project.id, {default_branch: options[:new_branch_name]})
124
- logger.debug("Changed default branch")
125
- rescue StandardError => e
126
- logger.error(e)
127
- end
128
-
129
- # Unprotect protected branches
130
- unless branch_protection_parameters
131
- begin
132
- Gitlab.unprotect_branch(project.id, old_branch.name)
133
- logger.debug("Unprotected old branch")
134
- rescue StandardError => e
135
- logger.error(e)
136
- end
137
- end
138
-
139
- # Delete master branch
140
- begin
141
- Gitlab.delete_branch(project.id, old_branch.name)
142
- logger.debug("Deleted old branch")
143
- rescue StandardError => e
144
- logger.error(e)
145
- end
146
- end
147
-
148
- puts "For any local repositories, use these commands to update:"
149
- puts " git fetch `git remote` --prune"
150
- puts " git checkout #{options[:new_branch_name]}"
151
- puts " git remote set-head `git remote` #{options[:new_branch_name]}"
152
- puts " git branch -d #{options[:branch_to_rename]}"
153
- logger.close