hubeye 0.3.3 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ module Hubeye
2
+ module Server
3
+ module Strategies
4
+
5
+ class Next
6
+ def call
7
+ socket.deliver ""
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ module Hubeye
2
+ module Server
3
+ module Strategies
4
+
5
+ class RmRepo
6
+ def call
7
+ if @options[:all]
8
+ rm_all
9
+ return
10
+ end
11
+ repo_name = @matches[1]
12
+ full_repo_name = server.full_repo_name(repo_name)
13
+ rm = tracker.delete(full_repo_name)
14
+ if rm
15
+ socket.deliver "Stopped watching repository #{full_repo_name}"
16
+ else
17
+ socket.deliver "Repository #{full_repo_name} not currently being watched"
18
+ end
19
+ end
20
+
21
+ def rm_all
22
+ if tracker.empty?
23
+ socket.deliver "Not watching any repositories"
24
+ return
25
+ end
26
+ repo_names = tracker.repo_names
27
+ tracker.clear
28
+ socket.deliver "Stopped watching repositories #{repo_names.join ', '}"
29
+ end
30
+ end # end of RmRepo
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ require 'yaml'
2
+
3
+ module Hubeye
4
+ module Server
5
+ module Strategies
6
+
7
+ class SaveHook
8
+ def call
9
+ hooks = session.hooks
10
+ if !hooks.empty?
11
+ file = "#{ENV['HOME']}/.hubeye/hooks/#{@matches[2]}.yml"
12
+ if File.exists? file
13
+ override?
14
+ end
15
+ File.open(file, "w") do |f_out|
16
+ YAML.dump(hooks, f_out)
17
+ end
18
+ socket.deliver "Saved hook#{@matches[1]} as #{@matches[2]}"
19
+ else
20
+ socket.deliver "No hook#{@matches[1]} to save"
21
+ end
22
+ end
23
+
24
+ private
25
+ def override?
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'yaml'
2
+
3
+ module Hubeye
4
+ module Server
5
+ module Strategies
6
+
7
+ class SaveRepo
8
+ def call
9
+ if !tracker.empty?
10
+ file = "#{ENV['HOME']}/.hubeye/repos/#{@matches[2]}.yml"
11
+ if File.exists? file
12
+ override?
13
+ end
14
+ # dump only the repository names, not the shas
15
+ File.open(file, "w") do |f_out|
16
+ YAML.dump(tracker.repo_names, f_out)
17
+ end
18
+ socket.deliver "Saved repo#{@matches[1]} as #{@matches[2]}"
19
+ else
20
+ socket.deliver "No remote repos are being tracked"
21
+ end
22
+ end
23
+
24
+ private
25
+ def override?
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ module Hubeye
2
+ module Server
3
+ module Strategies
4
+
5
+ class Shutdown
6
+ def call
7
+ Logger.log "Closing connection to #{socket.peeraddr[2]}"
8
+ Logger.log "Shutting down... (#{NOW})"
9
+ Logger.log ""
10
+ Logger.log ""
11
+ socket.deliver "Shutting down server"
12
+ sockets.delete(socket)
13
+ socket.close
14
+ unless server.daemonized
15
+ STDOUT.puts "Shutting down gracefully."
16
+ end
17
+ exit 0
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,89 @@
1
+ require File.expand_path('../commit', __FILE__)
2
+ require 'forwardable'
3
+ require 'json'
4
+ require 'open-uri'
5
+
6
+ module Hubeye
7
+ module Server
8
+ class Tracker
9
+ extend Forwardable
10
+ def_delegators :@commit_list, :[], :last, :first, :length, :each, :empty?, :clear
11
+ attr_reader :commit_list
12
+
13
+ def initialize
14
+ @commit_list = []
15
+ end
16
+
17
+ # returns one of:
18
+ # :added
19
+ # :replaced
20
+ # :unchanged
21
+ # :invalid
22
+ #
23
+ # A commit won't be added if the repo is already tracked
24
+ # and the newly searched for commit sha is the same as the
25
+ # old one. Every call to #add requires a trip to a Github
26
+ # server.
27
+ # NOTE: takes full repo_name only
28
+ def add(repo_name)
29
+ raw_commit_ary = recent_repo_info(repo_name)
30
+ return :invalid unless raw_commit_ary
31
+ commit = Commit.new(repo_name, raw_commit_ary)
32
+ if tracking?(repo_name) && unchanged?(commit)
33
+ return :unchanged
34
+ end
35
+ state = tracking?(repo_name) ? :replaced : :added
36
+ # update the list
37
+ @commit_list.reject! {|cmt| cmt.repo_name == repo_name} if state == :replaced
38
+ @commit_list << commit
39
+ state
40
+ end
41
+
42
+ alias << add
43
+
44
+ # returns true if deleted, false otherwise.
45
+ def delete(repo_name)
46
+ old_length = @commit_list.length
47
+ @commit_list.delete_if {|cmt| cmt.repo_name == repo_name}
48
+ new_length = @commit_list.length
49
+ old_length != new_length
50
+ end
51
+
52
+ # returns the most recently tracked commit object for that full repo
53
+ # name, or nil if it isn't tracked.
54
+ def commit(repo_name)
55
+ @commit_list.each {|cmt| return cmt if cmt.repo_name == repo_name}
56
+ nil
57
+ end
58
+ alias tracking? commit
59
+
60
+ # returns a list of repo names being tracked
61
+ def repo_names
62
+ @commit_list.map {|cmt| cmt.repo_name }
63
+ end
64
+
65
+ private
66
+ # a new_commit_obj is unchanged if it's sha is found to be in the
67
+ # commit_list
68
+ def unchanged?(new_commit_obj)
69
+ @commit_list.each {|cmt| return true if cmt.sha == new_commit_obj.sha}
70
+ false
71
+ end
72
+
73
+ def recent_repo_info(full_repo_name)
74
+ username, repo_name = full_repo_name.split '/'
75
+ info = nil
76
+ begin
77
+ open "https://api.github.com/repos/#{username}/" \
78
+ "#{repo_name}/commits" do |f|
79
+ info = JSON.parse f.read
80
+ end
81
+ rescue => e
82
+ return
83
+ end
84
+ info
85
+ end
86
+
87
+ end
88
+ end
89
+ end
@@ -1,28 +1,27 @@
1
1
  HUBEYE_ROOT_DIR = File.join(ENV['HOME'], '.hubeye')
2
- HUBEYE_REPOS_DIR = File.join(HUBEYE_ROOT_DIR, 'repos')
3
- HUBEYE_HOOKS_DIR = File.join(HUBEYE_ROOT_DIR, 'hooks')
4
- HUBEYE_LOG_FILE = File.join(HUBEYE_ROOT_DIR, 'log')
5
- HUBEYE_CONF_FILE = File.join(HUBEYE_ROOT_DIR, 'hubeyerc')
2
+ hubeye_repos_dir = File.join(HUBEYE_ROOT_DIR, 'repos')
3
+ hubeye_hooks_dir = File.join(HUBEYE_ROOT_DIR, 'hooks')
4
+ hubeye_log_file = File.join(HUBEYE_ROOT_DIR, 'log')
5
+ hubeye_conf_file = File.join(HUBEYE_ROOT_DIR, 'hubeyerc')
6
6
 
7
7
  task :install => :create_config_file do
8
8
  puts "Done"
9
9
  end
10
10
 
11
11
  task :create_config_file do
12
- touch HUBEYE_CONF_FILE unless File.exists? HUBEYE_CONF_FILE
12
+ touch hubeye_conf_file unless File.exists? hubeye_conf_file
13
13
  end
14
14
 
15
15
  task :create_config_file => :make_log
16
16
 
17
17
  task :make_log => :message do
18
18
  mkdir HUBEYE_ROOT_DIR unless File.exists? HUBEYE_ROOT_DIR
19
- mkdir HUBEYE_HOOKS_DIR unless File.exists? HUBEYE_HOOKS_DIR
20
- mkdir HUBEYE_REPOS_DIR unless File.exists? HUBEYE_REPOS_DIR
19
+ mkdir hubeye_hooks_dir unless File.exists? hubeye_hooks_dir
20
+ mkdir hubeye_repos_dir unless File.exists? hubeye_repos_dir
21
21
 
22
- touch HUBEYE_LOG_FILE unless File.exists? HUBEYE_LOG_FILE
22
+ touch hubeye_log_file unless File.exists? hubeye_log_file
23
23
  end
24
24
 
25
25
  task :message do
26
26
  puts "Installing hubeye..."
27
27
  end
28
-
@@ -0,0 +1,39 @@
1
+ module Test
2
+ module Helpers
3
+ module Server
4
+
5
+ class << $stdout
6
+ alias deliver puts
7
+ def close; end
8
+ def read_all
9
+ gets.chomp
10
+ end
11
+ def peeraddr
12
+ ['', '', '']
13
+ end
14
+ def addr
15
+ ''
16
+ end
17
+ end
18
+
19
+ def _test_client_connect(io_ary)
20
+ @socket = $stdin
21
+ # Inform the client of connection
22
+ basic_inform = "Hubeye running on #{Socket.gethostname} as #{@session.username}"
23
+ if !@session.tracker.empty?
24
+ @socket.deliver "#{basic_inform}\nTracking: #{@session.tracker.keys.join ', '}"
25
+ else
26
+ @socket.deliver basic_inform
27
+ end
28
+ puts "Client connected at #{NOW}" unless @daemonized
29
+ if @session.continuous
30
+ Logger.log "Accepted connection from STDIN (#{NOW})"
31
+ else
32
+ # wipe the log file and start fresh
33
+ Logger.relog "Accepted connection from STDIN (#{NOW})"
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubeye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-28 00:00:00.000000000Z
12
+ date: 2012-03-05 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: ! 'Keep your eye on new commits being pushed to Github through an
15
15
 
@@ -35,11 +35,25 @@ files:
35
35
  - lib/hubeye/notification/growl.rb
36
36
  - lib/hubeye/notification/gnomenotify.rb
37
37
  - lib/hubeye/notification/finder.rb
38
+ - lib/hubeye/server/strategies/add_repo.rb
39
+ - lib/hubeye/server/strategies/load_hook.rb
40
+ - lib/hubeye/server/strategies/rm_repo.rb
41
+ - lib/hubeye/server/strategies/add_hook.rb
42
+ - lib/hubeye/server/strategies/next.rb
43
+ - lib/hubeye/server/strategies/exit.rb
44
+ - lib/hubeye/server/strategies/save_repo.rb
45
+ - lib/hubeye/server/strategies/load_repo.rb
46
+ - lib/hubeye/server/strategies/decision.rb
47
+ - lib/hubeye/server/strategies/list_tracking.rb
48
+ - lib/hubeye/server/strategies/list_hooks.rb
49
+ - lib/hubeye/server/strategies/shutdown.rb
50
+ - lib/hubeye/server/strategies/save_hook.rb
38
51
  - lib/hubeye/server/server.rb
39
52
  - lib/hubeye/server/session.rb
53
+ - lib/hubeye/server/tracker.rb
40
54
  - lib/hubeye/server/commit.rb
41
- - lib/hubeye/hooks/executer.rb
42
- - lib/hubeye/hooks/git_hooks.rb
55
+ - lib/hubeye/hooks/git.rb
56
+ - lib/hubeye/hooks/command.rb
43
57
  - lib/hubeye/log/logger.rb
44
58
  - lib/hubeye/shared/hubeye_protocol.rb
45
59
  - lib/hubeye/helpers/time.rb
@@ -53,6 +67,7 @@ files:
53
67
  - test/test_helper.rb
54
68
  - test/integration.rb
55
69
  - test/environment.rb
70
+ - test/helpers/server.rb
56
71
  - test/notification.rb
57
72
  - images/change_icon.jpg
58
73
  - tasks/install.rb
@@ -1,19 +0,0 @@
1
- module Hubeye
2
- module Hooks
3
- module Default
4
-
5
- def self.fetch(local_reponame, remotename, branchname)
6
- Dir.chdir(File.expand_path(local_reponame)) do
7
- ::Kernel.system("git fetch #{remotename} #{branchname}")
8
- end
9
- end
10
-
11
- def self.pull(local_reponame, remotename, branchname)
12
- Dir.chdir(File.expand_path(local_reponame)) do
13
- ::Kernel.system("git pull #{remotename} #{branchname}")
14
- end
15
- end
16
-
17
- end
18
- end
19
- end