gitonic 0.0.13__tar.gz → 0.0.14__tar.gz

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.
Files changed (31) hide show
  1. {gitonic-0.0.13 → gitonic-0.0.14}/BACKLOG.md +3 -1
  2. {gitonic-0.0.13 → gitonic-0.0.14}/CHANGELOG.md +19 -2
  3. {gitonic-0.0.13 → gitonic-0.0.14}/PKG-INFO +205 -13
  4. {gitonic-0.0.13 → gitonic-0.0.14}/README.md +182 -9
  5. gitonic-0.0.14/gitonic/const.py +1 -0
  6. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/gui.py +196 -12
  7. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/task.py +3 -1
  8. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/tile/__init__.py +1 -0
  9. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/tile/core.py +83 -9
  10. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic.egg-info/PKG-INFO +205 -13
  11. gitonic-0.0.13/gitonic/const.py +0 -1
  12. {gitonic-0.0.13 → gitonic-0.0.14}/LICENSE.md +0 -0
  13. {gitonic-0.0.13 → gitonic-0.0.14}/MANIFEST.in +0 -0
  14. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/__init__.py +0 -0
  15. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/__main__.py +0 -0
  16. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/file.py +0 -0
  17. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/gitutil.py +0 -0
  18. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/icons.py +0 -0
  19. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/main.py +0 -0
  20. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/pyjsoncfg.py +0 -0
  21. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/singleinstance.py +0 -0
  22. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/sysutil.py +0 -0
  23. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic/tile/tkcmd.py +0 -0
  24. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic.egg-info/SOURCES.txt +0 -0
  25. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic.egg-info/dependency_links.txt +0 -0
  26. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic.egg-info/entry_points.txt +0 -0
  27. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic.egg-info/requires.txt +0 -0
  28. {gitonic-0.0.13 → gitonic-0.0.14}/gitonic.egg-info/top_level.txt +0 -0
  29. {gitonic-0.0.13 → gitonic-0.0.14}/pyproject.toml +0 -0
  30. {gitonic-0.0.13 → gitonic-0.0.14}/setup.cfg +0 -0
  31. {gitonic-0.0.13 → gitonic-0.0.14}/setup.py +0 -0
@@ -63,6 +63,7 @@
63
63
  - adding single files
64
64
  - open .gitignore for editing
65
65
  - execute git operations in parallel where possible
66
+ - make expert mode debugging out better (use python logging)
66
67
  -
67
68
 
68
69
 
@@ -86,6 +87,7 @@ refer to [issues](https://github.com/kr-g/gitonic/issues)
86
87
  - `gitonic` interacts with `git` just like starting in bash / commandline.
87
88
  at the present time there is _no_additional_ error checking.
88
89
  this must be done by checking the log tab manually where all cmdline output goes.
89
-
90
+ - at the present time the context menu only works on the underlying file (row) in the table.
91
+ there is no support for multiple files (selection) as of now.
90
92
 
91
93
 
@@ -1,8 +1,25 @@
1
-
1
+
2
2
  # Changelog
3
3
 
4
4
 
5
- # next version v0.0.13 - 20231125
5
+ # version v0.0.14 - 20240518
6
+
7
+ - improved formatter
8
+ - support for multiple file extension for single config entry
9
+ - support for path expansion for formatter config
10
+ - added sample for uncrustify (c, c++)
11
+ - on "changes" tab
12
+ - added context menu to open file system explorer
13
+ - added support for custom context menu with `~/.gitonic/context.json`
14
+ - calling merge-tool with more then more file selected on change tab will
15
+ not block the user-interface anymore since starting independent from main process
16
+ - **important** add `--newtab` to `meld` configuration in `.gitconfig`
17
+ to re-use an already running instance of `meld`
18
+ - context menu handler expands user path (`~`)
19
+ -
20
+
21
+
22
+ # version v0.0.13 - 20231125
6
23
 
7
24
  - show all untracked files on changes tab (not only the folder)
8
25
  -
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gitonic
3
- Version: 0.0.13
3
+ Version: 0.0.14
4
4
  Summary: manage a multi git workspace
5
5
  Home-page: https://github.com/kr-g/gitonic
6
6
  Author: k. goger
@@ -29,7 +29,7 @@ License-File: LICENSE.md
29
29
  [![PEP-08](https://img.shields.io/badge/code%20style-PEP08-green.svg)](https://www.python.org/dev/peps/pep-0008/)
30
30
 
31
31
 
32
- you are reading VERSION = v0.0.13
32
+ you are reading VERSION = v0.0.14
33
33
 
34
34
 
35
35
  # gitonic
@@ -39,9 +39,6 @@ gitonic simplifies working with multiple git repositories.
39
39
 
40
40
  gitonic comes with an easy to use Tkinter GUI.
41
41
 
42
- there is also a plugin for thonny
43
- [`thonny-gitonic`](https://github.com/kr-g/thonny-gitonic)
44
-
45
42
 
46
43
  # background
47
44
 
@@ -160,7 +157,11 @@ the general structure is:
160
157
  }
161
158
  }
162
159
 
163
- here `para` is an array of cmd-line options passed to the formatter command
160
+ where `.file-ext` is a simple file extension such as `.py`,
161
+ or a comma separated list of extensions `.c,.h,.cpp`.
162
+ wild-cards are not supported.
163
+
164
+ where `para` is an array of cmd-line options passed to the formatter command
164
165
  where `%file` is a placeholder and replaced by the file name
165
166
 
166
167
  for different file extensions `gitonic` will call the formatter accordingly
@@ -191,6 +192,20 @@ pycodestyle is an official tool from python's code quality authority.
191
192
  }
192
193
  }
193
194
 
195
+ to use the same code formatter also for
196
+ [`cython's`](https://github.com/cython/cython)
197
+ files with extension `.pyx` change the setting to
198
+
199
+ {
200
+ ".py,.pyx": {
201
+ "cmd": "autopep8",
202
+ "para": [
203
+ "-i",
204
+ "%file"
205
+ ]
206
+ }
207
+ }
208
+
194
209
 
195
210
  ### black
196
211
 
@@ -225,6 +240,163 @@ that it is reported as error by pycodestyle after formatting.
225
240
  }
226
241
 
227
242
 
243
+ ## templates for c, c++ formatters
244
+
245
+ all of the following tools are NOT part of `gitonic` standard installation.
246
+
247
+
248
+ ### uncrustify
249
+
250
+ [`uncrustify`](https://github.com/uncrustify/uncrustify)
251
+ is a code formatter for c, c++ (and other languages).
252
+
253
+ here in this config sample it is configured for extensions `.c`, `.h`, and `.cpp`.
254
+
255
+ IMPORTANT: `uncrustify` requires an additional config file, a sample can be found here
256
+ [`uncrustify.cfg`](https://github.com/uncrustify/uncrustify/blob/master/forUncrustifySources.cfg)
257
+
258
+ here in the sample the `uncrustify` config file is placed in path `~/.gitonic/uncrustify.cfg`.
259
+ make sure that it is there.
260
+
261
+ the following needs to be placed inside `~/.gitonic/formatter.json`
262
+
263
+
264
+ ".c,.h,.cpp": {
265
+ "cmd": "uncrustify",
266
+ "para": [
267
+ "-c",
268
+ "~/.gitonic/uncrustify.cfg",
269
+ "--replace",
270
+ "%file",
271
+ "--no-backup",
272
+ "--if-changed"
273
+ ]
274
+ }
275
+
276
+
277
+ # custom context menu handler
278
+
279
+ when clicking on the `changes` tab right a context memu opens offering
280
+ to open the system file manager tool (file explorer)
281
+ at the base git repo path or at the changed file path.
282
+
283
+ in addition it is possible to add own custom context menu entries here.
284
+ configuration is done with `~/.gitonic/context.json` file.
285
+
286
+ the general structure is:
287
+
288
+ {
289
+ "a-context-name-ctx": {
290
+ "expr": "*",
291
+ "menu": [
292
+ [
293
+ "some text $GIT",
294
+ [
295
+ "cmd-path",
296
+ "whatever_param=$GIT"
297
+ ]
298
+ ],
299
+ [
300
+ "some other text $PATH",
301
+ [
302
+ "cmd-path2",
303
+ "whatever_param=$PATH"
304
+ ]
305
+ ]
306
+ ]
307
+ },
308
+ ...
309
+ }
310
+
311
+
312
+ here the variables `$GIT`, `$PATH`, or `$FILE` are replaced
313
+ by the corrosponding path before execution.
314
+
315
+ the `expr` key contains a single file pattern, or a list of
316
+ file patterns - when to enable the context menu.
317
+ the file pattern is following Unix filename pattern matching.
318
+
319
+ the `menu` array contains the text to display in the menu,
320
+ and the command params as embedded array.
321
+
322
+ the context name as such can have any value
323
+ (as long it is unique in the structure).
324
+
325
+
326
+ below a sample `~/.gitonic/context.json` file
327
+ for running on linux with xfce.
328
+
329
+ {
330
+ "term-ctx": {
331
+ "expr": "*",
332
+ "menu": [
333
+ [
334
+ "Open Terminal at $GIT",
335
+ [
336
+ "xfce4-terminal",
337
+ "--working-directory=$GIT"
338
+ ]
339
+ ],
340
+ [
341
+ "Open Terminal at $PATH",
342
+ [
343
+ "xfce4-terminal",
344
+ "--working-directory=$PATH"
345
+ ]
346
+ ],
347
+ [
348
+ "Edit .gitignore at $GIT",
349
+ [
350
+ "xed",
351
+ "$GIT/.gitignore"
352
+ ]
353
+ ]
354
+ ]
355
+ },
356
+ "spyder-ctx": {
357
+ "expr": "*.py",
358
+ "menu": [
359
+ [
360
+ "spyder python $FILE",
361
+ [
362
+ "~/spyder/.venv/bin/spyder",
363
+ "$FILE"
364
+ ]
365
+ ]
366
+ ]
367
+ },
368
+ "geany-ctx": {
369
+ "expr": [
370
+ "*.c",
371
+ "*.cpp",
372
+ "*.h"
373
+ ],
374
+ "menu": [
375
+ [
376
+ "geany c $FILE",
377
+ [
378
+ "geany",
379
+ "$FILE"
380
+ ]
381
+ ]
382
+ ]
383
+ }
384
+ }
385
+
386
+
387
+ remark:
388
+ the sample config file provides support for opening
389
+ - terminal, in this case `xfce4-terminal`, can be replaced by e.g. `xterm` - depending on your distribution
390
+ - `.gitignore` file for selected repo with [`xed`](https://en.wikipedia.org/wiki/Xed)
391
+ - [`spyder-ide.org`](https://spyder-ide.org/), for files matching `*.py`
392
+ - [`geany`](https://www.geany.org/), for files matching `*.c`, `*.cpp`, `*.h`
393
+
394
+
395
+ **limitation:**
396
+
397
+ at the present time the context menu only works on the underlying file (row) in the table.
398
+ there is **no** support for multiple files (selection) as of now.
399
+
228
400
 
229
401
 
230
402
  # platform
@@ -319,7 +491,7 @@ when during startup an error is thrown, refer to
319
491
  # git configuration
320
492
 
321
493
  add a `.git-credentials` file as described here
322
- [`git-credentials`](https://git-scm.com/docs/git-credential-store#_storage_format)
494
+ [`git-credentials`](https://git-scm.com/docs/git-credential-store)
323
495
 
324
496
 
325
497
  add a `.gitconfig` file as described here
@@ -342,14 +514,14 @@ if meld is not installed pressing the button will have no effect.
342
514
  [difftool]
343
515
  prompt = false
344
516
  [difftool "meld"]
345
- cmd = meld "$LOCAL" "$REMOTE"
517
+ cmd = meld --newtab "$LOCAL" "$REMOTE"
346
518
 
347
519
  [merge]
348
520
  tool = meld
349
521
  [mergetool "meld"]
350
522
  # Choose one of these 2 lines (not both!)
351
523
  # cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
352
- cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
524
+ cmd = meld --newtab "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
353
525
 
354
526
 
355
527
  # additional notes
@@ -371,9 +543,10 @@ following files are used:
371
543
  |file|description|
372
544
  |---|---|
373
545
  |~/.gitonic/commit.json|the last commit messages show in the combo box|
374
- |~/.gitonic/tracked.json|tracked git repositories|
375
546
  |~/.gitonic/config.json|configuration settings|
547
+ |~/.gitonic/context.json|configuration for context menu on changes tab|
376
548
  |~/.gitonic/formatter.json|configuration for external formatter tools|
549
+ |~/.gitonic/tracked.json|tracked git repositories|
377
550
  |~/.gitonic/socket|internal use|
378
551
 
379
552
 
@@ -389,11 +562,28 @@ gitonic is released under the following
389
562
 
390
563
 
391
564
 
392
-
565
+
393
566
  # Changelog
394
567
 
395
568
 
396
- # next version v0.0.13 - 20231125
569
+ # version v0.0.14 - 20240518
570
+
571
+ - improved formatter
572
+ - support for multiple file extension for single config entry
573
+ - support for path expansion for formatter config
574
+ - added sample for uncrustify (c, c++)
575
+ - on "changes" tab
576
+ - added context menu to open file system explorer
577
+ - added support for custom context menu with `~/.gitonic/context.json`
578
+ - calling merge-tool with more then more file selected on change tab will
579
+ not block the user-interface anymore since starting independent from main process
580
+ - **important** add `--newtab` to `meld` configuration in `.gitconfig`
581
+ to re-use an already running instance of `meld`
582
+ - context menu handler expands user path (`~`)
583
+ -
584
+
585
+
586
+ # version v0.0.13 - 20231125
397
587
 
398
588
  - show all untracked files on changes tab (not only the folder)
399
589
  -
@@ -574,6 +764,7 @@ gitonic is released under the following
574
764
  - adding single files
575
765
  - open .gitignore for editing
576
766
  - execute git operations in parallel where possible
767
+ - make expert mode debugging out better (use python logging)
577
768
  -
578
769
 
579
770
 
@@ -597,7 +788,8 @@ refer to [issues](https://github.com/kr-g/gitonic/issues)
597
788
  - `gitonic` interacts with `git` just like starting in bash / commandline.
598
789
  at the present time there is _no_additional_ error checking.
599
790
  this must be done by checking the log tab manually where all cmdline output goes.
600
-
791
+ - at the present time the context menu only works on the underlying file (row) in the table.
792
+ there is no support for multiple files (selection) as of now.
601
793
 
602
794
 
603
795
 
@@ -1,7 +1,7 @@
1
1
  [![PEP-08](https://img.shields.io/badge/code%20style-PEP08-green.svg)](https://www.python.org/dev/peps/pep-0008/)
2
2
 
3
3
 
4
- you are reading VERSION = v0.0.13
4
+ you are reading VERSION = v0.0.14
5
5
 
6
6
 
7
7
  # gitonic
@@ -11,9 +11,6 @@ gitonic simplifies working with multiple git repositories.
11
11
 
12
12
  gitonic comes with an easy to use Tkinter GUI.
13
13
 
14
- there is also a plugin for thonny
15
- [`thonny-gitonic`](https://github.com/kr-g/thonny-gitonic)
16
-
17
14
 
18
15
  # background
19
16
 
@@ -132,7 +129,11 @@ the general structure is:
132
129
  }
133
130
  }
134
131
 
135
- here `para` is an array of cmd-line options passed to the formatter command
132
+ where `.file-ext` is a simple file extension such as `.py`,
133
+ or a comma separated list of extensions `.c,.h,.cpp`.
134
+ wild-cards are not supported.
135
+
136
+ where `para` is an array of cmd-line options passed to the formatter command
136
137
  where `%file` is a placeholder and replaced by the file name
137
138
 
138
139
  for different file extensions `gitonic` will call the formatter accordingly
@@ -163,6 +164,20 @@ pycodestyle is an official tool from python's code quality authority.
163
164
  }
164
165
  }
165
166
 
167
+ to use the same code formatter also for
168
+ [`cython's`](https://github.com/cython/cython)
169
+ files with extension `.pyx` change the setting to
170
+
171
+ {
172
+ ".py,.pyx": {
173
+ "cmd": "autopep8",
174
+ "para": [
175
+ "-i",
176
+ "%file"
177
+ ]
178
+ }
179
+ }
180
+
166
181
 
167
182
  ### black
168
183
 
@@ -197,6 +212,163 @@ that it is reported as error by pycodestyle after formatting.
197
212
  }
198
213
 
199
214
 
215
+ ## templates for c, c++ formatters
216
+
217
+ all of the following tools are NOT part of `gitonic` standard installation.
218
+
219
+
220
+ ### uncrustify
221
+
222
+ [`uncrustify`](https://github.com/uncrustify/uncrustify)
223
+ is a code formatter for c, c++ (and other languages).
224
+
225
+ here in this config sample it is configured for extensions `.c`, `.h`, and `.cpp`.
226
+
227
+ IMPORTANT: `uncrustify` requires an additional config file, a sample can be found here
228
+ [`uncrustify.cfg`](https://github.com/uncrustify/uncrustify/blob/master/forUncrustifySources.cfg)
229
+
230
+ here in the sample the `uncrustify` config file is placed in path `~/.gitonic/uncrustify.cfg`.
231
+ make sure that it is there.
232
+
233
+ the following needs to be placed inside `~/.gitonic/formatter.json`
234
+
235
+
236
+ ".c,.h,.cpp": {
237
+ "cmd": "uncrustify",
238
+ "para": [
239
+ "-c",
240
+ "~/.gitonic/uncrustify.cfg",
241
+ "--replace",
242
+ "%file",
243
+ "--no-backup",
244
+ "--if-changed"
245
+ ]
246
+ }
247
+
248
+
249
+ # custom context menu handler
250
+
251
+ when clicking on the `changes` tab right a context memu opens offering
252
+ to open the system file manager tool (file explorer)
253
+ at the base git repo path or at the changed file path.
254
+
255
+ in addition it is possible to add own custom context menu entries here.
256
+ configuration is done with `~/.gitonic/context.json` file.
257
+
258
+ the general structure is:
259
+
260
+ {
261
+ "a-context-name-ctx": {
262
+ "expr": "*",
263
+ "menu": [
264
+ [
265
+ "some text $GIT",
266
+ [
267
+ "cmd-path",
268
+ "whatever_param=$GIT"
269
+ ]
270
+ ],
271
+ [
272
+ "some other text $PATH",
273
+ [
274
+ "cmd-path2",
275
+ "whatever_param=$PATH"
276
+ ]
277
+ ]
278
+ ]
279
+ },
280
+ ...
281
+ }
282
+
283
+
284
+ here the variables `$GIT`, `$PATH`, or `$FILE` are replaced
285
+ by the corrosponding path before execution.
286
+
287
+ the `expr` key contains a single file pattern, or a list of
288
+ file patterns - when to enable the context menu.
289
+ the file pattern is following Unix filename pattern matching.
290
+
291
+ the `menu` array contains the text to display in the menu,
292
+ and the command params as embedded array.
293
+
294
+ the context name as such can have any value
295
+ (as long it is unique in the structure).
296
+
297
+
298
+ below a sample `~/.gitonic/context.json` file
299
+ for running on linux with xfce.
300
+
301
+ {
302
+ "term-ctx": {
303
+ "expr": "*",
304
+ "menu": [
305
+ [
306
+ "Open Terminal at $GIT",
307
+ [
308
+ "xfce4-terminal",
309
+ "--working-directory=$GIT"
310
+ ]
311
+ ],
312
+ [
313
+ "Open Terminal at $PATH",
314
+ [
315
+ "xfce4-terminal",
316
+ "--working-directory=$PATH"
317
+ ]
318
+ ],
319
+ [
320
+ "Edit .gitignore at $GIT",
321
+ [
322
+ "xed",
323
+ "$GIT/.gitignore"
324
+ ]
325
+ ]
326
+ ]
327
+ },
328
+ "spyder-ctx": {
329
+ "expr": "*.py",
330
+ "menu": [
331
+ [
332
+ "spyder python $FILE",
333
+ [
334
+ "~/spyder/.venv/bin/spyder",
335
+ "$FILE"
336
+ ]
337
+ ]
338
+ ]
339
+ },
340
+ "geany-ctx": {
341
+ "expr": [
342
+ "*.c",
343
+ "*.cpp",
344
+ "*.h"
345
+ ],
346
+ "menu": [
347
+ [
348
+ "geany c $FILE",
349
+ [
350
+ "geany",
351
+ "$FILE"
352
+ ]
353
+ ]
354
+ ]
355
+ }
356
+ }
357
+
358
+
359
+ remark:
360
+ the sample config file provides support for opening
361
+ - terminal, in this case `xfce4-terminal`, can be replaced by e.g. `xterm` - depending on your distribution
362
+ - `.gitignore` file for selected repo with [`xed`](https://en.wikipedia.org/wiki/Xed)
363
+ - [`spyder-ide.org`](https://spyder-ide.org/), for files matching `*.py`
364
+ - [`geany`](https://www.geany.org/), for files matching `*.c`, `*.cpp`, `*.h`
365
+
366
+
367
+ **limitation:**
368
+
369
+ at the present time the context menu only works on the underlying file (row) in the table.
370
+ there is **no** support for multiple files (selection) as of now.
371
+
200
372
 
201
373
 
202
374
  # platform
@@ -291,7 +463,7 @@ when during startup an error is thrown, refer to
291
463
  # git configuration
292
464
 
293
465
  add a `.git-credentials` file as described here
294
- [`git-credentials`](https://git-scm.com/docs/git-credential-store#_storage_format)
466
+ [`git-credentials`](https://git-scm.com/docs/git-credential-store)
295
467
 
296
468
 
297
469
  add a `.gitconfig` file as described here
@@ -314,14 +486,14 @@ if meld is not installed pressing the button will have no effect.
314
486
  [difftool]
315
487
  prompt = false
316
488
  [difftool "meld"]
317
- cmd = meld "$LOCAL" "$REMOTE"
489
+ cmd = meld --newtab "$LOCAL" "$REMOTE"
318
490
 
319
491
  [merge]
320
492
  tool = meld
321
493
  [mergetool "meld"]
322
494
  # Choose one of these 2 lines (not both!)
323
495
  # cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
324
- cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
496
+ cmd = meld --newtab "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
325
497
 
326
498
 
327
499
  # additional notes
@@ -343,9 +515,10 @@ following files are used:
343
515
  |file|description|
344
516
  |---|---|
345
517
  |~/.gitonic/commit.json|the last commit messages show in the combo box|
346
- |~/.gitonic/tracked.json|tracked git repositories|
347
518
  |~/.gitonic/config.json|configuration settings|
519
+ |~/.gitonic/context.json|configuration for context menu on changes tab|
348
520
  |~/.gitonic/formatter.json|configuration for external formatter tools|
521
+ |~/.gitonic/tracked.json|tracked git repositories|
349
522
  |~/.gitonic/socket|internal use|
350
523
 
351
524
 
@@ -0,0 +1 @@
1
+ VERSION = "v0.0.14"