cnvrg 0.7.7 → 0.7.9

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
  SHA1:
3
- metadata.gz: dd18cf5dd5400ab69be84219df510ab65229aac4
4
- data.tar.gz: f06a47bf63d07b71b432af21e268c9b6bc7f57ab
3
+ metadata.gz: 2b19ed887eb07e3f10c710d73849c7578cf10824
4
+ data.tar.gz: 397910ae8ce973da74c4b921ab6fc2e59ea63388
5
5
  SHA512:
6
- metadata.gz: 9447ae7930c2291b33801f474942e72c0eb90e2e39b37ebd3c5fbb7f040bab29942e044aa21aef58afcc8624569b8bd40be57cdb5739eaf897aeaf5b50cb7be6
7
- data.tar.gz: 5d0b5e162a53b62ea170e0bd5d2c53c15ef10a2c00bc71d1a4b5a7237494d6012c15b86b372825f3a294b12e3e7c6138db2121eb6ce5d8a825b190032b80775d
6
+ metadata.gz: 47f085ae30d741751dfca95a8196cc794460ce36cb1cb9e2847a577cb94936488f8c2abd0571d3cc6e4a894aa01bf2d8fb1efbb7fe8199770bdaca92466ed91a
7
+ data.tar.gz: '06699e08c81ed1626ef49ac09f2a5b8deb90b29c41ecd3b1d6b6984c5f4f8351848aea342b397b3186b7dbfffab0459bccbfa9c6fbf744a94c16810d2914a449'
@@ -45,10 +45,4 @@ Gem::Specification.new do |spec|
45
45
  spec.add_runtime_dependency 'ruby-progressbar'
46
46
  spec.add_runtime_dependency 'net-ssh'
47
47
  spec.add_runtime_dependency 'down'
48
-
49
-
50
-
51
-
52
-
53
- end
54
-
48
+ end
@@ -61,8 +61,9 @@ module Cnvrg
61
61
  success = false
62
62
  while !success and retries < 20
63
63
  begin
64
- response = conn.get "#{resource}", data
64
+ response = conn.get "#{resource}", data
65
65
  success = true
66
+ Cnvrg::API.parse_version(response)
66
67
  rescue => e
67
68
  sleep(5)
68
69
  retries +=1
@@ -89,6 +90,7 @@ module Cnvrg
89
90
  response = conn.post "#{resource}", data if method.eql? 'POST'
90
91
  response = conn.put "#{resource}", data if method.eql? 'PUT'
91
92
  success = true
93
+ Cnvrg::API.parse_version(response)
92
94
 
93
95
  rescue => e
94
96
  sleep(5)
@@ -119,6 +121,7 @@ module Cnvrg
119
121
  begin
120
122
  response = conn.post "#{resource}", new_data
121
123
  success = true
124
+ Cnvrg::API.parse_version(response)
122
125
 
123
126
  rescue => e
124
127
  sleep(5)
@@ -171,6 +174,7 @@ module Cnvrg
171
174
  data[:file] = Faraday::UploadIO.new("#{temp_path}", "plain/text")
172
175
 
173
176
  response = conn.post "#{endpoint_uri}/#{resource}", data
177
+ Cnvrg::API.parse_version(response)
174
178
 
175
179
  FileUtils.rm_rf(temp_path)
176
180
  if response.to_hash[:status] == 404
@@ -185,6 +189,7 @@ module Cnvrg
185
189
  end
186
190
  when 'DELETE'
187
191
  response = conn.delete "#{endpoint_uri}/#{resource}", data
192
+ Cnvrg::API.parse_version(response)
188
193
  if response.to_hash[:status] == 404
189
194
  return false
190
195
  end
@@ -215,6 +220,15 @@ module Cnvrg
215
220
  "Oops, an error occurred! Reason: #{response['message']}"
216
221
  end
217
222
 
223
+ def self.parse_version(resp)
224
+ begin
225
+ version = resp.headers["cnvrg-version"]
226
+ Cnvrg::Helpers.update_version(version)
227
+ rescue => e
228
+ Cnvrg::Logger.log_error(e)
229
+ end
230
+ end
231
+
218
232
  # Internal: Ensure the response returns a HTTP 200.
219
233
  #
220
234
  # If the response status isn't a HTTP 200, we need to find out why. This
@@ -23,6 +23,9 @@ require 'cnvrg/datafiles'
23
23
  require 'cnvrg/data'
24
24
  require 'cnvrg/ssh'
25
25
  require 'cnvrg/result'
26
+ require 'cnvrg/logger'
27
+ require 'cnvrg/cli/flow'
28
+ require 'cnvrg/cli/task'
26
29
  require 'logstash-logger'
27
30
  require 'cnvrg/job'
28
31
  require 'docker'
@@ -157,9 +160,18 @@ module Cnvrg
157
160
  super
158
161
  end
159
162
  end
160
- desc "data", "upload and manage datasets", :hide => true
163
+ desc "data", "upload and manage datasets", :hide => false
161
164
  subcommand "data", Data
162
165
 
166
+ # desc "flow", "mange project flows", :hide => true
167
+ # subcommand "flow", Cnvrg::Commands::Flow
168
+
169
+
170
+ def initialize(*args)
171
+ super
172
+ self.log_handler
173
+ end
174
+
163
175
  desc "", "", :hide => true
164
176
 
165
177
  def test
@@ -207,7 +219,7 @@ module Cnvrg
207
219
  owner = url_parts[project_index - 1]
208
220
  res = Cnvrg::API.request("users/#{owner}/datasets/#{slug}", 'GET')
209
221
  unless Cnvrg::CLI.is_response_success(res, false)
210
- raise SignalException.new()
222
+ raise SignalException.new
211
223
  end
212
224
  @dataset = Dataset.new(Dir.pwd)
213
225
  result = res['result']
@@ -873,7 +885,7 @@ module Cnvrg
873
885
  :autofinish => true)
874
886
 
875
887
  while files['keys'].length > 0
876
-
888
+ Cnvrg::Logger.log_info("download multiple files, #{downloaded_files.size} files downloaded")
877
889
  @files.download_multiple_files_s3(files, dataset_home, progressbar: progressbar, read_only: read)
878
890
 
879
891
  downloaded_files += files['keys'].length
@@ -1249,7 +1261,7 @@ module Cnvrg
1249
1261
  # say "Please fix #{num}, and retry", Thor::Shell::Color::RED
1250
1262
  # exit(1)
1251
1263
  #
1252
- # end
1264
+ # en
1253
1265
  check = Helpers.checkmark()
1254
1266
 
1255
1267
  if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
@@ -1804,9 +1816,7 @@ module Cnvrg
1804
1816
  @files = Cnvrg::Files.new(@project.owner, slug)
1805
1817
  response = @project.clone(remote, commit_to_clone)
1806
1818
  Cnvrg::CLI.is_response_success response
1807
- working_dir = project_home
1808
1819
  idx = {commit: response["result"]["commit"], tree: response["result"]["tree"]}
1809
- File.open(working_dir + "/.cnvrg/idx.yml", "w+") {|f| f.write idx.to_yaml}
1810
1820
 
1811
1821
  log_message("Downloading files", Thor::Shell::Color::BLUE)
1812
1822
  files = response["result"]["files"]
@@ -1814,6 +1824,7 @@ module Cnvrg
1814
1824
  if !files.nil?
1815
1825
  begin
1816
1826
  download_result = @files.download_multpile_files_s3(files, project_home)
1827
+ @project.set_idx(idx)
1817
1828
 
1818
1829
  rescue Interrupt
1819
1830
  log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
@@ -1876,6 +1887,7 @@ module Cnvrg
1876
1887
  end
1877
1888
  successful_changes = response["result"]["tree"]
1878
1889
  if !successful_changes.nil? and is_success
1890
+ @project.set_idx(idx)
1879
1891
  Project.verify_cnvrgignore_exist(project_name,remote)
1880
1892
  log_message("Done.\nDownloaded #{successful_changes.size}/#{response["result"]["tree"].size} files", Thor::Shell::Color::GREEN)
1881
1893
  else
@@ -1919,6 +1931,7 @@ module Cnvrg
1919
1931
  verify_logged_in()
1920
1932
  log_start(__method__, args, options)
1921
1933
  @project = Project.new(get_project_home)
1934
+
1922
1935
  new_branch = options["new_branch"] || false
1923
1936
  force = options["force"] || false
1924
1937
 
@@ -2030,9 +2043,6 @@ module Cnvrg
2030
2043
  if upload_res < 0
2031
2044
  return
2032
2045
  end
2033
- # if !upload_res
2034
- # return
2035
- # end
2036
2046
  invoke :end_commit_data,[commit, success: true, uploaded_files: upload_res] , :new_branch=>new_branch, :force =>force
2037
2047
  if tags
2038
2048
  log_message('Uploading Tags', Thor::Shell::Color::BLUE)
@@ -2051,70 +2061,57 @@ module Cnvrg
2051
2061
  log_message('There was some error in uploading Tags', Thor::Shell::Color::RED)
2052
2062
  end
2053
2063
  end
2054
- rescue => e
2055
- say "\nAborting", Thor::Shell::Color::BLUE
2056
- dataset_dir = is_cnvrg_dir(Dir.pwd)
2057
- return false if dataset_dir.blank?
2058
- @dataset = Dataset.new(dataset_dir)
2059
- @dataset.revert_to_last_commit
2060
- return false
2061
- rescue SignalException
2062
- say "\nAborting", Thor::Shell::Color::BLUE
2063
- dataset_dir = is_cnvrg_dir(Dir.pwd)
2064
- return false if dataset_dir.blank?
2065
- @dataset = Dataset.new(dataset_dir)
2066
- @dataset.revert_to_last_commit
2067
- return false
2068
- end
2064
+ rescue => e
2065
+ Cnvrg::Logger.log_error(e)
2066
+ say "\nAborting", Thor::Shell::Color::BLUE
2067
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
2068
+ return false if dataset_dir.blank?
2069
+ @dataset = Dataset.new(dataset_dir)
2070
+ return false
2071
+ rescue SignalException => e
2072
+ Cnvrg::Logger.log_error(e)
2073
+ say "\nAborting", Thor::Shell::Color::BLUE
2074
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
2075
+ return false if dataset_dir.blank?
2076
+ @dataset = Dataset.new(dataset_dir)
2077
+ return false
2078
+ end
2069
2079
  end
2070
2080
 
2071
2081
  desc 'start_commit', 'start data commit'
2072
2082
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
2073
- method_option :direct, :type => :boolean, :aliases => ["-d","--direct"], :desc => "was called directed", :default => true
2074
- method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
2083
+ method_option :direct, :type => :boolean, :aliases => ["-d", "--direct"], :desc => "was called directed", :default => true
2084
+ method_option :force, :type => :boolean, :aliases => ["-f", "--force"], :default => false
2075
2085
  method_option :chunk_size, :type => :numeric, :aliases => ["-ch"], :default => 0
2076
2086
 
2077
2087
  def start_commit_data()
2078
- begin
2079
- verify_logged_in(true)
2080
- log_start(__method__, args, options)
2081
- dataset_dir = is_cnvrg_dir(Dir.pwd)
2082
- direct = options[:direct]
2083
- new_branch = options["new_branch"] || false
2084
- force = options["force"] || false
2085
- chunk_size = options["chunk_size"] || false
2086
- commit_sha1 = nil
2087
- @dataset = Dataset.new(dataset_dir)
2088
- @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2089
- next_commit = @dataset.get_next_commit #if there was a partial commit..
2090
- chunks = (@dataset.list_all_files.length.to_f / chunk_size).ceil
2091
- resp = @files.start_commit(new_branch, force, chunks: chunks, current_commit: next_commit || @dataset.last_local_commit)
2092
- if !resp['result']['can_commit']
2093
- log_message("Cant upload files because a new version of this dataset exists, please download it or upload with --force", Thor::Shell::Color::RED)
2094
- exit(1)
2095
- end
2096
- # if next_commit.present? #keep from existing commit.
2097
- # resp = @files.get_commit(next_commit)
2098
- # if resp["result"]["status"].eql? "new"
2099
- # resp = @files.start_commit(new_branch,force, chunks: chunks)
2100
- # commit_sha1 = resp["result"]["commit_sha1"]
2101
- # @dataset.set_next_commit(commit_sha1)
2102
- # else
2103
- # commit_sha1 = resp["result"]["commit_sha1"]
2104
- # end
2105
- # else
2106
- # resp = @files.start_commit(new_branch,force, chunks: chunks)
2107
- # commit_sha1 = resp["result"]["commit_sha1"]
2108
- # @dataset.set_next_commit(commit_sha1)
2109
- # end
2110
- commit_sha1 = resp["result"]["commit_sha1"]
2111
- @dataset.set_next_commit(commit_sha1)
2112
- if direct
2113
- puts commit_sha1
2114
- end
2115
- return commit_sha1
2088
+ verify_logged_in(true)
2089
+ log_start(__method__, args, options)
2090
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
2091
+ direct = options[:direct]
2092
+ new_branch = options["new_branch"] || false
2093
+ force = options["force"] || false
2094
+ chunk_size = options["chunk_size"] || false
2095
+ commit_sha1 = nil
2096
+ @dataset = Dataset.new(dataset_dir)
2097
+ @dataset.backup_idx
2098
+ @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2099
+ next_commit = @dataset.get_next_commit #if there was a partial commit..
2100
+ chunks = (@dataset.list_all_files.length.to_f / chunk_size).ceil
2101
+ resp = @files.start_commit(new_branch, force, chunks: chunks, dataset: @dataset)
2102
+ if !resp['result']['can_commit']
2103
+ log_message("Cant upload files because a new version of this dataset exists, please download it or upload with --force", Thor::Shell::Color::RED)
2104
+ exit(1)
2105
+ end
2106
+ commit_sha1 = resp["result"]["commit_sha1"]
2107
+ unless commit_sha1.eql? next_commit
2108
+ @dataset.set_partial_commit(next_commit)
2116
2109
  end
2110
+ @dataset.set_next_commit(commit_sha1)
2111
+ return commit_sha1
2117
2112
  end
2113
+
2114
+
2118
2115
  desc 'end_commit', 'start data commit'
2119
2116
  method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
2120
2117
  method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
@@ -2128,15 +2125,16 @@ module Cnvrg
2128
2125
  @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2129
2126
  force = options["force"] || false
2130
2127
  resp = @files.end_commit(commit, force, success: success, uploaded_files: uploaded_files)
2131
- if (resp and resp["result"])
2128
+ if (resp.present? and resp["result"])
2132
2129
  check = Helpers.checkmark
2133
2130
  if resp["result"]["new_commit"].blank?
2134
- @dataset.revert_next_commit
2131
+ @dataset.revert_next_commit #removes the next commit
2135
2132
  log_message("#{check} Dataset is up to date", Thor::Shell::Color::GREEN)
2136
2133
  else
2137
2134
  log_message("#{check} Data files were updated successfully", Thor::Shell::Color::GREEN)
2138
- @dataset.set_next_commit(resp["result"]["commit_sha1"]) # no need fo rboth methods FIX
2139
- @dataset.remove_next_commit()
2135
+ @dataset.remove_next_commit #takes the next commit and put it as current commit
2136
+ @dataset.set_partial_commit(nil)
2137
+ @dataset.backup_idx
2140
2138
  end
2141
2139
  end
2142
2140
  end
@@ -2188,253 +2186,59 @@ module Cnvrg
2188
2186
 
2189
2187
  def upload_data_files(new_commit, *files)
2190
2188
  begin
2191
- verify_logged_in(true)
2192
- log_start(__method__, args, options)
2193
- dataset_dir = is_cnvrg_dir(Dir.pwd)
2194
- @dataset = Dataset.new(dataset_dir)
2195
- @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2196
- new_commit ||= @dataset.get_next_commit()
2197
- if new_commit.blank?
2198
- log_message("You must specify commit, run start_commit to create new commit", Thor::Shell::Color::RED)
2199
- return false
2200
- end
2201
- force = options[:force] || false
2202
- chunk_size = options[:chunk_size]
2203
- chunk_size = [chunk_size, 1].max
2204
- new_branch = options["new_branch"] || false
2205
- new_tree = {}
2206
- force = options["force"] || false
2207
- parallel_threads = options["parallel"] || ParallelThreads
2208
- all_files = @dataset.list_all_files
2209
- progressbar = ProgressBar.create(:title => "Upload Progress",
2210
- :progress_mark => '=',
2211
- :format => "%b>>%i| %p%% %t",
2212
- :starting_at => 0,
2213
- :total => all_files.length,
2214
- :autofinish => true)
2215
- files_uploaded = 0
2216
- all_files.each_slice(chunk_size).each do |list_files|
2217
- temp_tree = @dataset.generate_chunked_idx(list_files, threads: parallel_threads)
2218
-
2219
- upload_resp = @files.upload_multiple_files(new_commit, temp_tree, threads: parallel_threads, force: force, new_branch: new_branch, progressbar: progressbar)
2220
-
2221
- if upload_resp.is_a? Cnvrg::Result
2222
- log_message(upload_resp.msg, upload_resp.msg_color)
2223
- raise SignalException.new(upload_resp.msg)
2224
- # return -1
2225
-
2226
- else
2227
- files_uploaded += upload_resp
2228
- next if upload_resp == 0
2229
- end
2230
-
2231
- temp_tree.each do |k,v|
2232
- new_tree[k] = (v.present?) ? {sha1: v.try(:fetch, :sha1, nil), commit_time: nil} : nil
2233
- end
2234
- @dataset.write_idx(new_tree, new_commit)
2235
- end
2236
- return files_uploaded
2189
+ verify_logged_in(true)
2190
+ log_start(__method__, args, options)
2191
+ dataset_dir = is_cnvrg_dir(Dir.pwd)
2192
+ @dataset = Dataset.new(dataset_dir)
2193
+ @files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
2194
+ new_commit ||= @dataset.get_next_commit()
2195
+ partial_commit = @dataset.get_partial_commit
2196
+ if new_commit.blank?
2197
+ log_message("You must specify commit, run start_commit to create new commit", Thor::Shell::Color::RED)
2198
+ return false
2237
2199
  end
2238
-
2239
- # local_idx = @dataset.generate_idx
2240
- # result = @dataset.compare_idx(new_branch, commit=@dataset.last_local_commit, local_idx= local_idx, force=force, next_commit= next_commit)
2241
-
2242
- # commit_sha1 = result["result"]["commit"]
2243
- # if commit_sha1 != @dataset.last_local_commit and !@dataset.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?
2244
- # @dataset.remove_next_commit()
2245
- # @files.delete_commit(next_commit)
2246
- # log_message("Remote server has an updated version, please run `cnvrg data download` first or cnvrg data upload --new_branch", Thor::Shell::Color::BLUE)
2247
- # exit(1)
2248
- # end
2249
- # check = Helpers.checkmark()
2250
-
2251
-
2252
- # commit_time = result["result"]["commit_time"]
2253
- # already_uploaded = result["result"]["uploaded"]
2254
- # dirs_uploaded = []
2255
- # files_uploaded = []
2256
- # files_uploaded_names = []
2257
- # if !already_uploaded.nil? and !already_uploaded.empty?
2258
-
2259
- # dirs_uploaded = already_uploaded["dirs"]
2260
- # files_uploaded = already_uploaded["blobs"]
2261
- # if !files_uploaded.nil? and !files_uploaded.empty?
2262
- # files_uploaded_names = already_uploaded["blobs"].keys
2263
- # end
2264
-
2265
- # end
2266
-
2267
- # result = result["result"]["tree"]
2268
- # if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
2269
- # @files.delete_commit(next_commit)
2270
-
2271
- # log_message("#{check} Dataset is up to date", Thor::Shell::Color::GREEN, true)
2272
- # return false
2273
- # end
2274
- # log_message("Creating new commit for dataset: #{@dataset.slug}", Thor::Shell::Color::BLUE) unless options[:sync]
2275
-
2276
-
2277
- # # upload / update
2278
- # begin
2279
-
2280
- # parallel_options = {
2281
- # :progress => {
2282
- # :title => "Upload Progress",
2283
- # :progress_mark => '=',
2284
- # :format => "%b>>%i| %p%% %t",
2285
- # :starting_at => 0,
2286
- # :total => (result["added"] + result["updated_on_local"]).size,
2287
- # :autofinish => true
2288
- # },
2289
- # in_threads: ParallelThreads,
2290
- # isolation: true
2291
- # }
2292
- # successful_updates = []
2293
- # update_count =0
2294
- # update_total = (result["added"] + result["updated_on_local"] + result["deleted"]).size
2295
-
2296
- # if (result["added"] + result["updated_on_local"]).size > 0
2297
- # begin
2298
- # upload_result = Parallel.map((result["added"] + result["updated_on_local"]), parallel_options) do |f|
2299
- # absolute_path = "#{@dataset.local_path}/#{f}"
2300
- # relative_path = f.gsub(/^#{@dataset.local_path + "/"}/, "")
2301
- # if File.directory?(absolute_path)
2302
- # if dirs_uploaded.include? f
2303
- # #Already uploaded and didn't finish commit
2304
- # log_message("Already uploaded dir: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
2305
-
2306
- # next
2307
- # end
2308
- # log_message("uploading dir: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
2309
-
2310
- # resDir = @files.create_dir(absolute_path, relative_path, commit_sha1)
2311
- # if resDir
2312
- # update_count += 1
2313
- # successful_updates<< relative_path
2314
- # else
2315
- # log_message("Failed to upload directory: #{ relative_path }", Thor::Shell::Color::RED)
2316
-
2317
- # raise Parallel::Kill
2318
- # end
2319
-
2320
- # else
2321
- # if files_uploaded_names.include? f
2322
- # log_message("Already uploaded file: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
2323
-
2324
- # next
2325
- # end
2326
- # log_message("uploading: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
2327
-
2328
- # res = @files.upload_file(absolute_path, relative_path, commit_sha1)
2329
- # if res
2330
- # update_count += 1
2331
-
2332
- # successful_updates<< relative_path
2333
- # else
2334
- # log_message("Failed to upload: #{ File.basename(absolute_path) }", Thor::Shell::Color::RED)
2335
-
2336
- # raise Parallel::Kill
2337
-
2338
- # end
2339
- # end
2340
- # end
2341
- # rescue SignalException
2342
- # log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
2343
-
2344
-
2345
- # exit(1)
2346
- # end
2347
- # end
2348
-
2349
- # end
2350
- # successful_updates = upload_result.to_a + dirs_uploaded + files_uploaded_names
2351
- # successful_deletions =[]
2352
-
2353
-
2354
- # # delete
2355
-
2356
- # deleted = update_deleted(result["deleted"])
2357
- # begin
2358
-
2359
- # deleted_result = Parallel.map(deleted, in_threads: ParallelThreads) do |f|
2360
-
2361
- # relative_path = f.gsub(/^#{@dataset.local_path + "/"}/, "")
2362
- # if relative_path.end_with?("/")
2363
- # log_message("deleting dir: #{f}", Thor::Shell::Color::RED, options["verbose"])
2364
-
2365
- # if @files.delete_dir(f, relative_path, commit_sha1)
2366
- # successful_deletions << f
2367
- # else
2368
- # log_message("Failed to delete directory: #{ f }", Thor::Shell::Color::RED)
2369
- # raise Parallel::Kill
2370
-
2371
- # end
2372
- # else
2373
- # log_message("deleteing file: #{f}", Thor::Shell::Color::RED, options["verbose"])
2374
-
2375
- # if @files.delete_file(f, relative_path, commit_sha1)
2376
- # successful_deletions << f
2377
-
2378
- # else
2379
- # log_message("Failed to delete file: #{ f }", Thor::Shell::Color::RED)
2380
- # raise Parallel::Kill
2381
-
2382
-
2383
- # end
2384
- # end
2385
- # end
2386
-
2387
-
2388
- # successful_deletions += successful_deletions.select { |x| not x.nil? }
2389
-
2390
-
2391
- # successful_updates = successful_updates.select { |x| not x.nil? }
2392
-
2393
- # update_count = successful_updates.size
2394
-
2395
- # rescue SignalException
2396
- # say "User aborted", Thor::Shell::Color::RED
2397
- # exit(0)
2398
- # rescue => e
2399
- # log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
2400
- # log_error(e)
2401
- # exit(0)
2402
- # end
2403
- # if !result["deleted"].nil? and !result["deleted"].empty?
2404
- # update_count += result["deleted"].size
2405
- # end
2406
-
2407
- # if update_count == update_total
2408
- # begin
2409
- # @dataset.update_idx_with_files_commits!((successful_deletions+successful_updates), commit_time)
2410
-
2411
- # return true
2412
- # rescue => e
2413
- # log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
2414
-
2415
- # exit(1)
2416
-
2417
- # end
2418
-
2419
- # end
2420
- # rescue => e
2421
-
2422
- # log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
2423
- # log_error(e)
2424
-
2425
- # exit(1)
2426
- # rescue SignalException
2427
-
2428
- # say "\nAborting", Thor::Shell::Color::BLUE
2429
- # exit(1)
2430
- # end
2431
-
2200
+ force = options[:force] || false
2201
+ chunk_size = options[:chunk_size]
2202
+ chunk_size = [chunk_size, 1].max
2203
+ new_branch = options["new_branch"] || false
2204
+ new_tree = {}
2205
+ force = options["force"] || false
2206
+ parallel_threads = options["parallel"] || ParallelThreads
2207
+ all_files = @dataset.list_all_files
2208
+ progressbar = ProgressBar.create(:title => "Upload Progress",
2209
+ :progress_mark => '=',
2210
+ :format => "%b>>%i| %p%% %t",
2211
+ :starting_at => 0,
2212
+ :total => all_files.length,
2213
+ :autofinish => true)
2214
+ files_uploaded = 0
2215
+ all_files.each_slice(chunk_size).each do |list_files|
2216
+ Cnvrg::Logger.log_info("Uploading files into #{@dataset.slug}, #{files_uploaded} files uploaded")
2217
+ temp_tree = @dataset.generate_chunked_idx(list_files, threads: parallel_threads)
2218
+ upload_resp = @files.upload_multiple_files(new_commit, temp_tree,
2219
+ threads: parallel_threads,
2220
+ force: force,
2221
+ new_branch: new_branch,
2222
+ progressbar: progressbar,
2223
+ partial_commit: partial_commit)
2224
+ files_uploaded += upload_resp
2225
+ temp_tree.each do |k, v|
2226
+ new_tree[k] = (v.present?) ? {sha1: v.try(:fetch, :sha1, nil), commit_time: nil} : nil
2227
+ end
2228
+ end
2229
+ @dataset.write_tree(new_tree) #we dont want to re-run it every time so just on finish.
2230
+ rescue => e
2231
+ Cnvrg::Logger.log_error(e)
2232
+ raise e
2233
+ end
2234
+ return files_uploaded
2432
2235
  end
2433
2236
 
2434
2237
 
2435
2238
  desc 'upload', 'Upload updated files'
2436
2239
  method_option :ignore, :type => :string, :aliases => ["-i"], :desc => "ignore following files", :default => ""
2437
2240
  method_option :new_branch, :type => :boolean, :aliases => ["-nb", "--new_branch"], :desc => "create new branch of commits"
2241
+ method_option :in_exp, :type => :boolean, :aliases => ["-ie", "--in-exp"], :desc => "In Experiment"
2438
2242
  method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
2439
2243
  method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
2440
2244
  method_option :force, :type => :boolean, :aliases => ["-f", "--force"], :default => false
@@ -2446,7 +2250,7 @@ module Cnvrg
2446
2250
  method_option :job_slug, :type => :string, :aliases => ["--job"], :default => nil, :hide=>true
2447
2251
  method_option :job_type, :type => :string, :aliases => [ "--job_type"], :default => nil, :hide=>true
2448
2252
 
2449
- def upload(link = false, sync = false, direct = false, ignore_list = "", in_exp = false, force = false,output_dir="output",job_type=nil,job_slug=nil )
2253
+ def upload(link = false, sync = false, direct = false, ignore_list = "", in_exp = false, force = false, output_dir = "output", job_type = nil, job_slug = nil)
2450
2254
  begin
2451
2255
  # we are passing "force" twice.. doesnt really make sense :\\
2452
2256
  verify_logged_in(true)
@@ -2457,7 +2261,7 @@ module Cnvrg
2457
2261
  commit_msg = ""
2458
2262
  end
2459
2263
  return_id = options["return_id"]
2460
- @files = Cnvrg::Files.new(@project.owner, @project.slug)
2264
+ @files = Cnvrg::Files.new(@project.owner, @project.slug, project_home: get_project_home)
2461
2265
  ignore = options[:ignore] || ""
2462
2266
  force = options[:force] || force || false
2463
2267
  spec_files_to_upload = options["files"]
@@ -2467,19 +2271,19 @@ module Cnvrg
2467
2271
  spec_files_to_upload = spec_files_to_upload.split(",")
2468
2272
  end
2469
2273
  if @project.is_git
2470
- git_output_dir = options["output_dir"] || output_dir
2471
- if git_output_dir.present?
2472
- if git_output_dir.ends_with? "/"
2473
- git_output_dir = git_output_dir[0..-2]
2474
- end
2475
- list = @project.generate_output_dir(output_dir)
2476
- spec_files_to_upload = list
2477
- if spec_files_to_upload.blank?
2478
- log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
2274
+ git_output_dir = options["output_dir"] || output_dir
2275
+ if git_output_dir.present?
2276
+ if git_output_dir.ends_with? "/"
2277
+ git_output_dir = git_output_dir[0..-2]
2278
+ end
2279
+ list = @project.generate_output_dir(git_output_dir)
2280
+ spec_files_to_upload = list
2281
+ if spec_files_to_upload.blank?
2282
+ log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
2479
2283
  return true
2284
+ end
2285
+ force = true
2480
2286
  end
2481
- force = true
2482
- end
2483
2287
  end
2484
2288
 
2485
2289
  if ignore.nil? or ignore.empty?
@@ -2498,7 +2302,7 @@ module Cnvrg
2498
2302
  end
2499
2303
  new_branch = options["new_branch"] || @project.is_branch
2500
2304
 
2501
- result = @project.compare_idx(new_branch, force: force, deploy: options["deploy"],in_exp:in_exp, specific_files: spec_files_to_upload)
2305
+ result = @project.compare_idx(new_branch, force: force, deploy: options["deploy"], in_exp: in_exp, specific_files: spec_files_to_upload)
2502
2306
  commit = result["result"]["commit"]
2503
2307
 
2504
2308
  if !link
@@ -2511,7 +2315,12 @@ module Cnvrg
2511
2315
  end
2512
2316
  result = result["result"]["tree"]
2513
2317
  if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
2514
- log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
2318
+ msg = "#{check} Project is up to date"
2319
+ if return_id
2320
+ Cnvrg::Logger.jsonify(msg: msg, success: true)
2321
+ else
2322
+ log_message(msg, Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
2323
+ end
2515
2324
  return true
2516
2325
  end
2517
2326
  update_count = 0
@@ -2537,233 +2346,78 @@ module Cnvrg
2537
2346
  end
2538
2347
  job_type = options['job_type'] || job_type
2539
2348
  job_slug = options['job_slug'] || job_slug
2540
- commit_sha1 = @files.start_commit(new_branch, force: force, exp_start_commit:exp_start_commit,
2541
- job_type: job_type, job_slug: job_slug, start_commit: current_commit)["result"]["commit_sha1"]
2349
+ commit_sha1 = @files.start_commit(new_branch, force: force, exp_start_commit: exp_start_commit,
2350
+ job_type: job_type, job_slug: job_slug, start_commit: current_commit, message: options["message"])["result"]["commit_sha1"]
2542
2351
  # upload / update
2543
- begin
2544
- parallel_options = {
2545
- :progress => {
2546
- :title => "Upload Progress",
2547
- :progress_mark => '=',
2548
- :format => "%b>>%i| %p%% %t",
2549
- :starting_at => 0,
2550
- :total => (result["added"] + result["updated_on_local"]).size,
2551
- :autofinish => true
2552
- },
2553
- in_processes: ParallelProcesses,
2554
- in_thread: ParallelThreads,
2555
- isolation: true
2556
- }
2557
- if (result["added"] + result["updated_on_local"]).size > 0
2558
-
2559
- begin
2560
- upload_result = Parallel.map((result["added"] + result["updated_on_local"]), parallel_options) do |f|
2561
- absolute_path = "#{@project.local_path}/#{f}"
2562
- relative_path = f.gsub(/^#{@project.local_path + "/"}/, "")
2563
- if File.directory?(absolute_path)
2564
- log_message("uploading dir: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
2565
-
2566
- resDir = @files.create_dir(absolute_path, relative_path, commit_sha1)
2567
- if resDir
2568
- f
2569
- # progressbar.increment
2570
- update_count += 1
2571
- successful_updates << relative_path
2572
- else
2573
- log_message("Failed to upload directory: #{ relative_path }", Thor::Shell::Color::RED)
2574
-
2575
- raise Parallel::Kill
2576
- end
2577
-
2578
- else
2579
- log_message("uploading: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
2580
-
2581
- res = @files.upload_file(absolute_path, relative_path, commit_sha1)
2582
- if res
2583
- f
2584
- update_count += 1
2585
-
2586
- successful_updates << relative_path
2587
- else
2588
- log_message("Failed to upload: #{ File.basename(absolute_path) }", Thor::Shell::Color::RED)
2589
-
2590
- raise Parallel::Kill
2591
-
2592
- end
2593
- end
2594
- end
2595
- rescue SignalException
2596
- log_message("Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED)
2597
- @files.rollback_commit(commit_sha1)
2598
- return false
2599
- end
2600
- end
2601
-
2602
-
2603
- successful_updates = upload_result.to_a
2604
-
2605
-
2606
- # delete
2607
-
2608
- deleted = update_deleted(result["deleted"])
2609
- begin
2610
-
2611
- deleted_result = Parallel.map(deleted, in_processes: ParallelProcesses, in_thread: ParallelThreads) do |f|
2612
-
2613
- relative_path = f.gsub(/^#{@project.local_path + "/"}/, "")
2614
- if relative_path.end_with?("/")
2615
- log_message("deleting dir: #{f}", Thor::Shell::Color::RED, options["verbose"])
2616
-
2617
- if @files.delete_dir(f, relative_path, commit_sha1)
2618
- f
2619
- else
2620
- log_message("Failed to delete directory: #{ f }", Thor::Shell::Color::RED)
2621
-
2622
- end
2623
- else
2624
- log_message("deleteing file: #{f}", Thor::Shell::Color::RED, options["verbose"])
2625
-
2626
- if @files.delete_file(f, relative_path, commit_sha1)
2627
- f
2628
- else
2629
- log_message("Failed to delete file: #{ f }", Thor::Shell::Color::RED)
2630
-
2631
- end
2632
- end
2633
- end
2634
- rescue Interrupt
2635
- log_message("Couldn't upload, Rolling Back all changes.", Thor::Shell::Color::RED)
2636
- @files.rollback_commit(commit_sha1)
2637
-
2638
- return false
2639
-
2640
- end
2641
-
2642
-
2643
- successful_deletions += successful_deletions.select {|x| not x.nil?}
2644
-
2645
-
2646
- successful_updates = successful_updates.select {|x| not x.nil?}
2647
-
2648
- update_count = successful_updates.size
2649
-
2650
- rescue SignalException
2651
- @files.rollback_commit(commit_sha1)
2652
- say "User aborted, Rolling Back all changes.", Thor::Shell::Color::RED
2653
- return false
2654
- rescue => e
2655
- @files.rollback_commit(commit_sha1)
2656
- log_message("Exception while trying to upload, Rolling back", Thor::Shell::Color::RED)
2657
- log_error(e)
2658
- return false
2659
- end
2660
- if !result["deleted"].nil? and !result["deleted"].empty?
2661
- update_count += result["deleted"].size
2662
- end
2663
-
2664
- if update_count == update_total
2665
- res = @files.end_commit(commit_sha1, force: force, message: commit_msg)
2666
- if (Cnvrg::CLI.is_response_success(res, false))
2667
- # save idx
2668
- begin
2669
- @project.update_idx_with_files_commits!((successful_deletions + successful_updates), res["result"]["commit_time"])
2670
-
2671
- @project.update_idx_with_commit!(commit_sha1)
2672
- rescue => e
2673
- @files.rollback_commit(commit_sha1)
2674
- log_message("Couldn't commit updates, Rolling Back all changes.", Thor::Shell::Color::RED)
2675
- log_error(e)
2676
- return false
2677
-
2678
- end
2679
- image = is_project_with_docker(Dir.pwd)
2680
- if image and image.is_docker
2681
- image.update_image_activity(commit_sha1, nil)
2682
- end
2683
-
2684
- if options["verbose"]
2685
- log_message("#{check} Done", Thor::Shell::Color::BLUE)
2686
- if successful_updates.size > 0
2687
- successful_updates.flatten!
2688
- log_message("Updated:", Thor::Shell::Color::GREEN)
2689
- suc = successful_updates.map {|x| x = Helpers.checkmark() + " " + x}
2690
- log_message(suc.join("\n"), Thor::Shell::Color::GREEN)
2691
- end
2692
- if successful_deletions.size > 0
2693
- successful_deletions.flatten!
2694
-
2695
- log_message("Deleted:", Thor::Shell::Color::GREEN)
2696
- del = successful_updates.map {|x| x = Helpers.checkmark() + " " + x}
2697
- log_message(del.join("\n"), Thor::Shell::Color::GREEN)
2698
- end
2699
- log_message("Total of #{update_count} / #{update_total} files.", Thor::Shell::Color::GREEN)
2700
- else
2701
- if return_id
2702
- print_res = {
2703
- 'success' => "true",
2704
- 'commit_sha1' => res["result"]["commit_id"]
2705
- }
2706
- puts JSON[print_res]
2707
- return JSON[print_res]
2708
- end
2709
- if (options["sync"] or sync) and direct
2710
- log_message("#{check} Syncing project completed successfully", Thor::Shell::Color::GREEN)
2711
- return true
2712
-
2713
- else
2714
- log_message("#{check} Changes were updated successfully", Thor::Shell::Color::GREEN)
2715
- return true
2716
-
2717
- end
2718
-
2719
- end
2720
-
2721
- else
2722
- @files.rollback_commit(commit_sha1)
2723
- if return_id
2724
- print_res = {
2725
- 'success' => "false",
2726
- 'message' => 'couldn\'t commit changes, Rolling Back all changes.'
2727
- }
2728
- puts JSON[print_res]
2729
- else
2730
- log_message("Error: couldn't commit changes, Rolling Back all changes.", Thor::Shell::Color::RED)
2731
-
2732
- end
2733
- return false
2734
- end
2352
+ # delete
2353
+ to_upload = result["added"] + result["updated_on_local"]
2354
+ deleted = result["deleted"]
2355
+ progressbar = ProgressBar.create(:title => "Upload Progress",
2356
+ :progress_mark => '=',
2357
+ :format => "%b>>%i| %p%% %t",
2358
+ :starting_at => 0,
2359
+ :total => (to_upload.size + deleted.size),
2360
+ :autofinish => true)
2361
+ @files.upload_multiple_files(to_upload, commit_sha1, progress: progressbar)
2362
+ @files.delete_files_from_server(deleted, commit_sha1)
2363
+ progressbar.progress += deleted.size
2364
+ res = @files.end_commit(commit_sha1, force: force, message: commit_msg)
2365
+ unless Cnvrg::CLI.is_response_success(res, false)
2366
+ raise StandardError.new("Cant end commit")
2367
+ end
2368
+ # save idx
2369
+ @project.update_idx_with_files_commits!((to_upload + deleted), res["result"]["commit_time"])
2370
+ @project.update_idx_with_commit!(commit_sha1)
2371
+ if options["verbose"]
2372
+ log_message("#{check} Done", Thor::Shell::Color::BLUE)
2373
+ if successful_updates.size > 0
2374
+ successful_updates.flatten!
2375
+ log_message("Updated:", Thor::Shell::Color::GREEN)
2376
+ suc = successful_updates.map {|x| x = Helpers.checkmark() + " " + x}
2377
+ log_message(suc.join("\n"), Thor::Shell::Color::GREEN)
2378
+ end
2379
+ if successful_deletions.size > 0
2380
+ successful_deletions.flatten!
2381
+ log_message("Deleted:", Thor::Shell::Color::GREEN)
2382
+ del = successful_updates.map {|x| x = Helpers.checkmark() + " " + x}
2383
+ log_message(del.join("\n"), Thor::Shell::Color::GREEN)
2384
+ end
2385
+ log_message("Total of #{update_count} / #{update_total} files.", Thor::Shell::Color::GREEN)
2735
2386
  else
2736
- @files.rollback_commit(commit_sha1)
2737
2387
  if return_id
2738
2388
  print_res = {
2739
- 'success' => "false",
2740
- 'message' => "uploaded only: #{update_count} / #{update_total}, \n Rolling back"
2741
-
2389
+ 'success' => "true",
2390
+ 'commit_sha1' => res["result"]["commit_id"]
2742
2391
  }
2743
2392
  puts JSON[print_res]
2393
+ return JSON[print_res]
2394
+ end
2395
+ if (options["sync"] or sync) and direct
2396
+ log_message("#{check} Syncing project completed successfully", Thor::Shell::Color::GREEN)
2397
+ return true
2744
2398
  else
2745
- log_message("Error: uploaded only: #{update_count} / #{update_total}, \n Rolling back", Thor::Shell::Color::RED)
2399
+ log_message("#{check} Changes were updated successfully", Thor::Shell::Color::GREEN)
2400
+ return true
2746
2401
  end
2747
- return false
2748
-
2749
2402
  end
2750
2403
  rescue => e
2751
-
2752
- log_message("Error occurred, \nAborting", Thor::Shell::Color::RED)
2753
- log_error(e)
2754
- @files.rollback_commit(commit_sha1) unless commit_sha1.nil?
2755
- puts e.message
2756
- return false
2757
-
2758
- rescue SignalException
2759
-
2760
- say "\nAborting", Thor::Shell::Color::BLUE
2761
- say "\nRolling back all changes", Thor::Shell::Color::BLUE
2404
+ if e.is_a? SignalException
2405
+ say "\nAborting", Thor::Shell::Color::BLUE
2406
+ say "\nRolling back all changes", Thor::Shell::Color::BLUE
2407
+ else
2408
+ log_message("Error occurred, \nAborting", Thor::Shell::Color::RED)
2409
+ log_error(e)
2410
+ end
2762
2411
  @files.rollback_commit(commit_sha1) unless commit_sha1.nil?
2412
+ print_res = {
2413
+ 'success' => "false",
2414
+ 'message' => 'couldn\'t commit changes, Rolling Back all changes.'
2415
+ }
2416
+ puts JSON[print_res] if return_id
2763
2417
  return false
2764
2418
  end
2765
-
2766
2419
  end
2420
+
2767
2421
  desc 'download_file_data', 'Download one data files'
2768
2422
  method_option :verbose, :type => :boolean, :aliases => ["-v", "--verbose"], :default => false
2769
2423
  method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :desc => "download specified commit", :default => nil
@@ -2848,9 +2502,11 @@ module Cnvrg
2848
2502
  end
2849
2503
  result = res["result"]["tree"]
2850
2504
  commit = res["result"]["commit"]
2505
+ can_commit = res["result"]["can_commit"] || false #can commit means that our next commit is newer than the latest commit
2506
+ # so if can_commit is true it means that we have to be up-to-date with the dataset.
2851
2507
  update_total = [result['added'], result["updated_on_server"], result["conflicts"], result["deleted"]].compact.flatten.size
2852
2508
  successful_changes = 0
2853
- if update_total == 0
2509
+ if update_total == 0 or can_commit
2854
2510
  log_message("Dataset is up to date", Thor::Shell::Color::GREEN) if !sync
2855
2511
  return true
2856
2512
  elsif options["verbose"]
@@ -2858,6 +2514,8 @@ module Cnvrg
2858
2514
  else
2859
2515
  log_message("Syncing Dataset", Thor::Shell::Color::BLUE, !sync)
2860
2516
  end
2517
+ Cnvrg::Logger.log_info("Current commit: #{@dataset.get_current_commit}, destination commit: #{commit}")
2518
+ Cnvrg::Logger.log_info("Compare idx res: #{result}")
2861
2519
  conflicts = @files.mark_conflicts(result)
2862
2520
 
2863
2521
  log_message("Found some conflicts, check .conflict files.", Thor::Shell::Color::BLUE) if conflicts > 0
@@ -2887,12 +2545,13 @@ module Cnvrg
2887
2545
  end
2888
2546
  return true
2889
2547
  end
2890
- rescue SignalException
2548
+ rescue SignalException => e
2549
+ Cnvrg::Logger.log_error(e)
2891
2550
  say "\nAborting", Thor::Shell::Color::BLUE
2892
2551
  exit(1)
2893
2552
  rescue => e
2894
2553
  log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
2895
- log_error(e)
2554
+ Cnvrg::Logger.log_error(e)
2896
2555
  exit(1)
2897
2556
  end
2898
2557
  end
@@ -2949,7 +2608,7 @@ module Cnvrg
2949
2608
  log_start(__method__, args, options)
2950
2609
  project_home = get_project_home
2951
2610
  @project = Project.new(project_home)
2952
- @files = Cnvrg::Files.new(@project.owner, @project.slug)
2611
+ @files = Cnvrg::Files.new(@project.owner, @project.slug, project_home: project_home)
2953
2612
  git = options["git"]
2954
2613
  commit = options["commit"]
2955
2614
  if git or @project.is_git
@@ -2971,174 +2630,89 @@ module Cnvrg
2971
2630
  log_message("Couldn't append new ignore files to .cnvrgignore", Thor::Shell::Color::YELLOW)
2972
2631
  end
2973
2632
  new_branch = options["new_branch"] || @project.is_branch || false
2974
- res = @project.compare_idx(new_branch, commit: nil, in_exp: in_exp)["result"]
2633
+ res = @project.compare_idx(new_branch, in_exp: in_exp, download: true)["result"]
2975
2634
  result = res["tree"]
2976
2635
 
2977
2636
  commit = res["commit"]
2978
- if result["updated_on_server"].empty? and result["conflicts"].empty? and result["deleted"].empty?
2637
+
2638
+ #here im grouping the files by their current status.
2639
+ #
2640
+ # all the files that changed in the server (added + updated)
2641
+ changed_files = result['updated_on_server'] + result['added']
2642
+
2643
+ # non-conflicted files, all the files that changed remotely but not locally
2644
+ updated_files = changed_files - result["update_local"]
2645
+ # conflicted - files that changed remotely and locally
2646
+ conflicted_files = changed_files & result["update_local"]
2647
+
2648
+ # all deleted files
2649
+ all_deleted = result['deleted']
2650
+ # cant delete files - files that deleted on the server but changed locally
2651
+ conflicted_deleted = all_deleted & result["update_local"]
2652
+ # files to delete - files that deleted on the server and unchanged locally
2653
+ deleted_files = all_deleted - conflicted_deleted
2654
+
2655
+
2656
+ update_total = [all_deleted, changed_files ].flatten.size
2657
+
2658
+ if update_total < 1
2979
2659
  if !@project.last_local_commit.eql? commit
2660
+ Cnvrg::Logger.log_info("Finish commit, updating idx with commit")
2980
2661
  @project.update_idx_with_commit!(commit)
2981
2662
  end
2982
2663
  log_message("Project is up to date", Thor::Shell::Color::GREEN, ((options["sync"] or sync) ? false : true))
2983
2664
  return true
2984
2665
  end
2985
- update_total = result["updated_on_server"].size + result["conflicts"].size + result["deleted"].size
2986
-
2666
+ Cnvrg::Logger.log_info("Got #{update_total} changes from server")
2987
2667
 
2988
2668
  successful_changes = []
2989
2669
  if update_total == 1
2990
2670
  log_message("Downloading #{update_total} file", Thor::Shell::Color::BLUE, !options["sync"])
2991
- elsif update_total == 0
2992
- log_message("Project is up to date", Thor::Shell::Color::GREEN, !options["sync"])
2993
- return true
2994
2671
  elsif options["verbose"]
2995
2672
  log_message("Downloading #{update_total} files", Thor::Shell::Color::BLUE)
2996
2673
  else
2997
2674
  log_message("Syncing files", Thor::Shell::Color::BLUE, !options["sync"])
2998
-
2999
2675
  end
3000
- parallel_options = {
3001
- :progress => {
3002
- :title => "Download Progress",
3003
- :progress_mark => '=',
3004
- :format => "%b>>%i| %p%% %t",
3005
- :starting_at => 0,
3006
- :total => result["updated_on_server"].size,
3007
- :autofinish => true
3008
- },
3009
- in_processes: ParallelProcesses,
3010
- in_thread: ParallelThreads
3011
- }
3012
- if !result["conflicts"].empty?
3013
- begin
3014
-
3015
-
3016
- conflicts_result = Parallel.map(result["conflicts"], in_processes: ParallelProcesses, in_thread: ParallelThreads) do |f|
3017
-
3018
- relative_path = f.gsub(/^#{@project.local_path}/, "")
3019
- log_message("downloading: #{f}.conflict", Thor::Shell::Color::BLUE, options["verbose"])
3020
- if relative_path.eql? ".cnvrgignore"
3021
- if @files.download_file_s3(f, relative_path, project_home, commit_sha1 = nil, conflict = false)
3022
- f
3023
- else
3024
- log_message("Couldn't download: #{f}", Thor::Shell::Color::RED)
3025
- raise Parallel::Kill
3026
- end
3027
- else
3028
- if @files.download_file_s3(f, relative_path, project_home, commit_sha1 = nil, conflict = true)
3029
- f
3030
- else
3031
- log_message("Couldn't download: #{f}", Thor::Shell::Color::RED)
3032
- raise Parallel::Kill
3033
-
3034
- end
3035
- end
3036
- end
3037
- rescue Interrupt
3038
-
3039
- log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
3040
-
3041
- @files.revoke_download(result["conflicts"], [])
3042
- exit(1)
3043
- end
3044
- end
3045
-
3046
-
3047
- successful_changes += conflicts_result.to_a
3048
- if !result["updated_on_server"].empty?
3049
- begin
3050
- updated_on_server_result = Parallel.map(result["updated_on_server"], parallel_options) do |f|
3051
-
3052
- relative_path = f.gsub(/^#{@project.local_path}/, "")
3053
- if f.end_with? "/"
3054
- # dir
3055
- log_message("downloading dir: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
3056
-
3057
- if @files.download_dir(f, relative_path, project_home)
3058
- f
3059
- else
3060
- log_message("Couldn't create directory: #{f}", Thor::Shell::Color::RED)
3061
- raise Parallel::Kill
3062
-
3063
-
3064
- end
3065
-
3066
- else
3067
- # blob
3068
- log_message("downloading file: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
3069
- if @files.download_file_s3(f, relative_path, project_home)
3070
- f
3071
- else
3072
-
3073
-
3074
- log_message("Couldn't download: #{f}", Thor::Shell::Color::RED)
3075
- raise Parallel::Kill
3076
-
3077
-
3078
- end
3079
- end
3080
-
3081
-
3082
- end
3083
- successful_changes += updated_on_server_result.to_a
3084
- rescue Interrupt
3085
- log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
3086
-
3087
- @files.revoke_download(result["conflicts"], result["updated_on_server"])
3088
- exit(1)
3089
-
3090
- end
3091
- end
3092
-
3093
- deleted = result["deleted"].to_a
3094
- delete_res = @files.delete_commit_files_local(deleted)
3095
- if !delete_res
3096
- log_message("Couldn't delete #{deleted.join(" ")}", Thor::Shell::Color::RED)
3097
- log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
3098
-
3099
- @files.revoke_download(result["conflicts"], result["updated_on_server"])
3100
- exit(1)
3101
-
3102
- end
3103
- successful_changes += deleted
3104
2676
 
2677
+ progressbar = ProgressBar.create(:title => "Download Progress",
2678
+ :progress_mark => '=',
2679
+ :format => "%b>>%i| %p%% %t",
2680
+ :starting_at => 0,
2681
+ :total => update_total,
2682
+ :autofinish => true)
3105
2683
 
3106
- successful_changes = successful_changes.select {|x| not x.nil?}
3107
2684
 
3108
- if update_total == successful_changes.size
3109
- # update idx with latest commit
3110
- @project.update_idx_with_commit!(commit)
3111
- check = Helpers.checkmark()
2685
+ Cnvrg::Logger.log_info("Downloading updated files:#{updated_files.join(",")}")
2686
+ @files.download_files(updated_files, commit, progress: progressbar) if updated_files.present?
3112
2687
 
3113
- if options["verbose"]
3114
- log_message("#{check} Done, Downloaded:", Thor::Shell::Color::GREEN)
3115
- log_message(successful_changes.join("\n"), Thor::Shell::Color::GREEN)
3116
- log_message("Total of #{successful_changes.size} / #{update_total} files.", Thor::Shell::Color::GREEN)
3117
- else
3118
- log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN, ((sync or options["sync"]) ? false : true))
3119
- end
2688
+ Cnvrg::Logger.log_info("Downloading conflicted files:#{conflicted_files.join(",")}")
2689
+ @files.download_files(conflicted_files, commit, postfix: ".conflict", progress: progressbar) if conflicted_files.present?
3120
2690
 
2691
+ Cnvrg::Logger.log_info("Delete files: #{deleted_files.join(",")}")
2692
+ @files.delete_files_local(deleted_files, conflicted: conflicted_deleted, progress: progressbar)
3121
2693
 
2694
+ # update idx with latest commit
2695
+ @project.update_idx_with_commit!(commit)
2696
+ #TODO Sync, remove idx, sync again and pray
2697
+ check = Helpers.checkmark()
2698
+ Cnvrg::Logger.log_info("Finished downloading successfuly")
2699
+ if options["verbose"]
2700
+ log_message("#{check} Done, Downloaded:", Thor::Shell::Color::GREEN)
2701
+ log_message(successful_changes.join("\n"), Thor::Shell::Color::GREEN)
2702
+ log_message("Total of #{successful_changes.size} / #{update_total} files.", Thor::Shell::Color::GREEN)
2703
+ else
2704
+ log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN, ((sync or options["sync"]) ? false : true))
3122
2705
  end
3123
2706
  rescue => e
3124
-
3125
2707
  log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
3126
- log_error(e)
3127
- if successful_changes.nil?
3128
- exit(1)
3129
- end
3130
- begin
3131
- @files.revoke_download(result["conflicts"], result["updated_on_server"])
3132
- end
2708
+ Cnvrg::Logger.log_error(e)
2709
+ exit(1)
2710
+ rescue Exception => e
2711
+ Cnvrg::Logger.log_error(e)
2712
+ log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
3133
2713
  exit(1)
3134
2714
  rescue SignalException
3135
- say "\nAborting", Thor::Shell::Color::BLUE
3136
- if successful_changes.nil?
3137
- exit(1)
3138
- end
3139
- begin
3140
- @files.revoke_download(result["conflicts"], result["updated_on_server"])
3141
- end
2715
+ log_message("\nAborting", Thor::Shell::Color::BLUE)
3142
2716
  exit(1)
3143
2717
  end
3144
2718
  end
@@ -3168,7 +2742,24 @@ module Cnvrg
3168
2742
  resolver = resp['result']['resolver']
3169
2743
  latest = resp['result']['latest']
3170
2744
  commit = resp['result']['commit']
3171
- @files.handle_compare_idx(compare, resolver: resolver)
2745
+ updated_files = compare['updated_on_server']
2746
+ conflicted_files = compare['conflicts']
2747
+ deleted_files = compare['deleted']
2748
+ overall_changes = [updated_files, conflicted_files, deleted_files].flatten.size
2749
+
2750
+
2751
+ progressbar = ProgressBar.create(:title => "Download Progress",
2752
+ :progress_mark => '=',
2753
+ :format => "%b>>%i| %p%% %t",
2754
+ :starting_at => 0,
2755
+ :total => overall_changes,
2756
+ :autofinish => true)
2757
+
2758
+ @files.download_files(updated_files, commit_sha1, progress: progressbar)
2759
+ @files.download_files(conflicted_files, commit_sha1, progress: progressbar, postfix: '.conflicted')
2760
+ @files.delete_files_local(deleted_files, progress: progressbar)
2761
+
2762
+
3172
2763
  @project.set_on_branch(latest)
3173
2764
  @project.update_idx_with_commit!(commit)
3174
2765
  @project.generate_idx
@@ -3326,9 +2917,10 @@ module Cnvrg
3326
2917
  job_slug = options['job_slug']
3327
2918
  job_type = options['job_type']
3328
2919
  in_exp = options["in_exp"] || (job_slug.present? and job_type.present?)
2920
+ in_exp = false if job_type.present? and job_type == "NotebookSession"
3329
2921
  run_download = true
3330
2922
  if options[:force] or options[:files].present? or options[:output_dir].present? or in_exp
3331
- run_download =false
2923
+ run_download = false
3332
2924
  end
3333
2925
  if run_download
3334
2926
  invoke :download, [true, "", in_exp ], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true
@@ -3336,8 +2928,6 @@ module Cnvrg
3336
2928
  invoke :upload, [false, true, direct, "",in_exp,options[:force], options["output_dir"],job_type, job_slug ], :new_branch => options["new_branch"], :verbose => options["verbose"], :sync => true,
3337
2929
  :ignore => options[:ignore], :force => options[:force], :message => options[:message], :deploy => options["deploy"], :return_id => options["return_id"],
3338
2930
  :files => options["files"], :output_dir => options["output_dir"], :job_slug => job_slug, :job_type => job_type
3339
-
3340
-
3341
2931
  end
3342
2932
 
3343
2933
  desc 'run cmd', 'Runs an experiment'
@@ -3371,7 +2961,7 @@ module Cnvrg
3371
2961
  method_option :data_query, :type => :string, :aliases => ["-q", "--query"], :default => nil
3372
2962
  method_option :git_commit, :type => :string, :aliases => [ "--git_commit"], :default => nil
3373
2963
  method_option :git_branch, :type => :string, :aliases => [ "--git_branch"], :default => nil
3374
- method_option :restart_if_stuck, :type => :boolean, :aliases => ["--restart"], :default => nil
2964
+ method_option :restart_if_stuck, :type => :boolean, :aliases => ["--restart","--restart_if_stuck"], :default => nil
3375
2965
  method_option :local_folders, :type => :string, :aliases => ["--local_folders"], :default => nil
3376
2966
 
3377
2967
  def run(*cmd)
@@ -3413,6 +3003,7 @@ module Cnvrg
3413
3003
  git_branch = options["git_branch"]
3414
3004
  restart_if_stuck = options["restart_if_stuck"]
3415
3005
 
3006
+
3416
3007
  options_hash = Hash[options]
3417
3008
 
3418
3009
  if local
@@ -3786,6 +3377,7 @@ module Cnvrg
3786
3377
  method_option :local_folders, :type => :string, :aliases => ["--local_folders"], :default => nil
3787
3378
 
3788
3379
  def exec_remote(*cmd)
3380
+
3789
3381
  verify_logged_in(true)
3790
3382
  log_start(__method__, args, options)
3791
3383
  working_dir = is_cnvrg_dir
@@ -3852,7 +3444,7 @@ module Cnvrg
3852
3444
  git_branch = options["git_branch"]
3853
3445
  options_hash = Hash[options]
3854
3446
  local_folders_options = options["local_folders"]
3855
- options_hash.except!("schedule", "machine_type", "image", "upload_output", "grid", "data", "data_commit",
3447
+ options_hash.except!("schedule", "machine_type", "image", "upload_output", "grid", "data", "data_commit", "title",
3856
3448
  "local", "small", "medium", "large", "gpu", "gpuxl", "gpuxxl","max_time","dataset_only_tree",
3857
3449
  "data_query", "git_commit","git_branch", "restart_if_stuck","local_folders" )
3858
3450
  exec_options = options_hash.map {|x| "--#{x[0]}=#{x[1]}"}.flatten.join(" ")
@@ -5909,33 +5501,15 @@ module Cnvrg
5909
5501
  say message, type
5910
5502
  end
5911
5503
  begin
5912
- if type == Thor::Shell::Color::BLUE
5913
- $LOG.info message: message, type: "info"
5914
- elsif type == Thor::Shell::Color::RED
5915
- $LOG.error message: message, type: "error"
5916
- elsif type == Thor::Shell::Color::YELLOW
5917
- $LOG.warn message: message, type: "warning"
5918
- elsif type == Thor::Shell::Color::GREEN
5919
- $LOG.info message: message, type: "success"
5920
- else
5921
- $LOG.info message: message, type: "unknown"
5922
- end
5923
-
5504
+ Cnvrg::Logger.log_info(message)
5924
5505
  rescue => e
5925
- puts e.backtrace
5506
+ Cnvrg::Logger.log_error(e)
5926
5507
  end
5927
5508
  end
5928
5509
 
5929
5510
  def log_error(e)
5930
5511
  begin
5931
- $LOG.error message: e.message, type: "error"
5932
- size = e.backtrace.size
5933
- min = 10
5934
- if min >= size
5935
- min = size
5936
- end
5937
- $LOG.error message: "Error: #{e.message}, Backtrace: #{e.backtrace[0..min].join(",")}", type: "error"
5938
- rescue
5512
+ Cnvrg::Logger.log_error(e)
5939
5513
  end
5940
5514
  end
5941
5515
 
@@ -5952,6 +5526,7 @@ module Cnvrg
5952
5526
  end
5953
5527
 
5954
5528
  def self.is_response_success(response, should_exit = true)
5529
+
5955
5530
  begin
5956
5531
  if response.nil? or !response
5957
5532
  # if !Cnvrg::Helpers.internet_connection?
@@ -5965,7 +5540,7 @@ module Cnvrg
5965
5540
  return false
5966
5541
  end
5967
5542
  elsif response["status"] != 200
5968
- error = response['message']
5543
+ error = response['message'] || "Unknown error"
5969
5544
  # Cnvrg::CLI.log_end(1, error)
5970
5545
  if response["status"] == 500
5971
5546
  say("<%= color('Server Error', RED) %>")
@@ -6027,6 +5602,10 @@ module Cnvrg
6027
5602
  end
6028
5603
 
6029
5604
  def get_project_home
5605
+ return Cnvrg::CLI.get_project_home
5606
+ end
5607
+
5608
+ def self.get_project_home
6030
5609
  absolute_path = Dir.pwd
6031
5610
  dirs = absolute_path.split("/")
6032
5611
  dirs.pop while not Dir.exists?("#{dirs.join("/")}/.cnvrg") and dirs.size != 0
@@ -6093,24 +5672,9 @@ module Cnvrg
6093
5672
  $LOG = LogStashLogger.new(type: :file, path: logfile, sync: true, config: config)
6094
5673
  remove_old_log_files()
6095
5674
  rescue
6096
-
6097
5675
  end
6098
5676
  end
6099
5677
 
6100
- def remove_old_log_files()
6101
- begin
6102
- last_week = (Time.now - (7 * 24 * 60 * 60)).strftime("%Y-%m-%d")
6103
- home = File.expand_path('~')
6104
- log_files = Dir["#{home}/.cnvrg/tmp/*.log"]
6105
- log_files.each do |l|
6106
- if File.mtime(l).strftime("%Y-%m-%d") < last_week
6107
- FileUtils.rm_rf(l)
6108
- end
6109
- end
6110
- end
6111
-
6112
- end
6113
-
6114
5678
  def verify_logged_in(in_dir=true)
6115
5679
  begin
6116
5680
  log_handler()