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