class Giticious::Service::Repository

Public Instance Methods

add_user(repo_name, username, permissions) click to toggle source
# File lib/giticious/service/repository.rb, line 133
def add_user(repo_name, username, permissions)
  repo = Giticious::Model::Repository.find_by_name(repo_name)

  if repo.nil?
    raise ArgumentError, "The selected repository does not exist"
  end

  user = Giticious::Model::User.find_by_username(username)

  if user.nil?
    raise ArgumentError, "The selected user does not exist"
  end

  if Giticious::Model::Permission.where(user_id: user.id, repository_id: repo.id).empty? == false
    raise ArgumentError, "This user does already have permissions"
  end

  perm = Giticious::Model::Permission.new
  perm.repository_id = repo.id
  perm.user_id = user.id
  perm.perm_read = permissions.include?("r")
  perm.perm_write = permissions.include?("w")

  perm.save!
end
build_repo_path(name) click to toggle source
# File lib/giticious/service/repository.rb, line 9
def build_repo_path(name)
  if name.empty?
    raise ArgumentError, "repo name may not be empty"
  end

  "#{Dir.home}/repositories/#{name}.git"
end
build_temp_path(name) click to toggle source
# File lib/giticious/service/repository.rb, line 17
def build_temp_path(name)
  "#{Dir.home}/.giticious/temp_#{File.basename(name)}"
end
create(name) click to toggle source
# File lib/giticious/service/repository.rb, line 52
def create(name)
  path = build_repo_path(name)

  if init_repository(path) == false
    raise RuntimeError, "Could not init Git repository"
  end

  repo = Giticious::Model::Repository.new
  repo.name = name
  repo.path = path

  repo.save!
end
delete(name) click to toggle source
# File lib/giticious/service/repository.rb, line 66
def delete(name)
  repo = Giticious::Model::Repository.find_by_name(name)

  if repo.nil?
    raise ArgumentError, "The selected repository does not exist"
  end

  Giticious::Model::Permission.where(repository_id: repo.id).delete_all
  FileUtils.rm_rf(build_repo_path(repo.name))

  repo.delete
end
delete_user(repo_name, username) click to toggle source
# File lib/giticious/service/repository.rb, line 111
def delete_user(repo_name, username)
  repo = Giticious::Model::Repository.find_by_name(repo_name)

  if repo.nil?
    raise ArgumentError, "The selected repository does not exist"
  end

  user = Giticious::Model::User.find_by_username(username)

  if user.nil?
    raise ArgumentError, "The selected user does not exist"
  end

  perms = Giticious::Model::Permission.where(user_id: user.id, repository_id: repo.id)

  if perms.empty?
    raise ArgumentError, "This user does not have permissions"
  end

  perms.delete_all
end
import(url) click to toggle source
# File lib/giticious/service/repository.rb, line 21
def import(url)
  target_repo_name = File.basename(url).gsub(".git", "")
  
  if create(target_repo_name) == false
    raise RuntimeError, "Could not create repository"
  end

  temp_name = build_temp_path(url)  

  begin
    new_url = build_repo_path(target_repo_name)

    `git clone #{url} #{temp_name}`

    if $?.success? == false
      raise RuntimeError, "Could not clone repo URL"
    end

    `cd #{temp_name} && git remote add new #{new_url} && git push --all new`

    if $?.success? == false
      raise RuntimeError, "Could not import repo"
    end
  rescue => e
    delete(target_repo_name)
    raise e
  finally
    FileUtils.rm_rf(temp_name)
  end
end
list() click to toggle source
# File lib/giticious/service/repository.rb, line 5
def list
  Giticious::Model::Repository.all
end
permissions(repo) click to toggle source
# File lib/giticious/service/repository.rb, line 79
def permissions(repo)
  repo = Giticious::Model::Repository.find_by_name(repo)

  if repo.nil?
    raise ArgumentError, "The selected repository does not exist"
  end

  repo.permissions
end
permissions_for(repo_name, username) click to toggle source
# File lib/giticious/service/repository.rb, line 89
def permissions_for(repo_name, username)
  repo = Giticious::Model::Repository.find_by_name(repo_name)

  if repo.nil?
    raise ArgumentError, "The selected repository does not exist"
  end

  user = Giticious::Model::User.find_by_username(username)

  if user.nil?
    raise ArgumentError, "The selected user does not exist"
  end

  permissions = Giticious::Model::Permission.where(user_id: user.id, repository_id: repo.id)

  if permissions.empty?
    return false
  end

  return permissions.first!
end

Protected Instance Methods

init_repository(path) click to toggle source
# File lib/giticious/service/repository.rb, line 160
def init_repository(path)
  if Dir.exists?(path)
    raise ArgumentError, "repo path #{path} does already exist"
  end

  `git init --bare #{path}` and $?.success?
end