summaryrefslogtreecommitdiff
path: root/lib/un.rb
blob: 3834784f2d8fd520c8496cdf01fa829c4ba3c6b4 (plain)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
require 'fileutils'
require 'getopts'

module FileUtils
#  @fileutils_label = ''
  @fileutils_output = $stdout
end

def setup(options = "")
  options += "v"
  ARGV.map! do |x|
    case x
    when /^-/
      x.delete "^-#{options}"
    when /[*?\[{]/
      Dir[x]
    else
      x
    end
  end
  ARGV.flatten!
  ARGV.delete_if{|x| x == '-'}
  getopts(options)
  options = {}
  options[:verbose] = true if $OPT["v"]
  options[:force] = true if $OPT["f"]
  options[:preserve] = true if $OPT["p"]
  yield ARGV, options, $OPT
end

def mkdir
  setup("p") do |argv, options, opt|
    cmd = "mkdir"
    cmd += "_p" if options.delete :preserve
    FileUtils.send cmd, argv, options
  end
end

def rmdir
  setup do |argv, options|
    FileUtils.rmdir argv, options
  end
end

def ln
  setup("sf") do |argv, options, opt|
    cmd = "ln"
    cmd += "_s" if opt["s"]
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.send cmd, argv, dest, options
  end
end

def cp
  setup("pr") do |argv, options, opt|
    cmd = "cp"
    cmd += "_r" if opt["r"]
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.send cmd, argv, dest, options
  end
end

def mv
  setup do |argv, options|
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.mv argv, dest, options
  end
end

def rm
  setup("fr") do |argv, options, opt|
    cmd = "rm"
    cmd += "_r" if opt["r"]
    FileUtils.send cmd, argv, options
  end
end

def install
  setup("pm:") do |argv, options, opt|
    options[:mode] = opt["m"] ? opt["m"].oct : 0755
    dest = argv.pop
    argv = argv[0] if argv.size == 1
    FileUtils.install argv, dest, options
  end
end

def chmod
  setup do |argv, options|
    mode = argv.shift.oct
    FileUtils.chmod mode, argv, options
  end
end

def touch
  setup do |argv, options|
    FileUtils.touch argv, options
  end
end