Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
cocoapods
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
cocoapods
Commits
c6a4867f
Commit
c6a4867f
authored
Mar 10, 2016
by
Samuel E. Giddins
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5018 from CocoaPods/seg-no-source-shallow-clones
Disallow shallow clones of specs repos
parents
85ff9b2d
41f1a40e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
56 additions
and
50 deletions
+56
-50
CHANGELOG.md
CHANGELOG.md
+9
-1
add.rb
lib/cocoapods/command/repo/add.rb
+7
-10
setup.rb
lib/cocoapods/command/setup.rb
+0
-12
sources_manager.rb
lib/cocoapods/sources_manager.rb
+18
-3
add_spec.rb
spec/functional/command/repo/add_spec.rb
+10
-11
setup_spec.rb
spec/functional/command/setup_spec.rb
+1
-13
sources_manager_spec.rb
spec/unit/sources_manager_spec.rb
+11
-0
No files found.
CHANGELOG.md
View file @
c6a4867f
...
@@ -14,9 +14,17 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
...
@@ -14,9 +14,17 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
[
#5005
](
https://github.com/CocoaPods/CocoaPods/issues/5005
)
[
#5005
](
https://github.com/CocoaPods/CocoaPods/issues/5005
)
[
#4989
](
https://github.com/CocoaPods/CocoaPods/issues/4989
)
[
#4989
](
https://github.com/CocoaPods/CocoaPods/issues/4989
)
*
The specs repos will no longer support shallow clones to reduce CPU load
on git servers. Pre-existing shallow clones of the
`master`
repo will
automatically be upgraded to deep clones when the repo is updated.
[
Samuel Giddins
](
https://github.com/segiddins
)
[
#5016
](
https://github.com/CocoaPods/CocoaPods/issues/5016
)
##### Bug Fixes
##### Bug Fixes
*
None.
*
The master specs repository can no longer be added via
`pod repo add`
, but
instead must be done via
`pod setup`
.
[
Samuel Giddins
](
https://github.com/segiddins
)
## 1.0.0.beta.5 (2016-03-08)
## 1.0.0.beta.5 (2016-03-08)
...
...
lib/cocoapods/command/repo/add.rb
View file @
c6a4867f
...
@@ -15,14 +15,7 @@ module Pod
...
@@ -15,14 +15,7 @@ module Pod
CLAide
::
Argument
.
new
(
'BRANCH'
,
false
),
CLAide
::
Argument
.
new
(
'BRANCH'
,
false
),
]
]
def
self
.
options
[
[
'--shallow'
,
'Create a shallow clone (fast clone, but no push capabilities)'
],
].
concat
(
super
)
end
def
initialize
(
argv
)
def
initialize
(
argv
)
@shallow
=
argv
.
flag?
(
'shallow'
,
false
)
@name
=
argv
.
shift_argument
@name
=
argv
.
shift_argument
@url
=
argv
.
shift_argument
@url
=
argv
.
shift_argument
@branch
=
argv
.
shift_argument
@branch
=
argv
.
shift_argument
...
@@ -34,11 +27,16 @@ module Pod
...
@@ -34,11 +27,16 @@ module Pod
unless
@name
&&
@url
unless
@name
&&
@url
help!
'Adding a repo needs a `NAME` and a `URL`.'
help!
'Adding a repo needs a `NAME` and a `URL`.'
end
end
if
@name
==
'master'
||
@url
=~
%r{github.com[:/]+cocoapods/specs}i
raise
Informative
,
'To setup the master specs repo, please run `pod setup`.'
end
end
end
def
run
def
run
prefix
=
@shallow
?
'Creating shallow clone of'
:
'Cloning'
section
=
"Cloning spec repo `
#{
@name
}
` from `
#{
@url
}
`"
UI
.
section
(
"
#{
prefix
}
spec repo `
#{
@name
}
` from `
#{
@url
}
`
#{
" (branch `
#{
@branch
}
`)"
if
@branch
}
"
)
do
section
<<
" (branch `
#{
@branch
}
`)"
if
@branch
UI
.
section
(
section
)
do
create_repos_dir
create_repos_dir
clone_repo
clone_repo
checkout_branch
checkout_branch
...
@@ -70,7 +68,6 @@ module Pod
...
@@ -70,7 +68,6 @@ module Pod
def
clone_repo
def
clone_repo
Dir
.
chdir
(
config
.
repos_dir
)
do
Dir
.
chdir
(
config
.
repos_dir
)
do
command
=
[
'clone'
,
@url
,
@name
]
command
=
[
'clone'
,
@url
,
@name
]
command
<<
'--depth=1'
if
@shallow
git!
(
command
)
git!
(
command
)
end
end
end
end
...
...
lib/cocoapods/command/setup.rb
View file @
c6a4867f
...
@@ -14,20 +14,9 @@ module Pod
...
@@ -14,20 +14,9 @@ module Pod
If the clone already exists, it will ensure that it is up-to-date.
If the clone already exists, it will ensure that it is up-to-date.
DESC
DESC
def
self
.
options
[
[
'--no-shallow'
,
'Clone full history so push will work'
],
].
concat
(
super
)
end
extend
Executable
extend
Executable
executable
:git
executable
:git
def
initialize
(
argv
)
@shallow
=
argv
.
flag?
(
'shallow'
,
true
)
super
end
def
run
def
run
UI
.
section
'Setting up CocoaPods master repo'
do
UI
.
section
'Setting up CocoaPods master repo'
do
if
master_repo_dir
.
exist?
if
master_repo_dir
.
exist?
...
@@ -62,7 +51,6 @@ module Pod
...
@@ -62,7 +51,6 @@ module Pod
#
#
def
add_master_repo
def
add_master_repo
cmd
=
[
'master'
,
url
,
'master'
]
cmd
=
[
'master'
,
url
,
'master'
]
cmd
<<
'--shallow'
if
@shallow
Repo
::
Add
.
parse
(
cmd
).
run
Repo
::
Add
.
parse
(
cmd
).
run
end
end
...
...
lib/cocoapods/sources_manager.rb
View file @
c6a4867f
...
@@ -61,9 +61,11 @@ module Pod
...
@@ -61,9 +61,11 @@ module Pod
previous_title_level
=
UI
.
title_level
previous_title_level
=
UI
.
title_level
UI
.
title_level
=
0
UI
.
title_level
=
0
begin
begin
argv
=
[
name
,
url
]
if
name
=~
/^master(-\d+)?$/
argv
<<
'--shallow'
if
name
=~
/^master(-\d+)?$/
Command
::
Setup
.
parse
([]).
run
Command
::
Repo
::
Add
.
new
(
CLAide
::
ARGV
.
new
(
argv
)).
run
else
Command
::
Repo
::
Add
.
parse
([
name
,
url
]).
run
end
rescue
Informative
rescue
Informative
raise
Informative
,
"Unable to add a source with url `
#{
url
}
` "
\
raise
Informative
,
"Unable to add a source with url `
#{
url
}
` "
\
"named `
#{
name
}
`.
\n
You can try adding it manually in "
\
"named `
#{
name
}
`.
\n
You can try adding it manually in "
\
...
@@ -625,6 +627,7 @@ module Pod
...
@@ -625,6 +627,7 @@ module Pod
end
end
def
update_git_repo
(
show_output
=
false
)
def
update_git_repo
(
show_output
=
false
)
ensure_in_repo!
Config
.
instance
.
with_changes
(
:verbose
=>
show_output
)
do
Config
.
instance
.
with_changes
(
:verbose
=>
show_output
)
do
git!
(
%w(pull --ff-only)
)
git!
(
%w(pull --ff-only)
)
end
end
...
@@ -635,4 +638,16 @@ module Pod
...
@@ -635,4 +638,16 @@ module Pod
'`pod repo update --verbose`'
'`pod repo update --verbose`'
end
end
end
end
class
MasterSource
def
update_git_repo
(
show_output
=
false
)
ensure_in_repo!
if
repo
.
join
(
'.git'
,
'shallow'
).
file?
UI
.
info
"Performing a deep fetch of the `
#{
name
}
` specs repo to improve future performance"
do
git!
(
%w(fetch --unshallow)
)
end
end
super
end
end
end
end
spec/functional/command/repo/add_spec.rb
View file @
c6a4867f
...
@@ -28,17 +28,6 @@ module Pod
...
@@ -28,17 +28,6 @@ module Pod
Dir
.
chdir
(
repo2
.
dir
)
{
`git symbolic-ref HEAD`
}.
should
.
include?
'my-branch'
Dir
.
chdir
(
repo2
.
dir
)
{
`git symbolic-ref HEAD`
}.
should
.
include?
'my-branch'
end
end
it
'adds a spec-repo by creating a shallow clone'
do
Dir
.
chdir
(
test_repo_path
)
do
`echo 'touch' > touch && git add touch && git commit -m 'updated'`
end
# Need to use file:// to test local use of --depth=1
run_command
(
'repo'
,
'add'
,
'private'
,
'--shallow'
,
"file://
#{
test_repo_path
}
"
)
Dir
.
chdir
(
config
.
repos_dir
+
'private'
)
do
`git log --pretty=oneline`
.
strip
.
split
(
"
\n
"
).
size
.
should
==
1
end
end
it
'raises an informative error when the repos directory fails to be created'
do
it
'raises an informative error when the repos directory fails to be created'
do
repos_dir
=
config
.
repos_dir
repos_dir
=
config
.
repos_dir
def
repos_dir
.
mkpath
def
repos_dir
.
mkpath
...
@@ -47,5 +36,15 @@ module Pod
...
@@ -47,5 +36,15 @@ module Pod
e
=
lambda
{
run_command
(
'repo'
,
'add'
,
'private'
,
test_repo_path
)
}.
should
.
raise
Informative
e
=
lambda
{
run_command
(
'repo'
,
'add'
,
'private'
,
test_repo_path
)
}.
should
.
raise
Informative
e
.
message
.
should
.
match
/Could not create '
#{
tmp_repos_path
}
', the CocoaPods repo cache directory./
e
.
message
.
should
.
match
/Could not create '
#{
tmp_repos_path
}
', the CocoaPods repo cache directory./
end
end
it
'raises an informative error when attempting to add the master repo'
do
master
=
command
(
'repo'
,
'add'
,
'master'
,
'https://github.com/foo/bar.git'
)
should
.
raise
(
Informative
)
{
master
.
validate!
}.
message
.
should
.
include
(
'To setup the master specs repo, please run `pod setup`'
)
master
=
command
(
'repo'
,
'add'
,
'foo-bar'
,
'https://github.com/CocoaPods/Specs.git'
)
should
.
raise
(
Informative
)
{
master
.
validate!
}.
message
.
should
.
include
(
'To setup the master specs repo, please run `pod setup`'
)
end
end
end
end
end
spec/functional/command/setup_spec.rb
View file @
c6a4867f
...
@@ -32,23 +32,11 @@ module Pod
...
@@ -32,23 +32,11 @@ module Pod
url
.
should
==
test_repo_path
.
to_s
url
.
should
==
test_repo_path
.
to_s
end
end
it
'creates a
shallow clone of the `master` repo by default
'
do
it
'creates a
full clone of the `master` repo
'
do
Dir
.
chdir
(
test_repo_path
)
do
Dir
.
chdir
(
test_repo_path
)
do
`echo 'touch' > touch && git add touch && git commit -m 'updated'`
`echo 'touch' > touch && git add touch && git commit -m 'updated'`
end
end
# Need to use file:// to test local use of --depth=1
Command
::
Setup
.
stubs
(
:read_only_url
).
returns
(
"file://
#{
test_repo_path
}
"
)
run_command
(
'setup'
)
run_command
(
'setup'
)
Dir
.
chdir
(
config
.
repos_dir
+
'master'
)
do
`git log --pretty=oneline`
.
strip
.
split
(
"
\n
"
).
size
.
should
==
1
end
end
it
'creates a full clone of the `master` repo if requested'
do
Dir
.
chdir
(
test_repo_path
)
do
`echo 'touch' > touch && git add touch && git commit -m 'updated'`
end
run_command
(
'setup'
,
'--no-shallow'
)
Dir
.
chdir
(
config
.
repos_dir
+
'master'
)
do
Dir
.
chdir
(
config
.
repos_dir
+
'master'
)
do
`git log --pretty=oneline`
.
strip
.
split
(
"
\n
"
).
size
.
should
>
1
`git log --pretty=oneline`
.
strip
.
split
(
"
\n
"
).
size
.
should
>
1
end
end
...
...
spec/unit/sources_manager_spec.rb
View file @
c6a4867f
...
@@ -314,6 +314,17 @@ module Pod
...
@@ -314,6 +314,17 @@ module Pod
SourcesManager
.
update
(
test_repo_path
.
basename
.
to_s
,
true
)
SourcesManager
.
update
(
test_repo_path
.
basename
.
to_s
,
true
)
end
end
it
'unshallows if the git repo is shallow'
do
set_up_test_repo_for_update
test_repo_path
.
join
(
'.git'
,
'shallow'
).
open
(
'w'
)
{
|
f
|
f
<<
'a'
*
40
}
SourcesManager
.
expects
(
:update_search_index_if_needed_in_background
).
with
({}).
returns
(
nil
)
MasterSource
.
any_instance
.
expects
(
:git!
).
with
(
%w(fetch --unshallow)
)
MasterSource
.
any_instance
.
expects
(
:git!
).
with
(
%w(pull --ff-only)
)
SourcesManager
.
update
(
test_repo_path
.
basename
.
to_s
,
true
)
UI
.
output
.
should
.
match
/deep fetch.+`master`.+improve future performance/
end
it
'prints a warning if the update failed'
do
it
'prints a warning if the update failed'
do
set_up_test_repo_for_update
set_up_test_repo_for_update
Source
.
any_instance
.
stubs
(
:git
).
with
(
%w(rev-parse HEAD)
).
returns
(
'aabbccd'
)
Source
.
any_instance
.
stubs
(
:git
).
with
(
%w(rev-parse HEAD)
).
returns
(
'aabbccd'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment