cnvrg 0.3.6 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cnvrg.gemspec +1 -0
- data/lib/cnvrg/api.rb +26 -8
- data/lib/cnvrg/auth.rb +5 -0
- data/lib/cnvrg/cli.rb +964 -477
- data/lib/cnvrg/data.rb +42 -8
- data/lib/cnvrg/datafiles.rb +168 -145
- data/lib/cnvrg/dataset.rb +124 -17
- data/lib/cnvrg/experiment.rb +7 -4
- data/lib/cnvrg/files.rb +52 -67
- data/lib/cnvrg/helpers.rb +20 -0
- data/lib/cnvrg/project.rb +0 -6
- data/lib/cnvrg/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14812c074d9b241c639f215c82da967e632a5b4c
|
4
|
+
data.tar.gz: 68845b081b102ec1d06499a09e3e576a00a89e65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce3a5373033f6a01bab5e0eb9d839e3a6a3b7d1b15576a996e1c00e5d6ef091e9ac6ac50a320379aa9f7ac691b16f8caacc3116b5bd79c4f3c464fbf17878c23
|
7
|
+
data.tar.gz: 2d1ece161322402bd3922b52f0e0371577eeade4c650d037c7956d13c04a3ce701647ff45f45c4c5415006b6e0a6c33f12bda2ddbbb9103c0a0802a49b3438d6
|
data/cnvrg.gemspec
CHANGED
data/lib/cnvrg/api.rb
CHANGED
@@ -44,24 +44,33 @@ module Cnvrg
|
|
44
44
|
|
45
45
|
@user, @pass = n[Cnvrg::Helpers.netrc_domain]
|
46
46
|
begin
|
47
|
-
|
47
|
+
if !Helpers.is_verify_ssl
|
48
|
+
|
49
|
+
conn = Faraday.new "#{endpoint_uri}", :ssl => {:verify => false}
|
50
|
+
else
|
51
|
+
conn = Faraday.new "#{endpoint_uri}"
|
52
|
+
end
|
48
53
|
conn.headers['Auth-Token'] = @pass
|
49
54
|
conn.headers['User-Agent'] = "#{Cnvrg::API::USER_AGENT}"
|
50
|
-
|
51
55
|
case method
|
52
|
-
|
53
|
-
response = conn.get "#{
|
54
|
-
|
56
|
+
when 'GET'
|
57
|
+
response = conn.get "#{resource}", data
|
58
|
+
if response.to_hash[:status] == 404
|
59
|
+
return false
|
60
|
+
end
|
55
61
|
if parse_request == true
|
56
62
|
JSON.parse(response.body)
|
57
63
|
else
|
58
64
|
response
|
59
65
|
end
|
60
|
-
|
66
|
+
when 'POST'
|
61
67
|
conn.options.timeout = 420
|
62
68
|
conn.options.open_timeout =420
|
63
|
-
response = conn.post "#{
|
69
|
+
response = conn.post "#{resource}", data
|
64
70
|
|
71
|
+
if response.to_hash[:status] == 404
|
72
|
+
return false
|
73
|
+
end
|
65
74
|
if parse_request == true
|
66
75
|
JSON.parse(response.body)
|
67
76
|
else
|
@@ -72,10 +81,14 @@ module Cnvrg
|
|
72
81
|
fr.headers['Auth-Token'] = @pass
|
73
82
|
fr.headers['User-Agent'] = "#{Cnvrg::API::USER_AGENT}"
|
74
83
|
fr.headers["Content-Type"] = "multipart/form-data"
|
84
|
+
if !Helpers.is_verify_ssl
|
85
|
+
fr.ssl.verify = false
|
86
|
+
end
|
75
87
|
|
76
88
|
|
77
89
|
fr.request :multipart
|
78
90
|
fr.request :url_encoded
|
91
|
+
fr.request :retry, max: 2, interval: 0.05,interval_randomness: 0.5, backoff_factor: 2
|
79
92
|
fr.adapter :net_http
|
80
93
|
end
|
81
94
|
conn.options.timeout = 420
|
@@ -100,6 +113,9 @@ module Cnvrg
|
|
100
113
|
response = conn.post "#{endpoint_uri}/#{resource}", data
|
101
114
|
|
102
115
|
FileUtils.rm_rf(temp_path)
|
116
|
+
if response.to_hash[:status] == 404
|
117
|
+
return false
|
118
|
+
end
|
103
119
|
|
104
120
|
|
105
121
|
if parse_request == true
|
@@ -109,7 +125,9 @@ module Cnvrg
|
|
109
125
|
end
|
110
126
|
when 'DELETE'
|
111
127
|
response = conn.delete "#{endpoint_uri}/#{resource}", data
|
112
|
-
|
128
|
+
if response.to_hash[:status] == 404
|
129
|
+
return false
|
130
|
+
end
|
113
131
|
if parse_request == true
|
114
132
|
JSON.parse(response.body)
|
115
133
|
else
|
data/lib/cnvrg/auth.rb
CHANGED
data/lib/cnvrg/cli.rb
CHANGED
@@ -60,6 +60,7 @@ class Thor
|
|
60
60
|
|
61
61
|
end
|
62
62
|
|
63
|
+
|
63
64
|
# Let Thor::Options parse the options first, so it can remove
|
64
65
|
# declared options from the array. This will leave us with
|
65
66
|
# a list of arguments that weren't declared.
|
@@ -193,12 +194,16 @@ module Cnvrg
|
|
193
194
|
map %w(-v --version) => :version
|
194
195
|
|
195
196
|
desc 'api', 'set api url, e.g cnvrg --api "https://cnvrg.io/api"'
|
197
|
+
method_option :verify_ssl, :type => :boolean, :aliases => ["-s", "--verify_ssl"], :default => true
|
196
198
|
|
197
199
|
def set_api_url(url)
|
200
|
+
log_handler()
|
201
|
+
log_start(__method__, args, options)
|
198
202
|
home_dir = File.expand_path('~')
|
199
203
|
if !url.end_with? "/api"
|
200
204
|
url = url + "/api"
|
201
205
|
end
|
206
|
+
verify_ssl = options["verify_ssl"]
|
202
207
|
begin
|
203
208
|
if !File.directory? home_dir + "/.cnvrg"
|
204
209
|
FileUtils.mkdir_p([home_dir + "/.cnvrg", home_dir + "/.cnvrg/tmp"])
|
@@ -207,42 +212,34 @@ module Cnvrg
|
|
207
212
|
FileUtils.touch [home_dir + "/.cnvrg/config.yml"]
|
208
213
|
end
|
209
214
|
compression_path = "#{File.expand_path('~')}/.cnvrg/tmp"
|
210
|
-
|
211
215
|
begin
|
212
|
-
config = YAML.load_file(home_dir
|
216
|
+
config = YAML.load_file(home_dir+"/.cnvrg/config.yml")
|
213
217
|
if !config
|
214
|
-
config = {owner: "", username: "", version_last_check: get_start_day(), api: url, compression_path: compression_path, }
|
215
|
-
|
218
|
+
config = {owner: "", username: "", version_last_check: get_start_day(), api: url, compression_path: compression_path ,verify_ssl: verify_ssl }
|
216
219
|
end
|
220
|
+
|
221
|
+
|
217
222
|
rescue
|
218
|
-
config = {owner: "", username: "", version_last_check: get_start_day(), api: url, compression_path: compression_path}
|
223
|
+
config = {owner: "", username: "", version_last_check: get_start_day(), api: url, compression_path: compression_path ,verify_ssl: verify_ssl }
|
219
224
|
end
|
220
|
-
owner = config.to_h[:owner]
|
221
225
|
|
222
226
|
say "Setting default api to be: #{url}", Thor::Shell::Color::BLUE
|
223
227
|
if config.empty?
|
224
|
-
config = {owner: "", username: "", version_last_check: get_start_day(), api: url, compression_path: compression_path}
|
228
|
+
config = {owner: "", username: "", version_last_check: get_start_day(), api: url, compression_path: compression_path, verify_ssl: verify_ssl }
|
225
229
|
else
|
226
230
|
if !config.to_h[:compression_path].nil?
|
227
231
|
compression_path = config.to_h[:compression_path]
|
228
232
|
end
|
229
|
-
config = {owner: config.to_h[:owner], username: config.to_h[:username], version_last_check: config.to_h[:version_last_check], api: url, compression_path: compression_path}
|
233
|
+
config = {owner: config.to_h[:owner], username: config.to_h[:username], version_last_check: config.to_h[:version_last_check], api: url, compression_path: compression_path, verify_ssl: verify_ssl}
|
230
234
|
end
|
231
|
-
# res = Cnvrg::API.request("/users/#{owner}/custom_api", 'POST', {custom_api: url})
|
232
|
-
# if Cnvrg::CLI.is_response_success(res, false)
|
233
235
|
|
234
236
|
checks = Helpers.checkmark
|
237
|
+
File.open(home_dir+"/.cnvrg/config.yml", "w+") { |f| f.write config.to_yaml }
|
235
238
|
|
236
|
-
|
237
|
-
File.open(home_dir + "/.cnvrg/config.yml", "w+") {|f| f.write config.to_yaml}
|
238
239
|
say "#{checks} Done", Thor::Shell::Color::GREEN
|
239
|
-
# else
|
240
|
-
# say "Couldn't set default api, contact help@cnvrg.io", Thor::Shell::Color::RED
|
241
|
-
# exit(1)
|
242
|
-
#
|
243
|
-
# end
|
244
240
|
|
245
241
|
rescue => e
|
242
|
+
log_error(e)
|
246
243
|
say "Couldn't set default api, contact help@cnvrg.io", Thor::Shell::Color::RED
|
247
244
|
end
|
248
245
|
end
|
@@ -272,6 +269,16 @@ module Cnvrg
|
|
272
269
|
say "Done"
|
273
270
|
rescue
|
274
271
|
say "ERROR", Thor::Shell::Color::RED
|
272
|
+
File.open(home_dir+"/.cnvrg/config.yml", "w+") { |f| f.write config.to_yaml }
|
273
|
+
say "#{checks} Done", Thor::Shell::Color::GREEN
|
274
|
+
# else
|
275
|
+
# say "Couldn't set default api, contact help@cnvrg.io", Thor::Shell::Color::RED
|
276
|
+
# exit(1)
|
277
|
+
#
|
278
|
+
# end
|
279
|
+
|
280
|
+
rescue => e
|
281
|
+
say "Couldn't set default api, contact help@cnvrg.io", Thor::Shell::Color::RED
|
275
282
|
end
|
276
283
|
end
|
277
284
|
|
@@ -553,7 +560,7 @@ module Cnvrg
|
|
553
560
|
|
554
561
|
def new(project_name)
|
555
562
|
begin
|
556
|
-
|
563
|
+
verify_logged_in(false)
|
557
564
|
log_start(__method__, args, options)
|
558
565
|
clean = options["clean"]
|
559
566
|
docker_image = options["docker_image"]
|
@@ -568,8 +575,8 @@ module Cnvrg
|
|
568
575
|
exit(1)
|
569
576
|
|
570
577
|
end
|
571
|
-
if Project.create(project_name, clean, with_docker
|
572
|
-
|
578
|
+
if Project.create(project_name, clean, with_docker=docker)
|
579
|
+
path = Dir.pwd + "/" + project_name
|
573
580
|
@project = Project.new(path)
|
574
581
|
@project.generate_idx
|
575
582
|
if docker
|
@@ -635,42 +642,6 @@ module Cnvrg
|
|
635
642
|
end
|
636
643
|
end
|
637
644
|
|
638
|
-
desc 'set_image', 'set_image for a project'
|
639
|
-
|
640
|
-
def set_image(docker_image)
|
641
|
-
verify_logged_in(false)
|
642
|
-
log_start(__method__, args, options)
|
643
|
-
working_dir = is_cnvrg_dir
|
644
|
-
local_images = Docker::Image.all
|
645
|
-
docker_image_local = local_images.map {|x| x.info["RepoTags"]}.flatten.select {|y| y.include? docker_image}.flatten
|
646
|
-
if docker_image_local.size == 0
|
647
|
-
|
648
|
-
if yes? "Image wasn't found locally, pull image from cnvrg repository?", Thor::Shell::Color::YELLOW
|
649
|
-
image = pull(docker_image)
|
650
|
-
if image
|
651
|
-
say "downloaded image: #{docker_image}"
|
652
|
-
@image = Images.new(working_dir, docker_image)
|
653
|
-
else
|
654
|
-
say "Could not set image, image was not found", Thor::Shell::Color::RED
|
655
|
-
exit(1)
|
656
|
-
end
|
657
|
-
else
|
658
|
-
say "Could nset image, image was not found", Thor::Shell::Color::RED
|
659
|
-
exit(1)
|
660
|
-
|
661
|
-
end
|
662
|
-
elsif docker_image_local.size == 1
|
663
|
-
say "found image: #{docker_image_local[0]}, setting it up..", Thor::Shell::Color::BLUE
|
664
|
-
@image = Images.new(working_dir, docker_image_local[0])
|
665
|
-
elsif docker_image_local.size > 1
|
666
|
-
say "found #{docker_image_local.size} images, choose the image name you want to use", Thor::Shell::Color::BLUE
|
667
|
-
image_name = ask "#{docker_image_local.join("\n")}\n", Thor::Shell::Color::BLUE
|
668
|
-
image_name = image_name.strip
|
669
|
-
@image = Images.new(working_dir, image_name)
|
670
|
-
end
|
671
|
-
@image.update_image_activity(nil, nil)
|
672
|
-
|
673
|
-
end
|
674
645
|
|
675
646
|
desc 'link', 'Link current directory to a new cnvrg project'
|
676
647
|
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
@@ -793,24 +764,51 @@ module Cnvrg
|
|
793
764
|
exit(1)
|
794
765
|
end
|
795
766
|
end
|
767
|
+
desc 'data delete', 'delete dataset'
|
768
|
+
def delete_data(dataset_slug)
|
769
|
+
begin
|
770
|
+
verify_logged_in(false)
|
771
|
+
log_start(__method__, args, options)
|
772
|
+
owner = CLI.get_owner
|
773
|
+
response = Dataset.delete(dataset_slug, owner)
|
796
774
|
|
797
|
-
|
798
|
-
|
799
|
-
|
775
|
+
if Cnvrg::CLI.is_response_success(response)
|
776
|
+
log_message("Successfully deleted dataset: #{dataset_slug}", Thor::Shell::Color::GREEN)
|
777
|
+
else
|
778
|
+
log_message("Error while tying to delete dataset: #{response["messages"]}", Thor::Shell::Color::RED)
|
800
779
|
|
801
780
|
|
802
|
-
|
781
|
+
end
|
782
|
+
|
783
|
+
rescue => e
|
784
|
+
log_error(e)
|
785
|
+
rescue SignalException
|
786
|
+
|
787
|
+
say "\nAborting"
|
788
|
+
exit(1)
|
789
|
+
end
|
790
|
+
end
|
791
|
+
|
792
|
+
desc 'data clone', 'Clone dataset'
|
793
|
+
method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ""
|
794
|
+
method_option :only_tree, :type => :boolean, :aliases => ["-t", "--tree"], :default => false
|
795
|
+
def clone_data(dataset_url,only_tree=false,commit=nil)
|
803
796
|
begin
|
804
797
|
verify_logged_in(false)
|
805
798
|
log_start(__method__, args, options)
|
799
|
+
commit = options["commit"] || commit
|
800
|
+
only_tree = options["only_tree"] || only_tree
|
801
|
+
|
802
|
+
|
806
803
|
url_parts = dataset_url.split("/")
|
807
804
|
project_index = Cnvrg::Helpers.look_for_in_path(dataset_url, "datasets")
|
808
805
|
slug = url_parts[project_index + 1]
|
809
806
|
owner = url_parts[project_index - 1]
|
810
|
-
response = Cnvrg::API.request("users/#{owner}/datasets/#{slug}/clone", '
|
811
|
-
|
812
|
-
Cnvrg::CLI.is_response_success(response)
|
807
|
+
response = Cnvrg::API.request("users/#{owner}/datasets/#{slug}/clone", 'POST',{ commit: commit})
|
808
|
+
Cnvrg::CLI.is_response_success(response,true)
|
813
809
|
dataset_name = response["result"]["name"]
|
810
|
+
dataset_home = Dir.pwd+"/"+dataset_name
|
811
|
+
|
814
812
|
|
815
813
|
if (Dir.exists? dataset_name)
|
816
814
|
log_message("Error: Conflict with dir #{dataset_name}", Thor::Shell::Color::RED)
|
@@ -822,35 +820,88 @@ module Cnvrg
|
|
822
820
|
end
|
823
821
|
if Dataset.clone(owner, dataset_name, slug)
|
824
822
|
log_message("Cloning #{dataset_name}", Thor::Shell::Color::BLUE)
|
823
|
+
@files = Cnvrg::Datafiles.new(owner, slug)
|
825
824
|
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
825
|
+
successful_changes = []
|
826
|
+
log_message("Downloading files", Thor::Shell::Color::BLUE)
|
827
|
+
commit = response["result"]["commit"]
|
828
|
+
idx = {commit: response["result"]["commit"], tree: response["result"]["tree"]}
|
829
|
+
File.open(dataset_home + "/.cnvrg/idx.yml", "w+") {|f| f.write idx.to_yaml}
|
830
|
+
if !response["result"]["tree"].nil?
|
831
|
+
parallel_options = {
|
832
|
+
:progress => {
|
833
|
+
:title => "Download Progress",
|
834
|
+
:progress_mark => '=',
|
835
|
+
:format => "%b>>%i| %p%% %t",
|
836
|
+
:starting_at => 0,
|
837
|
+
:total => response["result"]["tree"].size,
|
838
|
+
:autofinish => true
|
839
|
+
},
|
840
|
+
in_threads: ParallelThreads
|
841
|
+
}
|
842
|
+
begin
|
843
|
+
is_success = true
|
830
844
|
|
845
|
+
Parallel.map((response["result"]["tree"]), parallel_options) do |f|
|
831
846
|
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
847
|
+
relative_path = f[0].gsub(/^#{dataset_home}/, "")
|
848
|
+
if f[0].end_with? "/"
|
849
|
+
# dir
|
850
|
+
if @files.download_dir(dataset_home, relative_path)
|
851
|
+
successful_changes << relative_path
|
852
|
+
else
|
853
|
+
is_success =false
|
854
|
+
log_message("Could not create directory: #{f[0]}", Thor::Shell::Color::RED)
|
855
|
+
raise Parallel::Kill
|
856
|
+
end
|
857
|
+
else
|
858
|
+
# blob
|
859
|
+
if !only_tree
|
860
|
+
|
861
|
+
if @files.download_file_s3(f[0], relative_path, dataset_home, false, commit_sha1=commit)
|
862
|
+
successful_changes << relative_path
|
863
|
+
else
|
864
|
+
is_success =false
|
865
|
+
log_message("Could not download file: #{f[0]}", Thor::Shell::Color::RED)
|
866
|
+
raise Parallel::Kill
|
867
|
+
end
|
868
|
+
end
|
869
|
+
end
|
870
|
+
end
|
871
|
+
rescue Interrupt
|
872
|
+
is_success =false
|
873
|
+
log_message("Couldn't download", Thor::Shell::Color::RED)
|
874
|
+
|
875
|
+
exit(1)
|
876
|
+
end
|
837
877
|
|
838
878
|
|
879
|
+
end
|
839
880
|
check = Helpers.checkmark
|
840
|
-
|
881
|
+
|
882
|
+
successful_changes = response["result"]["tree"]
|
883
|
+
if !successful_changes.nil? and is_success
|
884
|
+
Dataset.verify_cnvrgignore_exist(dataset_name, false)
|
885
|
+
|
886
|
+
log_message("#{check} Clone finished successfully", Thor::Shell::Color::GREEN)
|
887
|
+
else
|
888
|
+
log_message("Couldn't download some files", Thor::Shell::Color::RED)
|
889
|
+
|
890
|
+
end
|
841
891
|
|
842
892
|
else
|
843
|
-
|
844
|
-
log_message("Error
|
845
|
-
exit(
|
893
|
+
|
894
|
+
log_message("Error: Couldn't create directory: #{dataset_name}", Thor::Shell::Color::RED)
|
895
|
+
exit(1)
|
846
896
|
end
|
847
|
-
rescue => e
|
848
|
-
log_error(e)
|
849
897
|
rescue SignalException
|
850
|
-
|
851
898
|
say "\nAborting"
|
852
899
|
exit(1)
|
853
900
|
end
|
901
|
+
|
902
|
+
|
903
|
+
|
904
|
+
|
854
905
|
end
|
855
906
|
|
856
907
|
desc 'init_data_container', 'Init dataset directory', :hide => true
|
@@ -1029,6 +1080,8 @@ module Cnvrg
|
|
1029
1080
|
end
|
1030
1081
|
|
1031
1082
|
|
1083
|
+
|
1084
|
+
|
1032
1085
|
desc 'upload_data', 'Upload data files', :hide => true
|
1033
1086
|
method_option :ignore, :type => :array, :aliases => ["-i", "--i"], :desc => "ignore following files"
|
1034
1087
|
method_option :new_branch, :type => :boolean, :aliases => ["-nb", "--nb"], :desc => "create new branch of commits"
|
@@ -1152,7 +1205,7 @@ module Cnvrg
|
|
1152
1205
|
update_count += result["deleted"].size
|
1153
1206
|
end
|
1154
1207
|
if update_count == update_total
|
1155
|
-
res = @files.end_commit(commit_sha1)
|
1208
|
+
res = @files.end_commit(commit_sha1,false)
|
1156
1209
|
if (Cnvrg::CLI.is_response_success(res, false))
|
1157
1210
|
# save idx
|
1158
1211
|
begin
|
@@ -1280,9 +1333,8 @@ module Cnvrg
|
|
1280
1333
|
relative_path = f.gsub(/^#{@dataset.local_path + "/"}/, "")
|
1281
1334
|
successful_updates << relative_path
|
1282
1335
|
end
|
1283
|
-
@dataset.update_idx_with_files_commits!((successful_deletions
|
1336
|
+
@dataset.update_idx_with_files_commits!((successful_deletions+successful_updates), commit_time)
|
1284
1337
|
|
1285
|
-
@dataset.update_idx_with_commit!(commit_sha1)
|
1286
1338
|
log_message("Compressing data", Thor::Shell::Color::BLUE)
|
1287
1339
|
|
1288
1340
|
home_dir = File.expand_path('~')
|
@@ -1366,10 +1418,10 @@ module Cnvrg
|
|
1366
1418
|
exit(0)
|
1367
1419
|
rescue => e
|
1368
1420
|
log_error(e)
|
1369
|
-
if !Cnvrg::Helpers.internet_connection?
|
1370
|
-
|
1371
|
-
|
1372
|
-
end
|
1421
|
+
# if !Cnvrg::Helpers.internet_connection?
|
1422
|
+
# say "Seems there is no internet connection", Thor::Shell::Color::RED
|
1423
|
+
#
|
1424
|
+
# end
|
1373
1425
|
if File.exist? log_file
|
1374
1426
|
@files.upload_data_log_file(log_file, log_file, commit_sha1)
|
1375
1427
|
end
|
@@ -1428,12 +1480,16 @@ module Cnvrg
|
|
1428
1480
|
if owner.nil? or owner.empty?
|
1429
1481
|
owner = CLI.get_owner()
|
1430
1482
|
end
|
1483
|
+
|
1431
1484
|
result = @dataset.list(owner)
|
1432
|
-
|
1485
|
+
Cnvrg::CLI.is_response_success(result)
|
1433
1486
|
|
1434
|
-
|
1487
|
+
list = result["result"]["list"]
|
1435
1488
|
|
1436
|
-
|
1489
|
+
print_table(list)
|
1490
|
+
|
1491
|
+
|
1492
|
+
end
|
1437
1493
|
|
1438
1494
|
desc 'data commits', 'List all commits for a specific dataset'
|
1439
1495
|
|
@@ -1640,7 +1696,7 @@ module Cnvrg
|
|
1640
1696
|
new_branch = options["new_branch"] || false
|
1641
1697
|
force = options["force"] || false
|
1642
1698
|
|
1643
|
-
result = @project.compare_idx(new_branch,
|
1699
|
+
result = @project.compare_idx(new_branch,force:force)["result"]
|
1644
1700
|
commit = result["commit"]
|
1645
1701
|
result = result["tree"]
|
1646
1702
|
log_message("Comparing local changes with remote version:", Thor::Shell::Color::BLUE)
|
@@ -1710,112 +1766,487 @@ module Cnvrg
|
|
1710
1766
|
exit(1)
|
1711
1767
|
end
|
1712
1768
|
end
|
1769
|
+
desc 'sync_data_new', 'sync_data_new'
|
1770
|
+
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
1771
|
+
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
1772
|
+
method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
|
1773
|
+
method_option :commit, :type => :string, :aliases => ["-c"], :desc => "download specified commit", :default => nil
|
1774
|
+
method_option :all_files, :type => :boolean, :aliases => ["--all"], :desc => "download specified commit", :default => true
|
1713
1775
|
|
1776
|
+
def sync_data_new(new_branch, force, verbose, commit, all_files)
|
1777
|
+
verify_logged_in(true)
|
1778
|
+
log_start(__method__, args, options)
|
1779
|
+
log_message('Syncing dataset', Thor::Shell::Color::BLUE, !options["verbose"])
|
1780
|
+
if !options[:force]
|
1781
|
+
invoke :download_data_new,[verbose,true, commit, all_files], :new_branch=>new_branch, :direct=>false, :force =>force
|
1782
|
+
end
|
1783
|
+
invoke :upload_data_new,[new_branch, verbose,true,force], :new_branch=>new_branch, :direct=>false, :force =>force, :sync =>true
|
1714
1784
|
|
1715
|
-
|
1716
|
-
|
1717
|
-
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
1785
|
+
end
|
1786
|
+
desc 'upload_data_new', 'upload_data_new'
|
1718
1787
|
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
1719
|
-
method_option :
|
1720
|
-
method_option :force, :type => :boolean, :aliases => ["-f",
|
1721
|
-
method_option :
|
1722
|
-
|
1788
|
+
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
1789
|
+
method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
|
1790
|
+
method_option :sync, :type => :boolean, :aliases => ["-s","--sync"], :default => false
|
1791
|
+
def upload_data_new(new_branch, verbose,sync,force)
|
1792
|
+
commit = invoke :start_commit_data,[], :new_branch=>new_branch, :direct=>false, :force =>force
|
1793
|
+
|
1794
|
+
upload_res = invoke :upload_data_files,[commit],:new_branch=>new_branch, :verbose =>verbose, :force =>force, :sync =>sync
|
1795
|
+
if upload_res
|
1796
|
+
invoke :end_commit_data,[commit] , :new_branch=>new_branch, :force =>force
|
1797
|
+
end
|
1723
1798
|
|
1724
|
-
|
1799
|
+
end
|
1800
|
+
|
1801
|
+
desc 'start_commit', 'start data commit'
|
1802
|
+
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
1803
|
+
method_option :direct, :type => :boolean, :aliases => ["-d","--direct"], :desc => "was called directed", :default => true
|
1804
|
+
method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
|
1725
1805
|
|
1806
|
+
def start_commit_data()
|
1726
1807
|
begin
|
1727
1808
|
verify_logged_in(true)
|
1728
1809
|
log_start(__method__, args, options)
|
1810
|
+
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
1811
|
+
direct = options[:direct]
|
1812
|
+
new_branch = options["new_branch"] || false
|
1813
|
+
force = options["force"] || false
|
1814
|
+
commit_sha1 = nil
|
1815
|
+
@dataset = Dataset.new(dataset_dir)
|
1816
|
+
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
|
1817
|
+
next_commit = @dataset.get_next_commit()
|
1818
|
+
if !next_commit.nil? and !next_commit.empty?
|
1819
|
+
resp = @files.get_commit(next_commit)
|
1820
|
+
if resp["result"]["status"].eql? "new"
|
1821
|
+
resp = @files.start_commit(new_branch,force)
|
1822
|
+
commit_sha1 = resp["result"]["commit_sha1"]
|
1729
1823
|
|
1730
|
-
|
1731
|
-
commit_msg = options["message"]
|
1732
|
-
if commit_msg.nil? or commit_msg.empty?
|
1733
|
-
commit_msg = ""
|
1734
|
-
end
|
1735
|
-
|
1736
|
-
@files = Cnvrg::Files.new(@project.owner, @project.slug)
|
1737
|
-
ignore = options[:ignore] || ""
|
1738
|
-
force = options[:force] || false
|
1824
|
+
@dataset.set_next_commit(commit_sha1)
|
1739
1825
|
|
1740
|
-
if ignore.nil? or ignore.empty?
|
1741
|
-
ignore = ignore_list
|
1742
|
-
end
|
1743
|
-
data_ignore = data_dir_include()
|
1744
|
-
if !data_ignore.nil?
|
1745
|
-
if ignore.nil? or ignore.empty?
|
1746
|
-
ignore = data_ignore
|
1747
1826
|
else
|
1748
|
-
ignore = "#{ignore},#{data_ignore}"
|
1749
|
-
end
|
1750
|
-
end
|
1751
|
-
if !@project.update_ignore_list(ignore)
|
1752
|
-
log_message("Couldn't append new ignore files to .cnvrgignore", Thor::Shell::Color::YELLOW)
|
1753
|
-
end
|
1754
|
-
new_branch = options["new_branch"] || false
|
1755
|
-
|
1756
|
-
if options["sync"] or sync
|
1757
|
-
new_branch_exp = @project.get_new_branch
|
1758
|
-
if new_branch_exp
|
1759
|
-
new_branch = new_branch_exp
|
1760
|
-
end
|
1761
|
-
end
|
1762
1827
|
|
1763
|
-
|
1764
|
-
commit = result["result"]["commit"]
|
1765
|
-
if !link
|
1766
|
-
if ((commit != @project.last_local_commit and !@project.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?) and !force)
|
1828
|
+
commit_sha1 = resp["result"]["commit_sha1"]
|
1767
1829
|
|
1768
|
-
log_message("Remote server has an updated version, please run `cnvrg download` first, or alternatively: `cnvrg sync`", Thor::Shell::Color::BLUE)
|
1769
|
-
exit(1)
|
1770
1830
|
end
|
1831
|
+
else
|
1771
1832
|
|
1772
|
-
|
1833
|
+
resp = @files.start_commit(new_branch,force)
|
1834
|
+
commit_sha1 = resp["result"]["commit_sha1"]
|
1835
|
+
|
1836
|
+
@dataset.set_next_commit(commit_sha1)
|
1773
1837
|
end
|
1774
|
-
|
1775
|
-
|
1776
|
-
# all = result["added"].select {|x| x.include? ".conflict"} +result["conflicts"].flatten
|
1777
|
-
# if all.size == 1
|
1778
|
-
# num = "conflict"
|
1779
|
-
# else
|
1780
|
-
# num = "conflicts"
|
1781
|
-
# end
|
1782
|
-
# say "Project contains #{all.size} #{num}:", Thor::Shell::Color::RED
|
1783
|
-
# say "#{all.join("\n")}"
|
1784
|
-
# say "Please fix #{num}, and retry", Thor::Shell::Color::RED
|
1785
|
-
# exit(1)
|
1786
|
-
#
|
1787
|
-
# end
|
1788
|
-
check = Helpers.checkmark()
|
1789
|
-
if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
|
1790
|
-
log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
|
1791
|
-
return true
|
1838
|
+
if direct
|
1839
|
+
puts commit_sha1
|
1792
1840
|
end
|
1793
|
-
|
1794
|
-
|
1795
|
-
|
1796
|
-
|
1797
|
-
|
1798
|
-
if update_total == 1
|
1799
|
-
log_message("Updating #{update_total} file", Thor::Shell::Color::BLUE)
|
1800
|
-
else
|
1801
|
-
log_message("Updating #{update_total} files", Thor::Shell::Color::BLUE)
|
1841
|
+
return commit_sha1
|
1842
|
+
rescue => e
|
1843
|
+
puts e
|
1844
|
+
if !commit_sha1.nil?
|
1845
|
+
@dataset.set_next_commit(commit_sha1)
|
1802
1846
|
end
|
1803
|
-
|
1804
|
-
|
1847
|
+
rescue SignalException
|
1848
|
+
log_message("Aborting..", Thor::Shell::Color::YELLOW)
|
1849
|
+
if !commit_sha1.nil?
|
1805
1850
|
|
1851
|
+
@dataset.set_next_commit(commit_sha1)
|
1806
1852
|
end
|
1807
|
-
# Start commit
|
1808
|
-
commit_sha1 = @files.start_commit(new_branch, force: force)["result"]["commit_sha1"]
|
1809
1853
|
|
1810
|
-
|
1811
|
-
|
1854
|
+
exit(1)
|
1855
|
+
end
|
1812
1856
|
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1857
|
+
end
|
1858
|
+
desc 'end_commit', 'start data commit'
|
1859
|
+
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
1860
|
+
method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
|
1861
|
+
|
1862
|
+
def end_commit_data(commit)
|
1863
|
+
begin
|
1864
|
+
verify_logged_in(true)
|
1865
|
+
log_start(__method__, args, options)
|
1866
|
+
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
1867
|
+
@dataset = Dataset.new(dataset_dir)
|
1868
|
+
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
|
1869
|
+
force = options["force"] || false
|
1870
|
+
|
1871
|
+
resp = @files.end_commit(commit, force)
|
1872
|
+
if (resp and resp["result"])
|
1873
|
+
check = Helpers.checkmark()
|
1874
|
+
@dataset.remove_next_commit()
|
1875
|
+
log_message("#{check} Data files were updated successfully", Thor::Shell::Color::GREEN)
|
1876
|
+
end
|
1877
|
+
|
1878
|
+
|
1879
|
+
rescue => e
|
1880
|
+
puts e
|
1881
|
+
rescue SignalException
|
1882
|
+
@dataset.set_next_commit(commit)
|
1883
|
+
log_message("Aborting", Thor::Shell::Color::YELLOW)
|
1884
|
+
exit(1)
|
1885
|
+
end
|
1886
|
+
|
1887
|
+
end
|
1888
|
+
desc 'list_files', 'list files in dataset'
|
1889
|
+
method_option :json, :type => :boolean, :aliases => ["-j","--json"],:default => true, :desc => "response as json"
|
1890
|
+
method_option :commit, :type => :string, :aliases => ["-c","--commit"], :default => nil
|
1891
|
+
|
1892
|
+
def list_files_dataset()
|
1893
|
+
begin
|
1894
|
+
verify_logged_in(true)
|
1895
|
+
log_start(__method__, args, options)
|
1896
|
+
commit = options[:commit]
|
1897
|
+
as_json = options[:json]
|
1898
|
+
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
1899
|
+
@dataset = Dataset.new(dataset_dir)
|
1900
|
+
|
1901
|
+
resp = @dataset.list_files(commit, as_json)
|
1902
|
+
if (resp and resp["result"])
|
1903
|
+
if as_json
|
1904
|
+
puts resp["result"]
|
1905
|
+
else
|
1906
|
+
print_table(resp["result"])
|
1907
|
+
|
1908
|
+
end
|
1909
|
+
|
1910
|
+
end
|
1911
|
+
|
1912
|
+
|
1913
|
+
rescue => e
|
1914
|
+
puts e
|
1915
|
+
rescue SignalException
|
1916
|
+
@dataset.set_next_commit(commit)
|
1917
|
+
log_message("Aborting", Thor::Shell::Color::YELLOW)
|
1918
|
+
exit(1)
|
1919
|
+
end
|
1920
|
+
|
1921
|
+
end
|
1922
|
+
desc 'upload_data', 'Upload updated files'
|
1923
|
+
method_option :ignore, :type => :string, :aliases => ["-i"], :desc => "ignore following files", :default => ""
|
1924
|
+
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
1925
|
+
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
1926
|
+
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
1927
|
+
method_option :force, :type => :boolean, :aliases => ["-f","--force"], :default => false
|
1928
|
+
|
1929
|
+
def upload_data_files(new_commit, *files)
|
1930
|
+
|
1931
|
+
begin
|
1932
|
+
verify_logged_in(true)
|
1933
|
+
log_start(__method__, args, options)
|
1934
|
+
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
1935
|
+
|
1936
|
+
@dataset = Dataset.new(dataset_dir)
|
1937
|
+
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
|
1938
|
+
next_commit = @dataset.get_next_commit()
|
1939
|
+
|
1940
|
+
|
1941
|
+
if (new_commit.nil? or new_commit.empty?) and next_commit.nil?
|
1942
|
+
log_message("You must specify commit, run start_commit to create new commit", Thor::Shell::Color::RED)
|
1943
|
+
exit(1)
|
1944
|
+
end
|
1945
|
+
|
1946
|
+
force = options[:force] || false
|
1947
|
+
|
1948
|
+
new_branch = options["new_branch"] || false
|
1949
|
+
log_message("Checking dataset", Thor::Shell::Color::BLUE) unless options[:sync]
|
1950
|
+
local_idx = @dataset.generate_idx
|
1951
|
+
result = @dataset.compare_idx(new_branch, commit=@dataset.last_local_commit, local_idx= local_idx, force=force, next_commit= next_commit)
|
1952
|
+
|
1953
|
+
commit_sha1 = result["result"]["commit"]
|
1954
|
+
if commit_sha1 != @dataset.last_local_commit and !@dataset.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?
|
1955
|
+
@dataset.remove_next_commit()
|
1956
|
+
@files.delete_commit(next_commit)
|
1957
|
+
log_message("Remote server has an updated version, please run `cnvrg data download` first or cnvrg data upload --new_branch", Thor::Shell::Color::BLUE)
|
1958
|
+
exit(1)
|
1959
|
+
end
|
1960
|
+
check = Helpers.checkmark()
|
1961
|
+
|
1962
|
+
|
1963
|
+
commit_time = result["result"]["commit_time"]
|
1964
|
+
already_uploaded = result["result"]["uploaded"]
|
1965
|
+
dirs_uploaded = []
|
1966
|
+
files_uploaded = []
|
1967
|
+
files_uploaded_names = []
|
1968
|
+
if !already_uploaded.nil? and !already_uploaded.empty?
|
1969
|
+
|
1970
|
+
dirs_uploaded = already_uploaded["dirs"]
|
1971
|
+
files_uploaded = already_uploaded["blobs"]
|
1972
|
+
if !files_uploaded.nil? and !files_uploaded.empty?
|
1973
|
+
files_uploaded_names = already_uploaded["blobs"].keys
|
1974
|
+
end
|
1975
|
+
|
1976
|
+
end
|
1977
|
+
|
1978
|
+
result = result["result"]["tree"]
|
1979
|
+
if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
|
1980
|
+
@files.delete_commit(next_commit)
|
1981
|
+
|
1982
|
+
log_message("#{check} Dataset is up to date", Thor::Shell::Color::GREEN, true)
|
1983
|
+
return false
|
1984
|
+
end
|
1985
|
+
log_message("Creating new commit for dataset: #{@dataset.slug}", Thor::Shell::Color::BLUE) unless options[:sync]
|
1986
|
+
|
1987
|
+
|
1988
|
+
# upload / update
|
1989
|
+
begin
|
1990
|
+
|
1991
|
+
parallel_options = {
|
1992
|
+
:progress => {
|
1993
|
+
:title => "Upload Progress",
|
1994
|
+
:progress_mark => '=',
|
1995
|
+
:format => "%b>>%i| %p%% %t",
|
1996
|
+
:starting_at => 0,
|
1997
|
+
:total => (result["added"] + result["updated_on_local"]).size,
|
1998
|
+
:autofinish => true
|
1999
|
+
},
|
2000
|
+
in_threads: ParallelThreads,
|
2001
|
+
isolation: true
|
2002
|
+
}
|
2003
|
+
successful_updates = []
|
2004
|
+
update_count =0
|
2005
|
+
update_total = (result["added"] + result["updated_on_local"] + result["deleted"]).size
|
2006
|
+
|
2007
|
+
if (result["added"] + result["updated_on_local"]).size > 0
|
2008
|
+
begin
|
2009
|
+
upload_result = Parallel.map((result["added"] + result["updated_on_local"]), parallel_options) do |f|
|
2010
|
+
absolute_path = "#{@dataset.local_path}/#{f}"
|
2011
|
+
relative_path = f.gsub(/^#{@dataset.local_path + "/"}/, "")
|
2012
|
+
if File.directory?(absolute_path)
|
2013
|
+
if dirs_uploaded.include? f
|
2014
|
+
#Already uploaded and didn't finish commit
|
2015
|
+
log_message("Already uploaded dir: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
|
2016
|
+
|
2017
|
+
next
|
2018
|
+
end
|
2019
|
+
log_message("uploading dir: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
|
2020
|
+
|
2021
|
+
resDir = @files.create_dir(absolute_path, relative_path, commit_sha1)
|
2022
|
+
if resDir
|
2023
|
+
update_count += 1
|
2024
|
+
successful_updates<< relative_path
|
2025
|
+
else
|
2026
|
+
log_message("Failed to upload directory: #{ relative_path }", Thor::Shell::Color::RED)
|
2027
|
+
|
2028
|
+
raise Parallel::Kill
|
2029
|
+
end
|
2030
|
+
|
2031
|
+
else
|
2032
|
+
if files_uploaded_names.include? f
|
2033
|
+
log_message("Already uploaded file: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
|
2034
|
+
|
2035
|
+
next
|
2036
|
+
end
|
2037
|
+
log_message("uploading: #{f}", Thor::Shell::Color::BLUE, options["verbose"])
|
2038
|
+
|
2039
|
+
res = @files.upload_file(absolute_path, relative_path, commit_sha1)
|
2040
|
+
if res
|
2041
|
+
update_count += 1
|
2042
|
+
|
2043
|
+
successful_updates<< relative_path
|
2044
|
+
else
|
2045
|
+
log_message("Failed to upload: #{ File.basename(absolute_path) }", Thor::Shell::Color::RED)
|
2046
|
+
|
2047
|
+
raise Parallel::Kill
|
2048
|
+
|
2049
|
+
end
|
2050
|
+
end
|
2051
|
+
end
|
2052
|
+
rescue SignalException
|
2053
|
+
log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
|
2054
|
+
|
2055
|
+
|
2056
|
+
exit(1)
|
2057
|
+
end
|
2058
|
+
end
|
2059
|
+
|
2060
|
+
end
|
2061
|
+
successful_updates = upload_result.to_a + dirs_uploaded + files_uploaded_names
|
2062
|
+
successful_deletions =[]
|
2063
|
+
|
2064
|
+
|
2065
|
+
# delete
|
2066
|
+
|
2067
|
+
deleted = update_deleted(result["deleted"])
|
2068
|
+
begin
|
2069
|
+
|
2070
|
+
deleted_result = Parallel.map(deleted, in_threads: ParallelThreads) do |f|
|
2071
|
+
|
2072
|
+
relative_path = f.gsub(/^#{@dataset.local_path + "/"}/, "")
|
2073
|
+
if relative_path.end_with?("/")
|
2074
|
+
log_message("deleting dir: #{f}", Thor::Shell::Color::RED, options["verbose"])
|
2075
|
+
|
2076
|
+
if @files.delete_dir(f, relative_path, commit_sha1)
|
2077
|
+
successful_deletions << f
|
2078
|
+
else
|
2079
|
+
log_message("Failed to delete directory: #{ f }", Thor::Shell::Color::RED)
|
2080
|
+
raise Parallel::Kill
|
2081
|
+
|
2082
|
+
end
|
2083
|
+
else
|
2084
|
+
log_message("deleteing file: #{f}", Thor::Shell::Color::RED, options["verbose"])
|
2085
|
+
|
2086
|
+
if @files.delete_file(f, relative_path, commit_sha1)
|
2087
|
+
successful_deletions << f
|
2088
|
+
|
2089
|
+
else
|
2090
|
+
log_message("Failed to delete file: #{ f }", Thor::Shell::Color::RED)
|
2091
|
+
raise Parallel::Kill
|
2092
|
+
|
2093
|
+
|
2094
|
+
end
|
2095
|
+
end
|
2096
|
+
end
|
2097
|
+
|
2098
|
+
|
2099
|
+
successful_deletions += successful_deletions.select { |x| not x.nil? }
|
2100
|
+
|
2101
|
+
|
2102
|
+
successful_updates = successful_updates.select { |x| not x.nil? }
|
2103
|
+
|
2104
|
+
update_count = successful_updates.size
|
2105
|
+
|
2106
|
+
rescue SignalException
|
2107
|
+
say "User aborted", Thor::Shell::Color::RED
|
2108
|
+
exit(0)
|
2109
|
+
rescue => e
|
2110
|
+
log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
|
2111
|
+
log_error(e)
|
2112
|
+
exit(0)
|
2113
|
+
end
|
2114
|
+
if !result["deleted"].nil? and !result["deleted"].empty?
|
2115
|
+
update_count += result["deleted"].size
|
2116
|
+
end
|
2117
|
+
|
2118
|
+
if update_count == update_total
|
2119
|
+
begin
|
2120
|
+
@dataset.update_idx_with_files_commits!((successful_deletions+successful_updates), commit_time)
|
2121
|
+
|
2122
|
+
return true
|
2123
|
+
rescue => e
|
2124
|
+
log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
|
2125
|
+
|
2126
|
+
exit(1)
|
2127
|
+
|
2128
|
+
end
|
2129
|
+
|
2130
|
+
end
|
2131
|
+
rescue => e
|
2132
|
+
|
2133
|
+
log_message("Exception while trying to upload, look at the log for more details", Thor::Shell::Color::RED)
|
2134
|
+
log_error(e)
|
2135
|
+
|
2136
|
+
exit(1)
|
2137
|
+
rescue SignalException
|
2138
|
+
|
2139
|
+
say "\nAborting", Thor::Shell::Color::BLUE
|
2140
|
+
exit(1)
|
2141
|
+
end
|
2142
|
+
|
2143
|
+
end
|
2144
|
+
|
2145
|
+
|
2146
|
+
desc 'upload', 'Upload updated files'
|
2147
|
+
method_option :ignore, :type => :string, :aliases => ["-i"], :desc => "ignore following files", :default => ""
|
2148
|
+
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
2149
|
+
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
2150
|
+
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
2151
|
+
method_option :force, :type => :boolean, :aliases => ["-f", "--force"], :default => false
|
2152
|
+
method_option :message, :type => :string, :aliases => ["-m", "--message"], :default => ""
|
2153
|
+
method_option :deploy, :type => :boolean, :aliases => ["-d", "--deploy"], :default => false
|
2154
|
+
|
2155
|
+
def upload(link = false, sync = false, direct = false, ignore_list = "")
|
2156
|
+
|
2157
|
+
begin
|
2158
|
+
verify_logged_in(true)
|
2159
|
+
log_start(__method__, args, options)
|
2160
|
+
|
2161
|
+
@project = Project.new(get_project_home)
|
2162
|
+
commit_msg = options["message"]
|
2163
|
+
if commit_msg.nil? or commit_msg.empty?
|
2164
|
+
commit_msg = ""
|
2165
|
+
end
|
2166
|
+
|
2167
|
+
@files = Cnvrg::Files.new(@project.owner, @project.slug)
|
2168
|
+
ignore = options[:ignore] || ""
|
2169
|
+
force = options[:force] || false
|
2170
|
+
|
2171
|
+
if ignore.nil? or ignore.empty?
|
2172
|
+
ignore = ignore_list
|
2173
|
+
end
|
2174
|
+
data_ignore = data_dir_include()
|
2175
|
+
if !data_ignore.nil?
|
2176
|
+
if ignore.nil? or ignore.empty?
|
2177
|
+
ignore = data_ignore
|
2178
|
+
else
|
2179
|
+
ignore = "#{ignore},#{data_ignore}"
|
2180
|
+
end
|
2181
|
+
end
|
2182
|
+
if !@project.update_ignore_list(ignore)
|
2183
|
+
log_message("Couldn't append new ignore files to .cnvrgignore", Thor::Shell::Color::YELLOW)
|
2184
|
+
end
|
2185
|
+
new_branch = options["new_branch"] || false
|
2186
|
+
|
2187
|
+
if options["sync"] or sync
|
2188
|
+
new_branch_exp = @project.get_new_branch
|
2189
|
+
if new_branch_exp
|
2190
|
+
new_branch = new_branch_exp
|
2191
|
+
end
|
2192
|
+
end
|
2193
|
+
|
2194
|
+
result = @project.compare_idx(new_branch, force: force, deploy: options["deploy"])
|
2195
|
+
commit = result["result"]["commit"]
|
2196
|
+
if !link
|
2197
|
+
if ((commit != @project.last_local_commit and !@project.last_local_commit.nil? and !result["result"]["tree"]["updated_on_server"].empty?) and !force)
|
2198
|
+
|
2199
|
+
log_message("Remote server has an updated version, please run `cnvrg download` first, or alternatively: `cnvrg sync`", Thor::Shell::Color::BLUE)
|
2200
|
+
exit(1)
|
2201
|
+
end
|
2202
|
+
|
2203
|
+
log_message("Comparing local changes with remote version:", Thor::Shell::Color::BLUE, (options["verbose"]))
|
2204
|
+
end
|
2205
|
+
result = result["result"]["tree"]
|
2206
|
+
# if result["added"].any? {|x| x.include? ".conflict"} or !result["conflicts"].empty?
|
2207
|
+
# all = result["added"].select {|x| x.include? ".conflict"} +result["conflicts"].flatten
|
2208
|
+
# if all.size == 1
|
2209
|
+
# num = "conflict"
|
2210
|
+
# else
|
2211
|
+
# num = "conflicts"
|
2212
|
+
# end
|
2213
|
+
# say "Project contains #{all.size} #{num}:", Thor::Shell::Color::RED
|
2214
|
+
# say "#{all.join("\n")}"
|
2215
|
+
# say "Please fix #{num}, and retry", Thor::Shell::Color::RED
|
2216
|
+
# exit(1)
|
2217
|
+
#
|
2218
|
+
# end
|
2219
|
+
check = Helpers.checkmark()
|
2220
|
+
if result["added"].empty? and result["updated_on_local"].empty? and result["deleted"].empty?
|
2221
|
+
log_message("#{check} Project is up to date", Thor::Shell::Color::GREEN, (((options["sync"] or sync) and !direct) ? false : true))
|
2222
|
+
return true
|
2223
|
+
end
|
2224
|
+
update_count = 0
|
2225
|
+
update_total = result["added"].size + result["updated_on_local"].size + result["deleted"].size
|
2226
|
+
successful_updates = []
|
2227
|
+
successful_deletions = []
|
2228
|
+
if options["verbose"]
|
2229
|
+
if update_total == 1
|
2230
|
+
log_message("Updating #{update_total} file", Thor::Shell::Color::BLUE)
|
2231
|
+
else
|
2232
|
+
log_message("Updating #{update_total} files", Thor::Shell::Color::BLUE)
|
2233
|
+
end
|
2234
|
+
else
|
2235
|
+
log_message("Syncing files", Thor::Shell::Color::BLUE, ((options["sync"] or sync)) ? false : true)
|
2236
|
+
|
2237
|
+
end
|
2238
|
+
# Start commit
|
2239
|
+
commit_sha1 = @files.start_commit(new_branch, force: force)["result"]["commit_sha1"]
|
2240
|
+
|
2241
|
+
# upload / update
|
2242
|
+
begin
|
2243
|
+
|
2244
|
+
parallel_options = {
|
2245
|
+
:progress => {
|
2246
|
+
:title => "Upload Progress",
|
2247
|
+
:progress_mark => '=',
|
2248
|
+
:format => "%b>>%i| %p%% %t",
|
2249
|
+
:starting_at => 0,
|
1819
2250
|
:total => (result["added"] + result["updated_on_local"]).size,
|
1820
2251
|
:autofinish => true
|
1821
2252
|
},
|
@@ -1931,78 +2362,309 @@ module Cnvrg
|
|
1931
2362
|
update_count += result["deleted"].size
|
1932
2363
|
end
|
1933
2364
|
|
1934
|
-
if update_count == update_total
|
1935
|
-
res = @files.end_commit(commit_sha1, force: force, message: commit_msg)
|
1936
|
-
if (Cnvrg::CLI.is_response_success(res, false))
|
1937
|
-
# save idx
|
1938
|
-
begin
|
1939
|
-
@project.update_idx_with_files_commits!((successful_deletions + successful_updates), res["result"]["commit_time"])
|
2365
|
+
if update_count == update_total
|
2366
|
+
res = @files.end_commit(commit_sha1, force: force, message: commit_msg)
|
2367
|
+
if (Cnvrg::CLI.is_response_success(res, false))
|
2368
|
+
# save idx
|
2369
|
+
begin
|
2370
|
+
@project.update_idx_with_files_commits!((successful_deletions + successful_updates), res["result"]["commit_time"])
|
2371
|
+
|
2372
|
+
@project.update_idx_with_commit!(commit_sha1)
|
2373
|
+
rescue => e
|
2374
|
+
@files.rollback_commit(commit_sha1)
|
2375
|
+
log_message("Couldn't commit updates, Rolling Back all changes.", Thor::Shell::Color::RED)
|
2376
|
+
log_error(e)
|
2377
|
+
exit(1)
|
2378
|
+
|
2379
|
+
end
|
2380
|
+
image = is_project_with_docker(Dir.pwd)
|
2381
|
+
if image and image.is_docker
|
2382
|
+
image.update_image_activity(commit_sha1, nil)
|
2383
|
+
end
|
2384
|
+
|
2385
|
+
if options["verbose"]
|
2386
|
+
log_message("#{check} Done", Thor::Shell::Color::BLUE)
|
2387
|
+
if successful_updates.size > 0
|
2388
|
+
successful_updates.flatten!
|
2389
|
+
log_message("Updated:", Thor::Shell::Color::GREEN)
|
2390
|
+
suc = successful_updates.map {|x| x = Helpers.checkmark() + " " + x}
|
2391
|
+
log_message(suc.join("\n"), Thor::Shell::Color::GREEN)
|
2392
|
+
end
|
2393
|
+
if successful_deletions.size > 0
|
2394
|
+
successful_deletions.flatten!
|
2395
|
+
|
2396
|
+
log_message("Deleted:", Thor::Shell::Color::GREEN)
|
2397
|
+
del = successful_updates.map {|x| x = Helpers.checkmark() + " " + x}
|
2398
|
+
log_message(del.join("\n"), Thor::Shell::Color::GREEN)
|
2399
|
+
end
|
2400
|
+
log_message("Total of #{update_count} / #{update_total} files.", Thor::Shell::Color::GREEN)
|
2401
|
+
else
|
2402
|
+
if (options["sync"] or sync) and direct
|
2403
|
+
log_message("#{check} Syncing project completed successfully", Thor::Shell::Color::GREEN)
|
2404
|
+
|
2405
|
+
else
|
2406
|
+
log_message("#{check} Changes were updated successfully", Thor::Shell::Color::GREEN)
|
2407
|
+
|
2408
|
+
end
|
2409
|
+
|
2410
|
+
end
|
2411
|
+
|
2412
|
+
else
|
2413
|
+
@files.rollback_commit(commit_sha1)
|
2414
|
+
log_message("Error: couldn't commit changes, Rolling Back all changes.", Thor::Shell::Color::RED)
|
2415
|
+
end
|
2416
|
+
else
|
2417
|
+
@files.rollback_commit(commit_sha1)
|
2418
|
+
log_message("Error: uploaded only: #{update_count} / #{update_total}, \n Rolling back", Thor::Shell::Color::RED)
|
2419
|
+
|
2420
|
+
end
|
2421
|
+
rescue => e
|
2422
|
+
|
2423
|
+
log_message("Error occurred, \nAborting", Thor::Shell::Color::RED)
|
2424
|
+
log_error(e)
|
2425
|
+
@files.rollback_commit(commit_sha1) unless commit_sha1.nil?
|
2426
|
+
puts e.message
|
2427
|
+
|
2428
|
+
exit(1)
|
2429
|
+
rescue SignalException
|
2430
|
+
|
2431
|
+
say "\nAborting", Thor::Shell::Color::BLUE
|
2432
|
+
say "\nRolling back all changes", Thor::Shell::Color::BLUE
|
2433
|
+
@files.rollback_commit(commit_sha1) unless commit_sha1.nil?
|
2434
|
+
exit(1)
|
2435
|
+
end
|
2436
|
+
|
2437
|
+
end
|
2438
|
+
desc 'download_file_data', 'Download one data files'
|
2439
|
+
method_option :verbose, :type => :boolean, :aliases => ["-v", "--verbose"], :default => false
|
2440
|
+
method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :desc => "download specified commit", :default => nil
|
2441
|
+
method_option :link, :type => :boolean, :aliases => ["-l","--link"], :desc => "download specified commit", :default => false
|
2442
|
+
method_option :download_path, :type => :string, :aliases => ["-p", "--path"], :desc => "download specified commit", :default => ""
|
2443
|
+
method_option :remote, :type => :boolean, :aliases => ["-r","--remote"], :desc => "remote download", :default => false
|
2444
|
+
method_option :json, :type => :boolean, :aliases => ["-j","--json"],:default => false, :desc => "response as json"
|
2445
|
+
|
2446
|
+
def download_file_data(file_path, *dataset_path)
|
2447
|
+
|
2448
|
+
verify_logged_in(true)
|
2449
|
+
log_start(__method__, args, options)
|
2450
|
+
begin
|
2451
|
+
if dataset_path.nil? or dataset_path.empty?
|
2452
|
+
dataset_path = Dir.pwd
|
2453
|
+
elsif dataset_path.is_a? Array
|
2454
|
+
dataset_path = dataset_path[0]
|
2455
|
+
end
|
2456
|
+
dataset_dir = is_cnvrg_dir(dataset_path)
|
2457
|
+
@dataset = Dataset.new(dataset_dir)
|
2458
|
+
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
|
2459
|
+
commit_to_download = options["commit"] || nil
|
2460
|
+
as_link = options["link"] || false
|
2461
|
+
download_path = options["path"]
|
2462
|
+
remote = options["remote"]
|
2463
|
+
as_json = options["json"]
|
2464
|
+
if remote
|
2465
|
+
download_path = "/data/#{@dataset.title}/"
|
2466
|
+
|
2467
|
+
else
|
2468
|
+
download_path = dataset_dir
|
2469
|
+
end
|
2470
|
+
if !as_json
|
2471
|
+
|
2472
|
+
log_message("Downloading file", Thor::Shell::Color::BLUE)
|
2473
|
+
|
2474
|
+
end
|
2475
|
+
res = @files.download_file_s3(file_path, file_path, download_path, conflict=false, commit_sha1=commit_to_download, as_link=as_link)
|
2476
|
+
if as_link
|
2477
|
+
puts res
|
2478
|
+
else
|
2479
|
+
if res
|
2480
|
+
if as_json
|
2481
|
+
response = {"status":"success"}
|
2482
|
+
puts response.to_json
|
2483
|
+
else
|
2484
|
+
log_message("#{Helpers.checkmark()} File #{file_path} was successfully downloaded", Thor::Shell::Color::GREEN)
|
2485
|
+
|
2486
|
+
end
|
2487
|
+
end
|
2488
|
+
|
2489
|
+
|
2490
|
+
end
|
2491
|
+
|
2492
|
+
rescue =>e
|
2493
|
+
log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
|
2494
|
+
log_error(e)
|
2495
|
+
exit(1)
|
2496
|
+
end
|
2497
|
+
end
|
2498
|
+
|
2499
|
+
desc 'download_data_new', 'Download updated files'
|
2500
|
+
method_option :new_branch, :type => :boolean, :aliases => ["-nb"], :desc => "create new branch of commits"
|
2501
|
+
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
2502
|
+
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
2503
|
+
method_option :commit, :type => :string, :aliases => ["-c"], :desc => "download specified commit", :default => ""
|
2504
|
+
method_option :all_files, :type => :boolean, :aliases => ["--all"], :desc => "download specified commit", :default => false
|
2505
|
+
|
2506
|
+
begin
|
2507
|
+
def download_data_new(verbose=false,sync=false, commit=nil,all_files=true)
|
2508
|
+
verify_logged_in(true)
|
2509
|
+
log_start(__method__, args, options)
|
2510
|
+
dataset_dir = is_cnvrg_dir(Dir.pwd)
|
2511
|
+
@dataset = Dataset.new(dataset_dir)
|
2512
|
+
@files = Cnvrg::Datafiles.new(@dataset.owner, @dataset.slug)
|
2513
|
+
commit_to_download = commit
|
2514
|
+
local_idx = @dataset.generate_idx
|
2515
|
+
all_files = all_files
|
2516
|
+
if !commit_to_download.nil? and !commit_to_download.empty?
|
2517
|
+
res = @dataset.compare_idx_download( commit=commit_to_download, local_idx= local_idx,all_files=all_files)
|
2518
|
+
else
|
2519
|
+
res = @dataset.compare_idx_download( commit=nil, local_idx= local_idx,all_files=all_files)
|
2520
|
+
|
2521
|
+
end
|
2522
|
+
|
2523
|
+
result = res["result"]["tree"]
|
2524
|
+
|
2525
|
+
commit = res["result"]["commit"]
|
2526
|
+
if result["updated_on_server"].empty? and result["conflicts"].empty? and result["deleted"].empty?
|
2527
|
+
log_message("Dataset is up to date", Thor::Shell::Color::GREEN, ((options["sync"] or sync) ? false : true))
|
2528
|
+
return true
|
2529
|
+
end
|
2530
|
+
update_total = result["updated_on_server"].size + result["conflicts"].size + result["deleted"].size
|
2531
|
+
|
2532
|
+
|
2533
|
+
successful_changes = 0
|
2534
|
+
if update_total ==1
|
2535
|
+
log_message("Downloading #{update_total} file", Thor::Shell::Color::BLUE, !sync)
|
2536
|
+
elsif update_total == 0
|
2537
|
+
log_message("Dataset is up to date", Thor::Shell::Color::GREEN, !sync)
|
2538
|
+
return true
|
2539
|
+
elsif options["verbose"]
|
2540
|
+
log_message("Downloading #{update_total} files", Thor::Shell::Color::BLUE)
|
2541
|
+
else
|
2542
|
+
log_message("Syncing Dataset", Thor::Shell::Color::BLUE, !sync)
|
2543
|
+
|
2544
|
+
end
|
2545
|
+
parallel_options = {
|
2546
|
+
:progress => {
|
2547
|
+
:title => "Download Progress",
|
2548
|
+
:progress_mark => '=',
|
2549
|
+
:format => "%b>>%i| %p%% %t",
|
2550
|
+
:starting_at => 0,
|
2551
|
+
:total => result["updated_on_server"].size,
|
2552
|
+
:autofinish => true
|
2553
|
+
},
|
2554
|
+
in_threads: ParallelThreads
|
2555
|
+
}
|
2556
|
+
conflicts = 0
|
2557
|
+
if !result["conflicts"].empty?
|
2558
|
+
begin
|
2559
|
+
|
2560
|
+
|
2561
|
+
conflicts_result = Parallel.map(result["conflicts"], in_threads: ParallelThreads) do |f|
|
2562
|
+
|
2563
|
+
relative_path = f.gsub(/^#{@dataset.local_path}/, "")
|
2564
|
+
log_message("downloading: #{f}.conflict", Thor::Shell::Color::BLUE, verbose)
|
2565
|
+
|
2566
|
+
if @files.download_file_s3(f, relative_path, dataset_dir, conflict=true, commit_sha1=commit)
|
2567
|
+
conflicts +=1
|
2568
|
+
else
|
2569
|
+
log_message("Couldn't download: #{f}", Thor::Shell::Color::RED)
|
2570
|
+
raise Parallel::Kill
|
2571
|
+
|
2572
|
+
end
|
2573
|
+
end
|
2574
|
+
rescue Interrupt
|
2575
|
+
|
2576
|
+
log_message("Failed to download files", Thor::Shell::Color::RED)
|
2577
|
+
|
2578
|
+
exit(1)
|
2579
|
+
end
|
2580
|
+
end
|
2581
|
+
|
2582
|
+
|
2583
|
+
successful_changes += conflicts
|
2584
|
+
downloads = 0
|
2585
|
+
if !result["updated_on_server"].empty?
|
2586
|
+
|
2587
|
+
updated_on_server_result = Parallel.map(result["updated_on_server"], parallel_options) do |f|
|
2588
|
+
begin
|
2589
|
+
relative_path = f.gsub(/^#{@dataset.local_path}/, "")
|
2590
|
+
if f.end_with? "/"
|
2591
|
+
# dir
|
2592
|
+
if !all_files
|
2593
|
+
log_message("downloading dir: #{f}", Thor::Shell::Color::BLUE, verbose)
|
2594
|
+
if @files.download_dir(dataset_dir, relative_path)
|
2595
|
+
downloads +=1
|
2596
|
+
else
|
2597
|
+
log_message("Couldn't create directory: #{f}", Thor::Shell::Color::RED)
|
2598
|
+
raise Parallel::Kill
|
2599
|
+
|
1940
2600
|
|
1941
|
-
|
1942
|
-
|
1943
|
-
@files.rollback_commit(commit_sha1)
|
1944
|
-
log_message("Couldn't commit updates, Rolling Back all changes.", Thor::Shell::Color::RED)
|
1945
|
-
log_error(e)
|
1946
|
-
exit(1)
|
2601
|
+
end
|
2602
|
+
end
|
1947
2603
|
|
1948
|
-
|
1949
|
-
|
1950
|
-
|
1951
|
-
image.update_image_activity(commit_sha1, nil)
|
1952
|
-
end
|
2604
|
+
else
|
2605
|
+
# blob
|
2606
|
+
log_message("downloading file: #{f}", Thor::Shell::Color::BLUE, verbose)
|
1953
2607
|
|
1954
|
-
|
1955
|
-
|
1956
|
-
if successful_updates.size > 0
|
1957
|
-
successful_updates.flatten!
|
1958
|
-
log_message("Updated:", Thor::Shell::Color::GREEN)
|
1959
|
-
suc = successful_updates.map {|x| x = Helpers.checkmark() + " " + x}
|
1960
|
-
log_message(suc.join("\n"), Thor::Shell::Color::GREEN)
|
1961
|
-
end
|
1962
|
-
if successful_deletions.size > 0
|
1963
|
-
successful_deletions.flatten!
|
2608
|
+
if @files.download_file_s3(f, relative_path, dataset_dir,conflict=false, commit_sha1=commit)
|
2609
|
+
downloads +=1
|
1964
2610
|
|
1965
|
-
|
1966
|
-
|
1967
|
-
|
2611
|
+
else
|
2612
|
+
|
2613
|
+
log_message("Couldn't download: #{f}", Thor::Shell::Color::RED)
|
2614
|
+
raise Parallel::Kill
|
2615
|
+
|
2616
|
+
|
2617
|
+
end
|
1968
2618
|
end
|
1969
|
-
|
1970
|
-
|
1971
|
-
if (options["sync"] or sync) and direct
|
1972
|
-
log_message("#{check} Syncing project completed successfully", Thor::Shell::Color::GREEN)
|
2619
|
+
rescue Interrupt
|
2620
|
+
log_message("Couldn't download", Thor::Shell::Color::RED)
|
1973
2621
|
|
1974
|
-
|
1975
|
-
log_message("#{check} Changes were updated successfully", Thor::Shell::Color::GREEN)
|
2622
|
+
exit(1)
|
1976
2623
|
|
1977
2624
|
end
|
1978
2625
|
|
1979
2626
|
end
|
2627
|
+
successful_changes += downloads
|
2628
|
+
|
2629
|
+
end
|
2630
|
+
|
2631
|
+
deleted = result["deleted"].to_a
|
2632
|
+
delete_res = @files.delete_commit_files_local(deleted)
|
2633
|
+
if !delete_res
|
2634
|
+
log_message("Couldn't delete #{deleted.join(" ")}", Thor::Shell::Color::RED)
|
2635
|
+
log_message("Couldn't download, Rolling Back all changes.", Thor::Shell::Color::RED)
|
2636
|
+
|
2637
|
+
exit(1)
|
2638
|
+
|
2639
|
+
end
|
2640
|
+
successful_changes += deleted.size
|
2641
|
+
|
1980
2642
|
|
2643
|
+
|
2644
|
+
if update_total == successful_changes
|
2645
|
+
# update idx with latest commit
|
2646
|
+
@dataset.update_idx_with_commit!(commit)
|
2647
|
+
check = Helpers.checkmark()
|
2648
|
+
|
2649
|
+
if options["verbose"]
|
2650
|
+
log_message("#{check} Done, Downloaded:", Thor::Shell::Color::GREEN)
|
2651
|
+
log_message(successful_changes.join("\n"), Thor::Shell::Color::GREEN)
|
2652
|
+
log_message("Total of #{successful_changes.size} / #{update_total} files.", Thor::Shell::Color::GREEN)
|
1981
2653
|
else
|
1982
|
-
|
1983
|
-
log_message("Error: couldn't commit changes, Rolling Back all changes.", Thor::Shell::Color::RED)
|
2654
|
+
log_message("#{check} Downloaded changes successfully", Thor::Shell::Color::GREEN, ((sync or options["sync"]) ? false : true))
|
1984
2655
|
end
|
1985
|
-
|
1986
|
-
@files.rollback_commit(commit_sha1)
|
1987
|
-
log_message("Error: uploaded only: #{update_count} / #{update_total}, \n Rolling back", Thor::Shell::Color::RED)
|
2656
|
+
return true
|
1988
2657
|
|
1989
2658
|
end
|
1990
2659
|
rescue => e
|
1991
2660
|
|
1992
|
-
log_message("Error occurred, \nAborting", Thor::Shell::Color::
|
2661
|
+
log_message("Error occurred, \nAborting", Thor::Shell::Color::BLUE)
|
1993
2662
|
log_error(e)
|
1994
|
-
@files.rollback_commit(commit_sha1) unless commit_sha1.nil?
|
1995
|
-
puts e.message
|
1996
|
-
|
1997
2663
|
exit(1)
|
1998
2664
|
rescue SignalException
|
1999
|
-
|
2000
2665
|
say "\nAborting", Thor::Shell::Color::BLUE
|
2001
|
-
say "\nRolling back all changes", Thor::Shell::Color::BLUE
|
2002
|
-
@files.rollback_commit(commit_sha1) unless commit_sha1.nil?
|
2003
2666
|
exit(1)
|
2004
2667
|
end
|
2005
|
-
|
2006
2668
|
end
|
2007
2669
|
|
2008
2670
|
desc 'download', 'Download updated files'
|
@@ -2219,6 +2881,8 @@ module Cnvrg
|
|
2219
2881
|
end
|
2220
2882
|
|
2221
2883
|
|
2884
|
+
|
2885
|
+
|
2222
2886
|
desc 'jump', 'jump to specific commit'
|
2223
2887
|
method_option :remote, :type => :boolean, :aliases => ["-r", "--r"], :default => false
|
2224
2888
|
|
@@ -2428,7 +3092,9 @@ module Cnvrg
|
|
2428
3092
|
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2429
3093
|
method_option :force, :type => :boolean, :aliases => ["-f", "--force"], :default => false
|
2430
3094
|
method_option :sync_before_terminate, :type => :boolean, :aliases => ["-sbt", "--sync_before_terminate"], :default => false
|
2431
|
-
method_option :periodic_sync, :type => :string, :aliases => ["-ps", "--
|
3095
|
+
method_option :periodic_sync, :type => :string, :aliases => ["-ps", "--periodic_sync"], :default => nil #//15,30,45,60
|
3096
|
+
method_option :max_time, :type => :string, :aliases => [ "--max_time"], :default => nil
|
3097
|
+
method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
|
2432
3098
|
|
2433
3099
|
|
2434
3100
|
def run(*cmd)
|
@@ -2451,6 +3117,8 @@ module Cnvrg
|
|
2451
3117
|
sync_before_terminate = options["sync_before_terminate"]
|
2452
3118
|
periodic_sync = options["periodic_sync"]
|
2453
3119
|
force = options["force"]
|
3120
|
+
max_time = options["max_time"]
|
3121
|
+
dataset_only_tree = options["dataset_only_tree"]
|
2454
3122
|
|
2455
3123
|
options_hash = Hash[options]
|
2456
3124
|
real_options = []
|
@@ -2464,8 +3132,7 @@ module Cnvrg
|
|
2464
3132
|
return
|
2465
3133
|
else
|
2466
3134
|
if !periodic_sync.nil? and !periodic_sync.empty?
|
2467
|
-
if /^\d{2}
|
2468
|
-
periodic_sync = periodic_sync.gsub("m","")
|
3135
|
+
if /^\d{2}$/ === periodic_sync
|
2469
3136
|
if !["15","30","45","60"].include? periodic_sync
|
2470
3137
|
log_message("periodic sync can only be every 15m, 30m, 45m or 60m", Thor::Shell::Color::RED)
|
2471
3138
|
exit(1)
|
@@ -2488,7 +3155,8 @@ module Cnvrg
|
|
2488
3155
|
invoke :exec_remote, [cmd], :sync_before => sync_before, :sync_after => sync_after, :title => title, :machine_type => instance_type,
|
2489
3156
|
:schedule => schedule, :log => log, :email_notification => email_notification, :upload_output => upload_output, :commit => commit,
|
2490
3157
|
:image => image, :grid => grid, :data => data, :data_commit => data_commit, :ignore => ignore, :force => force, :sync_before_terminate => sync_before_terminate,
|
2491
|
-
|
3158
|
+
:max_time => max_time,
|
3159
|
+
:periodic_sync => periodic_sync, :dataset_only_tree=> dataset_only_tree
|
2492
3160
|
return
|
2493
3161
|
end
|
2494
3162
|
|
@@ -2523,7 +3191,6 @@ module Cnvrg
|
|
2523
3191
|
method_option :sync_before_terminate, :type => :boolean, :aliases => ["-sbt", "--sync_before_terminate"], :default => false
|
2524
3192
|
method_option :periodic_sync, :type => :string, :aliases => ["-ps", "--periodic_sync"], :default => ""
|
2525
3193
|
def exec(*cmd)
|
2526
|
-
|
2527
3194
|
log = []
|
2528
3195
|
cpu_average = 0
|
2529
3196
|
memory_average = 0
|
@@ -2834,190 +3501,6 @@ module Cnvrg
|
|
2834
3501
|
exit(1)
|
2835
3502
|
end
|
2836
3503
|
end
|
2837
|
-
|
2838
|
-
desc '', '', :hide => true
|
2839
|
-
method_option :sync_before, :type => :boolean, :aliases => ["-sb", "--sb"], :default => true
|
2840
|
-
method_option :sync_after, :type => :boolean, :aliases => ["-sa", "--sa"], :default => true
|
2841
|
-
method_option :title, :type => :string, :aliases => ["-t", "--t"], :default => ""
|
2842
|
-
method_option :log, :type => :boolean, :aliases => ["-l", "--l"], :default => false
|
2843
|
-
method_option :email_notification, :type => :boolean, :aliases => ["-en", "--en"], :default => false
|
2844
|
-
method_option :upload_output, :type => :string, :aliases => ["--uo", "-uo"], :default => ""
|
2845
|
-
|
2846
|
-
def exec_docker(*cmd)
|
2847
|
-
log = []
|
2848
|
-
cpu_average = 0
|
2849
|
-
memory_average = 0
|
2850
|
-
verify_logged_in()
|
2851
|
-
log_start(__method__, args, options)
|
2852
|
-
project_home = "/home/ds/notebooks"
|
2853
|
-
@project = Project.new(project_home)
|
2854
|
-
sync_before = options["sync_before"]
|
2855
|
-
sync_after = options["sync_after"]
|
2856
|
-
print_log = options["log"]
|
2857
|
-
title = options["title"]
|
2858
|
-
email_notification = options["email_notification"]
|
2859
|
-
upload_output = options["upload_output"]
|
2860
|
-
time_to_upload = calc_output_time(upload_output)
|
2861
|
-
@image = is_project_with_docker(project_home)
|
2862
|
-
|
2863
|
-
|
2864
|
-
begin
|
2865
|
-
start_commit = @project.last_local_commit
|
2866
|
-
cmd = cmd.join("\s")
|
2867
|
-
|
2868
|
-
log_message("Running: #{cmd}\n", Thor::Shell::Color::BLUE)
|
2869
|
-
|
2870
|
-
@exp = Experiment.new(@project.owner, @project.slug)
|
2871
|
-
machine_activity = @exp.get_machine_activity(project_home)
|
2872
|
-
|
2873
|
-
platform = RUBY_PLATFORM
|
2874
|
-
machine_name = Socket.gethostname
|
2875
|
-
begin
|
2876
|
-
|
2877
|
-
@exp.start(cmd, platform, machine_name, start_commit, title, email_notification, machine_activity, Dir.pwd)
|
2878
|
-
unless @exp.slug.nil?
|
2879
|
-
real = Time.now
|
2880
|
-
exp_success = true
|
2881
|
-
memory_total = []
|
2882
|
-
cpu_total = []
|
2883
|
-
start_loop = Time.now
|
2884
|
-
begin
|
2885
|
-
PTY.spawn(cmd) do |stdout, stdin, pid, stderr|
|
2886
|
-
begin
|
2887
|
-
stdout.each do |line|
|
2888
|
-
cur_time = Time.now
|
2889
|
-
monitor = %x{ps aux|awk '{print $2,$3,$4}'|grep #{pid} }
|
2890
|
-
monitor_by = monitor.split(" ")
|
2891
|
-
memory = monitor_by[2]
|
2892
|
-
cpu = monitor_by[1]
|
2893
|
-
memory_total << memory.to_f
|
2894
|
-
cpu_total << cpu.to_f
|
2895
|
-
real_time = Time.now - real
|
2896
|
-
|
2897
|
-
cur_log = {time: cur_time,
|
2898
|
-
message: line,
|
2899
|
-
type: "stdout",
|
2900
|
-
real: real_time}
|
2901
|
-
if print_log
|
2902
|
-
puts cur_log
|
2903
|
-
end
|
2904
|
-
log << cur_log
|
2905
|
-
|
2906
|
-
begin
|
2907
|
-
if time_to_upload != 0
|
2908
|
-
if time_to_upload <= Time.now - start_loop
|
2909
|
-
#upload current log
|
2910
|
-
cpu_average = cpu_total.inject(0) {|sum, el| sum + el}.to_f / cpu_total.size
|
2911
|
-
memory_average = memory_total.inject(0) {|sum, el| sum + el}.to_f / memory_total.size
|
2912
|
-
|
2913
|
-
@exp.upload_temp_log(log, cpu_average, memory_average)
|
2914
|
-
log = []
|
2915
|
-
start_loop = Time.now
|
2916
|
-
end
|
2917
|
-
|
2918
|
-
end
|
2919
|
-
rescue
|
2920
|
-
log_message("Failed to upload ongoing results, continuing with experiment", Thor::Shell::Color::YELLOW)
|
2921
|
-
end
|
2922
|
-
|
2923
|
-
end
|
2924
|
-
|
2925
|
-
|
2926
|
-
if stderr
|
2927
|
-
|
2928
|
-
stderr.each do |err|
|
2929
|
-
|
2930
|
-
log << {time: Time.now, message: err, type: "stderr"}
|
2931
|
-
end
|
2932
|
-
end
|
2933
|
-
|
2934
|
-
rescue Errno::EIO => e
|
2935
|
-
break
|
2936
|
-
rescue Errno::ENOENT
|
2937
|
-
|
2938
|
-
exp_success = false
|
2939
|
-
|
2940
|
-
log_message("command \"#{cmd}\" couldn't be executed, verify command is valid", Thor::Shell::Color::RED)
|
2941
|
-
rescue PTY::ChildExited
|
2942
|
-
exp_success = false
|
2943
|
-
log_message("The process exited!", Thor::Shell::Color::RED)
|
2944
|
-
rescue => e
|
2945
|
-
log_message("Error occurred, aborting", Thor::Shell::Color::RED)
|
2946
|
-
log_error(e)
|
2947
|
-
exit(0)
|
2948
|
-
end
|
2949
|
-
::Process.wait pid
|
2950
|
-
cpu_average = cpu_total.inject(0) {|sum, el| sum + el}.to_f / cpu_total.size
|
2951
|
-
memory_average = memory_total.inject(0) {|sum, el| sum + el}.to_f / memory_total.size
|
2952
|
-
exit_status = $?.exitstatus
|
2953
|
-
if $?.exitstatus != 0
|
2954
|
-
exp_success = false
|
2955
|
-
end
|
2956
|
-
if !exp_success
|
2957
|
-
if !Cnvrg::Helpers.internet_connection?
|
2958
|
-
wait_offline = agree "Seems like you're offline, wait until your'e back online?", Thor::Shell::Color::YELLOW
|
2959
|
-
if wait_offline
|
2960
|
-
log_message("Waiting until your'e online..", Thor::Shell::Color::BLUE)
|
2961
|
-
while !Cnvrg::Helpers.internet_connection?
|
2962
|
-
end
|
2963
|
-
exit_status = 0
|
2964
|
-
else
|
2965
|
-
log_message("Experiment has failed, your'e computer is offline", Thor::Shell::Color::RED)
|
2966
|
-
exit(0)
|
2967
|
-
end
|
2968
|
-
else
|
2969
|
-
|
2970
|
-
end_commit = @project.last_local_commit
|
2971
|
-
res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
|
2972
|
-
@image.update_image_activity(@project.last_local_commit, @exp.slug)
|
2973
|
-
log_message("Experiment has failed, look at the log for more details or run cnvrg exec --log", Thor::Shell::Color::RED)
|
2974
|
-
exit(0)
|
2975
|
-
end
|
2976
|
-
|
2977
|
-
end
|
2978
|
-
if sync_after
|
2979
|
-
log_message("Syncing project after running", Thor::Shell::Color::BLUE)
|
2980
|
-
# Sync after run
|
2981
|
-
download()
|
2982
|
-
upload()
|
2983
|
-
log_message("Done Syncing", Thor::Shell::Color::BLUE)
|
2984
|
-
end
|
2985
|
-
end_commit = @project.last_local_commit
|
2986
|
-
|
2987
|
-
res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
|
2988
|
-
@image.update_image_activity(@project.last_local_commit, @exp.slug)
|
2989
|
-
|
2990
|
-
check = Helpers.checkmark()
|
2991
|
-
log_message("#{check} Done. Experiment's result: #{Cnvrg::Helpers.remote_url}/#{@project.owner}/projects/#{@project.slug}/experiments/#{@exp.slug}", Thor::Shell::Color::GREEN)
|
2992
|
-
end
|
2993
|
-
rescue => e
|
2994
|
-
log_message("Couldn't run #{cmd}, check your input parameters", Thor::Shell::Color::RED)
|
2995
|
-
log_error(e)
|
2996
|
-
exit(1)
|
2997
|
-
end
|
2998
|
-
|
2999
|
-
|
3000
|
-
end
|
3001
|
-
|
3002
|
-
end
|
3003
|
-
rescue => e
|
3004
|
-
log_message("Error occurred, Aborting", Thor::Shell::Color::RED)
|
3005
|
-
log_error(e)
|
3006
|
-
|
3007
|
-
rescue SignalException
|
3008
|
-
exit_status = -1
|
3009
|
-
end_commit = @project.last_local_commit
|
3010
|
-
if !@exp.nil?
|
3011
|
-
|
3012
|
-
res = @exp.end(log, exit_status, end_commit, cpu_average, memory_average)
|
3013
|
-
end
|
3014
|
-
|
3015
|
-
say "\nAborting"
|
3016
|
-
|
3017
|
-
exit(1)
|
3018
|
-
end
|
3019
|
-
end
|
3020
|
-
|
3021
3504
|
desc '', '', :hide => true
|
3022
3505
|
method_option :sync_before, :type => :boolean, :aliases => ["-sb", "--sync_before"], :default => true
|
3023
3506
|
method_option :sync_after, :type => :boolean, :aliases => ["-sa", "--sync_after"], :default => true
|
@@ -3034,6 +3517,10 @@ module Cnvrg
|
|
3034
3517
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
3035
3518
|
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
3036
3519
|
method_option :force, :type => :boolean, :aliases => ["-f", "--force"], :default => false
|
3520
|
+
method_option :max_time, :type => :string, :aliases => [ "--max_time"], :default => nil
|
3521
|
+
method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
|
3522
|
+
method_option :periodic_sync, :type => :string, :aliases => ["-ps", "--periodic_sync"], :default => nil
|
3523
|
+
method_option :sync_before_terminate, :type => :boolean, :aliases => ["-sbt", "--sync_before_terminate"], :default => false
|
3037
3524
|
|
3038
3525
|
def exec_remote(*cmd)
|
3039
3526
|
verify_logged_in(true)
|
@@ -3047,6 +3534,21 @@ module Cnvrg
|
|
3047
3534
|
data_commit = options["data_commit"] || nil
|
3048
3535
|
sync_before = options["sync_before"]
|
3049
3536
|
force = options["force"]
|
3537
|
+
max_time = options["max_time"]
|
3538
|
+
if !max_time.nil? and !max_time.empty?
|
3539
|
+
max_time = max_time.to_i
|
3540
|
+
if max_time <=0
|
3541
|
+
log_message("Max time for experiment should be more than 0 minutess", Thor::Shell::Color::RED)
|
3542
|
+
exit(1)
|
3543
|
+
end
|
3544
|
+
end
|
3545
|
+
periodic_sync = options["periodic_sync"]
|
3546
|
+
sync_before_terminate = options["sync_before_terminate"]
|
3547
|
+
dataset_only_tree = options["dataset_only_tree"]
|
3548
|
+
ds_sync_options = 0
|
3549
|
+
if dataset_only_tree
|
3550
|
+
ds_sync_options = 1
|
3551
|
+
end
|
3050
3552
|
|
3051
3553
|
instance_type = options["machine_type"] || nil
|
3052
3554
|
schedule = options["schedule"] || ""
|
@@ -3081,7 +3583,7 @@ module Cnvrg
|
|
3081
3583
|
end
|
3082
3584
|
|
3083
3585
|
options_hash = Hash[options]
|
3084
|
-
options_hash.except!("schedule", "machine_type", "image", "upload_output", "grid", "data", "data_commit", "local", "small", "medium", "large", "gpu", "gpuxl", "gpuxxl")
|
3586
|
+
options_hash.except!("schedule", "machine_type", "image", "upload_output", "grid", "data", "data_commit", "local", "small", "medium", "large", "gpu", "gpuxl", "gpuxxl","max_time","dataset_only_tree")
|
3085
3587
|
exec_options = options_hash.map {|x| "--#{x[0]}=#{x[1]}"}.flatten.join(" ")
|
3086
3588
|
command = "#{exec_options} #{remote} #{upload_output_option} #{cmd.flatten.join(" ")}"
|
3087
3589
|
commit_to_run = options["commit"] || nil
|
@@ -3105,13 +3607,6 @@ module Cnvrg
|
|
3105
3607
|
if instance_type.eql? "gpu" or instance_type.eql? "gpuxl"
|
3106
3608
|
image_slug = "cnvrg_gpu"
|
3107
3609
|
end
|
3108
|
-
# default = yes? "use #{default_image_name} default image?", Thor::Shell::Color::YELLOW
|
3109
|
-
# if default
|
3110
|
-
# image = Images.new(working_dir, default_image_name)
|
3111
|
-
# image_slug = image.image_slug
|
3112
|
-
# else
|
3113
|
-
# exit(0)
|
3114
|
-
# end
|
3115
3610
|
else
|
3116
3611
|
image_slug = image.image_slug
|
3117
3612
|
end
|
@@ -3135,7 +3630,8 @@ module Cnvrg
|
|
3135
3630
|
end
|
3136
3631
|
log_message("Running remote experiment", Thor::Shell::Color::BLUE)
|
3137
3632
|
exp = Experiment.new(project.owner, project.slug)
|
3138
|
-
res = exp.exec_remote(command, commit_to_run, instance_type, image_slug, schedule, local_timestamp, grid, path_to_cmd, data, data_commit
|
3633
|
+
res = exp.exec_remote(command, commit_to_run, instance_type, image_slug, schedule, local_timestamp, grid, path_to_cmd, data, data_commit,
|
3634
|
+
periodic_sync, sync_before_terminate, max_time, ds_sync_options)
|
3139
3635
|
if Cnvrg::CLI.is_response_success(res)
|
3140
3636
|
# if res["result"]["machine"] == -1
|
3141
3637
|
# say "There are no available machines", Thor::Shell::Color::BLUE
|
@@ -3194,7 +3690,6 @@ module Cnvrg
|
|
3194
3690
|
exit(1)
|
3195
3691
|
end
|
3196
3692
|
end
|
3197
|
-
|
3198
3693
|
desc 'deploy', 'Deploys model to production'
|
3199
3694
|
method_option :small, :type => :boolean, :aliases => ["-sm", "--small"], :default => false
|
3200
3695
|
method_option :medium, :type => :boolean, :aliases => ["-md", "--medium"], :default => false
|
@@ -3323,6 +3818,7 @@ module Cnvrg
|
|
3323
3818
|
method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
|
3324
3819
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
3325
3820
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
3821
|
+
method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
|
3326
3822
|
|
3327
3823
|
|
3328
3824
|
desc 'notebook', 'starts a notebook session remotely or locally'
|
@@ -3334,6 +3830,7 @@ module Cnvrg
|
|
3334
3830
|
image = options["image"]
|
3335
3831
|
data = options["data"]
|
3336
3832
|
data_commit = options["data_commit"]
|
3833
|
+
dataset_only_tree = options["dataset_only_tree"]
|
3337
3834
|
if local
|
3338
3835
|
invoke :run_notebook, [], :notebook_dir => notebook_dir, :remote => false, :kernel => kernel, :image => image
|
3339
3836
|
return
|
@@ -3343,7 +3840,7 @@ module Cnvrg
|
|
3343
3840
|
instance_type = get_instance_type(instances)
|
3344
3841
|
|
3345
3842
|
invoke :remote_notebook, [], :notebook_dir => notebook_dir, :kernel => kernel, :machine_type => instance_type, :image => image,
|
3346
|
-
:data => data, :data_commit => data_commit
|
3843
|
+
:data => data, :data_commit => data_commit , :dataset_only_tree => dataset_only_tree
|
3347
3844
|
return
|
3348
3845
|
|
3349
3846
|
end
|
@@ -3462,6 +3959,7 @@ module Cnvrg
|
|
3462
3959
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
3463
3960
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
3464
3961
|
method_option :commit, :type => :string, :aliases => ["--commit"], :default => ""
|
3962
|
+
method_option :dataset_only_tree, :type => :boolean, :aliases => [ "--dataset_only_tree"], :default => false
|
3465
3963
|
|
3466
3964
|
|
3467
3965
|
def remote_notebook()
|
@@ -3474,7 +3972,11 @@ module Cnvrg
|
|
3474
3972
|
data_commit = options["data_commit"]
|
3475
3973
|
commit = options["commit"]
|
3476
3974
|
notebook_type = options["notebook_type"]
|
3477
|
-
|
3975
|
+
dataset_only_tree = options["dataset_only_tree"]
|
3976
|
+
ds_sync_options = 0
|
3977
|
+
if dataset_only_tree
|
3978
|
+
ds_sync_options = 1
|
3979
|
+
end
|
3478
3980
|
|
3479
3981
|
begin
|
3480
3982
|
project = Project.new(working_dir)
|
@@ -3485,7 +3987,7 @@ module Cnvrg
|
|
3485
3987
|
end
|
3486
3988
|
invoke :sync, [false], []
|
3487
3989
|
slug = ""
|
3488
|
-
res = exp.remote_notebook(instance_type, commit, data, data_commit, notebook_type)
|
3990
|
+
res = exp.remote_notebook(instance_type, commit, data, data_commit, notebook_type,ds_sync_options)
|
3489
3991
|
if Cnvrg::CLI.is_response_success(res)
|
3490
3992
|
slug = res["result"]["notebook_url"]
|
3491
3993
|
log_message("#{Helpers.checkmark} Notebook is ready: #{Cnvrg::Helpers.remote_url}/#{project.owner}/projects/#{project.slug}/notebook_sessions/show/#{slug}", Thor::Shell::Color::GREEN)
|
@@ -5059,7 +5561,6 @@ module Cnvrg
|
|
5059
5561
|
|
5060
5562
|
def set_owner(owner, username, url)
|
5061
5563
|
home_dir = File.expand_path('~')
|
5062
|
-
|
5063
5564
|
begin
|
5064
5565
|
if !File.directory? home_dir + "/.cnvrg"
|
5065
5566
|
FileUtils.mkdir_p([home_dir + "/.cnvrg", home_dir + "/.cnvrg/tmp"])
|
@@ -5186,12 +5687,12 @@ module Cnvrg
|
|
5186
5687
|
|
5187
5688
|
def self.is_response_success(response, should_exit = true)
|
5188
5689
|
begin
|
5189
|
-
if response.nil?
|
5190
|
-
if !Cnvrg::Helpers.internet_connection?
|
5191
|
-
|
5192
|
-
|
5193
|
-
|
5194
|
-
end
|
5690
|
+
if response.nil? or !response
|
5691
|
+
# if !Cnvrg::Helpers.internet_connection?
|
5692
|
+
# say("<%= color('Error:You seems to be offline', RED) %>")
|
5693
|
+
# $LOG.error message: "offline connection", type: "error"
|
5694
|
+
#
|
5695
|
+
# end
|
5195
5696
|
if should_exit
|
5196
5697
|
exit(1)
|
5197
5698
|
else
|
@@ -5214,12 +5715,15 @@ module Cnvrg
|
|
5214
5715
|
end
|
5215
5716
|
end
|
5216
5717
|
return true
|
5217
|
-
|
5218
|
-
|
5219
|
-
|
5718
|
+
rescue => e
|
5719
|
+
puts e.message
|
5720
|
+
puts e.backtrace
|
5721
|
+
rescue SignalException
|
5722
|
+
say "Aborting"
|
5723
|
+
end
|
5724
|
+
|
5220
5725
|
end
|
5221
5726
|
|
5222
|
-
end
|
5223
5727
|
|
5224
5728
|
def self.get_owner
|
5225
5729
|
home_dir = File.expand_path('~')
|
@@ -5341,27 +5845,27 @@ module Cnvrg
|
|
5341
5845
|
|
5342
5846
|
end
|
5343
5847
|
|
5848
|
+
def verify_logged_in(in_dir=true)
|
5849
|
+
begin
|
5850
|
+
log_handler()
|
5851
|
+
auth = Cnvrg::Auth.new
|
5852
|
+
unless auth.is_logged_in?
|
5853
|
+
say 'You\'re not logged in', Thor::Shell::Color::RED
|
5854
|
+
say 'Please log in via `cnvrg login`', Thor::Shell::Color::BLUE
|
5855
|
+
exit(1)
|
5856
|
+
end
|
5344
5857
|
|
5345
|
-
|
5346
|
-
|
5347
|
-
|
5348
|
-
|
5349
|
-
|
5350
|
-
|
5351
|
-
|
5352
|
-
|
5353
|
-
|
5354
|
-
|
5355
|
-
|
5356
|
-
# if wait_offline
|
5357
|
-
# say "Waiting until your'e online..", Thor::Shell::Color::BLUE
|
5358
|
-
# while !Cnvrg::Helpers.internet_connection?
|
5359
|
-
# end
|
5360
|
-
# else
|
5361
|
-
# say "you seem to be offline, please check your internet connection", Thor::Shell::Color::RED
|
5362
|
-
# exit(0)
|
5363
|
-
# end
|
5364
|
-
# end
|
5858
|
+
# if !Helpers.internet_connection?
|
5859
|
+
# wait_offline = agree "Seems like you're offline, wait until your'e back online?", Thor::Shell::Color::YELLOW
|
5860
|
+
# if wait_offline
|
5861
|
+
# say "Waiting until your'e online..", Thor::Shell::Color::BLUE
|
5862
|
+
# while !Cnvrg::Helpers.internet_connection?
|
5863
|
+
# end
|
5864
|
+
# else
|
5865
|
+
# say "you seem to be offline, please check your internet connection", Thor::Shell::Color::RED
|
5866
|
+
# exit(0)
|
5867
|
+
# end
|
5868
|
+
# end
|
5365
5869
|
|
5366
5870
|
config = YAML.load_file(File.expand_path('~') + "/.cnvrg/config.yml")
|
5367
5871
|
version_date = config.to_h[:version_last_check]
|
@@ -5385,8 +5889,10 @@ module Cnvrg
|
|
5385
5889
|
#verify tmp dirs exist
|
5386
5890
|
home_dir = File.expand_path('~')
|
5387
5891
|
|
5388
|
-
|
5892
|
+
FileUtils.mkdir_p([home_dir+"/.cnvrg", home_dir+"/.cnvrg/tmp", home_dir+"/.cnvrg/tmp_files"])
|
5893
|
+
rescue SignalException
|
5389
5894
|
|
5895
|
+
end
|
5390
5896
|
|
5391
5897
|
end
|
5392
5898
|
|
@@ -5746,29 +6252,10 @@ module Cnvrg
|
|
5746
6252
|
|
5747
6253
|
end
|
5748
6254
|
|
5749
|
-
def with_progress_bar
|
5750
|
-
not_done = true
|
5751
|
-
upload_progress_bar = ProgressBar.create(:title => "Upload progress",
|
5752
|
-
:format => '%a <%B> %p%% %t',
|
5753
|
-
:starting_at => 0,
|
5754
|
-
:total => 600)
|
5755
|
-
pb = Thread.new do
|
5756
|
-
while not_done do
|
5757
|
-
upload_progress_bar.increment
|
5758
|
-
sleep(1)
|
5759
|
-
|
5760
|
-
end
|
5761
|
-
end
|
5762
|
-
|
5763
|
-
yield.tap do # After yielding to the block, save the return value
|
5764
|
-
not_done = false # Tell the thread to exit, cleaning up after itself…
|
5765
|
-
pb.join # …and wait for it to do so.
|
5766
|
-
end
|
5767
|
-
end
|
5768
6255
|
end
|
6256
|
+
end
|
5769
6257
|
|
5770
6258
|
|
5771
|
-
end
|
5772
6259
|
end
|
5773
6260
|
|
5774
6261
|
|