class Raykit::Git::Repository

Functionality to manage a remote git repository

Attributes

clone_directory[RW]
url[RW]

The url of the remote repository

work_directory[RW]

Public Class Methods

new(url) click to toggle source
# File lib/raykit/git/repository.rb, line 10
def initialize(url)
    @url=url
    @clone_directory = Raykit::Git::Directory.new(get_dev_dir('clone'))
    @work_directory = Raykit::Git::Directory.new(get_dev_dir('work'))
end
parse(json) click to toggle source
# File lib/raykit/git/repository.rb, line 20
def self.parse(json)
    hash=JSON.parse(json)
    repo=Repository.new(hash["url"])
    repo
end

Public Instance Methods

branches() click to toggle source

The branches for the git repository

# File lib/raykit/git/repository.rb, line 46
def branches
    results = Array.new
    update_local_clone_directory
    if(Dir.exist?(local_clone_directory))
        Dir.chdir(local_clone_directory) do
            `git branch`.split('\n').each{|line|
                branch = line.gsub('*','').strip
                results.insert(-1,branch) if(branch.length > 0)
            }
        end
    end
    results
end
clone(directory,depth=0) click to toggle source

Clone the repository to a specific directory

# File lib/raykit/git/repository.rb, line 37
def clone(directory,depth=0)
    if(depth == 0)
        PROJECT.run("git clone #{@url} #{directory}") 
    else
        PROJECT.run("git clone #{@url} #{directory} --depth #{depth}")
    end
end
get_dev_dir(dir) click to toggle source
# File lib/raykit/git/repository.rb, line 31
def get_dev_dir(dir)
    dev_dir=Environment::get_dev_dir(dir)
    return "#{dev_dir}/#{relative_path}"
end
latest_commit(branch) click to toggle source

The latest commit id for a branch of the repostiory

# File lib/raykit/git/repository.rb, line 61
def latest_commit(branch)
    if(checkout_local_clone_directory_branch(branch))
        text=`git log -n 1`
        scan=text.scan(/commit ([\w]+)\s/)
        return scan[0][0].to_s 
    end
    ''
end
latest_tag(branch) click to toggle source

The latest tag for a branch of the repository

# File lib/raykit/git/repository.rb, line 71
def latest_tag(branch)
    if(checkout_local_clone_directory_branch(branch))
        return `git describe --abbrev=0`.strip
    end
    ''
end
relative_path() click to toggle source

The relative path is a valid local path name derived from the url

# File lib/raykit/git/repository.rb, line 27
def relative_path
    @url.gsub('https://','').gsub('.git','').gsub('http://','')
end
to_json() click to toggle source
# File lib/raykit/git/repository.rb, line 16
def to_json
    JSON.generate({"url" => @url})
end

Private Instance Methods

checkout_local_clone_directory_branch(branch) click to toggle source
# File lib/raykit/git/repository.rb, line 93
        def checkout_local_clone_directory_branch(branch)
    update_local_clone_directory
    if(Dir.exist?(local_clone_directory))
        Dir.chdir(local_clone_directory) do
            check=`git branch`
            if(!check.include?("* #{branch}"))
                t = `git checkout #{branch}`
            end
            check=`git branch`
            return check.include?("* #{branch}")
        end
    end
    false
end
local_clone_directory() click to toggle source
# File lib/raykit/git/repository.rb, line 78
        def local_clone_directory
    clone_dir="#{Environment::get_dev_dir('clone')}/#{relative_path}"
end
update_local_clone_directory() click to toggle source
# File lib/raykit/git/repository.rb, line 82
        def update_local_clone_directory
    if(Dir.exist?(local_clone_directory))
        Dir.chdir(local_clone_directory) do
            Raykit::Command.new('git pull')
            #t = `git pull`
        end
    else
        PROJECT.run("git clone #{@url} #{local_clone_directory}")
    end
end