You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
require " sqlite3 "
require " rugged "
require " fileutils "
require_relative " db "
class GitRepo
attr :path , :error , :db
def initialize ( path , db )
@path = nil
@error = nil
@db = db
if File . absolute_path? ( path )
if File . exist? ( path )
@path = path
end
else
apath = File . realpath ( path )
if File . exist? ( apath )
@path = apath
end
end
end
def create_git ( project_name , description )
@error = nil
ret_val = 0
File . open ( " locks/gitcreate " , " r " ) do | f |
f . flock ( File :: LOCK_EX )
fname = File . expand_path ( " #{ project_name } .git " , @path )
if File . exist? ( fname )
@error = " Репозиторий с таким именем уже существует: #{ project_name } "
ret_val = 1
else
Dir . mkdir ( fname )
Rugged :: Repository . init_at ( fname , :bare )
repo = Rugged :: Repository . new ( fname )
created = false
if repo . bare?
@error = @db . creategit ( project_name , description )
if @error . nil?
created = true
end
else
@error = " Репозиторий почему-то не пустой "
end
unless created
FileUtils . rm_rf ( fname , secure : true )
end
end
end
ret_val
end
def create_git_db_only ( project_name )
@error = @db . creategit ( project_name , " " )
@error
end
def getrepos
repos_data = [ ]
repos_files = Dir [ File . join ( @path , " *.git " ) ]
repos_files . each do | fl |
repo_name = File . basename ( fl , " .git " )
db_info = @db . get_repo_info_by_name ( repo_name )
unless db_info . nil?
db_info = db_info . first
repos_data << { :reponame = > db_info . reponame , :descr = > db_info . descr , :public = > db_info . public }
else
result = create_git_db_only ( repo_name )
if result . nil?
db_info = @db . get_repo_info_by_name ( repo_name )
db_info = db_info . first
repos_data << { :reponame = > db_info . reponame , :descr = > db_info . descr , :public = > db_info . public }
end
end
end
repos_data
end
end