lib/dev_projects.rb in dev-2.0.46 vs lib/dev_projects.rb in dev-2.0.47

- old
+ new

@@ -1,10 +1,141 @@ #require 'dev_environment' -require_relative 'projects.rb' -require_relative 'project.rb' +#require_relative 'projects.rb' +#require_relative 'project.rb' + +#class DevProjects +#end +require 'json' +#require 'dev_commands' + +class Project < Hash +attr_accessor :filename + def initialize value='' + @filename='' + self[:url]='' + self[:url] = value if value.is_a?(String) + if(value.is_a?(Hash)) + value.each{|k,v|self[k]=v} + end + end + + def name + self[:name] + end + + def get_latest_unique_id + '51ed9c9d45ba3979c808740d75ba1831c85aff5d' + end + + def wrk_dir + "#{Environment.dev_root}/wrk/#{self.name}" + end + + def pull + if(File.exists?(wrk_dir) && File.exists?("#{wrk_dir}/.git")) + Dir.chdir(wrk_dir) do + puts "git pull (#{wrk_dir})" + puts `git pull` + end + end + end + + def clone + if(!File.exists?(wrk_dir) && self[:url].include?('.git')) + puts "cloning #{self[:url]} to #{self.wrk_dir}" + puts `git clone #{self[:url]} #{self.wrk_dir}` + end + end + + def checkout + if(!File.exists?(wrk_dir) && self[:url].include?('svn')) + puts "checkout #{self.url} to #{self.wrk_dir}" + puts `svn checkout #{self.url} #{self.wrk_dir}` + end + end + + def rake + if(!File.exists?(self.wrk_dir)) + clone + checkout + end + if(File.exists?(self.wrk_dir)) + Dir.chdir(self.wrk_dir) do + rake = Command.new({ :input => 'rake', :timeout => 300, :ignore_failure => true }) + rake.execute + puts rake.summary + end + end + end +end + +require 'json' +require 'rake' +#require 'dev_git' +#require 'dev_svn' +#require 'dev_msbuild' +#require 'dev_environment' + +class Projects < Hash + attr_accessor :filename + + def initialize + @filename='' + end + + def update + self.each{|k,v| + self[k]=Project.new(v) if(v.is_a?(String)) + self[k]=Project.new(v) if(!v.is_a?(Project) && v.is_a?(Hash)) + self[k][:name]=k + #self[k].update if self[k].respond_to?("update".to_sym) + } + end + + def save filename='' + @filename=filename if !filename.nil? && filename.length > 0 + File.open(@filename,'w'){|f|f.write(JSON.pretty_generate(self))} if @filename.length > 0 + end + + def open filename='' + @filename=filename if filename.length > 0 + JSON.parse(IO.read(@filename)).each{|k,v| self[k]=v} + update + end + + def self.user_projects_filename + FileUtils.mkdir("#{Environment.dev_root}/data") if(!File.exists?("#{Environment.dev_root}/data")) + "#{Environment.dev_root}/data/PROJECTS.json" + end + + def self.current + project=nil + url=Git.remote_origin + url=Svn.url if url.length==0 + if(Rake.application.original_dir.include?('/wrk/') && + url.length > 0) + project=Project.new(url) + name=Rake.application.original_dir.gsub("#{Environment.dev_root}/wrk/",'') + project[:name] = name if(name.length>0 && !name.include?(Environment.dev_root)) + if(defined?(PROJECTS)) + PROJECTS[name]=project if(!PROJECTS.has_key?(name)) + project.each{|k,v|PROJECTS[name][k]=v} + PROJECTS.save + else + project[:name]=name + end + end + project + end + + def pull + self.each{|k,v| v.pull if v.respond_to?("pull".to_sym)} + end + def rake + self.each{|k,v| v.rake if v.respond_to?("rake".to_sym)} + end +end + PROJECTS=Projects.new PROJECTS.open Projects.user_projects_filename if File.exists? Projects.user_projects_filename PROJECTS.save Projects.user_projects_filename if !File.exists? Projects.user_projects_filename - -class DevProjects -end \ No newline at end of file