module Tetra::ProjectIniter::ClassMethods
def init(dir, include_bundled_software = true)
def init(dir, include_bundled_software = true) Dir.mkdir(dir) # Avoid Dir.chdir(dir). Use absolute paths instead. # Initialize Git facade with the full path git = Tetra::Git.new(dir) git.init FileUtils.mkdir_p(File.join(dir, "src")) FileUtils.mkdir_p(File.join(dir, "kit")) # Create a project instance (now that the dir structure exists) project = Project.new(dir) project.template_files(include_bundled_software).each do |source, destination| # Source is relative to TEMPLATE_PATH src_path = File.join(TEMPLATE_PATH, source) # Destination is relative to the new project directory dst_path = File.join(dir, destination) FileUtils.cp_r(src_path, dst_path) end # Commit "." (Git facade handles context, "." means "all changes in repo") git.commit_directories(["."], "Template files added") end
def project?(dir)
def project?(dir) # Use a block for logging so we don't list files unless debug is on. # Dir.children is faster/cleaner than Dir.new(dir).to_a Tetra::Logger.instance.debug { "Checking for tetra project: #{dir}, contents: #{Dir.children(dir)}" } File.directory?(File.join(dir, "src")) && File.directory?(File.join(dir, "kit")) && File.directory?(File.join(dir, ".git")) end