git-log-time 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d964187d34c769eb2aa72705e51cb19fbd24326c
4
+ data.tar.gz: c4d9abf90f3869c4dbe96fcd01291f64b288f9c8
5
+ SHA512:
6
+ metadata.gz: afe7cb11aa6da8fb63cd276dc131c1a5a911a2e8f630d93ac21854f14dc72a3606198e47d1e3f3eec81cd9889a3d0adfc2f04ddf8835f4396955fe347f97c28f
7
+ data.tar.gz: 97dd2dc943628dfb1c969a6088cb78ce4a05425aff492714a3b431b7ece76d56ec1455e8c6554302892a3f2990ea175c21bf2f108661c885072210589cf11bbc
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'git-log-time'
4
+ require 'git-log-time/cli'
5
+
6
+ repo_root = `git rev-parse --show-toplevel`.strip
7
+ abort "No .git directory found." unless File.directory?(repo_root)
8
+ Dir.chdir repo_root
9
+ GitLogTime::Cli.new(*ARGV).execute or exit 1
@@ -0,0 +1,2 @@
1
+ module GitLogTime
2
+ end
@@ -0,0 +1,57 @@
1
+ require 'fileutils'
2
+ require 'git-log-time/installer'
3
+
4
+ module GitLogTime
5
+
6
+ TemplateNotFound = Class.new(StandardError)
7
+
8
+ class Cli
9
+
10
+ def initialize(*args)
11
+ @args = args
12
+ end
13
+
14
+ def execute()
15
+ action_name = @args.shift or 'help'
16
+ action = :"execute_#{action_name}"
17
+ if respond_to?(action)
18
+ then send(action, *@args)
19
+ else execute_help(action_name, *@args)
20
+ end
21
+ end
22
+
23
+ def execute_help(*args)
24
+ warn "Usage: git-log-time install"
25
+ warn "Usage: git-log-time uninstall"
26
+ args.empty? # return status, it's ok if user requested help
27
+ end
28
+
29
+ def execute_install(key = nil, *args)
30
+ ['post-commit', 'pre-push' ].each do |key|
31
+ GitLogTime::Installer.new(key).install
32
+ end
33
+ end
34
+
35
+ def execute_uninstall(key = nil, *args)
36
+ ['post-commit', 'pre-push' ].each do |key|
37
+ GitLogTime::Installer.new(key).uninstall
38
+ end
39
+ end
40
+
41
+ def execute_new(*args)
42
+ GitLogTime::Template.new(*args).save
43
+ rescue ArgumentError => e
44
+ warn e
45
+ warn "Usage: git-log-time new plugin-name 'Author Name' author@email 'description of the plugin'"
46
+ end
47
+
48
+ def config
49
+ @config ||= GitLogTime::Configuration.new(GitLogTime.pluginator)
50
+ end
51
+
52
+ def list_evaluator
53
+ @list_evaluator ||= GitLogTime::ListEvaluator.new(config)
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,72 @@
1
+ require 'fileutils'
2
+
3
+ module GitLogTime
4
+
5
+ class Installer
6
+
7
+ TARGET_GIT_PATH = '.git'
8
+ TARGET_HOOKS_PATH = 'hooks/'
9
+ TEMPLATE_DIR = File.expand_path("../../../templates/hooks/", __FILE__)
10
+
11
+ attr_reader :key
12
+
13
+ def initialize(key = nil)
14
+ @key = key || "default"
15
+ end
16
+
17
+ def hook
18
+ templates[key.sub(/^--/, "")]
19
+ end
20
+
21
+ def target
22
+ target_git_path =
23
+ if File.directory?(TARGET_GIT_PATH)
24
+ then TARGET_GIT_PATH
25
+ else File.readlines('.git').first.match(/gitdir: (.*)$/)[1]
26
+ end
27
+ File.join(target_git_path, (TARGET_HOOKS_PATH + key))
28
+ end
29
+
30
+ def install
31
+ if
32
+ hook
33
+ then
34
+ FileUtils.cp(target, target+ ".backup") if File.exist?(target)
35
+ FileUtils.mkdir_p(File.dirname(target))
36
+ FileUtils.cp(hook, target)
37
+ FileUtils.chmod(0755, target)
38
+ puts "Installed #{hook} to #{target}"
39
+ true
40
+ else
41
+ warn "Could not find template #{key}"
42
+ false
43
+ end
44
+ end
45
+
46
+ def uninstall
47
+ back_up_path = target+ ".backup"
48
+ if File.exist?(back_up_path)
49
+ FileUtils.mv(back_up_path, target)
50
+ puts "Installed #{back_up_path} to #{target}"
51
+ else
52
+ puts "Git-log-time not Installed"
53
+ end
54
+ true
55
+ end
56
+
57
+ private
58
+
59
+ def templates
60
+ return @templates if @templates
61
+ pattern = File.join(TEMPLATE_DIR, "*")
62
+
63
+ @templates =
64
+ Dir.glob(pattern).inject({}) do |hash, file|
65
+ key = file.match(/\/([^\/]+?)$/)[1]
66
+ hash[key] = file
67
+ hash
68
+ end
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ STDIN.reopen('/dev/tty')
3
+ require 'json'
4
+
5
+ class String
6
+ def red; "\e[31m#{self}\e[0m" end
7
+ def green; "\e[32m#{self}\e[0m" end
8
+ end
9
+
10
+ begin
11
+ puts "Please enter the time spent for this commit:"
12
+ time = Integer(gets) rescue false
13
+ puts "Please enter Integer".red unless time
14
+ end until time
15
+
16
+ puts "Thanks for logging the time -> #{time}".green
17
+ outputfile="#{Dir.pwd}/.git/hooks/outputfile.json"
18
+ origin_url = `git config --get remote.origin.url`
19
+ unless (origin_url.include?('https://') || origin_url.include?('http://'))
20
+ origin_url = origin_url.gsub("git@", "http://").gsub(".git","").gsub(".com:", ".com/")
21
+ else
22
+ origin_url = origin_url.gsub(".git","")
23
+ end
24
+ commit_id = `git log --format='%H' -n 1`.chomp.strip
25
+ commit_url = origin_url+"/commit/#{commit_id}"
26
+ commit_info={
27
+ "id"=> commit_id,
28
+ "tree_id"=> `git log --format='%T' -n 1`.chomp.strip,
29
+ "message"=> `git log --format='%s' -n 1`.chomp.strip,
30
+ "timestamp"=> `git log --format='%ad' -n 1`.chomp.strip,
31
+ "url"=> commit_url,
32
+ "author"=> {
33
+ "name"=> `git log --format='%an' -n 1`.chomp.strip,
34
+ "email"=> `git log --format='%ae' -n 1`.chomp.strip,
35
+ },
36
+ "committer"=> {
37
+ "name"=> `git log --format='%cn' -n 1`.chomp.strip,
38
+ "email"=> `git log --format='%ce' -n 1`.chomp.strip,
39
+ },
40
+ "commit_time"=> time,
41
+ "origin_url"=> origin_url,
42
+ "modified"=> [`git diff-tree --no-commit-id --name-only -r "#{commit_id}"`.chomp.strip.split("\n")]
43
+ }
44
+ if File.exist?(outputfile)
45
+ commit_infos = JSON.parse(IO.read(outputfile)).map{|cm| cm.to_json }
46
+ commit_infos << commit_info.to_json
47
+ File.open(outputfile, 'w') {
48
+ | f| f.write("#{commit_infos}")
49
+ }
50
+ else
51
+ File.open(outputfile, 'a') {
52
+ | f| f.write("[#{commit_info.to_json}]")
53
+ }
54
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'uri'
5
+ require 'dotenv'
6
+ Dotenv.load
7
+
8
+ class String
9
+ def red; "\e[31m#{self}\e[0m" end
10
+ def green; "\e[32m#{self}\e[0m" end
11
+ end
12
+
13
+ outputfile="#{Dir.pwd}/.git/hooks/outputfile.json"
14
+ begin
15
+ if File.exist?(outputfile)
16
+ puts "Sending commits to spritle dashboard .......".green
17
+ origin_url = `git config --get remote.origin.url`
18
+ unless (origin_url.include?('https://') || origin_url.include?('http://'))
19
+ origin_url = origin_url.gsub("git@", "http://").gsub(".git","").gsub(".com:", ".com/")
20
+ else
21
+ origin_url = origin_url.gsub(".git","")
22
+ end
23
+ log_time_values = {"commits" => [], "origin_url" => origin_url }
24
+ log_time_values["commits"] = File.read(outputfile)
25
+ url = ENV["GIT_LOG_TIME_CALLBACK_URL"]
26
+ uri = URI.parse(url)
27
+ data = {"name" => "tbone"}
28
+ headers = {"Content-Type" => "application/json"}
29
+ http = Net::HTTP.new(uri.host,uri.port)
30
+ response = http.post(uri.path,log_time_values.to_json,headers)
31
+ if response.body["success"]
32
+ File.delete(outputfile)
33
+ end
34
+ end
35
+ rescue => e
36
+ puts "#{e}".red
37
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-log-time
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Siva
8
+ - Suren
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-06-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: dotenv-rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.0'
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.0.2
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - "~>"
29
+ - !ruby/object:Gem::Version
30
+ version: '1.0'
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.2
34
+ description: git log time is used get time from user for each commit
35
+ email:
36
+ - siva.kb@spritle.com
37
+ - surendrans@spritle.com
38
+ executables:
39
+ - git-log-time
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - bin/git-log-time
44
+ - lib/git-log-time.rb
45
+ - lib/git-log-time/cli.rb
46
+ - lib/git-log-time/installer.rb
47
+ - templates/hooks/post-commit
48
+ - templates/hooks/pre-push
49
+ homepage: https://github.com/sivakb/git-log-time
50
+ licenses:
51
+ - MIT
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.4.5
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: git log time
73
+ test_files: []