sequencer 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +1 -0
  3. data/bin/rseqpad +38 -0
  4. data/lib/sequencer.rb +29 -2
  5. metadata +38 -14
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 1.0.3 / 2010-10-26
2
+
3
+ * Add rseqpad binary that zero-pads filenames
4
+
1
5
  === 1.0.2 / 2010-05-06
2
6
 
3
7
  * Add Sequence#from_glob for scavenging all sequences from all subdirs
data/Manifest.txt CHANGED
@@ -4,5 +4,6 @@ Manifest.txt
4
4
  README.txt
5
5
  Rakefile
6
6
  bin/rseqls
7
+ bin/rseqpad
7
8
  lib/sequencer.rb
8
9
  test/test_sequencer.rb
data/bin/rseqpad ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + "/../lib/sequencer"
4
+
5
+ d = ARGV.shift || Dir.pwd
6
+
7
+ renames = []
8
+ Sequencer.entries(d).each do | e |
9
+ next if e.length < 2
10
+
11
+ padz = e.length.to_s.length
12
+
13
+ puts "Repadding sequence #{e} with #{padz} zeroes"
14
+
15
+ e.each do | f |
16
+ rep_name = f.gsub(/([\.\-\_]?)(\d+)\.(\w+)$/) do
17
+ ".%0#{padz}d.%s" % [$2.to_i, $3]
18
+ end
19
+ # Now this is a replaced name
20
+ from_to = [File.join(e.directory, f), File.join(e.directory, rep_name)]
21
+ renames.push(from_to)
22
+ end
23
+ end
24
+
25
+ # Check for dupes
26
+ destinations = renames.map{|e| e[1] }
27
+
28
+ if (destinations.uniq.length != destinations.length)
29
+ twice = destinations.length - destinations.uniq.length
30
+ $stderr.puts "Cannot rename - #{twice} files will overwrite each other or files will be renamed twice"
31
+ twice.each {|e| $stderr.puts e }
32
+ exit -1
33
+ end
34
+
35
+ # And do the job
36
+ renames.each do | from, to |
37
+ File.rename(from, to)
38
+ end
data/lib/sequencer.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Sequencer
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
3
3
  NUMBERS_AT_END = /(\d+)([^\d]+)?$/
4
4
 
5
5
  extend self
@@ -171,7 +171,7 @@ module Sequencer
171
171
  @filenames.include?(base_filename)
172
172
  end
173
173
 
174
- # Yield each filename in the sequence to the block
174
+ # Yields the filename of each file to the block
175
175
  def each
176
176
  @filenames.each {|f| yield(f) }
177
177
  end
@@ -201,6 +201,33 @@ module Sequencer
201
201
  @ranges[-1].end
202
202
  end
203
203
 
204
+ # Apply a bulk rename
205
+ def bulk_rename(with_pattern)
206
+ rename_map = filenames.inject({}) do | filename, map |
207
+ frame_no = filename.scan(NUMBERS_AT_END).flatten.shift.to_i
208
+ map.merge(filename => (with_pattern % frame_no))
209
+ end
210
+
211
+ # Ensure we will not produce dupes
212
+ if (rename_map.values.uniq.length != rename_map.length)
213
+ raise "This would would produce non-unique files"
214
+ end
215
+
216
+ if (error = (rename_map.keys & rename_map.values)).any?
217
+ raise "This would overwrite old files with the renamed ones (#{error[0..1]}.join(',')..)"
218
+ end
219
+
220
+ if (error = (Dir.entries(@directory) % rename_map.values)).any?
221
+ raise "Files that will be created by the rename are already in place (#{error[0..1]}.join(',')..)"
222
+ end
223
+
224
+
225
+ end
226
+
227
+ def bulk_rename!(with_pattern)
228
+ replace(bulk_rename(with_pattern))
229
+ end
230
+
204
231
  private
205
232
 
206
233
  def natural_sort(ar)
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequencer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ hash: 17
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 3
10
+ version: 1.0.3
5
11
  platform: ruby
6
12
  authors:
7
13
  - Julik Tarkhanov
@@ -9,34 +15,45 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-05-06 00:00:00 +02:00
18
+ date: 2010-10-26 00:00:00 +02:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: test-spec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
23
32
  version: "0"
24
- version:
33
+ type: :development
34
+ version_requirements: *id001
25
35
  - !ruby/object:Gem::Dependency
26
36
  name: hoe
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
30
40
  requirements:
31
41
  - - ">="
32
42
  - !ruby/object:Gem::Version
33
- version: 2.6.0
34
- version:
43
+ hash: 21
44
+ segments:
45
+ - 2
46
+ - 6
47
+ - 1
48
+ version: 2.6.1
49
+ type: :development
50
+ version_requirements: *id002
35
51
  description: Simplifies working with image sequences
36
52
  email:
37
53
  - me@julik.nl
38
54
  executables:
39
55
  - rseqls
56
+ - rseqpad
40
57
  extensions: []
41
58
 
42
59
  extra_rdoc_files:
@@ -50,6 +67,7 @@ files:
50
67
  - README.txt
51
68
  - Rakefile
52
69
  - bin/rseqls
70
+ - bin/rseqpad
53
71
  - lib/sequencer.rb
54
72
  - test/test_sequencer.rb
55
73
  has_rdoc: true
@@ -63,21 +81,27 @@ rdoc_options:
63
81
  require_paths:
64
82
  - lib
65
83
  required_ruby_version: !ruby/object:Gem::Requirement
84
+ none: false
66
85
  requirements:
67
86
  - - ">="
68
87
  - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
69
91
  version: "0"
70
- version:
71
92
  required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
72
94
  requirements:
73
95
  - - ">="
74
96
  - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
75
100
  version: "0"
76
- version:
77
101
  requirements: []
78
102
 
79
103
  rubyforge_project: sequencer
80
- rubygems_version: 1.3.5
104
+ rubygems_version: 1.3.7
81
105
  signing_key:
82
106
  specification_version: 3
83
107
  summary: Simplifies working with image sequences