class Raykit::Git::Directory
Functionality to manage a local clone of a git repository
def branch
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
def initialize(directory)
def initialize(directory) @directory=directory end
def last_modified_time
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
def latest_tag(branch)
def latest_tag(branch) Dir.chdir(directory) do return `git describe --abbrev=0`.strip end '' end
def outstanding_commit?
def outstanding_commit? Dir.chdir(directory) do if(user_can_commit) return !`git status`.include?('nothing to commit,') else return false end end end
def pull
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
def rake(task)
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
def remote
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
def repository
def repository if(@repository.nil?) @repository = Raykit::Git::Repository.new(remote) end @repository end
def user_can_commit
def user_can_commit return false if(user_name.length == 0) return false if(user_email.length == 0) return true end
def user_email
def user_email `git config --get user.email`.strip end
def user_name
def user_name `git config --get user.name`.strip end