gitjour 5.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,8 +7,8 @@ Rakefile
7
7
  config/hoe.rb
8
8
  config/requirements.rb
9
9
  lib/gitjour.rb
10
+ lib/gitjour/application.rb
10
11
  lib/gitjour/version.rb
11
- log/debug.log
12
12
  script/destroy
13
13
  script/generate
14
14
  script/txt2html
data/README.txt CHANGED
@@ -1 +1,8 @@
1
- README
1
+ README
2
+
3
+ DEVELOPMENT
4
+
5
+ How to test from the console:
6
+
7
+ irb -r 'lib/gitjour/application'
8
+ > Gitjour::Application.run "list"
@@ -1,58 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
- require 'dnssd'
4
- require 'set'
5
- Thread.abort_on_exception = true
6
-
7
- GitService = Struct.new(:name, :host, :description)
8
-
9
- def service_list(looking_for = nil)
10
- wait_seconds = 5
11
-
12
- service_list = Set.new
13
- waiting_thread = Thread.new { sleep wait_seconds }
14
-
15
- service = DNSSD.browse "_git._tcp" do |reply|
16
- DNSSD.resolve reply.name, reply.type, reply.domain do |resolve_reply|
17
- service_list << GitService.new(reply.name, resolve_reply.target, resolve_reply.text_record['description'])
18
- if looking_for && reply.name == looking_for
19
- waiting_thread.kill
20
- end
21
- end
22
- end
23
- puts "Gathering for up to #{wait_seconds} seconds..."
24
- waiting_thread.join
25
- service.stop
26
- service_list
3
+ require 'gitjour'
4
+ trap "INT" do
5
+ exit!
27
6
  end
28
-
29
- case ARGV.shift
30
- when "list"
31
- service_list.each do |service|
32
- puts "#{service.name} on #{service.host}: gitjour clone #{service.name}"
33
- puts " #{service.description}" if service.description && service.description != ''
34
- end
35
- when "clone"
36
- name_of_share = ARGV.shift || fail("You have to pass in a name")
37
- host = service_list(name_of_share).detect{|service| service.name == name_of_share}.host
38
- system("git clone git://#{host}/ #{name_of_share}")
39
- when "serve"
40
- name = ARGV.shift || File.basename(Dir.pwd)
41
- tr = DNSSD::TextRecord.new
42
- tr['description'] = File.read(".git/description") rescue "a git project"
43
- DNSSD.register(name, "_git._tcp", 'local', 9148, tr.encode) do |register_reply|
44
- p register_reply
45
- end
46
- `git-daemon --verbose --export-all --base-path=#{Dir.pwd}`
47
- else
48
- puts "Serve up and use git repositories via Bonjour/DNSSD."
49
- puts "Usage: gitjour <command> [name]"
50
- puts
51
- puts " list Lists available repositories."
52
- puts " clone Clone a gitjour served repository."
53
- puts " serve Serve up the current directory via gitjour."
54
- puts " Optionally pass name to not use pwd."
55
- puts
56
- end
57
-
58
-
7
+ Gitjour::Application.run(*ARGV)
@@ -1,5 +1 @@
1
- $:.unshift File.dirname(__FILE__)
2
-
3
- module Gitjour
4
-
5
- end
1
+ require 'gitjour/application'
@@ -0,0 +1,95 @@
1
+ require 'rubygems'
2
+ require 'dnssd'
3
+ require 'set'
4
+ Thread.abort_on_exception = true
5
+
6
+ module Gitjour
7
+ GitService = Struct.new(:name, :host, :description)
8
+ class Application
9
+
10
+ class << self
11
+ def run(operation = nil, argument = nil)
12
+ case operation
13
+ when "list"
14
+ service_list.each do |service|
15
+ puts "=== #{service.name} on #{service.host} ==="
16
+ puts " gitjour clone #{service.name}"
17
+ puts " #{service.description}" if service.description && service.description != '' && service.description !~ /^Unnamed repository/
18
+ puts
19
+ end
20
+ when "clone"
21
+ clone(repository_name)
22
+ when "serve"
23
+ serve(argument)
24
+ else
25
+ help
26
+ end
27
+ end
28
+
29
+ private
30
+ def clone(repository_name)
31
+ name_of_share = repository_name || fail("You have to pass in a name")
32
+ host = service_list(name_of_share).detect{|service| service.name == name_of_share}.host rescue exit_with!("Couldn't find #{name_of_share}")
33
+ system("git clone git://#{host}/ #{name_of_share}/")
34
+
35
+ end
36
+ def serve(path)
37
+ path ||= Dir.pwd
38
+ path = File.expand_path(path)
39
+ File.exists?("#{path}/.git") ? announce_repo(path) : Dir["#{path}/*"].each{|dir| announce_repo(dir) if File.directory?(dir)}
40
+ `git-daemon --verbose --export-all --base-path=#{path} --base-path-relaxed`
41
+ end
42
+
43
+ def help
44
+ puts "Serve up and use git repositories via Bonjour/DNSSD."
45
+ puts "Usage: gitjour <command> [name]"
46
+ puts
47
+ puts " list Lists available repositories."
48
+ puts " clone Clone a gitjour served repository."
49
+ puts " serve Serve up the current directory via gitjour."
50
+ puts " Optionally pass name to not use pwd."
51
+ puts
52
+ end
53
+
54
+ def exit_with!(message)
55
+ STDERR.puts message
56
+ exit!
57
+ end
58
+
59
+ def service_list(looking_for = nil)
60
+ wait_seconds = 5
61
+
62
+ service_list = Set.new
63
+ waiting_thread = Thread.new { sleep wait_seconds }
64
+
65
+ service = DNSSD.browse "_git._tcp" do |reply|
66
+ DNSSD.resolve reply.name, reply.type, reply.domain do |resolve_reply|
67
+ service_list << GitService.new(reply.name, resolve_reply.target, resolve_reply.text_record['description'])
68
+ if looking_for && reply.name == looking_for
69
+ waiting_thread.kill
70
+ end
71
+ end
72
+ end
73
+ puts "Gathering for up to #{wait_seconds} seconds..."
74
+ waiting_thread.join
75
+ service.stop
76
+ service_list
77
+ end
78
+
79
+ def announce_repo(path)
80
+ return unless File.exists?("#{path}/.git")
81
+ name = "#{File.basename(path)}"
82
+ tr = DNSSD::TextRecord.new
83
+ tr['description'] = File.read(".git/description") rescue "a git project"
84
+ DNSSD.register(name, "_git._tcp", 'local', 9148, tr.encode) do |register_reply|
85
+ puts "Registered #{name}. Starting service."
86
+ end
87
+ end
88
+ end
89
+
90
+
91
+ end
92
+ end
93
+
94
+
95
+
@@ -1,6 +1,6 @@
1
1
  module Gitjour #:nodoc:
2
2
  module VERSION #:nodoc:
3
- MAJOR = 5
3
+ MAJOR = 6
4
4
  MINOR = 0
5
5
  TINY = 0
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitjour
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chad Fowler
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2008-05-29 00:00:00 -07:00
14
+ date: 2008-05-31 00:00:00 -07:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -45,8 +45,8 @@ files:
45
45
  - config/hoe.rb
46
46
  - config/requirements.rb
47
47
  - lib/gitjour.rb
48
+ - lib/gitjour/application.rb
48
49
  - lib/gitjour/version.rb
49
- - log/debug.log
50
50
  - script/destroy
51
51
  - script/generate
52
52
  - script/txt2html
File without changes