-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
setup.rb
109 lines (89 loc) · 2.56 KB
/
setup.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
module Pod
class Command
class Setup < Command
self.summary = 'Setup the CocoaPods environment.'
self.description = <<-DESC
Creates a directory at `~/.cocoapods' which will hold your spec-repos.
This is where it will create a clone of the public `master' spec-repo from:
https://github.com/CocoaPods/Specs
If the clone already exists, it will ensure that it is up-to-date.
DESC
def self.options
[["--push", "Use this option to enable push access once granted"]].concat(super)
end
extend Executable
executable :git
def initialize(argv)
@push_option = argv.flag?('push')
super
end
def dir
config.repos_dir + 'master'
end
def read_only_url
'https://github.com/CocoaPods/Specs.git'
end
def read_write_url
'git@github.com:CocoaPods/Specs.git'
end
def url
if push?
read_write_url
else
read_only_url
end
end
def origin_url_read_only?
read_master_repo_url.chomp == read_only_url
end
def origin_url_push?
read_master_repo_url.chomp == read_write_url
end
def push?
@push_option || (dir.exist? && origin_url_push?)
end
def read_master_repo_url
Dir.chdir(dir) do
origin_url = git('config --get remote.origin.url')
end
end
def set_master_repo_url
Dir.chdir(dir) do
git("remote set-url origin '#{url}'")
end
end
def add_master_repo
@command ||= Repo.new(ARGV.new(['add', 'master', url, 'master'])).run
end
def update_master_repo
Repo::Update.run(['master'])
end
def set_master_repo_branch
Dir.chdir(dir) do
git("checkout master")
end
end
def run_if_needed
run unless dir.exist? && Repo.compatible?('master')
end
def run
UI.section "Setting up CocoaPods master repo" do
if dir.exist?
set_master_repo_url
set_master_repo_branch
update_master_repo
else
add_master_repo
end
# Mainly so the specs run with submodule repos
if (dir + '.git/hooks').exist?
hook = dir + '.git/hooks/pre-commit'
hook.open('w') { |f| f << "#!/bin/sh\nrake lint" }
`chmod +x '#{hook}'`
end
end
UI.puts "Setup completed (#{push? ? "push" : "read-only"} access)".green
end
end
end
end