automateit 0.70930 → 0.71003
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/CHANGES.txt +7 -0
- data/lib/automateit.rb +0 -1
- data/lib/automateit/account_manager/passwd.rb +1 -0
- data/lib/automateit/package_manager/gem.rb +1 -0
- data/lib/automateit/root.rb +1 -1
- data/lib/automateit/shell_manager.rb +10 -3
- data/lib/automateit/shell_manager/portable.rb +54 -7
- data/spec/integration/shell_manager_spec.rb +78 -1
- metadata +2 -2
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGES.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
0.71003:
|
2
|
+
Date: Wed, 03 Oct 2007 01:17:32 -0700
|
3
|
+
Desc:
|
4
|
+
- Fixed bug in #backup on JRuby because it lacks methods to query properties. It now copies the file and timestamp, but not the owner/group/mode because these can't be queried on JRuby.
|
5
|
+
- Improved #cp with new :preserve => :try option so that properties are preserved when possible, but no exception is thrown when these can't be preserved.
|
6
|
+
- Improved #touch with options for :like and :stamp options.
|
7
|
+
|
1
8
|
0.70930:
|
2
9
|
Date: Sun, 30 Sep 2007 15:10:43 -0700
|
3
10
|
Desc:
|
data/lib/automateit.rb
CHANGED
@@ -55,6 +55,7 @@ class ::AutomateIt::AccountManager::Passwd < ::AutomateIt::AccountManager::BaseD
|
|
55
55
|
def _passwd_raw(user, password, opts={})
|
56
56
|
quiet = (opts[:quiet] or not log.info?)
|
57
57
|
|
58
|
+
require 'open4'
|
58
59
|
return Open4::popen4("passwd %s 2>&1" % user) do |pid, sin, sout, serr|
|
59
60
|
$expect_verbose = ! quiet
|
60
61
|
2.times do
|
@@ -85,6 +85,7 @@ class AutomateIt::PackageManager::Gem < AutomateIt::PackageManager::BaseDriver
|
|
85
85
|
uninstall_needed = false
|
86
86
|
begin
|
87
87
|
require 'expect'
|
88
|
+
require 'open4'
|
88
89
|
exitstruct = Open4::popen4(cmd) do |pid, sin, sout, serr|
|
89
90
|
$expect_verbose = opts[:quiet] ? false : true
|
90
91
|
|
data/lib/automateit/root.rb
CHANGED
@@ -195,8 +195,11 @@ class AutomateIt::ShellManager < AutomateIt::Plugin::Manager
|
|
195
195
|
# +false+ if all are present.
|
196
196
|
#
|
197
197
|
# Options:
|
198
|
-
# * :preserve --
|
199
|
-
#
|
198
|
+
# * :preserve -- Preserve file modification time and ownership. Defaults to
|
199
|
+
# false. Can be +true+, +false+, or :try. If :try, the properties will be
|
200
|
+
# preserved if possible on the platform, whereas +true+ will raise an
|
201
|
+
# exception if not available.
|
202
|
+
# * :recursive -- Copy files and directories recursively, boolean.
|
200
203
|
def cp(sources, target, opts={}) dispatch(sources, target, opts) end
|
201
204
|
|
202
205
|
# Copy the +sources+ to the +target+ recursively. Returns an array of
|
@@ -250,7 +253,11 @@ class AutomateIt::ShellManager < AutomateIt::Plugin::Manager
|
|
250
253
|
# Create the +targets+ as files if needed and update their modification
|
251
254
|
# time. Unlike most other commands provided by ShellManager, this one will
|
252
255
|
# always modify the targets. Returns an array of targets modified.
|
253
|
-
|
256
|
+
#
|
257
|
+
# Options:
|
258
|
+
# * :like -- Touch the targets like this file. Defaults to none.
|
259
|
+
# * :stamp -- Set the targets to the specified timestamp. Defaults to Time.now.
|
260
|
+
def touch(targets, opts={}) dispatch(targets, opts) end
|
254
261
|
end
|
255
262
|
|
256
263
|
# == ShellManager::BaseDriver
|
@@ -49,7 +49,7 @@ class AutomateIt::ShellManager::Portable < AutomateIt::ShellManager::BaseDriver
|
|
49
49
|
if is_dir
|
50
50
|
cp_opts = {}
|
51
51
|
cp_opts[:recursive] = true if is_dir
|
52
|
-
cp_opts[:preserve] =
|
52
|
+
cp_opts[:preserve] = :try
|
53
53
|
|
54
54
|
source_children = _directory_contents(source)
|
55
55
|
#puts "sc: %s" % source_children.inspect
|
@@ -210,8 +210,16 @@ class AutomateIt::ShellManager::Portable < AutomateIt::ShellManager::BaseDriver
|
|
210
210
|
opt = opt.to_sym
|
211
211
|
fu_opts[opt] = opts[opt] if opts[opt]
|
212
212
|
end
|
213
|
-
|
214
|
-
fu_opts_with_preserve =
|
213
|
+
|
214
|
+
fu_opts_with_preserve = fu_opts.clone
|
215
|
+
fu_opts_with_preserve[:preserve] = \
|
216
|
+
if opts[:preserve] == :try
|
217
|
+
fsim = File::Stat.instance_methods
|
218
|
+
(fsim.include?("uid") and fsim.include?("gid") and
|
219
|
+
fsim.include?("mode") and fsim.include?("atime"))
|
220
|
+
else
|
221
|
+
opts[:preserve]
|
222
|
+
end
|
215
223
|
|
216
224
|
changed = []
|
217
225
|
sources_a = [sources].flatten
|
@@ -454,9 +462,48 @@ class AutomateIt::ShellManager::Portable < AutomateIt::ShellManager::BaseDriver
|
|
454
462
|
end
|
455
463
|
|
456
464
|
# See ShellManager#touch
|
457
|
-
def touch(targets)
|
458
|
-
|
459
|
-
|
460
|
-
|
465
|
+
def touch(targets, opts={})
|
466
|
+
like = opts.delete(:like)
|
467
|
+
stamp = opts.delete(:stamp)
|
468
|
+
quiet = opts.delete(:quiet) == true ? true : false
|
469
|
+
time = \
|
470
|
+
if stamp
|
471
|
+
stamp
|
472
|
+
elsif like
|
473
|
+
begin
|
474
|
+
File.stat(like).mtime
|
475
|
+
rescue Errno::ENOENT => e
|
476
|
+
if preview?
|
477
|
+
Time.now
|
478
|
+
else
|
479
|
+
raise e
|
480
|
+
end
|
481
|
+
end
|
482
|
+
else
|
483
|
+
Time.now
|
484
|
+
end
|
485
|
+
|
486
|
+
unless quiet
|
487
|
+
msg = PEXEC << "touch"
|
488
|
+
msg << " --reference %s" % like if like
|
489
|
+
msg << " --stamp %s" % stamp if stamp
|
490
|
+
msg << " " << [targets].flatten.join(" ")
|
491
|
+
log.info(msg)
|
492
|
+
end
|
493
|
+
|
494
|
+
results = []
|
495
|
+
for target in [targets].flatten
|
496
|
+
begin
|
497
|
+
stat = File.stat(target)
|
498
|
+
next if stat.mtime.to_i == time.to_i
|
499
|
+
rescue Errno::ENOENT
|
500
|
+
File.open(target, "a"){} unless preview?
|
501
|
+
end
|
502
|
+
File.utime(time, time, target) unless preview?
|
503
|
+
results << target
|
504
|
+
end
|
505
|
+
|
506
|
+
return false if results.empty?
|
507
|
+
return targets.is_a?(String) ? results.first : results
|
461
508
|
end
|
462
509
|
end
|
@@ -371,6 +371,10 @@ describe AutomateIt::ShellManager, " in general" do
|
|
371
371
|
File.exists?(dir).should be_false
|
372
372
|
end
|
373
373
|
end
|
374
|
+
end
|
375
|
+
|
376
|
+
describe AutomateIt::ShellManager, " when touching files" do
|
377
|
+
it_should_behave_like "AutomateIt::ShellManager"
|
374
378
|
|
375
379
|
it "should create files and change their timestamps (touch)" do
|
376
380
|
@m.mktempdircd do
|
@@ -386,6 +390,79 @@ describe AutomateIt::ShellManager, " in general" do
|
|
386
390
|
before.should <= after
|
387
391
|
end
|
388
392
|
end
|
393
|
+
|
394
|
+
it "should touch files with a specific timestamp (touch)" do
|
395
|
+
@m.mktempdircd do
|
396
|
+
target = "foo"
|
397
|
+
stamp = Time.now - 60
|
398
|
+
stamp.should_not == Time.now
|
399
|
+
|
400
|
+
@m.touch(target, :stamp => stamp).should == target
|
401
|
+
stat = File.stat(target)
|
402
|
+
stamp.to_i.should == stat.mtime.to_i
|
403
|
+
|
404
|
+
@m.touch(target, :stamp => stamp).should be_false
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
it "should touch files with a timestamp like other files (touch)" do
|
409
|
+
@m.mktempdircd do
|
410
|
+
source = "foo"
|
411
|
+
target = "bar"
|
412
|
+
stamp = Time.now - 60
|
413
|
+
stamp.should_not == Time.now
|
414
|
+
@m.touch(source, :stamp => stamp)
|
415
|
+
|
416
|
+
@m.touch(target, :like => source).should == target
|
417
|
+
stat = File.stat(target)
|
418
|
+
stamp.to_i.should == stat.mtime.to_i
|
419
|
+
|
420
|
+
@m.touch(target, :like => source).should be_false
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
it "should not change timestamps in preview mode (touch)" do
|
425
|
+
@m.mktempdircd do
|
426
|
+
target = "foo"
|
427
|
+
@m.touch(target)
|
428
|
+
stamp = File.stat(target).mtime
|
429
|
+
|
430
|
+
begin
|
431
|
+
@m.preview = true
|
432
|
+
@m.touch(target)
|
433
|
+
File.stat(target).mtime.to_i == stamp.to_i
|
434
|
+
ensure
|
435
|
+
@m.preview = false
|
436
|
+
end
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
440
|
+
it "should raise errors when setting timestamps like non-existing files (touch)" do
|
441
|
+
@m.mktempdircd do
|
442
|
+
source = "source"
|
443
|
+
target = "target"
|
444
|
+
File.exists?(source).should be_false
|
445
|
+
File.exists?(target).should be_false
|
446
|
+
|
447
|
+
lambda { @m.touch(target, :like => source) }.should raise_error(Errno::ENOENT)
|
448
|
+
end
|
449
|
+
end
|
450
|
+
|
451
|
+
it "should not raise errors when setting timestamps like non-existing files in preview mode (touch)" do
|
452
|
+
@m.mktempdircd do
|
453
|
+
source = "source"
|
454
|
+
target = "target"
|
455
|
+
File.exists?(source).should be_false
|
456
|
+
File.exists?(target).should be_false
|
457
|
+
|
458
|
+
begin
|
459
|
+
@m.preview = true
|
460
|
+
@m.touch(target, :like => source).should == target
|
461
|
+
ensure
|
462
|
+
@m.preview = false
|
463
|
+
end
|
464
|
+
end
|
465
|
+
end
|
389
466
|
end
|
390
467
|
|
391
468
|
describe AutomateIt::ShellManager, " when managing modes" do
|
@@ -428,7 +505,7 @@ describe AutomateIt::ShellManager, " when managing modes" do
|
|
428
505
|
end
|
429
506
|
end
|
430
507
|
|
431
|
-
#it "should set the default mask (umask)" # TODO
|
508
|
+
#it "should set the default mask (umask)" # TODO
|
432
509
|
end
|
433
510
|
|
434
511
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: automateit
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2007-10-
|
6
|
+
version: "0.71003"
|
7
|
+
date: 2007-10-04 00:00:00 -07:00
|
8
8
|
summary: AutomateIt is an open-source tool for automating the setup and maintenance of UNIX-like systems
|
9
9
|
require_paths:
|
10
10
|
- lib
|
metadata.gz.sig
CHANGED
Binary file
|