class Raykit::Git::Directory
Functionality to manage a local clone of a git repository
Attributes
directory[RW]
The directory name of the local repository clone
Public Class Methods
new(directory)
click to toggle source
# File lib/raykit/git/directory.rb, line 9 def initialize(directory) @directory=directory end
Public Instance Methods
branch()
click to toggle source
# File lib/raykit/git/directory.rb, line 123 def branch Dir.chdir(directory) do scan=`git branch`.scan(/\*\s([\w\.-]+)/) return scan[0][0].to_s if(!scan.nil? && scan.length > 0 && scan[0].length > 0) end 'master' end
detached?()
click to toggle source
# File lib/raykit/git/directory.rb, line 23 def detached? Dir.chdir(directory) do status=`git status`.strip if status.include?('detached') true else false end end end
get_sha(filename)
click to toggle source
# File lib/raykit/git/directory.rb, line 100 def get_sha(filename) if File.exists?(filename) Digest::SHA256.file(filename).hexdigest.to_s else "#{filename} not found" end #'' end
get_tag_commit_id(name)
click to toggle source
# File lib/raykit/git/directory.rb, line 91 def get_tag_commit_id(name) cmd = Raykit::Command.new("git rev-parse \"#{name}\"") if !cmd.output.include?('fatal') && !cmd.error.include?('fatal') cmd.output.strip() else '' end end
last_modified_time()
click to toggle source
# File lib/raykit/git/directory.rb, line 77 def last_modified_time Dir.chdir(@directory) do File.mtime(Dir.glob("**/*.*").select{|f| File.file?(f)}.max_by {|f| File.mtime(f)}) end end
latest_tag(branch)
click to toggle source
The latest tag for a branch of the repository
# File lib/raykit/git/directory.rb, line 84 def latest_tag(branch) Dir.chdir(directory) do return `git describe --abbrev=0`.strip end '' end
outstanding_commit?()
click to toggle source
# File lib/raykit/git/directory.rb, line 13 def outstanding_commit? Dir.chdir(directory) do if(user_can_commit) return !`git status`.include?('nothing to commit,') else return false end end end
pull()
click to toggle source
# File lib/raykit/git/directory.rb, line 34 def pull Dir.chdir(directory) do diff=`git diff`.strip status=`git status`.strip if(diff.length == 0 && status.include?('nothing to commit')) PROJECT.run('git pull',false) end end end
rake(task)
click to toggle source
# File lib/raykit/git/directory.rb, line 44 def rake(task) if(!Dir.exist?(@directory)) puts 'directory not found.' return 1 end debug=false sub_dir='work' sub_dir='make' if(@directory.include?('/make/')) rake_log=repository.get_dev_dir('log') + "/#{sub_dir}.rake.#{task}.json" puts "log filename #{rake_log}" if(debug) if(File.exist?(rake_log)) if(File.mtime(rake_log) > last_modified_time) puts "using logged data" if(debug) cmd=Raykit::Command::parse(File.read(rake_log)) cmd.summary return end end Dir.chdir(@directory) do if(File.exist?('rakefile.rb')) cmd = Raykit::Command.new("rake #{task}") cmd.summary FileUtils.mkdir_p(File.dirname(rake_log)) File.open(rake_log, 'w') {|f| f.write(JSON.generate(cmd.to_hash)) } else puts 'rakefile.rb not found' end end end
remote()
click to toggle source
# File lib/raykit/git/directory.rb, line 138 def remote if(Dir.exist?(directory)) Dir.chdir(directory) do if(Dir.exist?('.git')) return Command.new('git config --get remote.origin.url').output.strip end end end "" end
repository()
click to toggle source
# File lib/raykit/git/directory.rb, line 131 def repository if(@repository.nil?) @repository = Raykit::Git::Repository.new(remote) end @repository end
user_can_commit()
click to toggle source
# File lib/raykit/git/directory.rb, line 117 def user_can_commit return false if(user_name.length == 0) return false if(user_email.length == 0) return true end
user_email()
click to toggle source
# File lib/raykit/git/directory.rb, line 113 def user_email `git config --get user.email`.strip end
user_name()
click to toggle source
# File lib/raykit/git/directory.rb, line 109 def user_name `git config --get user.name`.strip end