acopy 0.1.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.
data/bin/acopy ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ #-*- encoding:utf-8 -*-
3
+
4
+ require 'acopy.rb'
5
+ require 'DirCopy.rb'
6
+
7
+ if ARGV.size == 0 then
8
+ puts "Usage: acopy xmlfile.xml"
9
+ puts "Version 0.1.0"
10
+ exit 0
11
+ end
12
+
13
+ ARGV.each do |arg|
14
+ begin
15
+ cp = ACopy.new arg
16
+ rescue
17
+ STDERR.pust("#{arg} is invaild")
18
+ else
19
+ cp.read
20
+ cp.cpdatas.each do |x|
21
+ puts "[#{x.mode}]FROM::#{x.from} TO::#{x.to}"
22
+ begin
23
+ (DirCopy.new(x)).cp()
24
+ rescue => e
25
+ puts "[FAIL] Fail to copy #{x.from} :: #{x.to} --- SKIP"
26
+ puts e
27
+ end
28
+ end
29
+ end
30
+ end
data/lib/CpData.rb ADDED
@@ -0,0 +1,34 @@
1
+ #-*- encoding:utf-8 -*-
2
+
3
+ class CpData
4
+ attr_reader :from,:to,:mode
5
+
6
+ def initialize
7
+ from = String.new
8
+ to = String.new
9
+ mode = -1
10
+ end
11
+
12
+ def setFrom(f)
13
+ begin
14
+ r = File::ftype(f)
15
+ rescue Errno::ENOENT => e
16
+ STDERR.puts "No such directory. #{f}"
17
+ else
18
+ if r == "directory" then
19
+ @from = f
20
+ else
21
+ puts "#{f} is not directory."
22
+ end
23
+ end
24
+ end
25
+
26
+ def setTo(t)
27
+ @to = t
28
+ end
29
+
30
+ def setMode(m)
31
+ @mode = m
32
+ end
33
+
34
+ end
data/lib/DirCopy.rb ADDED
@@ -0,0 +1,70 @@
1
+ #-*- encoding:utf-8 -*-
2
+ require 'FailToCopyException.rb'
3
+
4
+ class DirCopy
5
+ attr_reader :cpdata
6
+
7
+ def initialize(d)
8
+ @cpdata = d
9
+ end
10
+
11
+ def cp
12
+ b_copy(@cpdata.from,@cpdata.to)
13
+ end
14
+
15
+ protected
16
+ def isDirectoryPath?(p)
17
+ r = File::ftype(p)
18
+ return true if r == "directory"
19
+ return false if r != "directory"
20
+ end
21
+
22
+ protected
23
+ def b_copy(from,to)
24
+ raise(FailToCopyException,"#{from} is not directory.") unless isDirectoryPath?(from)
25
+ unless File::exist?(to) then
26
+ begin
27
+ Dir.mkdir(to)
28
+ rescue Errno::EACCES
29
+ STDERR.puts "acopy cannnot make directory :: #{to}"
30
+ return false
31
+ rescue
32
+ STDERR.puts "error. fail to make directory :: #{to}"
33
+ return false
34
+ end
35
+ end
36
+
37
+ (Dir.new(from)).each do |f|
38
+ if f == "." or f == ".." then
39
+ next
40
+ end
41
+ if isDirectoryPath?(from + File::SEPARATOR + f)
42
+ return false unless b_copy(from + File::SEPARATOR + f,to + File::SEPARATOR + f)
43
+ else
44
+ return false unless cpfile(from + File::SEPARATOR + f,to + File::SEPARATOR + f)
45
+ end
46
+ end
47
+ return true
48
+ end
49
+
50
+ protected
51
+ def cpfile(from,to)
52
+ if File.exists?(to) and @cpdata.mode != :overwrite then
53
+ return true
54
+ end
55
+
56
+ begin
57
+ src = open(from)
58
+ rescue Errno::ENOENT
59
+ puts "[ERROR] #{from} is no such file or directory."
60
+ return false
61
+ end
62
+ puts "#{to}"
63
+ dest = open(to,'w')
64
+
65
+ dest.write(src.read())
66
+ dest.close
67
+ src.close
68
+ return true
69
+ end
70
+ end
@@ -0,0 +1,4 @@
1
+ #-*- encoding:utf-8 -*-
2
+
3
+ class FailToCopyException < Exception
4
+ end
data/lib/acopy.rb ADDED
@@ -0,0 +1,28 @@
1
+ #-*- encoding:utf-8 -*-
2
+
3
+ require 'rexml/document'
4
+ require 'CpData.rb'
5
+
6
+ class ACopy
7
+ attr_reader :xml_file_path,:cpdatas
8
+
9
+ def initialize(xml_path)
10
+ @cpdatas = []
11
+ if File::exist?(xml_path) then
12
+ @xml_file_path = xml_path
13
+ else
14
+ raise("#{xml_path} is invalid.")
15
+ end
16
+ end
17
+
18
+ def read
19
+ doc = REXML::Document.new(open(@xml_file_path))
20
+ doc.elements.each('acopy/copy') do |e|
21
+ d = CpData.new
22
+ d.setFrom(e.attributes["from"])
23
+ d.setTo(e.attributes["to"])
24
+ d.setMode(e.attributes["mode"].to_sym)
25
+ @cpdatas[@cpdatas.size] = d
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acopy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - opamp
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-06 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Auto copy tool
15
+ email: opampg@gmail.com
16
+ executables:
17
+ - acopy
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/acopy.rb
22
+ - lib/CpData.rb
23
+ - lib/DirCopy.rb
24
+ - lib/FailToCopyException.rb
25
+ - bin/acopy
26
+ homepage: https://bitbucket.org/opampg/acopy
27
+ licenses:
28
+ - BSD
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: 2.0.0
38
+ none: false
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: !binary |-
44
+ MA==
45
+ none: false
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 1.8.24
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: auto copy tool
52
+ test_files: []