Class: Pod::Downloader::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods-bb-PodAssistant/source_provider_hook.rb,
lib/cocoapods-bb-PodAssistant/source_provider_hook.rb

Instance Method Summary collapse

Instance Method Details

#copy_and_clean(source, destination, spec) ⇒ Object



93
94
95
96
97
98
99
100
# File 'lib/cocoapods-bb-PodAssistant/source_provider_hook.rb', line 93

def copy_and_clean(source, destination, spec)
  # 执行之前的拷贝到cache并且清除git clone临时目录的方法
  origin_copy_and_clean(source, destination, spec)
  # 如果是--verbose,则输出详细信息,生成csv
  if $pluginIsVerbose == true
    verboseCopy_and_clean(source, destination, spec)
  end
end

#download(request, target) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/cocoapods-bb-PodAssistant/source_provider_hook.rb', line 142

def download(request, target)
  # 获取downloader下载的文件路径
  source = target.to_s
  # 赋值当前正在下载的文件路径给全局变量,为了解压zip的时候做判断
  $pluginCurrentTarget = source
  # 赋值当前正在下载的pod名称给全局变量,为了解压zip的时候做输出
  $pluginCurrentPodName = request.name.to_s
  # 获取clone执行前时间点
  time1 = Time.new
  # 执行之前的download_source方法,接收该方法的返回值
  result, podspecs = origin_download(request, target)

  # 如果不是--verbose,只输出总耗时,总下载大小
  # 捕获一下异常,不会因为plugin的原因导致pod失败
  begin
    # 获取clone执行后时间点
    time2 = Time.new
    # 获取时间差
    time = time2 - time1
    if request.params["git".to_sym]
      # 说明是git方式
      # 赋值一个给全局变量,之后时间统计要用到
      $cloneTime = time
      # 赋值一个给全局变量,之后时间统计要用到
      $cloneAllTime = $cloneAllTime + time
      # 计算downloader下载的文件大小,单位为M
      dirSum = Dir.size(source)/1000.0/1000.0
      # 赋值给一个全局变量,之后输出会用到
      $gitAllSize = $gitAllSize + dirSum
    else
      # 说明是CDN方式
      # 赋值一个给全局变量,之后时间统计要用到
      $downloadTime = time
      # 赋值一个给全局变量,之后时间统计要用到
      $downloadAllTime = $downloadAllTime + time
      # 赋值给一个全局变量,之后输出会用到
      $cdnDownloadAllTime = $cdnDownloadAllTime + $cdnDownloadTime
      # 赋值给一个全局变量,之后输出会用到
      $cdnUnZipAllTime = $cdnUnZipAllTime + $cdnUnZipTime
      # 赋值给一个全局变量,之后输出会用到
      $pluginCurrentZipAllSize = $pluginCurrentZipAllSize + $pluginCurrentZipSize
    end
    
    # 如果是--verbose,则输出详细信息,生成csv
    if $pluginIsVerbose == true
      verboseDownload(request, time, dirSum)
    end
    # 返回值
    [result, podspecs]
  rescue => exception
    # 标红输出git clone hook异常
    puts "[PodAssistant] download error(已捕获): #{exception}"
  end
end

#origin_copy_and_cleanObject

使用方法别名hook copy_and_clean方法



92
# File 'lib/cocoapods-bb-PodAssistant/source_provider_hook.rb', line 92

alias :origin_copy_and_clean :copy_and_clean

#origin_downloadObject



140
# File 'lib/cocoapods-bb-PodAssistant/source_provider_hook.rb', line 140

alias :origin_download :download

#verboseCopy_and_clean(source, destination, spec) ⇒ Object

–verbose输出详细信息,生成在home路径下.AllPodsTimeAndSize.csv的隐藏文件



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/cocoapods-bb-PodAssistant/source_provider_hook.rb', line 103

def verboseCopy_and_clean(source, destination, spec)
  begin
    # 计算拷贝到的目录下所有文件总大小,单位为M
    dirSum = Dir.size(destination.to_s)/1000.0/1000.0
    # 标红输出cache文件大小,单位为M
    puts "[PodAssistant] cachesize #{spec.name}: "+"#{dirSum}"+" M"
    # 如果相等则为CDN的下载方式
    if $gitSize == 0
      # CDN的下载方式
      CSV.open("#{Dir.home}/.AllPodsTimeAndSize.csv", "a+") do |csv|
        csv << [spec.name, $downloadTime, $pluginCurrentZipSize, dirSum, "CDN不统计此项", "CDN", $cdnDownloadTime, $cdnUnZipTime]
      end
    else
      # git的下载方式
      # 计算git clone大小和cache文件大小的差值,如果差值过大,则有优化空间
      diffSize = $gitSize - dirSum
      # 标红输出差值
      puts "[PodAssistant] diffSize = #{diffSize}"+"M "
      CSV.open("#{Dir.home}/.AllPodsTimeAndSize.csv", "a+") do |csv|
        csv << [spec.name, $cloneTime, $gitSize, dirSum, diffSize, "Git", "Git不统计此项", "Git不统计此项"]
      end
    end
    
    # 换行
    puts

  rescue => exception
    # 输出拷贝清除方法异常
    puts "[PodAssistant] verboseCopy_and_clean error(已捕获): #{exception}".red
  end
  $gitSize = 0
end

#verboseDownload(request, time, dirSum) ⇒ Object



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/cocoapods-bb-PodAssistant/source_provider_hook.rb', line 197

def verboseDownload(request, time, dirSum)
  if request.params["git".to_sym]
    # 说明是git方式
    # 标红输出git clone耗时
    puts "[PodAssistant] #{request.name.to_s} clone time: #{time}"+" S"
    # 赋值给一个全局变量,之后输出会用到
    $gitSize = dirSum
    # 标红输出git clone下载文件大小
    puts "[PodAssistant] #{request.name.to_s} clone allsize: "+"#{dirSum}"+" M"
  else
    # 说明是CDN方式
    # 标红输出CDN 下载耗时
    puts "[PodAssistant] #{request.name.to_s} CDN download time: #{$cdnDownloadTime}"+" S"
    # 标红输出CDN 解压耗时
    puts "[PodAssistant] #{request.name.to_s} CDN unzip time: #{$cdnUnZipTime}"+" S"
    # 标红输出CDN 总耗时
    puts "[PodAssistant] #{request.name.to_s} CDN All time: #{$downloadTime}"+" S"
    # 标红输出CDN clone下载文件大小
    puts "[PodAssistant] #{request.name.to_s} CDN zipSize: "+"#{$pluginCurrentZipSize}"+" M"
  end
  
end