crowdin-cli 0.6.1 → 0.7.0
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 +5 -5
- data/README.md +2 -2
- data/bin/crowdin-cli +83 -65
- data/lib/crowdin-cli/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2da15f71e0b105a4512367c3c427c88d6c174291cc0fe6885016b5bfe465e303
|
4
|
+
data.tar.gz: 6e5ad8754ed18528031226bda5177fc8864482def65a40dfdf681d73bac9612d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f355013fad4c9fef321c3f97b9a94241b1486c23c78b6afc15e4fe7fe85a6cdee98308cc8b7ea8a7168f0b67d6f07cba053ee66fedeaa1c0bd7b281fe11d84d
|
7
|
+
data.tar.gz: 115737435f24e8807fc47d8d81285a515b27eff01fd0553794f251f0a89b4ce7623cacc905b9a4d1c54260839a9696f2226ff66c0232f45fd73c6a392bc845ed
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Crowdin-CLI Ruby is now deprecated
|
2
2
|
|
3
|
-
[crowdin-cli-2](https://github.com/crowdin/crowdin-cli-2) is a ground-up rewrite in Java with a new flow, incredible speed, but the same core idea.
|
4
|
-
This repository remains available for existing applications built on what we now call Crowdin-CLI Ruby.
|
3
|
+
> [crowdin-cli-2](https://github.com/crowdin/crowdin-cli-2) is a ground-up rewrite in Java with a new flow, incredible speed, but the same core idea.
|
4
|
+
> This repository remains available for existing applications built on what we now call Crowdin-CLI Ruby.
|
5
5
|
|
6
6
|
## Crowdin-CLI Ruby
|
7
7
|
|
data/bin/crowdin-cli
CHANGED
@@ -480,54 +480,70 @@ command :upload do |c|
|
|
480
480
|
# array containing elements common to the two arrays
|
481
481
|
update_files = local_project_tree[:files] & remote_project_tree[:files]
|
482
482
|
files_for_upload = local_files.select { |file| update_files.include?(file[:dest]) }
|
483
|
-
files_for_upload.each do |file|
|
484
|
-
file[:dest].slice!(0) if file[:dest].start_with?('/')
|
485
483
|
|
486
|
-
|
487
|
-
|
484
|
+
thread_count = 12 # tweak this number for maximum performance.
|
485
|
+
resps = []
|
486
|
+
mutex = Mutex.new
|
488
487
|
|
489
|
-
|
490
|
-
|
491
|
-
|
488
|
+
thread_count.times.map {
|
489
|
+
Thread.new(files_for_upload, resps) do |files_for_upload, resps|
|
490
|
+
while file = mutex.synchronize { files_for_upload.pop }
|
491
|
+
file[:dest].slice!(0) if file[:dest].start_with?('/')
|
492
|
+
|
493
|
+
params = {}
|
494
|
+
params[:branch] = @branch_name if @branch_name
|
492
495
|
|
493
|
-
|
496
|
+
@allowed_options.each do |option|
|
497
|
+
params[option.to_sym] = file.delete(option.to_sym)
|
498
|
+
end
|
494
499
|
|
495
|
-
|
500
|
+
resp = @crowdin.update_file([] << file, params)
|
496
501
|
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
+
case resp['files'].first[1]
|
503
|
+
when 'skipped'
|
504
|
+
puts "Updating source file `#{file[:dest]}' - Skipped"
|
505
|
+
when 'updated'
|
506
|
+
puts "Updating source file `#{file[:dest]}' - OK"
|
507
|
+
end
|
508
|
+
mutex.synchronize { resps << resp }
|
509
|
+
end
|
502
510
|
end
|
503
|
-
|
511
|
+
}.each(&:join)
|
504
512
|
end
|
505
513
|
|
506
514
|
# Add new files to Crowdin project
|
507
515
|
#
|
508
516
|
add_files = local_project_tree[:files] - remote_project_tree[:files]
|
509
517
|
files_for_add = local_files.select { |file| add_files.include?(file[:dest]) }
|
510
|
-
files_for_add.each do |file|
|
511
|
-
# If file path starts with / Crowdin returns error
|
512
|
-
# 17: Specified directory was not found
|
513
|
-
# make sure that file[:dest] not start with '/'
|
514
|
-
file[:dest].slice!(0) if file[:dest].start_with?('/')
|
515
518
|
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
+
thread_count = 12
|
520
|
+
resps = []
|
521
|
+
mutex = Mutex.new
|
519
522
|
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
+
thread_count.times.map {
|
524
|
+
Thread.new(files_for_add, resps) do |files_for_add, resps|
|
525
|
+
while file = mutex.synchronize { files_for_add.pop }
|
526
|
+
# If file path starts with / Crowdin returns error
|
527
|
+
# 17: Specified directory was not found
|
528
|
+
# make sure that file[:dest] not start with '/'
|
529
|
+
file[:dest].slice!(0) if file[:dest].start_with?('/')
|
530
|
+
|
531
|
+
params = {}
|
532
|
+
params[:type] = file.delete(:type) if file[:type]
|
533
|
+
params[:branch] = @branch_name if @branch_name
|
523
534
|
|
524
|
-
|
535
|
+
@allowed_options.each do |option|
|
536
|
+
params[option.to_sym] = file.delete(option.to_sym)
|
537
|
+
end
|
525
538
|
|
526
|
-
|
539
|
+
resp = @crowdin.add_file([] << file, params)
|
527
540
|
|
528
|
-
|
529
|
-
end
|
541
|
+
puts "Uploading source file `#{file[:dest]}' - OK"
|
530
542
|
|
543
|
+
mutex.synchronize { resps << resp }
|
544
|
+
end
|
545
|
+
end
|
546
|
+
}.each(&:join)
|
531
547
|
end # action
|
532
548
|
end # upload sources
|
533
549
|
|
@@ -599,7 +615,7 @@ command :upload do |c|
|
|
599
615
|
|
600
616
|
translation_languages = supported_languages.select { |lang| project_languages.include?(lang['crowdin_code']) }
|
601
617
|
|
602
|
-
translated_files =
|
618
|
+
translated_files = []
|
603
619
|
dest_files = []
|
604
620
|
|
605
621
|
@config['files'].each do |file|
|
@@ -627,7 +643,7 @@ command :upload do |c|
|
|
627
643
|
|
628
644
|
file_translation_languages.each do |lang|
|
629
645
|
source = export_pattern_to_path(dest, file['translation'], lang, languages_mapping)
|
630
|
-
translated_files
|
646
|
+
translated_files << { crowdin_code: lang['crowdin_code'], source: File.join(@base_path, source), dest: dest }
|
631
647
|
end
|
632
648
|
else
|
633
649
|
Find.find(@base_path) do |source_path|
|
@@ -648,12 +664,10 @@ command :upload do |c|
|
|
648
664
|
|
649
665
|
file_translation_languages.each do |lang|
|
650
666
|
source = export_pattern_to_path(dest, export_pattern, lang, languages_mapping)
|
651
|
-
translated_files
|
667
|
+
translated_files << { crowdin_code: lang['crowdin_code'], source: File.join(@base_path, source), dest: dest }
|
652
668
|
end
|
653
|
-
|
654
669
|
end
|
655
670
|
end # Find
|
656
|
-
|
657
671
|
end # if
|
658
672
|
end # @config['files']
|
659
673
|
|
@@ -667,40 +681,45 @@ command :upload do |c|
|
|
667
681
|
|
668
682
|
common_dir = @preserve_hierarchy ? '' : find_common_directory_path(dest_files)
|
669
683
|
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
684
|
+
thread_count = 12
|
685
|
+
resps = []
|
686
|
+
mutex = Mutex.new
|
687
|
+
|
688
|
+
thread_count.times.map {
|
689
|
+
Thread.new(translated_files, resps) do |translated_files, resps|
|
690
|
+
while file = mutex.synchronize { translated_files.pop }
|
691
|
+
file[:dest] = file[:dest].sub(common_dir, '')
|
692
|
+
source_file = file[:source].sub(/\A#{Regexp.escape(@base_path)}/, '')
|
693
|
+
language = file.delete(:crowdin_code)
|
694
|
+
|
695
|
+
if remote_project_tree[:files].include?(file[:dest])
|
696
|
+
if File.exist?(file[:source])
|
697
|
+
# If file path starts with / Crowdin returns error
|
698
|
+
# 17: Specified directory was not found
|
699
|
+
# make sure that file[:dest] not start with '/'
|
700
|
+
file[:dest].slice!(0) if file[:dest].start_with?('/')
|
701
|
+
|
702
|
+
resp = @crowdin.upload_translation([] << file, language, params)
|
703
|
+
|
704
|
+
case resp['files'].first[1]
|
705
|
+
when 'skipped'
|
706
|
+
puts "Uploading translation file `#{source_file}' - Skipped"
|
707
|
+
when 'uploaded'
|
708
|
+
puts "Uploading translation file `#{source_file}' - OK"
|
709
|
+
when 'not_allowed'
|
710
|
+
puts "Uploading translation file `#{source_file}' - is not possible"
|
711
|
+
end
|
712
|
+
else
|
713
|
+
puts "Warning: Local file `#{file[:source]}' does not exist"
|
693
714
|
end
|
694
715
|
else
|
695
|
-
|
716
|
+
# if source file does not exist, don't upload translations
|
717
|
+
puts "Warning: Skip `#{source_file}'. Translation can not be uploaded for a non-existent source file `#{file[:dest]}'. Please upload sources first."
|
696
718
|
end
|
697
|
-
|
698
|
-
# if source file does not exist, don't upload translations
|
699
|
-
puts "Warning: Skip `#{source_file}'. Translation can not be uploaded for a non-existent source file `#{file[:dest]}'. Please upload sources first."
|
719
|
+
mutex.synchronize { resps << resp }
|
700
720
|
end
|
701
721
|
end
|
702
|
-
|
703
|
-
|
722
|
+
}.each(&:join)
|
704
723
|
end # action
|
705
724
|
end # upload translations
|
706
725
|
|
@@ -848,7 +867,6 @@ command :download do |c|
|
|
848
867
|
tempfile.close
|
849
868
|
tempfile.unlink # delete the tempfile
|
850
869
|
end
|
851
|
-
|
852
870
|
end # action
|
853
871
|
end # download
|
854
872
|
|
data/lib/crowdin-cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crowdin-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Crowdin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -158,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
158
|
version: '0'
|
159
159
|
requirements: []
|
160
160
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.
|
161
|
+
rubygems_version: 2.7.3
|
162
162
|
signing_key:
|
163
163
|
specification_version: 4
|
164
164
|
summary: Crowdin CLI.
|