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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3adae8af29b5bf23fca9832843d431f9ecac1a3a185309185858109de26c9ea
4
- data.tar.gz: 180afd3e6ad41a51a63c3ddd8ecfa5920519c9135180c74ea1cc10de631dd629
3
+ metadata.gz: 3323f568d221fde7de4cd30f7450b46444f48bcfe71b2e0dd16acfe84d97fd14
4
+ data.tar.gz: 39318899de695422ef75292f4e5c5a8cf3271b91ef0d474fdc1305ebfd78dead
5
5
  SHA512:
6
- metadata.gz: 2324d4048ddc0d01ad140393850b36c4615cf6104d60251d868563171499b6f5505f761ed1b225a0aa9851fcfadc7b9c6aed1bc9b6ddb068f51d4b9eee6c4d40
7
- data.tar.gz: aea6ac1df0926cff12f09f9547126cb6c449343e62c91f40c1615397396c80608c531c4c2a02faf957f885e18357c92982abf9510f8e7a22c8e3589a3d41627c
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: <<~HELP,
39
- Usage:
40
- filedepot versions HANDLE
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
- puts "Pushed #{file_path} as #{handle} (version #{storage.current_version(handle)})"
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 "Pulled #{handle} (version #{info[:version_num]}) to #{target_path}"
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 versions(handle)
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
- date_str = epoch ? Time.at(epoch).to_s : ""
103
- [v, date_str]
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)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Filedepot
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
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.0
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
  - ''