class Raykit::Git::Repository
Functionality to manage a remote git repository
def self.parse(json)
def self.parse(json) hash = JSON.parse(json) Repository.new(hash["url"]) end
def branches
def branches results = [] update_local_clone_directory if Dir.exist?(local_clone_directory) Dir.chdir(local_clone_directory) do `git branch`.split('\n').each do |line| branch = line.gsub("*", "").strip results.insert(-1, branch) if branch.length.positive? end end end results end
def checkout_local_clone_directory_branch(branch)
def checkout_local_clone_directory_branch(branch) _local_clone_directory .exist?(local_clone_directory) chdir(local_clone_directory) do eck = `git branch` = `git checkout #{branch}` unless check.include?("* #{branch}") eck = `git branch` turn check.include?("* #{branch}")
def clone(directory, depth = 0)
def clone(directory, depth = 0) if depth.zero? PROJECT.run("git clone #{@url} #{directory}") else PROJECT.run("git clone #{@url} #{directory} --depth #{depth}") end end
def get_dev_dir(dir)
def get_dev_dir(dir) dev_dir = Environment.get_dev_dir(dir) "#{dev_dir}/#{relative_path}" end
def initialize(url)
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
def latest_commit(branch)
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
def latest_tag(branch)
def latest_tag(branch) return `git describe --abbrev=0`.strip if checkout_local_clone_directory_branch(branch) "" end
def local_clone_directory
def local_clone_directory dir = "#{Environment.get_dev_dir("clone")}/#{relative_path}"
def relative_path
def relative_path @url.gsub("https://", "").gsub(".git", "").gsub("http://", "") end
def to_json(*_args)
def to_json(*_args) JSON.generate({ "url" => @url }) end
def update_local_clone_directory
def update_local_clone_directory .exist?(local_clone_directory) chdir(local_clone_directory) do ykit::Command.new("git pull") t = `git pull` ECT.run("git clone #{@url} #{local_clone_directory}")