class Pod::Command::Bin::Code

Public Class Methods

new(argv) click to toggle source
Calls superclass method Pod::Command::Bin::new
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 25
def initialize(argv)
  @codeSource =  argv.option('source') || nil
  @names = argv.arguments! unless argv.arguments.empty?
  @list = argv.flag?('list', false )
  @all_clean = argv.flag?('all-clean', false )
  @clean = argv.flag?('clean', false )

  @config = Pod::Config.instance

  super
end
options() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 16
def self.options
  [
      ['--all-clean', '删除所有已经下载的源码'],
      ['--clean', '删除所有指定下载的源码'],
      ['--list', '展示所有一级下载的源码以及其大小'],
      ['--source', '源码路径,本地路径,会去自动链接本地源码']
  ]
end

Public Instance Methods

add() click to toggle source
begin add ==============
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 61
def add
  if @names == nil
    raise "请输入要调试组件名,多个组件名称用空格分隔"
  end

  @names.each do  |name|
    lib_file = get_lib_path(name)
    unless File.exist?(lib_file)
      raise "找不到 #{lib_file}"
    end
    UI.puts "#{lib_file}"

    target_path =  @codeSource || download_source(name)

    link(lib_file,target_path,name)
  end
end
all_clean() click to toggle source
clean begin ==============
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 203
def all_clean
  FileUtils.rm_rf(source_root) if File.directory?(source_root)
  UI.puts "清理完成 #{source_root}"
end
check(lib_file,dir,basename) click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 151
def check(lib_file,dir,basename)
  file = `dwarfdump "#{lib_file}" | grep -E "DW_AT_decl_file.*#{basename}.*\\.m|\\.c" | head -1 | cut -d \\" -f2`
  if File.exist?(file)
    raise "#{file} 不存在 请检测代码源是否正确~"
  end
  UI.puts "link successfully!"
  UI.puts "view linked source at path: #{dir}"
end
clean() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 208
def clean
  raise "请输入要删除的组件库" if @names.nil?
  @names.each do  |name|
    full_path = File.join(source_root,name)
    if File.directory?(full_path)
      FileUtils.rm_rf(full_path)
    else
      UI.puts "找不到 #{full_path}".yellow
    end
  end
  UI.puts "清理完成 #{@names.to_s}"
end
download_source(name) click to toggle source

下载源码到本地

# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 80
def download_source(name)
  target_path =  File.join(source_root, name)
  UI.puts target_path
  FileUtils.rm_rf(target_path)

  find_dependency = find_dependency(name)

  spec = fetch_external_source(find_dependency, @config.podfile,@config.lockfile, @config.sandbox,true )

  download_request = Pod::Downloader::Request.new(:name => name, :spec => spec)
  Downloader.download(download_request, Pathname.new(target_path), :can_cache => true)

  target_path
end
fetch_external_source(dependency ,podfile , lockfile, sandbox,use_lockfile_options) click to toggle source

获取external_source 下的仓库 @return spec

# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 109
def fetch_external_source(dependency ,podfile , lockfile, sandbox,use_lockfile_options)
  source = ExternalSources.from_dependency(dependency, podfile.defined_in_file, true)
  source.fetch(sandbox)
end
find_dependency(name) click to toggle source

找出依赖

# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 96
def find_dependency (name)
  find_dependency = nil
  @config.podfile.dependencies.each do |dependency|
    if dependency.root_name.downcase == name.downcase
      find_dependency = dependency
      break
    end
  end
  find_dependency
end
get_lib_path(name) click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 160
def get_lib_path(name)
  dir = Pathname.new(File.join(Pathname.pwd,"Pods",name))
  lib_name = "lib#{name}.a"
  lib_path = File.join(dir,lib_name)

  unless File.exist?(lib_path)
    lib_path = File.join(dir.children.first,lib_name)
  end

  lib_path
end
list() click to toggle source
list begin ==============
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 194
def list
  Dir.entries(source_root).each do |sub|
    UI.puts "- #{sub}" unless sub.include?('.')
  end
  UI.puts "加载完成"
end
run() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 38
def run

  podfile_lock = File.join(Pathname.pwd,"Podfile.lock")
  raise "podfile.lock,不存在,请先pod install/update" unless File.exist?(podfile_lock)
  @lockfile ||= Lockfile.from_file(Pathname.new(podfile_lock) )

  if @list
    list
  elsif @clean
    clean
  elsif @all_clean
    all_clean
  elsif @names
    add
  end

  if @list && @clean && @names
    raise "请选择您要执行的命令。"
  end
end

Private Instance Methods

source_root() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/code.rb, line 223
def source_root
  dir = File.join(@config.cache_root,"Source")
  FileUtils.mkdir_p(dir) unless File.exist? dir
  dir
end