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



123
124
125
126
127
128
129
# File 'lib/raykit/git/directory.rb', line 123

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

#detached?Boolean

Returns:

  • (Boolean)


23
24
25
26
27
28
29
30
31
32
# File 'lib/raykit/git/directory.rb', line 23

def detached?
    Dir.chdir(directory) do
        status=`git status`.strip
        if status.include?('detached')
            true
        else
            false
        end
    end
end

#get_sha(filename) ⇒ Object



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

def get_sha(filename)
    if File.exists?(filename)
        Digest::SHA256.file(filename).hexdigest.to_s
    else
        "#{filename} not found"
    end
    #''
end

#get_tag_commit_id(name) ⇒ Object



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

def get_tag_commit_id(name)
    cmd = Raykit::Command.new("git rev-parse \"#{name}\"")
    if !cmd.output.include?('fatal') && !cmd.error.include?('fatal')
        cmd.output.strip()
    else
        ''
    end
end

#last_modified_timeObject



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

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



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

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



34
35
36
37
38
39
40
41
42
# File 'lib/raykit/git/directory.rb', line 34

def pull
    Dir.chdir(directory) do
        diff=`git diff`.strip
        status=`git status`.strip
        if(diff.length == 0 && status.include?('nothing to commit'))
            PROJECT.run('git pull',false)
        end
    end
end

#rake(task) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/raykit/git/directory.rb', line 44

def rake(task)

    if(!Dir.exist?(@directory))
        puts 'directory not found.'
        return 1
    end
    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



138
139
140
141
142
143
144
145
146
147
# File 'lib/raykit/git/directory.rb', line 138

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



131
132
133
134
135
136
# File 'lib/raykit/git/directory.rb', line 131

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

#user_can_commitObject



117
118
119
120
121
# File 'lib/raykit/git/directory.rb', line 117

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

#user_emailObject



113
114
115
# File 'lib/raykit/git/directory.rb', line 113

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

#user_nameObject



109
110
111
# File 'lib/raykit/git/directory.rb', line 109

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