class Raykit::Project

Attributes

name[RW]
target[RW]
timer[RW]
verbose[RW]

Public Class Methods

new() click to toggle source

@log @commit_message_filename

# File lib/raykit/project.rb, line 18
def initialize()
    @verbose=false
    @timer=Raykit::Timer.new
    @remote=''
    @commit_message_filename="commit_message.tmp"
    if(Dir.exist?(RAKE_DIRECTORY))
        @directory=RAKE_DIRECTORY
        if(Dir.exist?("#{RAKE_DIRECTORY}/.git") && Dir.exist?(@directory))
            @git_directory=Raykit::Git::Directory.new(@directory)
            @remote=@git_directory.remote
        end
    else
        @directory=''
    end

    #@log=Log.new("#{RAKE_DIRECTORY}/tmp/raykit.log")

    if(defined?(NAME))
        @name=NAME 
    else
        slns = Dir.glob("*.sln")
        if(slns.length == 1)
            @name=slns[0].gsub('.sln','')
        else
            gemspecs= Dir.glob('*.gemspec')
            if(gemspecs.length == 1)
                @name=gemspecs[0].gsub('.gemspec','')
            else
                remote_parts = @remote.split('/')
                if(remote_parts.length > 0)
                    @name=remote_parts[-1].gsub('.git','')
                end
            end
        end
    end
    @repository=Raykit::Git::Repository.new(@remote)
end

Public Instance Methods

branch() click to toggle source
# File lib/raykit/project.rb, line 77
def branch
    @git_directory.branch
end
commit(commit_message) click to toggle source
# File lib/raykit/project.rb, line 221
def commit(commit_message)
    warn "[DEPRECATION] 'commit_message_filename' is deprectated. Use a run command for better transparency."
    Dir.chdir(@directory) do
        if(File.exist?('.gitignore'))
            status=`git status`
            if(status.include?('Changes not staged for commit:'))
                run("git add --all")
                if(GIT_DIRECTORY.outstanding_commit?)
                    if(File.exist?(@commit_message_filename))
                        run("git commit --file #{@commit_message_filename}")
                        File.delete(@commit_message_filename)
                    else
                        run("git commit -m'#{commit_message}'")
                    end
                end  
            end
        else
            puts "warning: .gitignore not found."
        end
    end
    self
end
commit_message_filename() click to toggle source
# File lib/raykit/project.rb, line 216
def commit_message_filename
    warn "[DEPRECATION] 'commit_message_filename' is deprectated."
    @commit_message_filename
end
directory() click to toggle source
# File lib/raykit/project.rb, line 74
def directory
    @directory
end
elapsed() click to toggle source
# File lib/raykit/project.rb, line 178
def elapsed
    elapsed=@timer.elapsed
    if(elapsed < 1.0)
        "%.1f" % (@timer.elapsed) + "s"
    else
        "%.0f" % (@timer.elapsed) + "s"
    end
end
get_dev_dir(subdir) click to toggle source
# File lib/raykit/project.rb, line 56
def get_dev_dir(subdir)
    Raykit::Environment::get_dev_dir(subdir)
end
has_diff?(filename) click to toggle source
# File lib/raykit/project.rb, line 104
def has_diff?(filename)
    Dir.chdir(@directory) do
        text=`git diff #{filename}`.strip
        return true if(text.length > 0) 
    end    
end
info() click to toggle source
# File lib/raykit/project.rb, line 187
def info
    ljust=35
    puts ''
    puts "PROJECT.name".ljust(ljust) + Rainbow(PROJECT.name).yellow.bright
    puts "PROJECT.version".ljust(ljust) + Rainbow(PROJECT.version).yellow.bright
    puts "PROJECT.remote".ljust(ljust) + Rainbow(PROJECT.remote).yellow.bright
    puts "PROJECT.branch".ljust(ljust) + Rainbow(PROJECT.branch).yellow.bright
    #puts "PROJECT.target".ljust(ljust) + Rainbow(PROJECT.target).yellow.bright
    #puts "PROJECT.target_md5".ljust(ljust) + Rainbow(PROJECT.target_md5).yellow.bright
    puts "PROJECT.latest_tag".ljust(ljust) + Rainbow(PROJECT.latest_tag).yellow.bright
    puts "PROJECT.latest_tag_commit".ljust(ljust) + Rainbow(PROJECT.latest_tag_commit).yellow.bright
    puts "PROJECT.latest_tag_md5".ljust(ljust) + Rainbow(PROJECT.latest_tag_md5).yellow.bright
    puts "PROJECT.latest_commit".ljust(ljust) + Rainbow(PROJECT.latest_commit).yellow.bright
    puts "PROJECT.last_modified_filename".ljust(ljust) + Rainbow(PROJECT.last_modified_filename).yellow.bright
    #puts "PROJECT.elapsed".ljust(ljust) + Rainbow(PROJECT.elapsed).yellow.bright
    puts "PROJECT.size".ljust(ljust) + Rainbow(PROJECT.size).yellow.bright
    puts "PROJECT.size_pack".ljust(ljust) + Rainbow(PROJECT.size_pack).yellow.bright
    puts "PROJECT.outstanding_commit?".ljust(ljust) + Rainbow(PROJECT.outstanding_commit?).yellow.bright
    puts "PROJECT.outstanding_tag?".ljust(ljust) + Rainbow(PROJECT.outstanding_tag?).yellow.bright
    puts ''
    self
end
last_modified_filename() click to toggle source
# File lib/raykit/project.rb, line 150
def last_modified_filename
    Dir.chdir(@directory) do
        Dir.glob("**/*.*").select{|f| File.file?(f)}.max_by {|f| File.mtime(f)}
    end
end
latest_commit() click to toggle source

latest local commit

# File lib/raykit/project.rb, line 82
def latest_commit
    Dir.chdir(@directory) do
        text=`git log -n 1`
        scan=text.scan(/commit ([\w]+)\s/)
        return scan[0][0].to_s 
    end
end
latest_tag() click to toggle source

def update_version

@version=Raykit::Version.detect(@name,@verbose)

end

# File lib/raykit/project.rb, line 129
def latest_tag
    `git describe  --abbrev=0`.strip
end
latest_tag_commit() click to toggle source
# File lib/raykit/project.rb, line 133
def latest_tag_commit
    `git show-ref -s #{latest_tag}`.strip
end
latest_tag_md5() click to toggle source
# File lib/raykit/project.rb, line 137
def latest_tag_md5
    text=`git tag #{latest_tag} -n3`
    scan = text.scan(/md5=(\w{32})/)
    if(scan.length > 0 && scan[0].length > 0)
        return scan[0][0].to_s.strip
    end 
    ''
end
log() click to toggle source
# File lib/raykit/project.rb, line 60
def log
    @log
end
outstanding_commit?() click to toggle source
# File lib/raykit/project.rb, line 90
def outstanding_commit?
    Dir.chdir(@directory) do
        return true if(!`git status`.include?('nothing to commit'))
    end
    false
end
outstanding_tag?() click to toggle source
# File lib/raykit/project.rb, line 97
def outstanding_tag?
    #puts `git log -n 1`
    #!latest_tag_commit.eql?(latest_commit)
    #commit 2e4cb6d6c0721e16cd06afee85b7cdc27354921b (HEAD -> master, tag: 0.0.180, origin/master, origin/HEAD)
    outstanding_commit? || !`git log -n 1`.include?('tag:')
end
pull() click to toggle source
# File lib/raykit/project.rb, line 256
def pull
    Dir.chdir(@directory) do
        run('git pull')
    end
    self
end
push() click to toggle source
# File lib/raykit/project.rb, line 244
def push
    Dir.chdir(@directory) do
        status=`git status`
        if(status.include?('use "git push"'))
            run('git push')
            
            #run('git push --tags')
        end
    end
    self
end
remote() click to toggle source
# File lib/raykit/project.rb, line 146
def remote
    @remote
end
run(command,quit_on_failure=true) click to toggle source
# File lib/raykit/project.rb, line 285
def run(command,quit_on_failure=true) 
    #log.update_command_time(command,DateTime.now)
    if(command.kind_of?(Array))
        command.each{|subcommand| run(subcommand,quit_on_failure)}
    else
        cmd = Command.new(command)
        cmd.summary
        cmd.save
        elapsed_str = Timer.get_elapsed_str(cmd.elapsed,0)
        if(cmd.exitstatus == 0)
            #puts elapsed_str + " " +  Rainbow(cmd.command).yellow.bright
            #return elapsed_str + " " + cmd.command
        else
            # display error details
            puts cmd.output
            puts cmd.error
            puts
            if(quit_on_failure)
                abort Rainbow(elapsed_str).red.bright + " " +  Rainbow(cmd.command).white
            end
        end
        cmd
    end
end
size() click to toggle source
# File lib/raykit/project.rb, line 156
def size 
    Dir.chdir(@directory) do
        text =`git count-objects -v -H`
        if matches = text.match(/size: ([. \w]+)$/)
            matches[1]
        else
            text
        end
    end
end
size_pack() click to toggle source
# File lib/raykit/project.rb, line 167
def size_pack
    Dir.chdir(@directory) do
        text =`git count-objects -v -H`
        if matches = text.match(/size-pack: ([. \w]+)$/)
            matches[1]
        else
            text
        end
    end
end
summary() click to toggle source
# File lib/raykit/project.rb, line 210
def summary
    info if(@verbose)
    
    puts "[" + elapsed + "] " + Rainbow(@name).yellow.bright + " " + Rainbow(version).yellow.bright
end
tag() click to toggle source
# File lib/raykit/project.rb, line 263
def tag
    warn "[DEPRECATION] 'tag' is deprecated. Use run command(s) for better transparency."
    Dir.chdir(@directory) do
        specific_tag=`git tag -l #{@version}`.strip
        puts Rainbow("git tag - #{@version}").green if(@verbose)
        puts `git tag -l #{@version}` if(@verbose)
        if(specific_tag.length == 0)
            puts "tag #{@version} not detected." if(@verbose)
            tag = `git describe --abbrev=0 --tags`.strip
            if(@version != tag)
                puts "latest tag #{@tag}" if(@verbose)
                run("git tag #{@version} -m'#{@version}'")
                run("git push origin #{@version}")
                #push
            end
        else
            puts "already has tag #{specific_tag}" if(@verbose)
        end
    end
    self
end
target_md5() click to toggle source

def target

@target

end

# File lib/raykit/project.rb, line 67
def target_md5
    if(!target.nil? && File.exist?(target))
        return Digest::MD5.file(target).to_s.strip
    end
    ''
end
version() click to toggle source
# File lib/raykit/project.rb, line 111
def version
    if(@version.nil?)
        #Dir.chdir(@directory) do
        #    if(Dir.glob("*.gemspec").length > 0)
        #        @version=`bump current`.gsub('Current version:','').strip
        #    else
        #        @version=Raykit::VersionHelper.detect(@name,@verbose)
        #    end
        @version=Raykit::Version.detect(@name,@verbose)
        #end
    end
    @version
end