omgdav 0.0.1 → 0.0.2
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.
- checksums.yaml +7 -0
- data/GIT-VERSION-GEN +1 -1
- data/lib/omgdav/app.rb +4 -0
- data/lib/omgdav/db.rb +7 -4
- data/lib/omgdav/delete.rb +1 -0
- data/lib/omgdav/get.rb +10 -6
- data/lib/omgdav/get_cache1.rb +33 -0
- data/lib/omgdav/get_cache_dalli.rb +43 -0
- data/lib/omgdav/http_get.rb +1 -1
- data/lib/omgdav/move.rb +6 -0
- data/lib/omgdav/proppatch.rb +3 -1
- data/lib/omgdav/put.rb +1 -0
- data/omgdav.gemspec +3 -3
- data/test/test_litmus.rb +1 -0
- data/test/test_mtime.rb +52 -0
- metadata +84 -176
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dc9720d03885d1269642550cceabf47b5fc9e2e8
|
4
|
+
data.tar.gz: fa741e1b07b302acd7e1c77bb0812d44bc543c9c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8ae05ad0fd3588403d2361405e29ce63c8905564e5a731a534d11243e86b4d08cce328ded767ef529476983dc5fa21bc068cd87fd011ba078ab6443647120d01
|
7
|
+
data.tar.gz: e5a3ab615aeb24ea760c4ad7331f9410a4206de3b6d4e2b0941f88990b03109e573f8b56d070c87e1538c6ae7d98f24caa465b7b10a1db6dea302a4917972008
|
data/GIT-VERSION-GEN
CHANGED
data/lib/omgdav/app.rb
CHANGED
data/lib/omgdav/db.rb
CHANGED
@@ -26,10 +26,6 @@ module OMGDAV::DB
|
|
26
26
|
node_id = node.delete(:id)
|
27
27
|
@db[:paths].where(id: node_id).update(node)
|
28
28
|
|
29
|
-
unless node[:collection]
|
30
|
-
@db[:paths].where(id: node[:parent_id]).update(mtime: mtime)
|
31
|
-
end
|
32
|
-
|
33
29
|
node[:id] = node_id
|
34
30
|
end
|
35
31
|
|
@@ -51,18 +47,21 @@ module OMGDAV::DB
|
|
51
47
|
node_update_maybe(node, info)
|
52
48
|
else
|
53
49
|
# brand new node
|
50
|
+
new = false
|
54
51
|
node = q.dup
|
55
52
|
node[:created] = node[:mtime] = Time.now.to_i
|
56
53
|
node[:collection] = collection
|
57
54
|
node_merge_info(node, info)
|
58
55
|
begin
|
59
56
|
node[:id] = @db[:paths].insert(node)
|
57
|
+
new = true
|
60
58
|
rescue Sequel::DatabaseError
|
61
59
|
# we may conflict on insert if we didn't use a transaction
|
62
60
|
raise if @db.in_transaction?
|
63
61
|
node = @db[:paths][q] or raise
|
64
62
|
raise OMGDAV::TypeConflict if node[:collection] != collection
|
65
63
|
end
|
64
|
+
update_parent_mtime(node) if new
|
66
65
|
end
|
67
66
|
|
68
67
|
node
|
@@ -78,6 +77,10 @@ module OMGDAV::DB
|
|
78
77
|
node_ensure(parent_id, filename, info)
|
79
78
|
end
|
80
79
|
|
80
|
+
def update_parent_mtime(node, mtime = nil)
|
81
|
+
@db[:paths].where(id: node[:parent_id]).update(mtime: mtime || node[:mtime])
|
82
|
+
end
|
83
|
+
|
81
84
|
def node_lookup(parent_id, name)
|
82
85
|
@db[:paths][name: name, domain_id: @domain_id, parent_id: parent_id]
|
83
86
|
end
|
data/lib/omgdav/delete.rb
CHANGED
@@ -12,6 +12,7 @@ module OMGDAV::Delete
|
|
12
12
|
def delete_file(node, cache)
|
13
13
|
node_delete(node)
|
14
14
|
key = node_to_key(node, cache)
|
15
|
+
cache_invalidate(key)
|
15
16
|
@mogc.delete(key)
|
16
17
|
rescue MogileFS::Backend::UnknownKeyError
|
17
18
|
warn "key=#{key.inspect} missing on delete from domain=#{@mogc.domain}"
|
data/lib/omgdav/get.rb
CHANGED
@@ -9,14 +9,18 @@ module OMGDAV::Get
|
|
9
9
|
include OMGDAV::DB
|
10
10
|
include OMGDAV::RackUtil
|
11
11
|
|
12
|
-
def
|
13
|
-
parts = path_split(env)
|
12
|
+
def resolve_node(key, parts)
|
14
13
|
basename = parts.pop
|
15
|
-
parent = col_resolve(parts) or return
|
16
|
-
node = node_lookup(parent[:id], basename) or return r(404)
|
17
|
-
length = node[:length]
|
14
|
+
parent = col_resolve(parts) or return
|
18
15
|
parts << basename
|
19
|
-
|
16
|
+
node_lookup(parent[:id], basename)
|
17
|
+
end
|
18
|
+
|
19
|
+
def call_get(env)
|
20
|
+
parts = path_split(env)
|
21
|
+
key = parts.join("/")
|
22
|
+
node = resolve_node(key, parts) or return r(404)
|
23
|
+
@mogc.get_uris(key, @get_path_opts).each do |uri|
|
20
24
|
case res = OMGDAV::HttpGet.run(env, uri)
|
21
25
|
when Array
|
22
26
|
headers = res[1]
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: binary -*-
|
2
|
+
# :enddoc:
|
3
|
+
# Copyright (C) 2012, Eric Wong <normalperson@yhbt.net>
|
4
|
+
# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
|
5
|
+
|
6
|
+
# Allows optional caching of the most-recently-read URL for GET requests
|
7
|
+
# This can helps with fusedav (and possibly other things) which fetch
|
8
|
+
# files in many small chunks using partial requests.
|
9
|
+
module OMGDAV::GetCache1
|
10
|
+
def self.extended(owner)
|
11
|
+
owner.instance_eval do
|
12
|
+
@last_lock = Mutex.new
|
13
|
+
@last_key = nil
|
14
|
+
@last_node = nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# see omgdav/get
|
19
|
+
def resolve_node(key, parts)
|
20
|
+
@last_lock.synchronize do
|
21
|
+
return @last_node if @last_key == key
|
22
|
+
end
|
23
|
+
node = super
|
24
|
+
@last_lock.synchronize do
|
25
|
+
@last_key = key
|
26
|
+
@last_node = node
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def cache_invalidate(key)
|
31
|
+
@last_key = nil # no need to lock for assignment
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# -*- encoding: binary -*-
|
2
|
+
# :enddoc:
|
3
|
+
# Copyright (C) 2012, Eric Wong <normalperson@yhbt.net>
|
4
|
+
# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
|
5
|
+
|
6
|
+
# Allows optional caching of recent URLs for GET requests
|
7
|
+
# This can helps with fusedav (and possibly other things) which fetch
|
8
|
+
# files in many small chunks using partial requests.
|
9
|
+
require 'dalli'
|
10
|
+
module OMGDAV::GetCacheDalli
|
11
|
+
def self.extended(owner)
|
12
|
+
owner.instance_eval do
|
13
|
+
@dalli_gen = Time.now.to_i.to_s
|
14
|
+
@dalli = Dalli::Client.new("localhost:11211")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_accessor :dalli
|
19
|
+
|
20
|
+
# see omgdav/get
|
21
|
+
def resolve_node(key, parts)
|
22
|
+
ckey = "#@dalli_gen#{key}"
|
23
|
+
node = @dalli.get(ckey) and return node
|
24
|
+
node = super
|
25
|
+
@dalli.set(ckey, node)
|
26
|
+
node
|
27
|
+
rescue Dalli::RingError, Dalli::NetworkError
|
28
|
+
node || super
|
29
|
+
end
|
30
|
+
|
31
|
+
def cache_invalidate(key)
|
32
|
+
if key
|
33
|
+
begin
|
34
|
+
@dalli.delete("#@dalli_gen#{key}")
|
35
|
+
rescue Dalli::RingError, Dalli::NetworkError
|
36
|
+
@dalli_gen.succ!
|
37
|
+
end
|
38
|
+
else
|
39
|
+
# nuke everything by changing prefix
|
40
|
+
@dalli_gen.succ!
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/omgdav/http_get.rb
CHANGED
data/lib/omgdav/move.rb
CHANGED
@@ -28,6 +28,12 @@ module OMGDAV::Move
|
|
28
28
|
@mogc.rename(src[:key], dst_key)
|
29
29
|
end
|
30
30
|
@db[:paths].where(id: src[:node][:id]).update(dst_node)
|
31
|
+
if dst_key
|
32
|
+
cache_invalidate(src[:key])
|
33
|
+
cache_invalidate(dst_key)
|
34
|
+
else
|
35
|
+
cache_invalidate(nil) # just kill everything
|
36
|
+
end
|
31
37
|
r(dst[:node] ? 204 : 201)
|
32
38
|
end
|
33
39
|
|
data/lib/omgdav/proppatch.rb
CHANGED
@@ -80,7 +80,8 @@ module OMGDAV::Proppatch
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def call_proppatch(env)
|
83
|
-
|
83
|
+
parts = path_split(env)
|
84
|
+
node = node_resolve(parts) or return r(404)
|
84
85
|
input = OMGDAV::InputWrapper.new(env)
|
85
86
|
xml = Nokogiri::XML(input)
|
86
87
|
xmlns = xml.root.namespace
|
@@ -98,6 +99,7 @@ module OMGDAV::Proppatch
|
|
98
99
|
end
|
99
100
|
end
|
100
101
|
@db[:paths].where(id: node.delete(:id)).update(node)
|
102
|
+
cache_invalidate(parts.join("/"))
|
101
103
|
r(200)
|
102
104
|
rescue Nokogiri::SyntaxError => e
|
103
105
|
r(400, "syntax error #{e.message}")
|
data/lib/omgdav/put.rb
CHANGED
data/omgdav.gemspec
CHANGED
@@ -26,10 +26,10 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.add_dependency('fast_xs', ['~> 0.8'])
|
27
27
|
s.add_dependency('mogilefs-client', ['~> 3.4'])
|
28
28
|
s.add_dependency('nokogiri', ['~> 1.5'])
|
29
|
-
s.add_dependency('sequel', ['~>
|
30
|
-
s.required_ruby_version = '
|
29
|
+
s.add_dependency('sequel', ['~> 4.0'])
|
30
|
+
s.required_ruby_version = '>= 1.9'
|
31
31
|
s.add_development_dependency('unicorn', '~> 4.4.0')
|
32
|
-
s.add_development_dependency('wrongdoc', '~> 1.
|
32
|
+
s.add_development_dependency('wrongdoc', '~> 1.8')
|
33
33
|
|
34
34
|
s.licenses = %w(AGPLv3+)
|
35
35
|
end
|
data/test/test_litmus.rb
CHANGED
data/test/test_mtime.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# -*- encoding: binary -*-
|
2
|
+
# Copyright (C) 2012, Eric Wong <normalperson@yhbt.net>
|
3
|
+
# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
|
4
|
+
require './test/integration'
|
5
|
+
class TestMtime < MiniTest::Unit::TestCase
|
6
|
+
include TestMogileFSIntegration
|
7
|
+
|
8
|
+
def test_mtime
|
9
|
+
assert_equal 201, req("MKCOL", "/a")[0].to_i
|
10
|
+
assert_equal 201, req("MKCOL", "/a/b")[0].to_i
|
11
|
+
now = Time.now
|
12
|
+
before = @db[:paths].where(name: "a").to_a
|
13
|
+
assert_equal before.size, 1
|
14
|
+
before_mtime = Time.at(before[0][:mtime])
|
15
|
+
assert_in_delta before_mtime, now, 2
|
16
|
+
|
17
|
+
# creating a new directory sets mtime in parent (only), not grandparent
|
18
|
+
sleep 1
|
19
|
+
assert_equal 201, req("MKCOL", "/a/b/c")[0].to_i
|
20
|
+
after = @db[:paths].where(name: "a").to_a
|
21
|
+
assert_equal after.size, 1
|
22
|
+
after_mtime = Time.at(after[0][:mtime])
|
23
|
+
assert_equal before_mtime, after_mtime
|
24
|
+
|
25
|
+
# creating a new file sets mtime in parent (only), not grandparent
|
26
|
+
sleep 1
|
27
|
+
resp = @req.put("/a/b/f", input: StringIO.new("HELLO"))
|
28
|
+
assert_equal 201, resp.status.to_i
|
29
|
+
after = @db[:paths].where(name: "a").to_a
|
30
|
+
assert_equal after.size, 1
|
31
|
+
after_mtime = Time.at(after[0][:mtime])
|
32
|
+
assert_equal before_mtime, after_mtime
|
33
|
+
|
34
|
+
b = @db[:paths].where(name: "b").to_a
|
35
|
+
f = @db[:paths].where(name: "f").to_a
|
36
|
+
assert_equal b.size, 1
|
37
|
+
assert_equal f.size, 1
|
38
|
+
assert_equal b[0][:mtime], f[0][:mtime]
|
39
|
+
|
40
|
+
# updating existing file should not change mtime
|
41
|
+
sleep 1
|
42
|
+
resp = @req.put("/a/b/f", input: StringIO.new("HELLO"))
|
43
|
+
assert_equal 204, resp.status.to_i
|
44
|
+
f = @db[:paths].where(name: "f").to_a
|
45
|
+
assert_equal f.size, 1
|
46
|
+
assert_operator f[0][:mtime], :>, b[0][:mtime]
|
47
|
+
|
48
|
+
bb = @db[:paths].where(name: "b").to_a
|
49
|
+
assert_equal bb.size, 1
|
50
|
+
assert_equal bb[0][:mtime], b[0][:mtime]
|
51
|
+
end
|
52
|
+
end
|
metadata
CHANGED
@@ -1,239 +1,159 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
name:
|
3
|
-
b21nZGF2
|
2
|
+
name: omgdav
|
4
3
|
version: !ruby/object:Gem::Version
|
5
|
-
version: 0.0.
|
6
|
-
prerelease:
|
4
|
+
version: 0.0.2
|
7
5
|
platform: ruby
|
8
6
|
authors:
|
9
|
-
-
|
10
|
-
T01HREFWIGhhY2tlcnM=
|
7
|
+
- OMGDAV hackers
|
11
8
|
autorequire:
|
12
9
|
bindir: bin
|
13
10
|
cert_chain: []
|
14
|
-
date:
|
11
|
+
date: 2014-05-27 00:00:00.000000000 Z
|
15
12
|
dependencies:
|
16
13
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
18
|
-
cmFjaw==
|
14
|
+
name: rack
|
19
15
|
requirement: !ruby/object:Gem::Requirement
|
20
|
-
none: false
|
21
16
|
requirements:
|
22
|
-
- -
|
23
|
-
fj4=
|
17
|
+
- - "~>"
|
24
18
|
- !ruby/object:Gem::Version
|
25
|
-
version:
|
26
|
-
MS40
|
19
|
+
version: '1.4'
|
27
20
|
type: :runtime
|
28
21
|
prerelease: false
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
|
-
none: false
|
31
23
|
requirements:
|
32
|
-
- -
|
33
|
-
fj4=
|
24
|
+
- - "~>"
|
34
25
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
36
|
-
MS40
|
26
|
+
version: '1.4'
|
37
27
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
39
|
-
a2dpbw==
|
28
|
+
name: kgio
|
40
29
|
requirement: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
30
|
requirements:
|
43
|
-
- -
|
44
|
-
fj4=
|
31
|
+
- - "~>"
|
45
32
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
47
|
-
Mi43
|
33
|
+
version: '2.7'
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
37
|
requirements:
|
53
|
-
- -
|
54
|
-
fj4=
|
38
|
+
- - "~>"
|
55
39
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
57
|
-
Mi43
|
40
|
+
version: '2.7'
|
58
41
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
a2Nhcg==
|
42
|
+
name: kcar
|
61
43
|
requirement: !ruby/object:Gem::Requirement
|
62
|
-
none: false
|
63
44
|
requirements:
|
64
|
-
- -
|
65
|
-
fj4=
|
45
|
+
- - "~>"
|
66
46
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
68
|
-
MC40
|
47
|
+
version: '0.4'
|
69
48
|
type: :runtime
|
70
49
|
prerelease: false
|
71
50
|
version_requirements: !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
51
|
requirements:
|
74
|
-
- -
|
75
|
-
fj4=
|
52
|
+
- - "~>"
|
76
53
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
MC40
|
54
|
+
version: '0.4'
|
79
55
|
- !ruby/object:Gem::Dependency
|
80
|
-
name:
|
81
|
-
ZmFzdF94cw==
|
56
|
+
name: fast_xs
|
82
57
|
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
58
|
requirements:
|
85
|
-
- -
|
86
|
-
fj4=
|
59
|
+
- - "~>"
|
87
60
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
89
|
-
MC44
|
61
|
+
version: '0.8'
|
90
62
|
type: :runtime
|
91
63
|
prerelease: false
|
92
64
|
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
65
|
requirements:
|
95
|
-
- -
|
96
|
-
fj4=
|
66
|
+
- - "~>"
|
97
67
|
- !ruby/object:Gem::Version
|
98
|
-
version:
|
99
|
-
MC44
|
68
|
+
version: '0.8'
|
100
69
|
- !ruby/object:Gem::Dependency
|
101
|
-
name:
|
102
|
-
bW9naWxlZnMtY2xpZW50
|
70
|
+
name: mogilefs-client
|
103
71
|
requirement: !ruby/object:Gem::Requirement
|
104
|
-
none: false
|
105
72
|
requirements:
|
106
|
-
- -
|
107
|
-
fj4=
|
73
|
+
- - "~>"
|
108
74
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
110
|
-
My40
|
75
|
+
version: '3.4'
|
111
76
|
type: :runtime
|
112
77
|
prerelease: false
|
113
78
|
version_requirements: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
79
|
requirements:
|
116
|
-
- -
|
117
|
-
fj4=
|
80
|
+
- - "~>"
|
118
81
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
120
|
-
My40
|
82
|
+
version: '3.4'
|
121
83
|
- !ruby/object:Gem::Dependency
|
122
|
-
name:
|
123
|
-
bm9rb2dpcmk=
|
84
|
+
name: nokogiri
|
124
85
|
requirement: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
86
|
requirements:
|
127
|
-
- -
|
128
|
-
fj4=
|
87
|
+
- - "~>"
|
129
88
|
- !ruby/object:Gem::Version
|
130
|
-
version:
|
131
|
-
MS41
|
89
|
+
version: '1.5'
|
132
90
|
type: :runtime
|
133
91
|
prerelease: false
|
134
92
|
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
93
|
requirements:
|
137
|
-
- -
|
138
|
-
fj4=
|
94
|
+
- - "~>"
|
139
95
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
141
|
-
MS41
|
96
|
+
version: '1.5'
|
142
97
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
144
|
-
c2VxdWVs
|
98
|
+
name: sequel
|
145
99
|
requirement: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
100
|
requirements:
|
148
|
-
- -
|
149
|
-
fj4=
|
101
|
+
- - "~>"
|
150
102
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
152
|
-
My40MQ==
|
153
|
-
- - !binary |-
|
154
|
-
Pj0=
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version: !binary |-
|
157
|
-
My40MS4w
|
103
|
+
version: '4.0'
|
158
104
|
type: :runtime
|
159
105
|
prerelease: false
|
160
106
|
version_requirements: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
107
|
requirements:
|
163
|
-
- -
|
164
|
-
fj4=
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: !binary |-
|
167
|
-
My40MQ==
|
168
|
-
- - !binary |-
|
169
|
-
Pj0=
|
108
|
+
- - "~>"
|
170
109
|
- !ruby/object:Gem::Version
|
171
|
-
version:
|
172
|
-
My40MS4w
|
110
|
+
version: '4.0'
|
173
111
|
- !ruby/object:Gem::Dependency
|
174
|
-
name:
|
175
|
-
dW5pY29ybg==
|
112
|
+
name: unicorn
|
176
113
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
114
|
requirements:
|
179
|
-
- -
|
180
|
-
fj4=
|
115
|
+
- - "~>"
|
181
116
|
- !ruby/object:Gem::Version
|
182
|
-
version:
|
183
|
-
NC40LjA=
|
117
|
+
version: 4.4.0
|
184
118
|
type: :development
|
185
119
|
prerelease: false
|
186
120
|
version_requirements: !ruby/object:Gem::Requirement
|
187
|
-
none: false
|
188
121
|
requirements:
|
189
|
-
- -
|
190
|
-
fj4=
|
122
|
+
- - "~>"
|
191
123
|
- !ruby/object:Gem::Version
|
192
|
-
version:
|
193
|
-
NC40LjA=
|
124
|
+
version: 4.4.0
|
194
125
|
- !ruby/object:Gem::Dependency
|
195
|
-
name:
|
196
|
-
d3Jvbmdkb2M=
|
126
|
+
name: wrongdoc
|
197
127
|
requirement: !ruby/object:Gem::Requirement
|
198
|
-
none: false
|
199
128
|
requirements:
|
200
|
-
- -
|
201
|
-
fj4=
|
129
|
+
- - "~>"
|
202
130
|
- !ruby/object:Gem::Version
|
203
|
-
version:
|
204
|
-
MS42LjE=
|
131
|
+
version: '1.8'
|
205
132
|
type: :development
|
206
133
|
prerelease: false
|
207
134
|
version_requirements: !ruby/object:Gem::Requirement
|
208
|
-
none: false
|
209
135
|
requirements:
|
210
|
-
- -
|
211
|
-
fj4=
|
136
|
+
- - "~>"
|
212
137
|
- !ruby/object:Gem::Version
|
213
|
-
version:
|
214
|
-
|
215
|
-
|
216
|
-
|
138
|
+
version: '1.8'
|
139
|
+
description: |-
|
140
|
+
omgdav exposes an existing MogileFS domain over WebDAV. There is
|
217
141
|
absolutely no commitment or modification needed to your existing
|
218
|
-
|
219
|
-
|
220
|
-
email: !binary |-
|
221
|
-
bm9ybWFscGVyc29uQHloYnQubmV0
|
142
|
+
MogileFS installation to try omgdav in read-only mode.
|
143
|
+
email: normalperson@yhbt.net
|
222
144
|
executables:
|
223
|
-
-
|
224
|
-
|
225
|
-
- !binary |-
|
226
|
-
b21nZGF2LXN5bmM=
|
145
|
+
- omgdav-setup
|
146
|
+
- omgdav-sync
|
227
147
|
extensions: []
|
228
148
|
extra_rdoc_files:
|
229
149
|
- ChangeLog
|
230
150
|
- NEWS
|
231
151
|
- README
|
232
152
|
files:
|
233
|
-
- .document
|
234
|
-
- .gitignore
|
235
|
-
- .manifest
|
236
|
-
- .wrongdoc.yml
|
153
|
+
- ".document"
|
154
|
+
- ".gitignore"
|
155
|
+
- ".manifest"
|
156
|
+
- ".wrongdoc.yml"
|
237
157
|
- COPYING
|
238
158
|
- ChangeLog
|
239
159
|
- GIT-VERSION-FILE
|
@@ -251,6 +171,8 @@ files:
|
|
251
171
|
- lib/omgdav/db.rb
|
252
172
|
- lib/omgdav/delete.rb
|
253
173
|
- lib/omgdav/get.rb
|
174
|
+
- lib/omgdav/get_cache1.rb
|
175
|
+
- lib/omgdav/get_cache_dalli.rb
|
254
176
|
- lib/omgdav/http_get.rb
|
255
177
|
- lib/omgdav/input_wrapper.rb
|
256
178
|
- lib/omgdav/migrations/0001_initial.rb
|
@@ -275,6 +197,7 @@ files:
|
|
275
197
|
- test/test_delete.rb
|
276
198
|
- test/test_litmus.rb
|
277
199
|
- test/test_move.rb
|
200
|
+
- test/test_mtime.rb
|
278
201
|
- test/test_omgdav_app.rb
|
279
202
|
- test/test_propfind.rb
|
280
203
|
- test/test_proppatch.rb
|
@@ -285,58 +208,43 @@ files:
|
|
285
208
|
- test/test_worm.rb
|
286
209
|
homepage: http://bogomips.org/omgdav/README
|
287
210
|
licenses:
|
288
|
-
-
|
289
|
-
|
211
|
+
- AGPLv3+
|
212
|
+
metadata: {}
|
290
213
|
post_install_message:
|
291
214
|
rdoc_options:
|
292
|
-
- -t
|
215
|
+
- "-t"
|
293
216
|
- omgdav - Rack app for bridging WebDAV and MogileFS
|
294
|
-
- -W
|
217
|
+
- "-W"
|
295
218
|
- http://bogomips.org/omgdav.git/tree/%s
|
296
219
|
require_paths:
|
297
220
|
- lib
|
298
221
|
required_ruby_version: !ruby/object:Gem::Requirement
|
299
|
-
none: false
|
300
222
|
requirements:
|
301
|
-
- -
|
302
|
-
fj4=
|
223
|
+
- - ">="
|
303
224
|
- !ruby/object:Gem::Version
|
304
|
-
version:
|
305
|
-
MS45
|
225
|
+
version: '1.9'
|
306
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
307
|
-
none: false
|
308
227
|
requirements:
|
309
|
-
- -
|
228
|
+
- - ">="
|
310
229
|
- !ruby/object:Gem::Version
|
311
230
|
version: '0'
|
312
231
|
requirements: []
|
313
232
|
rubyforge_project:
|
314
|
-
rubygems_version:
|
233
|
+
rubygems_version: 2.2.2
|
315
234
|
signing_key:
|
316
|
-
specification_version:
|
235
|
+
specification_version: 4
|
317
236
|
summary: Rack app for bridging WebDAV and MogileFS
|
318
237
|
test_files:
|
319
|
-
-
|
320
|
-
|
321
|
-
-
|
322
|
-
|
323
|
-
-
|
324
|
-
|
325
|
-
-
|
326
|
-
|
327
|
-
-
|
328
|
-
|
329
|
-
-
|
330
|
-
|
331
|
-
-
|
332
|
-
dGVzdC90ZXN0X3Byb3BmaW5kLnJi
|
333
|
-
- !binary |-
|
334
|
-
dGVzdC90ZXN0X3VybG1hcC5yYg==
|
335
|
-
- !binary |-
|
336
|
-
dGVzdC90ZXN0X2RlbGV0ZS5yYg==
|
337
|
-
- !binary |-
|
338
|
-
dGVzdC90ZXN0X3JlYWRvbmx5LnJi
|
339
|
-
- !binary |-
|
340
|
-
dGVzdC90ZXN0X3Byb3BwYXRjaC5yYg==
|
341
|
-
- !binary |-
|
342
|
-
dGVzdC90ZXN0X2NvcHkucmI=
|
238
|
+
- test/test_copy.rb
|
239
|
+
- test/test_readonly.rb
|
240
|
+
- test/test_litmus.rb
|
241
|
+
- test/test_put.rb
|
242
|
+
- test/test_propfind.rb
|
243
|
+
- test/test_move.rb
|
244
|
+
- test/test_mtime.rb
|
245
|
+
- test/test_worm.rb
|
246
|
+
- test/test_sync.rb
|
247
|
+
- test/test_proppatch.rb
|
248
|
+
- test/test_delete.rb
|
249
|
+
- test/test_urlmap.rb
|
250
|
+
- test/test_omgdav_app.rb
|