filedepot 0.2.0 → 0.2.1
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 +4 -4
- data/lib/filedepot/cli.rb +34 -15
- data/lib/filedepot/storage/base.rb +24 -0
- data/lib/filedepot/storage_ssh.rb +16 -3
- data/lib/filedepot/version.rb +1 -1
- metadata +29 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3323f568d221fde7de4cd30f7450b46444f48bcfe71b2e0dd16acfe84d97fd14
|
|
4
|
+
data.tar.gz: 39318899de695422ef75292f4e5c5a8cf3271b91ef0d474fdc1305ebfd78dead
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 37f23733b8942db6547ab12960cef9308717f1836ff4c1ae6959c3a1196c00195508f4a5d996d8b9efd10a7ac93552799d633fa11e475f6575ddccee690985ee
|
|
7
|
+
data.tar.gz: 70f21d4037d84be1cc71c12032eb7e31253b304511af80e8d6fb7e397823e87a9c4718db35466bfe746ca3cfc249a089bc65e534d1e3330240196a5dc703c8a0
|
data/lib/filedepot/cli.rb
CHANGED
|
@@ -35,19 +35,9 @@ module Filedepot
|
|
|
35
35
|
filedepot pull test --version 2
|
|
36
36
|
filedepot pull test --version 2 --path ./test/file.txt
|
|
37
37
|
HELP
|
|
38
|
-
versions:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
List all versions of a handle. Each version has an integer ID from 1 to n.
|
|
43
|
-
HELP
|
|
44
|
-
delete: <<~HELP
|
|
45
|
-
Usage:
|
|
46
|
-
filedepot delete HANDLE [VERSION]
|
|
47
|
-
|
|
48
|
-
After confirmation, deletes all versions of a file.
|
|
49
|
-
If VERSION is specified, deletes only that specific version.
|
|
50
|
-
HELP
|
|
38
|
+
versions: "Usage: filedepot versions HANDLE\n\nList all versions of a handle. Each version has an integer ID from 1 to n.",
|
|
39
|
+
delete: "Usage: filedepot delete HANDLE [VERSION]\n\nAfter confirmation, deletes all versions of a file.\nIf VERSION is specified, deletes only that specific version.",
|
|
40
|
+
info: "Usage: filedepot info HANDLE\n\nShow info for a handle: remote base path and current version."
|
|
51
41
|
}.freeze
|
|
52
42
|
|
|
53
43
|
desc "config", "Open the config file using $EDITOR"
|
|
@@ -68,7 +58,10 @@ module Filedepot
|
|
|
68
58
|
|
|
69
59
|
storage = Storage::Base.for(source)
|
|
70
60
|
storage.push(handle, file_path)
|
|
71
|
-
|
|
61
|
+
version = storage.current_version(handle)
|
|
62
|
+
puts "Pushed #{file_path} as #{handle} (version #{version})"
|
|
63
|
+
uploaded_url = storage.url(handle, version, File.basename(file_path))
|
|
64
|
+
puts uploaded_url if uploaded_url
|
|
72
65
|
end
|
|
73
66
|
|
|
74
67
|
desc "pull HANDLE", "Get file from storage"
|
|
@@ -93,6 +86,8 @@ module Filedepot
|
|
|
93
86
|
info = storage.pull_info(handle, version, local_path)
|
|
94
87
|
target_path = info[:target_path]
|
|
95
88
|
|
|
89
|
+
puts "Pulling #{handle} (version #{info[:version_num]})"
|
|
90
|
+
|
|
96
91
|
parent_dir = File.dirname(target_path)
|
|
97
92
|
unless parent_dir == "." || File.directory?(parent_dir)
|
|
98
93
|
return unless confirm?("create local directory #{parent_dir}, y/n?")
|
|
@@ -104,7 +99,7 @@ module Filedepot
|
|
|
104
99
|
end
|
|
105
100
|
|
|
106
101
|
storage.pull(handle, version, target_path)
|
|
107
|
-
puts "
|
|
102
|
+
puts "pulled to #{target_path}"
|
|
108
103
|
end
|
|
109
104
|
|
|
110
105
|
desc "versions HANDLE", "List all versions of a handle (each version has an integer from 1 to n)"
|
|
@@ -135,6 +130,29 @@ module Filedepot
|
|
|
135
130
|
end
|
|
136
131
|
end
|
|
137
132
|
|
|
133
|
+
desc "info HANDLE", "Show info for a handle"
|
|
134
|
+
def info(handle = nil)
|
|
135
|
+
if handle.nil?
|
|
136
|
+
puts COMMAND_HELP[:info]
|
|
137
|
+
return
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
source = Config.current_source
|
|
141
|
+
if source.nil?
|
|
142
|
+
puts "Error: No storage source configured. Run 'filedepot config' to set up."
|
|
143
|
+
return
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
storage = Storage::Base.for(source)
|
|
147
|
+
data = storage.info(handle)
|
|
148
|
+
|
|
149
|
+
puts "handle: #{data[:handle]}"
|
|
150
|
+
puts "remote_base_path: #{data[:remote_base_path]}"
|
|
151
|
+
puts "current version: #{data[:current_version]}"
|
|
152
|
+
puts "updated at: #{data[:updated_at]}" if data[:updated_at]
|
|
153
|
+
puts "latest version url: #{data[:latest_version_url]}" if data[:latest_version_url]
|
|
154
|
+
end
|
|
155
|
+
|
|
138
156
|
desc "delete HANDLE [VERSION]", "After confirmation, delete all versions of a file; or only a specific version if specified"
|
|
139
157
|
def delete(handle = nil, version = nil)
|
|
140
158
|
if handle.nil?
|
|
@@ -166,6 +184,7 @@ module Filedepot
|
|
|
166
184
|
puts " filedepot push HANDLE FILE Send file to current storage"
|
|
167
185
|
puts " filedepot pull HANDLE [--path PATH] [--version N] Get file from storage"
|
|
168
186
|
puts " filedepot versions HANDLE List all versions of a handle"
|
|
187
|
+
puts " filedepot info HANDLE Show info for a handle"
|
|
169
188
|
puts " filedepot delete HANDLE [VER] Delete file(s) after confirmation"
|
|
170
189
|
puts ""
|
|
171
190
|
puts "Use 'filedepot help COMMAND' for more information on a command."
|
|
@@ -52,10 +52,34 @@ module Filedepot
|
|
|
52
52
|
raise "not implemented"
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
+
def versions_data(handle)
|
|
56
|
+
raise "not implemented"
|
|
57
|
+
end
|
|
58
|
+
|
|
55
59
|
def delete(handle, version = nil)
|
|
56
60
|
raise "not implemented"
|
|
57
61
|
end
|
|
58
62
|
|
|
63
|
+
def info(handle)
|
|
64
|
+
data = versions_data(handle)
|
|
65
|
+
latest = data.first
|
|
66
|
+
result = {
|
|
67
|
+
handle: handle,
|
|
68
|
+
remote_base_path: remote_base_path,
|
|
69
|
+
current_version: current_version(handle)
|
|
70
|
+
}
|
|
71
|
+
result[:updated_at] = latest[:datetime] if latest
|
|
72
|
+
result[:latest_version_url] = latest[:url] if latest && latest[:url]
|
|
73
|
+
result
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def url(handle, version, filename)
|
|
77
|
+
base = @source["public_base_path"].to_s.sub(%r{/$}, "")
|
|
78
|
+
return nil if base.empty? || filename.nil? || filename.empty?
|
|
79
|
+
|
|
80
|
+
[base, handle, version, filename].join("/").gsub(%r{/+}, "/")
|
|
81
|
+
end
|
|
82
|
+
|
|
59
83
|
protected
|
|
60
84
|
|
|
61
85
|
def remote_base_path
|
|
@@ -93,18 +93,31 @@ module Filedepot
|
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
-
def
|
|
96
|
+
def versions_data(handle)
|
|
97
97
|
ssh_session do |ssh|
|
|
98
98
|
versions_list = versions_for(ssh, handle).sort.reverse
|
|
99
99
|
versions_list.map do |v|
|
|
100
100
|
version_dir = File.join(remote_handle_path(handle), v.to_s)
|
|
101
101
|
epoch = stat_mtime(ssh, version_dir)
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
remote_file = first_file_in_dir(ssh, version_dir)
|
|
103
|
+
path = remote_file || version_dir
|
|
104
|
+
filename = remote_file ? File.basename(remote_file) : nil
|
|
105
|
+
{
|
|
106
|
+
version: v,
|
|
107
|
+
datetime: epoch ? Time.at(epoch) : nil,
|
|
108
|
+
path: path,
|
|
109
|
+
handle: handle,
|
|
110
|
+
filename: filename,
|
|
111
|
+
url: url(handle, v, filename)
|
|
112
|
+
}
|
|
104
113
|
end
|
|
105
114
|
end
|
|
106
115
|
end
|
|
107
116
|
|
|
117
|
+
def versions(handle)
|
|
118
|
+
versions_data(handle).map { |d| [d[:version], d[:datetime] ? d[:datetime].to_s : ""] }
|
|
119
|
+
end
|
|
120
|
+
|
|
108
121
|
def delete(handle, version = nil)
|
|
109
122
|
ssh_session do |ssh|
|
|
110
123
|
handle_dir = remote_handle_path(handle)
|
data/lib/filedepot/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: filedepot
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Filedepot
|
|
@@ -51,6 +51,34 @@ dependencies:
|
|
|
51
51
|
- - "~>"
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '1.3'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: minitest
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '5.0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '5.0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rake
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '13.0'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '13.0'
|
|
54
82
|
description: Command-line tool to sync files on remote storage via SSH
|
|
55
83
|
email:
|
|
56
84
|
- ''
|