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

Returns a new instance of 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



85
86
87
88
89
90
91
# File 'lib/raykit/git/directory.rb', line 85

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



57
58
59
60
61
# File 'lib/raykit/git/directory.rb', line 57

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



64
65
66
67
68
69
# File 'lib/raykit/git/directory.rb', line 64

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

#outstanding_commit?Boolean

Returns:

  • (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
53
54
55
# File 'lib/raykit/git/directory.rb', line 29

def rake(task)
    debug=false
    sub_dir='work'
    sub_dir='make' if(@directory.include?('/make/'))
    rake_log=repository.get_dev_dir('log') + "/#{sub_dir}.rake.#{task}.json"

    puts "log filename #{rake_log}" if(debug)
    if(File.exist?(rake_log))
        if(File.mtime(rake_log) > last_modified_time)
            puts "using logged data" if(debug)
            cmd=Raykit::Command::parse(File.read(rake_log))
            cmd.summary
            return
        end
    end

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

#remoteObject



100
101
102
103
104
105
106
107
108
109
# File 'lib/raykit/git/directory.rb', line 100

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



93
94
95
96
97
98
# File 'lib/raykit/git/directory.rb', line 93

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

#user_can_commitObject



79
80
81
82
83
# File 'lib/raykit/git/directory.rb', line 79

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

#user_emailObject



75
76
77
# File 'lib/raykit/git/directory.rb', line 75

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

#user_nameObject



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

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