crowdin-cli 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f6bb76e96af25bd099e35327e0affba41a15d99
4
- data.tar.gz: 42379e5aefbf2d76b2650fff116ed5e89f609098
3
+ metadata.gz: 1a40088adbb46116f854dd825f0ab1ee5878d519
4
+ data.tar.gz: 85e6f9ac041ebf563ec341b445b0c3255eb3bdff
5
5
  SHA512:
6
- metadata.gz: 0efaaa136de06a8915600bd6c60d7ba6fb48ef5ecb7406c15e0206442577bbb08fe639a910c8a181a0cdef615cfe72ee1e33d0676312341675dcfe40ef1f017d
7
- data.tar.gz: 585990c4a380dcda6caee000d2b50f7ec949202a00487c2e0092c96e46a7f85de50764f17a2fb1d89c5ca082937f81a476b5ec938f4feb75b9c03dc83f2d2a4b
6
+ metadata.gz: 86edeaa994d9fd05d9bee7e6cb6dbb8dad84aed51fd3327f0ee993bf05c0660d5581898503e00bb0b405d73d624973d99bb24c8fe0a1f3633753c411ea596482
7
+ data.tar.gz: 3857ea6a1abf25fe55f0c34a257a0fe3f856db5c556ee06baf11c615b1399e0ad6ce01dc4a23bb9c496112e0d03f49a4a723e4e090f15d479676ce700f998592
data/README.md CHANGED
@@ -87,12 +87,24 @@ Here's patterns you can use:
87
87
 
88
88
  * `*` (asterisk)
89
89
 
90
- Match zero or more characters in file name. A glob consisting of only the asterisk and no other characters will match all files in the directory. If you specified a `*.json` it will include all files like `messages.json`, `about_us.json` and anything that ends with `.json`.
90
+ Match zero or more characters in file name. A glob consisting of only the asterisk and no other characters will match all files in the directory. If you specified a `*.json` it will include all files like `messages.json`, `about_us.json` and anything that ends with `.json`.c* will match all files beginning with c; `*c` will match all files ending with c; and `*c*` will match all files that have c in them (including at the beginning or end). Equivalent to `/ .* /x` in regexp.
91
91
 
92
92
  * `**` (doubled asterisk)
93
93
 
94
94
  Match all directories recursively. Note that you can use `**` in `source` and in `translation` pattern. When using `**` in `translation` pattern it will always contain sub-path from `source` for certain file. The mask `**` can be used only once in the pattern and must be surrounded by backslashes `/`.
95
95
 
96
+ * `?` (question mark)
97
+
98
+ Matches any one character.
99
+
100
+ * `[set]`
101
+
102
+ Matches any one character in set. Behaves exactly like character sets in `Regexp`, including set negation (`[^a-z]`).
103
+
104
+ * `\` (backslash)
105
+
106
+ Escapes the next metacharacter.
107
+
96
108
  Say, you can have source: `/en/**/*.po` to upload all `*.po` files to Crowdin recursively. `translation` pattern will be `/translations/%two_letters_code%/**/%original_file_name%'`.
97
109
 
98
110
  See sample configuration below::
@@ -140,8 +152,9 @@ You can also override language codes for other placeholders like `%android_code%
140
152
 
141
153
  ### Ignoring directories
142
154
 
143
- From time to time there are directories you don't want translate on Crowdin.
155
+ From time to time there are files and directories you don't want translate on Crowdin.
144
156
  Local per-file rules can be added to the config file in your project.
157
+
145
158
  ```
146
159
  files:
147
160
  -
@@ -149,8 +162,24 @@ files:
149
162
  translation: /locale/%two_letters_code%/**/%original_file_name%
150
163
  ignore:
151
164
  - /locale/en/templates
152
- - /locale/en/workflow
165
+ - /locale/en/**/test-*.po
166
+ - /locale/en/**/[^abc]*.po
167
+
168
+ ```
153
169
 
170
+ ### Preserving directories hierarchy
171
+
172
+ By default CLI tool tries to optimize your Crowdin project hierarchy and do not repeats complete path of local files online. In case you need to keep directories structure same at Crowdin and locally you can add `preserve_hierarchy: true` option in main section of the configuration file.
173
+
174
+ Sample configuration below:
175
+
176
+ ```
177
+ ---
178
+ project_identifier: test
179
+ api_key: KeepTheAPIkeySecret
180
+ base_url: http://api.crowdin.net
181
+ base_path: /path/to/your/project
182
+ preserve_hierarchy: true
154
183
  ```
155
184
 
156
185
  ### Uploading CSV files via API
@@ -295,4 +324,4 @@ Author: Anton Maminov (anton.maminov@gmail.com)
295
324
 
296
325
  Copyright: 2012-2013 [Crowdin.net](http://crowdin.net/)
297
326
 
298
- This project is licensed under the MIT license, a copy of which can be found in the LICENSE file.
327
+ This project is licensed under the MIT license, a copy of which can be found in the LICENSE file.
data/bin/crowdin-cli CHANGED
@@ -104,34 +104,72 @@ def construct_export_pattern(path, source, translation)
104
104
  return export_pattern
105
105
  end
106
106
 
107
- # Provides a partial implementation of translate a glob +pattern+ to a regular expression
107
+ # This is a partial translation of the algorithm defined in fnmatch.py
108
+ # https://github.com/python-git/python/blob/master/Lib/fnmatch.py
109
+ # Provides a partial implementation of translate a glob +pat+ to a regular expression
110
+ #
111
+ # Patterns are Unix shell style:
112
+ # * matches everything
113
+ # ? matches any single character
114
+ # [seq] matches any character in seq
115
+ # [^seq] matches any char not in seq
116
+ #
108
117
  # NOTE:
109
- # `**` surrounded by backslashes `/` in the +pattern+
110
- # `**` used only once in the +pattern+
118
+ # `**` surrounded by backslashes `/` in the +pat+
119
+ # `**` used only once in the +pat+
111
120
  #
112
- def translate_pattern_to_regexp(pattern)
121
+ def translate_pattern_to_regexp(pat)
113
122
  i = 0
114
- n = pattern.size
123
+ n = pat.size
115
124
  res = ''
116
125
  while i < n
117
- c = pattern[i]
126
+ c = pat[i]
118
127
  i = i + 1
119
128
  if c == '*'
120
129
  j = i
121
- if j < n and pattern[j] == '*'
130
+ if j < n and pat[j] == '*'
122
131
  res[-1] = '(\/)?(?<double_asterisk>.*)?'
123
132
  i = j + 1
124
133
  else
125
- res << '(.*)'
134
+ res = res + '.*'
126
135
  end
127
136
  elsif c == '?'
128
- res << '.'
137
+ res = res + '.'
138
+ elsif c == '['
139
+ j = i
140
+ # The following two statements check if the sequence we stumbled
141
+ # upon is '[]' or '[^]' because those are not valid character
142
+ # classes.
143
+ if j < n and pat[j] == '^'
144
+ j = j + 1
145
+ end
146
+ if j < n and pat[j] == ']'
147
+ j = j + 1
148
+ end
149
+ # Look for the closing ']' right off the bat. If one is not found,
150
+ # escape the opening '[' and continue. If it is found, process
151
+ # he contents of '[...]'.
152
+ while j < n and pat[j] != ']'
153
+ j = j + 1
154
+ end
155
+ if j >= n
156
+ res = res + '\\['
157
+ else
158
+ stuff = pat[i...j].gsub('\\', '\\\\')
159
+ i = j + 1
160
+ #if stuff[0] == '!'
161
+ # stuff = '^' + stuff[1..-1]
162
+ #elsif stuff[0] == '^'
163
+ # stuff = '\\' + stuff
164
+ #end
165
+ res = "#{res}[#{stuff}]"
166
+ end
129
167
  else
130
- res << Regexp.escape(c)
168
+ res = res + Regexp.escape(c)
131
169
  end
132
170
  end
133
171
 
134
- return Regexp.new(res)
172
+ return Regexp.new(res + '$')
135
173
  end
136
174
 
137
175
  def android_locale_code(locale_code)
@@ -262,6 +300,8 @@ command :upload do |c|
262
300
  puts "Warning: #{placeholder} is not valid variable supported by Crowdin. See http://crowdin.net/page/cli-tool#configuration-file for more details."
263
301
  end
264
302
 
303
+ ignores = file['ignore'] || []
304
+
265
305
  if File.exist?(File.join(@base_path, file['source']))
266
306
  dest = file['source']
267
307
  dest_files << dest
@@ -277,13 +317,14 @@ command :upload do |c|
277
317
  dest = source_path.sub(@base_path, '') # relative path in Crowdin
278
318
 
279
319
  if File.directory?(source_path)
280
- ignores = file['ignore'] || []
281
- if ignores.include?(dest)
320
+ if ignores.any?{ |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
282
321
  Find.prune # Don't look any further into this directory
283
322
  else
284
323
  next
285
324
  end
286
325
  elsif File.fnmatch?(file['source'], dest, File::FNM_PATHNAME)
326
+ next if ignores.any?{ |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
327
+
287
328
  dest_files << dest
288
329
 
289
330
  export_pattern = construct_export_pattern(dest, file['source'], file['translation'])
@@ -416,6 +457,8 @@ EOS
416
457
  puts "Warning: #{placeholder} is not valid variable supported by Crowdin. See http://crowdin.net/page/cli-tool#configuration-file for more details."
417
458
  end
418
459
 
460
+ ignores = file['ignore'] || []
461
+
419
462
  languages_mapping = file['languages_mapping']
420
463
 
421
464
  # CSV files only (default: false)
@@ -440,13 +483,14 @@ EOS
440
483
  dest = source_path.sub(@base_path, '') # relative path in Crowdin
441
484
 
442
485
  if File.directory?(source_path)
443
- ignores = file['ignore'] || []
444
- if ignores.include?(dest)
486
+ if ignores.any?{ |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
445
487
  Find.prune # Don't look any further into this directory
446
488
  else
447
489
  next
448
490
  end
449
491
  elsif File.fnmatch?(file['source'], dest, File::FNM_PATHNAME)
492
+ next if ignores.any?{ |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
493
+
450
494
  dest_files << dest
451
495
 
452
496
  export_pattern = construct_export_pattern(dest, file['source'], file['translation'])
@@ -543,6 +587,8 @@ command :download do |c|
543
587
  @config['files'].each do |file|
544
588
  languages_mapping = file['languages_mapping'] # Hash or NilClass
545
589
 
590
+ ignores = file['ignore'] || []
591
+
546
592
  # CSV files only (default: false)
547
593
  multilingual_spreadsheet = file['multilingual_spreadsheet'] || false
548
594
 
@@ -567,13 +613,14 @@ command :download do |c|
567
613
  dest = source_path.sub(@base_path, '') # relative path in Crowdin
568
614
 
569
615
  if File.directory?(source_path)
570
- ignores = file['ignore'] || []
571
- if ignores.include?(dest)
616
+ if ignores.any?{ |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
572
617
  Find.prune # Don't look any further into this directory
573
618
  else
574
619
  next
575
620
  end
576
621
  elsif File.fnmatch?(file['source'], dest, File::FNM_PATHNAME)
622
+ next if ignores.any?{ |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
623
+
577
624
  export_pattern = construct_export_pattern(dest, file['source'], file['translation'])
578
625
 
579
626
  file_translation_languages.each do |lang|
@@ -1,5 +1,5 @@
1
1
  module Crowdin
2
2
  module CLI
3
- VERSION = '0.2.1'
3
+ VERSION = '0.2.2'
4
4
  end
5
5
  end
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.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Crowdin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-23 00:00:00.000000000 Z
11
+ date: 2013-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake