git_rid 1.0.0

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/git_rid +49 -0
  3. data/lib/git_rid.rb +42 -0
  4. metadata +89 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2b9dcf887879784c7d12c7be5b416ca07ef33d898a34f8c688cd35646fd7b3fa
4
+ data.tar.gz: a00d51d67619cc09b0f8c001dce06428159d815920388b05ded9ae0099ae8f03
5
+ SHA512:
6
+ metadata.gz: 63d57f99bca1ab1a6a4923d3be8f4eda212691db9a7b0b466ef6d0c9b96e7b9fee85b9eaf9c718531ad18f30110dbc84cbfd432f97030dcb802d22cd03a9198d
7
+ data.tar.gz: dfbb8b34cae104d84bf2b2569969066733bfdbbf2ec411f1f2a876bbb3c36a86ba0ff114634fecffadc9765752577ae1718c71b22003864755ebd869b49845bb
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'git_rid'
5
+ require 'highline/import'
6
+ require 'dotenv/load'
7
+
8
+ options = {
9
+ updated: 'main',
10
+ outdated: 'master',
11
+ url: ENV['GITLAB_API_ENDPOINT'] || 'https://gitlab.com/api/v4',
12
+ token: ENV['GITLAB_API_PRIVATE_TOKEN']
13
+ }
14
+ OptionParser.new do |opts|
15
+ opts.banner = 'Usage: git_rid'
16
+
17
+ opts.on('-b', '--branch-name=main', 'Set the new branch name you want') do |name|
18
+ options[:updated] = name
19
+ end
20
+
21
+ opts.on('-o', '--outdated-branch=master', 'Specify what the outdated branch name was') do |name|
22
+ options[:outdated] = name
23
+ end
24
+
25
+ opts.on('-u', '--url=https://gitlab.com/api/v4', 'Specify the url for the gitlab server') do |url|
26
+ options[:url] = url
27
+ end
28
+
29
+ opts.on('-t', '--token=???', 'Specify the token for the gitlab user (must be maintainer or above)') do |url|
30
+ options[:url] = url
31
+ end
32
+
33
+ opts.on('-h', '--help', 'Show usage help text') do
34
+ puts opts
35
+ exit 0
36
+ end
37
+ end.parse!
38
+
39
+ if options[:token].nil?
40
+ puts 'please specify a gitlab token or supply GITLAB_API_PRIVATE_TOKEN in your environment'
41
+ exit 1
42
+ end
43
+
44
+ puts "Keep in mind that while you should definitely 100% do this, it will rename the #{options[:outdated]} branch to #{options[:updated]} and that could confuse people."
45
+ confirm = ask("Do it? [Y/N] ") { |yn| yn.limit = 1, yn.validate = /[yn]/i }
46
+ exit unless confirm.downcase == 'y'
47
+
48
+ puts 'OKAY LETS DO THIS!'
49
+ GitRid.perform!(options)
@@ -0,0 +1,42 @@
1
+ require 'gitlab'
2
+
3
+ class GitRid
4
+ def self.perform!(options)
5
+ updated_name = options[:updated]
6
+ outdated_name = options[:outdated]
7
+
8
+ Gitlab.configure do |config|
9
+ config.endpoint = options[:url] || ENV['GITLAB_API_ENDPOINT']
10
+ config.private_token = options[:token] || ENV['GITLAB_API_PRIVATE_TOKEN']
11
+ end
12
+
13
+ projects = Gitlab.projects(min_access_level: 40)
14
+
15
+ if projects.empty?
16
+ puts "Looks like you aren't a maintainer on any projects :("
17
+ exit 1
18
+ end
19
+
20
+ projects.auto_paginate do |project|
21
+ mb = Gitlab.branch(project.id, outdated_name)
22
+
23
+ Gitlab.create_branch(project.id, updated_name, mb.commit.id)
24
+
25
+ if mb.protected
26
+ Gitlab.protect_branch(project.id, updated_name)
27
+ Gitlab.unprotect_branch(project.id, outdated_name)
28
+ end
29
+
30
+ if project.default_branch == outdated_name
31
+ Gitlab.edit_project(project.id, {default_branch: updated_name})
32
+ end
33
+
34
+ Gitlab.delete_branch(project.id, outdated_name)
35
+ puts "Updated #{project.name} and replaced #{outdated_name} with #{updated_name}"
36
+ rescue Gitlab::Error::NotFound => e
37
+ puts "Skipping #{project.name}, it doesn't have a #{outdated_name} branch!"
38
+ rescue Gitlab::Error::BadRequest
39
+ puts "Skipping #{project.name} because it already had a branch called #{updated_name}... you'll have to sort that out yourself."
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git_rid
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Alex Ives
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gitlab
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.15.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.15.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: dotenv
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.7.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.7.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: highline
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.3
55
+ description: Change every main branch to the name of your choice instead of master
56
+ (default is main)
57
+ email: alex@ives.dev
58
+ executables:
59
+ - git_rid
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - bin/git_rid
64
+ - lib/git_rid.rb
65
+ homepage: https://gitlab.com/alexives/git_rid
66
+ licenses:
67
+ - MIT
68
+ metadata:
69
+ source_code_uri: https://gitlab.com/alexives/git_rid
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubygems_version: 3.0.3
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: Change all instances of master branches in gitlab (where you have access)
89
+ test_files: []