public
Description: Piston is a utility that eases vendor branch management. This repository is a complete reimplementation of Piston to provide different backends, depending on the repositories and working copies you pistonize from.
Homepage: http://piston.rubyforge.org/
Clone URL: git://github.com/francois/piston.git
Search Repo:
Made Piston::Svn::Client and Piston::Git::Client singleton classes instead 
of modules.

This allowed me to reference a different logger for the clients.
francois (author)
Mon Mar 24 20:47:27 -0700 2008
commit  02a591a67bc50e748ef1dad08674f579b75c2565
tree    db63a67cdd7f01ac3b2ce7034efe64b018b90885
parent  6aebe681a85685860e5a7d5d33728a33799f3188
...
98
99
100
101
 
102
103
104
...
98
99
100
 
101
102
103
104
0
@@ -98,7 +98,7 @@
0
 
0
     Log4r::Logger.new("main", Log4r::DEBUG)
0
     Log4r::Logger.new("handler", Log4r::DEBUG)
0
- Log4r::Logger.new("handler::backend", Log4r::DEBUG)
0
+ Log4r::Logger.new("handler::client", Log4r::DEBUG)
0
 
0
     Log4r::StderrOutputter.new("console", :level => Log4r::WARN)
0
     Log4r::StdoutOutputter.new("main", :level => params["verbose"].value ? Log4r::DEBUG : Log4r::INFO)
...
 
 
1
2
3
 
 
 
4
5
6
7
 
 
 
 
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
22
23
24
25
26
27
 
28
29
30
31
...
44
45
46
47
48
49
50
51
52
53
...
1
2
3
4
 
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
 
 
 
20
21
22
23
24
 
25
26
27
28
29
30
 
31
32
33
34
35
...
48
49
50
 
51
52
 
53
54
55
0
@@ -1,30 +1,34 @@
0
+require "singleton"
0
+
0
 module Piston
0
   module Git
0
- module Client
0
+ class Client
0
+ include Singleton
0
+
0
       class CommandError < RuntimeError; end
0
       class Failed < CommandError; end
0
       class BadCommand < CommandError; end
0
 
0
+ def logger
0
+ @logger ||= Log4r::Logger["handler::client"]
0
+ end
0
+
0
       def git(*args)
0
         run_cmd :git, *args
0
       end
0
 
0
- def debug(&block)
0
- logger.debug(&block) if logger
0
- end
0
-
0
       private
0
       def run_cmd(executable, *args)
0
         args.collect! {|arg| arg =~ /\s|\*|\?|"|\n|\r/ ? %Q('#{arg}') : arg}
0
         args.collect! {|arg| arg ? arg : '""'}
0
         cmd = %Q|#{executable} #{args.join(' ')}|
0
- debug {cmd}
0
+ logger.debug {"> " + cmd}
0
 
0
         original_language = ENV["LANGUAGE"]
0
         begin
0
           ENV["LANGUAGE"] = "C"
0
           value = run_real(cmd)
0
- debug {value} unless (value || "").strip.empty?
0
+ logger.debug {"< " + value} unless (value || "").strip.empty?
0
           return value
0
         ensure
0
           ENV["LANGUAGE"] = original_language
0
0
@@ -44,10 +48,8 @@
0
 
0
         def run_real(cmd)
0
           begin
0
- debug {"> #{cmd.inspect}"}
0
             pid, stdin, stdout, stderr = Open4::popen4(cmd)
0
             _, cmdstatus = Process.waitpid2(pid)
0
- debug {"> #{cmdstatus.inspect}, success? #{cmdstatus.success?}, status: #{cmdstatus.exitstatus}"}
0
             return stdout.read if cmd =~ /status/ && cmdstatus.exitstatus == 1
0
             raise CommandError, "#{cmd.inspect} exited with status: #{cmdstatus.exitstatus}\n#{stderr.read}" unless cmdstatus.success?
0
             return stdout.read
...
5
6
7
8
9
10
11
 
 
 
 
 
 
 
 
12
13
14
...
5
6
7
 
 
 
8
9
10
11
12
13
14
15
16
17
18
19
0
@@ -5,10 +5,15 @@
0
 module Piston
0
   module Git
0
     class Commit < Piston::Revision
0
- extend Piston::Git::Client
0
- def git(*args); self.class.git(*args); end
0
-
0
       alias_method :commit, :revision
0
+
0
+ def client
0
+ @client ||= Piston::Git::Client.instance
0
+ end
0
+
0
+ def git(*args)
0
+ client.git(*args)
0
+ end
0
 
0
       def checkout_to(dir)
0
         @dir = dir
...
4
5
6
7
8
9
10
11
12
...
22
23
24
 
 
 
 
 
 
 
 
 
 
 
 
25
26
27
...
4
5
6
 
 
 
7
8
9
...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
0
@@ -4,9 +4,6 @@
0
 module Piston
0
   module Git
0
     class Repository < Piston::Repository
0
- extend Piston::Git::Client
0
- def git(*args); self.class.git(*args); end
0
-
0
       Piston::Repository.add_handler self
0
 
0
       class << self
0
@@ -22,6 +19,18 @@
0
             false
0
           end
0
         end
0
+
0
+ def client
0
+ @@client ||= Piston::Git::Client.instance
0
+ end
0
+
0
+ def git(*args)
0
+ client.git(*args)
0
+ end
0
+ end
0
+
0
+ def git(*args)
0
+ self.class.git(*args)
0
       end
0
 
0
       def at(commit)
...
4
5
6
7
8
9
10
11
12
...
26
27
28
29
 
30
31
32
...
35
36
37
 
 
 
 
 
 
 
 
 
 
 
 
38
39
40
...
4
5
6
 
 
 
7
8
9
...
23
24
25
 
26
27
28
29
...
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
0
@@ -4,9 +4,6 @@
0
 module Piston
0
   module Git
0
     class WorkingCopy < Piston::WorkingCopy
0
- extend Piston::Git::Client
0
- def git(*args); self.class.git(*args); end
0
-
0
       # Register ourselves as a handler for working copies
0
       Piston::WorkingCopy.add_handler self
0
 
0
@@ -26,7 +23,7 @@
0
               retry unless path.to_s == "/"
0
               return false
0
             end
0
- rescue BadCommand
0
+ rescue Piston::Git::Client::BadCommand
0
             # NOP, as we return false below
0
           rescue Piston::Git::Client::CommandError
0
             # This is certainly not a Git repository
0
@@ -35,6 +32,18 @@
0
 
0
           false
0
         end
0
+
0
+ def client
0
+ @@client ||= Piston::Git::Client.instance
0
+ end
0
+
0
+ def git(*args)
0
+ client.git(*args)
0
+ end
0
+ end
0
+
0
+ def git(*args)
0
+ self.class.git(*args)
0
       end
0
 
0
       def create
...
 
 
1
2
3
 
 
 
4
5
6
7
 
 
 
 
8
9
10
11
12
...
21
22
23
24
25
26
27
28
29
30
31
32
33
 
34
35
36
37
38
39
 
40
41
42
...
1
2
3
4
 
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
29
30
31
 
 
 
 
32
33
34
35
36
 
37
38
39
40
41
42
 
43
44
45
46
0
@@ -1,10 +1,18 @@
0
+require "singleton"
0
+
0
 module Piston
0
   module Svn
0
- module Client
0
+ class Client
0
+ include Singleton
0
+
0
       class CommandError < RuntimeError; end
0
       class Failed < CommandError; end
0
       class BadCommand < CommandError; end
0
 
0
+ def logger
0
+ @logger ||= Log4r::Logger["handler::client"]
0
+ end
0
+
0
       def svnadmin(*args)
0
         run_cmd :svnadmin, *args
0
       end
0
0
0
@@ -21,22 +29,18 @@
0
         run_cmd :svnversion, *args
0
       end
0
 
0
- def debug(&block)
0
- logger.debug(&block) if logger
0
- end
0
-
0
       private
0
       def run_cmd(executable, *args)
0
         args.collect! {|arg| arg =~ /\s|\*|\?|"|\n|\r/ ? %Q('#{arg}') : arg}
0
         args.collect! {|arg| arg ? arg : '""'}
0
         cmd = %Q|#{executable} #{args.join(' ')}|
0
- debug {cmd}
0
+ logger.debug {"> " + cmd}
0
 
0
         original_language = ENV["LANGUAGE"]
0
         begin
0
           ENV["LANGUAGE"] = "C"
0
           value = run_real(cmd)
0
- debug {value} unless (value || "").strip.empty?
0
+ logger.debug {"< " + value} unless (value || "").strip.empty?
0
           return value
0
         ensure
0
           ENV["LANGUAGE"] = original_language
...
3
4
5
6
7
8
9
10
11
...
23
24
25
 
 
 
 
 
 
 
 
26
27
28
29
30
31
32
33
34
35
36
...
3
4
5
 
 
6
7
8
9
...
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
 
 
36
37
38
0
@@ -3,8 +3,6 @@
0
 module Piston
0
   module Svn
0
     class Repository < Piston::Repository
0
- extend Piston::Svn::Client
0
-
0
       # Register ourselves as a repository handler
0
       Piston::Repository.add_handler self
0
 
0
0
@@ -23,14 +21,18 @@
0
             # Let someone else handle it
0
           end
0
         end
0
+
0
+ def client
0
+ @@client ||= Piston::Svn::Client.instance
0
+ end
0
+
0
+ def svn(*args)
0
+ client.svn(*args)
0
+ end
0
       end
0
 
0
       def svn(*args)
0
         self.class.svn(*args)
0
- end
0
-
0
- def svnadmin(*args)
0
- self.class.svnadmin(*args)
0
       end
0
 
0
       def at(revision)
...
4
5
6
7
 
 
 
 
 
 
 
8
9
10
...
4
5
6
 
7
8
9
10
11
12
13
14
15
16
0
@@ -4,7 +4,13 @@
0
 module Piston
0
   module Svn
0
     class Revision < Piston::Revision
0
- include Piston::Svn::Client
0
+ def client
0
+ @client ||= Piston::Svn::Client.instance
0
+ end
0
+
0
+ def svn(*args)
0
+ client.svn(*args)
0
+ end
0
 
0
       def checkout_to(path)
0
         @wcpath = path.kind_of?(Pathname) ? path : Pathname.new(path)
...
3
4
5
6
7
8
9
10
11
...
13
14
15
 
 
 
 
 
 
 
 
16
17
18
19
20
21
22
23
24
25
26
...
3
4
5
 
 
6
7
8
9
...
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 
 
 
26
27
28
0
@@ -3,8 +3,6 @@
0
 module Piston
0
   module Svn
0
     class WorkingCopy < Piston::WorkingCopy
0
- extend Piston::Svn::Client
0
-
0
       # Register ourselves as a handler for working copies
0
       Piston::WorkingCopy.add_handler self
0
 
0
0
@@ -13,14 +11,18 @@
0
           result = svn(:info, dir) rescue :failed
0
           result == :failed ? false : true
0
         end
0
+
0
+ def client
0
+ @@client ||= Piston::Svn::Client.instance
0
+ end
0
+
0
+ def svn(*args)
0
+ client.svn(*args)
0
+ end
0
       end
0
 
0
       def svn(*args)
0
         self.class.svn(*args)
0
- end
0
-
0
- def svnadmin(*args)
0
- self.class.svnadmin(*args)
0
       end
0
 
0
       def exist?

Comments

    No one has commented yet.