git_repository.rb revision 76f22aa7c18383199da116500929b79945677076
5c4c13ac875d79def115ce3d8443d4ec87b3252aJulian Kornberger# Wrapper for access to the local Git repository
b66a6512eb6dea6cf5339eaa857a81d1b89cb4deJulian Kornberger# requires git and git-svn to be installed for the functions clone_git and clone_svn to work
498a5ce047b7c0873d84f6e7f45f3443e5072b70Eugen Kuksa FileUtils.mkdir_p(Ontohub::Application.config.git_root)
5c4c13ac875d79def115ce3d8443d4ec87b3252aJulian Kornberger @repo = Rugged::Repository.init_at(path, true)
9e3e0144c09a30bdb6211168a35dacbf0cb130d8Eugen Kuksa return false
9f9aab3a5e6a6beca675c7f90f9af56a3636f000Eugen Kuksa rugged_commit = repo.lookup(commit_oid || head_oid)
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa dir = dir?(path, commit_oid) ? path : path.split('/')[0..-2].join('/')
a847d9812b328c048773e705606b10875a929034Eugen Kuksa raise GitRepository::PathNotFoundError if !rugged_commit && path.empty?
a847d9812b328c048773e705606b10875a929034Eugen Kuksa raise PathNotFoundError.new unless path_exists?(path, oid)
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa # given a commit oid or a branch name, commit_id returns a hash of oid and branch name if existent
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa return { oid: head_oid, branch_name: 'master' } if oid.nil?
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa branch_names = branches.select { |b| b[:oid] == oid }
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa { oid: oid, branch_name: branch_names[0][:name] }
a2b3d5bb602a9a0d970b6640948f1d7d75ce78bfEugen Kuksa file_path << '/' if file_path[-1] != '/' && !file_path.empty?
a2b3d5bb602a9a0d970b6640948f1d7d75ce78bfEugen Kuksa def is_head?(commit_oid=nil)
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa commit_oid.nil? || (!empty? && commit_oid == head_oid)
82943dcc7f878756736a3f21a8100b389b94ba46Eugen Kuksa def head_oid
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa repo.head.target.oid
039b6fe97fd37af689c6991e6fceef72bbd617fcEugen Kuksa def self.is_repository_with_working_copy?(path)
039b6fe97fd37af689c6991e6fceef72bbd617fcEugen Kuksa repo = Rugged::Repository.new(path)
039b6fe97fd37af689c6991e6fceef72bbd617fcEugen Kuksa rescue Rugged::RepositoryError
1167711784176c2c46f3b69a3530a8aff0d575f7Eugen Kuksa def self.is_bare_repository?(path)
93ff918a7a1656d812f27a767a976ea33da0921fJulian Kornberger Rugged::Repository.new(path).bare?
1167711784176c2c46f3b69a3530a8aff0d575f7Eugen Kuksa rescue Rugged::RepositoryError
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger def self.mime_type_editable?(mime_type)
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger mime_type.to_s == 'application/xml' || mime_type.to_s.match(/^text\/.*/)
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger def self.mime_info(filename)
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger ext = File.extname(filename)[1..-1]
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger mime_type = Mime::Type.lookup_by_extension(ext) || Mime::TEXT
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger mime_category = mime_type.to_s.split('/')[0]
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger mime_type: mime_type,
2725ada6b2a776abaadd22b0006097eae9ba2b02Julian Kornberger mime_category: mime_category
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa def path_exists_rugged?(rugged_commit, path='')
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa path ||= '/'
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa if path.empty?
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa nil != get_object(rugged_commit, path)
a2b3d5bb602a9a0d970b6640948f1d7d75ce78bfEugen Kuksa rescue Rugged::OdbError
8154de978abb605f24405ee3c94bc148ebe4b28bEugen Kuksa repo.lookup(head_oid)