Class: L5MTools::SVN

Inherits:
Object
  • Object
show all
Extended by:
FileUtils
Includes:
Tools
Defined in:
lib/l5m-tools/svn.rb

Constant Summary collapse

IGNORE_FILES =
YAML::load(File.open(File.expand_path('~/svn_ingore.yaml'), 'rb') { |f| f.read } )
SPERATE =
"------------------------------------------------------------------------"

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Tools

#ask, #change_directory, #copy_with_replace, #copy_with_replace_without_puts, #duplicate_and_replace, #replace, #send_mail, #to_file, #user_home

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_id, *arguments, &block) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/l5m-tools/svn.rb', line 31

def method_missing(method_id, *arguments, &block) 
    self.class.class_eval %{
        def #{method_id}(packz, options={}, svn_options=[], &b)
            rs = ''
            packz.each{|pac|
                next unless change_to_package_directory(pac)                       
                rs << SVN.#{method_id}(*svn_options)
            }
            rs
        end
    }, __FILE__, __LINE__
    puts 
    send(method_id, arguments[0], arguments[1], arguments[2], &block)
end

Class Method Details

.method_missing(method_id, *arguments, &block) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'lib/l5m-tools/svn.rb', line 19

def method_missing(method_id, *arguments, &block)
    self.class_eval %{
        def self.#{method_id}(*args, &b)
            cmd = "svn #{method_id} "
            cmd << args.join(" ") if args
            `\#{cmd}`
        end
    }, __FILE__, __LINE__
    send(method_id, *arguments, &block)
end

Instance Method Details

#change_to_package_directory(package) ⇒ Object



46
47
48
# File 'lib/l5m-tools/svn.rb', line 46

def change_to_package_directory package
    change_directory "#{WORKSPACE}/#{package}"
end

#log(packages, options = {}, svn_options = []) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/l5m-tools/svn.rb', line 51

def log packages, options={}, svn_options=[]
    log = ''
    usr = options[:username] || ''
    date = options[:date] || Date.today.strftime("%F")
    reverse = options[:reverse]            
    packages.each{|pac|     
        next unless change_to_package_directory(pac)
        commits =  SVN.log("-q", "-r", "HEAD:{#{date}}") .split($/).delete_if{|c| c[0] == '-' || (usr != '' && c.split("|")[1].strip != usr)}.collect! {|c| c.split("|")[0].strip[1..-1]}.sort!
        commits.reverse! if reverse
        commits.each{|c|
            log << SVN.log("-v", "-r", c).gsub!(/(#{$/}){2,}/m,$/+$/)
        }
    }
    log.gsub!(/(#{SPERATE}#{$/}#{SPERATE})/m, SPERATE)
    log
end

#run(*args, &block) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/l5m-tools/svn.rb', line 93

def run(*args, &block)
    cmd = args.shift
    cmd = args.shift if 'svn' == cmd
    #args , svn_args = args[0..(args.index '--')], args[((args.index '--')+1)..-1] if args.index '--'
    if index = (args.index '--')
         args , svn_args = args[0...index], args[(index+1)..-1]
    end           
    options = {username:((args.option! '--user') || SVN_USER), reverse:(args.delete('-r')), date: (args.option!('--date')), mail:(args.delete('-e') || args.delete('--email')) }          
    options[:sendto] = args.option!('-s') || SENDER_EMAIL
    options[:title]  = args.option!('--title') || "svn #{cmd} @#{Time.now.strftime("%F %T")}" 
    
    packages =  args.empty? ? PACKAGES : args
    
    result = send cmd, packages, options, svn_args
    send_mail(options[:sendto], options[:title] , result) if options[:mail]
    block.call(result) if block_given?
    result
end

#status(packages, options = {}, svn_options = []) ⇒ Object Also known as: st



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/l5m-tools/svn.rb', line 68

def status packages, options={}, svn_options=[]
    status  = ''
    packages.each{|pac| 
        innert_dirs =(pac.include?("tag"))?["src", "WebContent"]:["src"];
        lines = [];
        innert_dirs.each{|d|             
            next unless change_to_package_directory("#{pac}/#{d}")
            lines += (SVN.status).split($/)
         }
        lines -= IGNORE_FILES[pac] unless IGNORE_FILES[pac].nil?
        status << "#{pac} #{$/}" << lines.join($/) << "#{$/}" unless lines.empty?
    } 
    status
end

#update(packages, options = {}, svn_options = []) ⇒ Object



83
84
85
86
87
88
89
90
91
# File 'lib/l5m-tools/svn.rb', line 83

def update packages, options={}, svn_options=[]
    log = ''
    packages.each{|pac|
        next unless change_to_package_directory(pac)
        log << pac+"...#{$/}"
        log << SVN.update
    }
    log
end