silo 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -4,6 +4,7 @@
4
4
  # Copyright (c) 2010, Sebastian Staudt
5
5
 
6
6
  require 'rake/testtask'
7
+ require 'metric_fu'
7
8
 
8
9
  task :default => :test
9
10
 
@@ -0,0 +1,32 @@
1
+ # This code is free software; you can redistribute it and/or modify it under
2
+ # the terms of the new BSD License.
3
+ #
4
+ # Copyright (c) 2011, Sebastian Staudt
5
+
6
+ # Monkey patches an issue in Grit::Index which prevents directories from being
7
+ # cleanly removed from the index and the repository
8
+ class Grit::Index
9
+
10
+ # Add (or remove) a file to the index
11
+ #
12
+ # @param [String] path The path to the file
13
+ # @param [String] data The contents of the file
14
+ def add(path, data)
15
+ is_dir = path[-1] == 47
16
+ path = path.split('/')
17
+ filename = path.pop
18
+ filename += '/' if is_dir
19
+
20
+ current = self.tree
21
+ p current
22
+
23
+ path.each do |dir|
24
+ current[dir] ||= {}
25
+ node = current[dir]
26
+ current = node
27
+ end
28
+
29
+ current[filename] = data
30
+ end
31
+
32
+ end
@@ -76,9 +76,9 @@ module Silo
76
76
  end
77
77
 
78
78
  command :init, 'Initialize a Silo repository', :path => :optional do
79
- path = File.expand_path(path || '.')
80
- puts "Initializing Silo repository in #{path}..."
81
- Repository.new path
79
+ repo_path = File.expand_path(args[:path] || '.')
80
+ puts "Initializing Silo repository in #{repo_path}..."
81
+ Repository.new repo_path
82
82
  end
83
83
 
84
84
  flag :l, 'List each object in a separate line'
@@ -8,6 +8,8 @@ require 'tmpdir'
8
8
  require 'rubygems'
9
9
  require 'grit'
10
10
 
11
+ require File.dirname(__FILE__) + '/../grit/index'
12
+
11
13
  module Silo
12
14
 
13
15
  # Represents a Silo repository
@@ -305,21 +307,12 @@ module Silo
305
307
  # @param [String] path The path of the file or directory to remove from the
306
308
  # repository
307
309
  def remove(path)
310
+ object = object! path
311
+ path += '/' if object.is_a?(Grit::Tree) && path[-1] != 47
308
312
  index = @git.index
309
313
  index.read_tree 'HEAD'
310
- remove = lambda do |f|
311
- dir = File.stat(f).directory?
312
- if dir
313
- Dir.entries(f)[2..-1].each do |child|
314
- remove.call File.join(f, child)
315
- end
316
- else
317
- index.delete f
318
- end
319
- dir
320
- end
321
- dir = remove.call path
322
- type = dir ? 'directory' : 'file'
314
+ index.delete path
315
+ type = object.is_a?(Grit::Tree) ? 'directory' : 'file'
323
316
  commit_msg = "Removed #{type} #{path}"
324
317
  index.commit commit_msg, @git.head.commit.sha
325
318
  end
@@ -1,11 +1,11 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under
2
2
  # the terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2010, Sebastian Staudt
4
+ # Copyright (c) 2010-2011, Sebastian Staudt
5
5
 
6
6
  module Silo
7
7
 
8
8
  # The current version of the Silo gem
9
- VERSION = '0.1.0'
9
+ VERSION = '0.1.1'
10
10
 
11
11
  end
@@ -105,6 +105,11 @@ class TestRepository < Test::Unit::TestCase
105
105
  assert (@repo.git.tree/('file2')).is_a? Grit::Blob
106
106
  assert_equal "Added file #{@data_dir + 'file1'} into '/'", @repo.git.commits[1].message
107
107
  assert_equal "Added file #{@data_dir + 'file2'} into '/'", @repo.git.commits[2].message
108
+ assert_equal %w{.silo file1 file2}, @repo.contents
109
+
110
+ assert_raise FileNotFoundError do
111
+ @repo.restore 'file3'
112
+ end
108
113
  end
109
114
 
110
115
  should 'save directory trees correctly' do
@@ -118,6 +123,13 @@ class TestRepository < Test::Unit::TestCase
118
123
  assert (@repo.git.tree/('data/subdir1/file1')).is_a? Grit::Blob
119
124
  assert (@repo.git.tree/('data/subdir2')).is_a? Grit::Tree
120
125
  assert (@repo.git.tree/('data/subdir2/file2')).is_a? Grit::Blob
126
+ assert_equal %w{data data/file1 data/file2 data/subdir1 data/subdir1/file1 data/subdir2 data/subdir2/file2}, @repo.contents('data')
127
+ assert_equal %w{data/subdir1 data/subdir1/file1}, @repo.contents('data/subdir1')
128
+ assert_equal %w{data/subdir2 data/subdir2/file2}, @repo.contents('data/subdir2')
129
+
130
+ assert_raise FileNotFoundError do
131
+ @repo.restore 'file1'
132
+ end
121
133
  end
122
134
 
123
135
  should 'save single files correctly into a prefix directory' do
@@ -129,6 +141,10 @@ class TestRepository < Test::Unit::TestCase
129
141
  assert (@repo.git.tree/('prefix/file2')).is_a? Grit::Blob
130
142
  assert_equal "Added file #{@data_dir + 'file1'} into 'prefix'", @repo.git.commits[1].message
131
143
  assert_equal "Added file #{@data_dir + 'file2'} into 'prefix'", @repo.git.commits[2].message
144
+
145
+ assert_raise FileNotFoundError do
146
+ @repo.restore 'file1'
147
+ end
132
148
  end
133
149
 
134
150
  should 'save directory trees correctly into a prefix directory' do
@@ -142,6 +158,10 @@ class TestRepository < Test::Unit::TestCase
142
158
  assert (@repo.git.tree/('prefix/data/subdir1/file1')).is_a? Grit::Blob
143
159
  assert (@repo.git.tree/('prefix/data/subdir2')).is_a? Grit::Tree
144
160
  assert (@repo.git.tree/('prefix/data/subdir2/file2')).is_a? Grit::Blob
161
+
162
+ assert_raise FileNotFoundError do
163
+ @repo.restore 'prefix/file1'
164
+ end
145
165
  end
146
166
 
147
167
  should 'restore single files correctly' do
@@ -168,6 +188,23 @@ class TestRepository < Test::Unit::TestCase
168
188
  assert File.exist? @target_dir/'subdir1/file1'
169
189
  end
170
190
 
191
+ should 'remove files and directories correctly' do
192
+ @repo.add @data_dir
193
+ @repo.add @data_dir/'file1'
194
+
195
+ @repo.remove 'data/file1'
196
+ assert_equal 4, @repo.git.commits.size
197
+ assert (@repo.git.tree/'data/file1').nil?
198
+
199
+ @repo.remove 'data'
200
+ assert_equal 5, @repo.git.commits.size
201
+ assert (@repo.git.tree/'data').nil?
202
+
203
+ @repo.remove 'file1'
204
+ assert_equal 6, @repo.git.commits.size
205
+ assert (@repo.git.tree/'file1').nil?
206
+ end
207
+
171
208
  should 'purge files and directories correctly' do
172
209
  @repo.add @data_dir
173
210
  @repo.add @data_dir/'file1'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: silo
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sebastian Staudt
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-30 00:00:00 +01:00
18
+ date: 2011-02-02 00:00:00 +01:00
19
19
  default_executable: silo
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -120,6 +120,7 @@ files:
120
120
  - test/data/subdir2/file2
121
121
  - test/data/subdir1/file1
122
122
  - lib/silo/version.rb
123
+ - lib/grit/index.rb
123
124
  - Rakefile
124
125
  - README.md
125
126
  - test/test_repository.rb
@@ -159,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
160
  requirements:
160
161
  - git >= 1.6
161
162
  rubyforge_project: silo
162
- rubygems_version: 1.4.2
163
+ rubygems_version: 1.5.0
163
164
  signing_key:
164
165
  specification_version: 3
165
166
  summary: A command-line utility and API for Git-based backups