class TMBundle
Public Instance Methods
cd(partial_name)
click to toggle source
# File lib/tmbundle.rb, line 119 def cd(partial_name) bundle = find_bundle(partial_name) within bundle do term_program = ENV['TERM_PROGRAM'] || 'Terminal.app' system 'open', bundle.path, '-a', term_program end end
edit(partial_name)
click to toggle source
# File lib/tmbundle.rb, line 7 def edit partial_name bundle = find_bundle(partial_name) mate bundle.path rescue NotFound return false end
install(name)
click to toggle source
# File lib/tmbundle.rb, line 55 def install name require 'tmbundle/bundle_name' name = BundleName.new(name) install_path = bundles_dir.join(name.install_name).to_s success = system('git', 'clone', name.git_url, install_path) if not success puts "attempting clone of #{name.alt_git_url}" success = system('git', 'clone', name.alt_git_url, install_path) end end
list()
click to toggle source
# File lib/tmbundle.rb, line 112 def list bundles_list.all.each do |bundle| puts "- #{bundle.name.ljust(30)} (#{bundle.path})" end end
path(name)
click to toggle source
# File lib/tmbundle.rb, line 67 def path name puts find_bundle(name).path rescue NotFound return false end
status(name = nil)
click to toggle source
# File lib/tmbundle.rb, line 74 def status name = nil justification = 50 bundles_list.all.each do |bundle| within bundle do print "- #{bundle.name}...".ljust(justification) # puts "-> fetching updates from remote..." `git fetch -aq 2> /dev/null` fetch_successful = $?.success? # puts "-> checking status..." branch_info, *changes = `git status -zb`.split("\0") branch, remote, branch_status, = branch_info.scan(/^## (\S+)\.\.\.(\S+)(?: \[(.+)\])?/).flatten cd_hint = false if changes.any? cd_hint = true print "✘ #{changes.size} changed/new file#{:s if changes.size != 0}.".ljust(justification) else case branch_status.to_s when /^ahead (\d+)/ ahead_commits = $1 cd_hint = true print "✘ #{ahead_commits} commits ahead of #{remote}. ".ljust(justification) when /^behind (\d+)/ behind_commits = $1 cd_hint = true print "❍ behind remote (#{remote}) by #{behind_commits}. ".ljust(justification) else print "✔︎ up-to-date" end end print "$ cd \"#{bundle.path}\" # to enter the bundle directory" if cd_hint puts puts "#{' '*justification}✘✘✘ Something went wrong while fetching from remote #{remote}" unless fetch_successful end end end
update(partial_name = nil)
click to toggle source
# File lib/tmbundle.rb, line 15 def update(partial_name = nil) bundle = find_bundle(partial_name) if partial_name bundles_to_update = bundle ? [bundle] : installed_bundles require 'thread' signals = Queue.new trap('INT') { signals << :int } updated = [] skipped = [] errored = [] bundles_to_update.each do |bundle| within bundle do if not(File.exist?('./.git')) puts "------> Skipping #{bundle.name} (not a Git repo, delta bundle?)" skipped << bundle next end puts "------> Updating #{bundle.name}..." system(*%w[git pull --ff-only]) success = $? == 0 updated << bundle if success errored << bundle unless success puts (puts 'Exiting…'; exit) if signals.pop == :int until signals.empty? end end puts puts puts '------> Summary' puts puts "Skipped (#{skipped.size})\n- #{skipped.map(&:name).join("\n- ")}\n\n" if skipped.any? puts "Updated (#{updated.size})\n- #{updated.map(&:name).join("\n- ")}\n\n" if updated.any? puts "Errored (#{errored.size})\n- #{errored.map(&:name).join("\n- ")}\n\n" if errored.any? end
Private Instance Methods
bundles_dir()
click to toggle source
# File lib/tmbundle.rb, line 168 def bundles_dir @bundles_dir ||= Pathname('~/Library/Application Support/TextMate/Bundles').expand_path end
bundles_list()
click to toggle source
# File lib/tmbundle.rb, line 164 def bundles_list @bundles_list ||= BundlesList.new(bundles_dir) end
find_bundle(partial_name)
click to toggle source
# File lib/tmbundle.rb, line 131 def find_bundle(partial_name) matches = installed_bundles.select do |bundle| bundle.name =~ /^#{partial_name}/i end if matches.size > 1 puts "please be more specific:" matches.each_with_index {|m,i| puts " #{i+1}) #{m.name}"} print 'Type the number> ' return(matches[$stdin.gets.to_i-1] || raise(NotFound)) end if matches.empty? puts "nothing found" raise NotFound end matches.first end
installed_bundles()
click to toggle source
# File lib/tmbundle.rb, line 160 def installed_bundles bundles_list.all end
mate(*args)
click to toggle source
# File lib/tmbundle.rb, line 186 def mate *args exec 'mate', *args end
within(bundle) { || ... }
click to toggle source
# File lib/tmbundle.rb, line 154 def within bundle Dir.chdir bundle.path do yield end end