Class: Raykit::Git::Directory

Inherits:
Object
  • Object
show all
Defined in:
lib/raykit/git/directory.rb

Overview

Functionality to manage a local clone of a git repository

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(directory) ⇒ Directory



9
10
11
# File 'lib/raykit/git/directory.rb', line 9

def initialize(directory)
    @directory=directory
end

Instance Attribute Details

#directoryObject

The directory name of the local repository clone



6
7
8
# File 'lib/raykit/git/directory.rb', line 6

def directory
  @directory
end

Instance Method Details

#branchObject



82
83
84
85
86
87
88
# File 'lib/raykit/git/directory.rb', line 82

def branch
    Dir.chdir(directory) do
        scan=`git branch`.scan(/\*\s([\w\.-]+)/)
        return scan[0][0].to_s if(!scan.nil? && scan.length > 0 && scan[0].length > 0)
    end
    'master'
end

#last_modified_timeObject



54
55
56
57
58
# File 'lib/raykit/git/directory.rb', line 54

def last_modified_time
    Dir.chdir(@directory) do
        File.mtime(Dir.glob("**/*.*").select{|f| File.file?(f)}.max_by {|f| File.mtime(f)})
    end
end

#latest_tag(branch) ⇒ Object

The latest tag for a branch of the repository



61
62
63
64
65
66
# File 'lib/raykit/git/directory.rb', line 61

def latest_tag(branch)
    Dir.chdir(directory) do
        return `git describe --abbrev=0`.strip
    end
    ''
end

#outstanding_commit?Boolean



13
14
15
16
17
18
19
20
21
# File 'lib/raykit/git/directory.rb', line 13

def outstanding_commit?
    Dir.chdir(directory) do
        if(user_can_commit)
            return !`git status`.include?('nothing to commit,')
        else
            return false
        end
    end
end

#pullObject



23
24
25
26
27
# File 'lib/raykit/git/directory.rb', line 23

def pull
    Dir.chdir(directory) do
        PROJECT.run('git pull')
    end
end

#rake(task) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/raykit/git/directory.rb', line 29

def rake(task)
    sub_dir='work'
    sub_dir='make' if(@directory.include?('/make/'))
    rake_log=repository.get_dev_dir('log') + "/#{sub_dir}.rake.#{task}.json"
    if(File.exist?(rake_log))
        if(File.mtime(rake_log) > last_modified_time)
            cmd=Raykit::Command::parse(File.read(rake_log))
            puts 'up to date'
            return
        end
    end

    Dir.chdir(@directory) do
        if(File.exist?('rakefile.rb'))
            cmd = PROJECT.run("rake #{task}")
            if(cmd.exitstatus == 0)
                FileUtils.mkdir_p(File.dirname(rake_log))
                File.open(rake_log, 'w') {|f| f.write(JSON.generate(cmd.to_hash)) }
            end
        else
            puts 'rakefile.rb not found'
        end
    end
end

#remoteObject



97
98
99
100
101
102
103
104
105
106
# File 'lib/raykit/git/directory.rb', line 97

def remote
    if(Dir.exist?(directory))
        Dir.chdir(directory) do
            if(Dir.exist?('.git'))
                return Command.new('git config --get remote.origin.url').output.strip 
            end
        end
    end
    ""
end

#repositoryObject



90
91
92
93
94
95
# File 'lib/raykit/git/directory.rb', line 90

def repository
    if(@repository.nil?)
        @repository = Raykit::Git::Repository.new(remote)
    end
    @repository
end

#user_can_commitObject



76
77
78
79
80
# File 'lib/raykit/git/directory.rb', line 76

def user_can_commit
    return false if(user_name.length == 0)
    return false if(user_email.length == 0)
    return true
end

#user_emailObject



72
73
74
# File 'lib/raykit/git/directory.rb', line 72

def user_email
    `git config --get user.email`.strip
end

#user_nameObject



68
69
70
# File 'lib/raykit/git/directory.rb', line 68

def user_name
    `git config --get user.name`.strip
end