gitonic 0.18.1__tar.gz → 0.18.5__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 (58) hide show
  1. {gitonic-0.18.1 → gitonic-0.18.5}/BACKLOG.md +2 -2
  2. {gitonic-0.18.1 → gitonic-0.18.5}/CHANGELOG.md +31 -4
  3. {gitonic-0.18.1 → gitonic-0.18.5}/PKG-INFO +83 -22
  4. {gitonic-0.18.1 → gitonic-0.18.5}/README.md +46 -14
  5. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/conf.py +1 -1
  6. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/const.py +1 -1
  7. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/gitcmd.py +5 -3
  8. gitonic-0.18.5/gitonic/core/githubver.py +39 -0
  9. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/giton.py +16 -1
  10. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/gitonapp.py +1 -1
  11. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/gitonic.py +33 -6
  12. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/singleinstance.py +7 -2
  13. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/tkuiapp.py +5 -0
  14. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/tkuicore.py +3 -0
  15. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic.egg-info/PKG-INFO +83 -22
  16. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic.egg-info/SOURCES.txt +1 -1
  17. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic.egg-info/requires.txt +2 -0
  18. gitonic-0.18.1/gitonic/core/ncur.py +0 -24
  19. {gitonic-0.18.1 → gitonic-0.18.5}/LICENSE.md +0 -0
  20. {gitonic-0.18.1 → gitonic-0.18.5}/MANIFEST.in +0 -0
  21. {gitonic-0.18.1 → gitonic-0.18.5}/git-alt.svg +0 -0
  22. {gitonic-0.18.1 → gitonic-0.18.5}/git-black.svg +0 -0
  23. {gitonic-0.18.1 → gitonic-0.18.5}/git-red.svg +0 -0
  24. {gitonic-0.18.1 → gitonic-0.18.5}/git-white.svg +0 -0
  25. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/__init__.py +0 -0
  26. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/__main__.py +0 -0
  27. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/__init__.py +0 -0
  28. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/configs.py +0 -0
  29. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/dataflow.py +0 -0
  30. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/file.py +0 -0
  31. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/gitobj.py +0 -0
  32. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/gitutil.py +0 -0
  33. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/logs.py +0 -0
  34. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/proc.py +0 -0
  35. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/runr.py +0 -0
  36. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/sysutil.py +0 -0
  37. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/core/task.py +0 -0
  38. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/gtcd.py +0 -0
  39. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/gtcommon.py +0 -0
  40. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/gtls.py +0 -0
  41. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/__init__.py +0 -0
  42. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/icons.py +0 -0
  43. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/material_fonts/LICENSE +0 -0
  44. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/material_fonts/MaterialSymbolsOutlined_5BFILL_GRAD_opsz_wght_5D.codepoints +0 -0
  45. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/material_fonts/MaterialSymbolsOutlined_5BFILL_GRAD_opsz_wght_5D.ttf +0 -0
  46. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/material_fonts/MaterialSymbolsRounded_5BFILL_GRAD_opsz_wght_5D.codepoints +0 -0
  47. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/material_fonts/MaterialSymbolsRounded_5BFILL_GRAD_opsz_wght_5D.ttf +0 -0
  48. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/material_fonts.py +0 -0
  49. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/otherdeps/LICENSE-gitonic +0 -0
  50. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/otherdeps/LICENSE-tktootip +0 -0
  51. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/tkuiview.py +0 -0
  52. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic/tkui/tkuiwidg.py +0 -0
  53. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic.egg-info/dependency_links.txt +0 -0
  54. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic.egg-info/entry_points.txt +0 -0
  55. {gitonic-0.18.1 → gitonic-0.18.5}/gitonic.egg-info/top_level.txt +0 -0
  56. {gitonic-0.18.1 → gitonic-0.18.5}/pyproject.toml +0 -0
  57. {gitonic-0.18.1 → gitonic-0.18.5}/setup.cfg +0 -0
  58. {gitonic-0.18.1 → gitonic-0.18.5}/setup.py +0 -0
@@ -28,7 +28,7 @@
28
28
  - settings tabs
29
29
  - check for installed git
30
30
  - ~~git exe configuration in settings~~
31
- - check for latest version of gitonic
31
+ - ~~check for latest version of gitonic~~
32
32
  -
33
33
  - ~~config file for last known config~~
34
34
  - ~~diff-tool blocks main screen (see next)~~
@@ -71,7 +71,7 @@
71
71
  - less sensitive (disappears to quickly)
72
72
  - multiple row feature
73
73
  - splash screen
74
- - new version notification
74
+ - ~~new version notification ~~
75
75
  -
76
76
 
77
77
 
@@ -3,6 +3,32 @@
3
3
 
4
4
 
5
5
  ## version v0.19.0 - ????????
6
+ -
7
+
8
+
9
+ ## version v0.18.5 - 20251207
10
+ - fixes for windows platform (looking for contributors on windows platform !!!)
11
+ - gitcmd file quoting
12
+ - localhost paramter for single instance
13
+ - git difftool
14
+ - context menu process start
15
+ - rework handling commit clear
16
+ -
17
+
18
+
19
+ ## version v0.18.4 - 20251207
20
+ - skipped
21
+ -
22
+
23
+
24
+ ## version v0.18.3 - 20251113
25
+ - fix python version in setup
26
+ -
27
+
28
+
29
+ ## version v0.18.2 - 20251113
30
+ - check for latest version of gitonic
31
+ - fix #9 for renamed file handling
6
32
  -
7
33
 
8
34
 
@@ -11,12 +37,13 @@
11
37
  -
12
38
 
13
39
 
14
- ## version v0.18.0 - 20251109
40
+ ## version v0.18.0 - 20251109 - not available on pypi
15
41
  - redesign multi tasking / tk eventloop
16
42
  - user interface is now non-blocking
17
43
  - multi tasking tested with python 3.12
18
44
  - **not yet tested** with python 3.13 / 3.14
19
- - `gitonic` is released for python3.12 (fixed version)
45
+ - `gitonic` is released for **python3.12 (fixed version)**
46
+ - open issue [free threading](https://github.com/kr-g/gitonic/issues/8)
20
47
  - current implementation uses threads to fork `git` processes in the background
21
48
  - the main tk eventloop receives the thread results and process this in callbacks
22
49
  - read here for detailed information [`tk eventloop`](https://tkdocs.com/tutorial/eventloop.html))
@@ -31,9 +58,9 @@
31
58
  - filter log for each repo
32
59
  - codebase refactored
33
60
  - new commandline tools (UNDER CONTSRUCTION - not yet final - dont expect anything!!! - this might be dropped in the future)
34
- - `gtcd.py`
61
+ - `gtcd.py` alias `gtcd`
35
62
  - opens a new terminal for a git repo quickly
36
- - `gtls.py`
63
+ - `gtls.py` alias `gtls`
37
64
  - list all changes for all tracked git repo
38
65
  -
39
66
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitonic
3
- Version: 0.18.1
3
+ Version: 0.18.5
4
4
  Summary: manage a multi git workspace
5
5
  Home-page: https://github.com/kr-g/gitonic
6
6
  Author: k. goger
@@ -15,11 +15,13 @@ Classifier: Topic :: Utilities
15
15
  Classifier: Topic :: Desktop Environment
16
16
  Classifier: Topic :: Software Development :: Version Control :: Git
17
17
  Classifier: Programming Language :: Python :: 3
18
- Requires-Python: >=3.12,<3.13
18
+ Requires-Python: >=3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE.md
21
21
  Requires-Dist: pillow
22
22
  Requires-Dist: tkinter-tooltip
23
+ Requires-Dist: semver
24
+ Requires-Dist: urllib3
23
25
  Provides-Extra: pep08
24
26
  Requires-Dist: pycodestyle; extra == "pep08"
25
27
  Requires-Dist: flake8; extra == "pep08"
@@ -51,9 +53,10 @@ Dynamic: requires-python
51
53
  [![PEP-08](https://img.shields.io/badge/code%20style-PEP08-green.svg)](https://www.python.org/dev/peps/pep-0008/)
52
54
 
53
55
 
54
- you are reading VERSION = v0.18.1
56
+ you are reading VERSION = v0.18.5
57
+
58
+ version v0.18.0 will come with some bigger changes.
55
59
 
56
- version v0.18.1 will come with some bigger changes.
57
60
 
58
61
  read latest news here:
59
62
 
@@ -257,14 +260,7 @@ or in case autopep8 is installed in a venv, e.g.
257
260
 
258
261
  ### black
259
262
 
260
- black is also an offical python tool, but resolves not fully to issues reported by pycodestyle.
261
- there might be some rework required (from case to case).
262
- result is quite similar to
263
- [autopep8](https://github.com/hhatto/autopep8)
264
- beside the list reported by pycodestyle (after formatting)
265
- is a bit longer comparing to
266
- [autopep8](https://github.com/hhatto/autopep8)
267
- what does a better job here.
263
+ [black](https://github.com/psf/black)
268
264
 
269
265
  {
270
266
  ".py": {
@@ -278,8 +274,8 @@ what does a better job here.
278
274
 
279
275
  ### yapf
280
276
 
281
- yapf (google python code formmater) is slow comparing the former tools, and re-arranges code so
282
- that it is reported as error by pycodestyle after formatting.
277
+ [yapf](https://github.com/google/yapf)
278
+ (google python code formatter).
283
279
 
284
280
  {
285
281
  ".py": {
@@ -294,7 +290,7 @@ that it is reported as error by pycodestyle after formatting.
294
290
 
295
291
  ## templates for c, c++ formatters
296
292
 
297
- all of the following tools are NOT part of `gitonic` standard installation.
293
+ all of the following tools are **NOT** part of `gitonic` standard installation.
298
294
 
299
295
 
300
296
  ### uncrustify
@@ -517,6 +513,22 @@ for running on linux with xfce.
517
513
  ],
518
514
  "workdir": "$GIT",
519
515
  "changes-all": [
516
+ {
517
+ "name": "git push $_GIT",
518
+ "para": [
519
+ "git",
520
+ "push"
521
+ ],
522
+ "logexpert" : true
523
+ },
524
+ {
525
+ "name": "git pull $_GIT",
526
+ "para": [
527
+ "git",
528
+ "pull"
529
+ ],
530
+ "logexpert" : true
531
+ },
520
532
  {
521
533
  "name": "gitk $_GIT",
522
534
  "para": [
@@ -609,11 +621,14 @@ to run gitonic use the script from the virtual environment directly
609
621
  ~/gitonic/bin/gitonic
610
622
 
611
623
 
612
- it is recommented to create an alias in `.bash_aliases`.
624
+ it is recommented to create some alias in `.bash_aliases`.
613
625
  add the following line at the end of `.bash_aliases`
614
626
 
615
627
  alias gitonic=~/gitonic/bin/gitonic
616
628
 
629
+ alias gtcd=~/gitonic/bin/gtcd
630
+ alias gtls=~/gitonic/bin/gtls
631
+
617
632
 
618
633
  ## other installation dependencies
619
634
 
@@ -662,8 +677,20 @@ add a `.git-credentials` file as described here
662
677
  [`git-credentials`](https://git-scm.com/docs/git-credential-store)
663
678
 
664
679
 
680
+ NOTE: the structure for an entry in `.git-credentials` is as following,
681
+ e.g. for github put a single text line with
682
+
683
+ https://your-user:your-personal-classic-token@github.com
684
+
685
+
686
+ NOTE: `github` personal access tokens (classic) are maintained on `github` under:
687
+
688
+ profile > settings > developer settings > personal access tokens > tokens (classic)
689
+
690
+
665
691
  add a `.gitconfig` file as described here
666
692
  [`git-config`](https://git-scm.com/docs/git-config)
693
+
667
694
  and configure for diff and merge tools.
668
695
  NOTE: you need to install the diff-tool e.g.
669
696
  [`meld merge`](https://meldmerge.org/) manually,
@@ -731,6 +758,13 @@ gitonic is released under the following
731
758
  git logos from [git-scm](https://git-scm.com/downloads/logos)
732
759
 
733
760
 
761
+ ## included components licenses
762
+
763
+ [tkinter-tooktip](https://github.com/gnikit/tkinter-tooltip)
764
+
765
+ [google-material-icons](https://github.com/google/material-design-icons)
766
+
767
+
734
768
  # support and donations
735
769
 
736
770
  support the further development of `gitonic` with a donation of your choice.
@@ -745,6 +779,32 @@ thank you !!!
745
779
 
746
780
 
747
781
  ## version v0.19.0 - ????????
782
+ -
783
+
784
+
785
+ ## version v0.18.5 - 20251207
786
+ - fixes for windows platform (looking for contributors on windows platform !!!)
787
+ - gitcmd file quoting
788
+ - localhost paramter for single instance
789
+ - git difftool
790
+ - context menu process start
791
+ - rework handling commit clear
792
+ -
793
+
794
+
795
+ ## version v0.18.4 - 20251207
796
+ - skipped
797
+ -
798
+
799
+
800
+ ## version v0.18.3 - 20251113
801
+ - fix python version in setup
802
+ -
803
+
804
+
805
+ ## version v0.18.2 - 20251113
806
+ - check for latest version of gitonic
807
+ - fix #9 for renamed file handling
748
808
  -
749
809
 
750
810
 
@@ -753,12 +813,13 @@ thank you !!!
753
813
  -
754
814
 
755
815
 
756
- ## version v0.18.0 - 20251109
816
+ ## version v0.18.0 - 20251109 - not available on pypi
757
817
  - redesign multi tasking / tk eventloop
758
818
  - user interface is now non-blocking
759
819
  - multi tasking tested with python 3.12
760
820
  - **not yet tested** with python 3.13 / 3.14
761
- - `gitonic` is released for python3.12 (fixed version)
821
+ - `gitonic` is released for **python3.12 (fixed version)**
822
+ - open issue [free threading](https://github.com/kr-g/gitonic/issues/8)
762
823
  - current implementation uses threads to fork `git` processes in the background
763
824
  - the main tk eventloop receives the thread results and process this in callbacks
764
825
  - read here for detailed information [`tk eventloop`](https://tkdocs.com/tutorial/eventloop.html))
@@ -773,9 +834,9 @@ thank you !!!
773
834
  - filter log for each repo
774
835
  - codebase refactored
775
836
  - new commandline tools (UNDER CONTSRUCTION - not yet final - dont expect anything!!! - this might be dropped in the future)
776
- - `gtcd.py`
837
+ - `gtcd.py` alias `gtcd`
777
838
  - opens a new terminal for a git repo quickly
778
- - `gtls.py`
839
+ - `gtls.py` alias `gtls`
779
840
  - list all changes for all tracked git repo
780
841
  -
781
842
 
@@ -975,7 +1036,7 @@ thank you !!!
975
1036
  - settings tabs
976
1037
  - check for installed git
977
1038
  - ~~git exe configuration in settings~~
978
- - check for latest version of gitonic
1039
+ - ~~check for latest version of gitonic~~
979
1040
  -
980
1041
  - ~~config file for last known config~~
981
1042
  - ~~diff-tool blocks main screen (see next)~~
@@ -1018,7 +1079,7 @@ thank you !!!
1018
1079
  - less sensitive (disappears to quickly)
1019
1080
  - multiple row feature
1020
1081
  - splash screen
1021
- - new version notification
1082
+ - ~~new version notification ~~
1022
1083
  -
1023
1084
 
1024
1085
 
@@ -1,9 +1,10 @@
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.18.1
4
+ you are reading VERSION = v0.18.5
5
+
6
+ version v0.18.0 will come with some bigger changes.
5
7
 
6
- version v0.18.1 will come with some bigger changes.
7
8
 
8
9
  read latest news here:
9
10
 
@@ -207,14 +208,7 @@ or in case autopep8 is installed in a venv, e.g.
207
208
 
208
209
  ### black
209
210
 
210
- black is also an offical python tool, but resolves not fully to issues reported by pycodestyle.
211
- there might be some rework required (from case to case).
212
- result is quite similar to
213
- [autopep8](https://github.com/hhatto/autopep8)
214
- beside the list reported by pycodestyle (after formatting)
215
- is a bit longer comparing to
216
- [autopep8](https://github.com/hhatto/autopep8)
217
- what does a better job here.
211
+ [black](https://github.com/psf/black)
218
212
 
219
213
  {
220
214
  ".py": {
@@ -228,8 +222,8 @@ what does a better job here.
228
222
 
229
223
  ### yapf
230
224
 
231
- yapf (google python code formmater) is slow comparing the former tools, and re-arranges code so
232
- that it is reported as error by pycodestyle after formatting.
225
+ [yapf](https://github.com/google/yapf)
226
+ (google python code formatter).
233
227
 
234
228
  {
235
229
  ".py": {
@@ -244,7 +238,7 @@ that it is reported as error by pycodestyle after formatting.
244
238
 
245
239
  ## templates for c, c++ formatters
246
240
 
247
- all of the following tools are NOT part of `gitonic` standard installation.
241
+ all of the following tools are **NOT** part of `gitonic` standard installation.
248
242
 
249
243
 
250
244
  ### uncrustify
@@ -467,6 +461,22 @@ for running on linux with xfce.
467
461
  ],
468
462
  "workdir": "$GIT",
469
463
  "changes-all": [
464
+ {
465
+ "name": "git push $_GIT",
466
+ "para": [
467
+ "git",
468
+ "push"
469
+ ],
470
+ "logexpert" : true
471
+ },
472
+ {
473
+ "name": "git pull $_GIT",
474
+ "para": [
475
+ "git",
476
+ "pull"
477
+ ],
478
+ "logexpert" : true
479
+ },
470
480
  {
471
481
  "name": "gitk $_GIT",
472
482
  "para": [
@@ -559,11 +569,14 @@ to run gitonic use the script from the virtual environment directly
559
569
  ~/gitonic/bin/gitonic
560
570
 
561
571
 
562
- it is recommented to create an alias in `.bash_aliases`.
572
+ it is recommented to create some alias in `.bash_aliases`.
563
573
  add the following line at the end of `.bash_aliases`
564
574
 
565
575
  alias gitonic=~/gitonic/bin/gitonic
566
576
 
577
+ alias gtcd=~/gitonic/bin/gtcd
578
+ alias gtls=~/gitonic/bin/gtls
579
+
567
580
 
568
581
  ## other installation dependencies
569
582
 
@@ -612,8 +625,20 @@ add a `.git-credentials` file as described here
612
625
  [`git-credentials`](https://git-scm.com/docs/git-credential-store)
613
626
 
614
627
 
628
+ NOTE: the structure for an entry in `.git-credentials` is as following,
629
+ e.g. for github put a single text line with
630
+
631
+ https://your-user:your-personal-classic-token@github.com
632
+
633
+
634
+ NOTE: `github` personal access tokens (classic) are maintained on `github` under:
635
+
636
+ profile > settings > developer settings > personal access tokens > tokens (classic)
637
+
638
+
615
639
  add a `.gitconfig` file as described here
616
640
  [`git-config`](https://git-scm.com/docs/git-config)
641
+
617
642
  and configure for diff and merge tools.
618
643
  NOTE: you need to install the diff-tool e.g.
619
644
  [`meld merge`](https://meldmerge.org/) manually,
@@ -681,6 +706,13 @@ gitonic is released under the following
681
706
  git logos from [git-scm](https://git-scm.com/downloads/logos)
682
707
 
683
708
 
709
+ ## included components licenses
710
+
711
+ [tkinter-tooktip](https://github.com/gnikit/tkinter-tooltip)
712
+
713
+ [google-material-icons](https://github.com/google/material-design-icons)
714
+
715
+
684
716
  # support and donations
685
717
 
686
718
  support the further development of `gitonic` with a donation of your choice.
@@ -102,7 +102,7 @@ class Config(object):
102
102
  return self
103
103
 
104
104
  def save(self):
105
- assert self.conf
105
+ # assert self.conf
106
106
  save_settings(self.conf, self.fnam)
107
107
 
108
108
  def set_val(self, key, val):
@@ -1,4 +1,4 @@
1
- VERSION = "v0.18.1"
1
+ VERSION = "v0.18.5"
2
2
 
3
3
  GITIGNORE = ".gitignore"
4
4
 
@@ -11,6 +11,8 @@ from sysutil import platform_windows
11
11
 
12
12
  GIT = "git.exe" if platform_windows() else "git"
13
13
 
14
+ OS_QUOTE = "\"" if platform_windows() else "'"
15
+
14
16
  #
15
17
 
16
18
 
@@ -31,7 +33,7 @@ def git_cmd(repo, cmdline, callb=None, stopcb=None):
31
33
  # print("using", gexe)
32
34
  return CmdTask() \
33
35
  .configure(callb=callb, stop_callb=stopcb) \
34
- .set_command(f"{gexe} -C '{repo}' {cmdline}", )
36
+ .set_command(f"{gexe} -C {OS_QUOTE}{repo}{OS_QUOTE} {cmdline}", )
35
37
 
36
38
 
37
39
  def with_git_cmd(repo, cmd, callb=None, stopcb=None):
@@ -72,7 +74,7 @@ def git_tag(repo, tagnam="", callb=None, stopcb=None):
72
74
 
73
75
 
74
76
  def join_files(files, sep=" "):
75
- return sep.join(map(lambda x: "'" + x + "'", files))
77
+ return sep.join(map(lambda x: OS_QUOTE + x + OS_QUOTE, files))
76
78
 
77
79
  #
78
80
 
@@ -106,7 +108,7 @@ def git_add_index_undo(repo, files, callb=None, stopcb=None):
106
108
 
107
109
 
108
110
  def git_commit(repo, comment, callb=None, stopcb=None):
109
- return with_git_cmd(repo, f"commit -m '{comment}'", callb=callb, stopcb=stopcb)
111
+ return with_git_cmd(repo, f"commit -m {OS_QUOTE}{comment}{OS_QUOTE}", callb=callb, stopcb=stopcb)
110
112
 
111
113
  #
112
114
 
@@ -0,0 +1,39 @@
1
+ from const import VERSION
2
+
3
+ import semver
4
+ from urllib3 import request
5
+
6
+ URL = "https://api.github.com/repos/kr-g/gitonic/tags"
7
+
8
+
9
+ def mkver(x):
10
+ return x[1:]
11
+
12
+
13
+ def check_github_new_version():
14
+
15
+ try:
16
+ res = request("GET", URL)
17
+ except Exception as ex:
18
+ return None, ex
19
+
20
+ verslist_published = list(map(lambda x: mkver(x['name']), res.json()))
21
+
22
+ verlist_published = list(
23
+ map(lambda x: semver.Version.parse(x), verslist_published))
24
+
25
+ latest_published = max(verlist_published)
26
+
27
+ version_current = semver.Version.parse(mkver(VERSION))
28
+
29
+ if version_current < latest_published:
30
+ return latest_published, None
31
+
32
+ return None, None
33
+
34
+
35
+ if __name__ == "__main__":
36
+ latest_published, ex = check_github_new_version()
37
+ if latest_published:
38
+ print(f"you are using gitonic {
39
+ VERSION}. there is a new version available {latest_published}")
@@ -319,6 +319,12 @@ class GitonicCmdIt(object):
319
319
  print("empty list")
320
320
  return
321
321
 
322
+ # remove renamed files
323
+ files = list(filter(lambda x: x.staged != "R", files))
324
+
325
+ # status -> fnam
326
+ files = list(map(lambda x: x.file, files))
327
+
322
328
  cmd = git_add(repo.path, files, stopcb=self._stop_callb)
323
329
  yield cmd
324
330
 
@@ -330,6 +336,8 @@ class GitonicCmdIt(object):
330
336
 
331
337
  print("***undo add", files)
332
338
 
339
+ files = list(filter(lambda x: x.staged != "R", files))
340
+
333
341
  files_m = list(filter(lambda x: x.staged != "A", files))
334
342
  files_m = list(map(lambda x: x.file, files_m))
335
343
 
@@ -401,7 +409,14 @@ class GitonicCmdIt(object):
401
409
  # run unattached
402
410
 
403
411
  args = [get_git_exe(), "difftool", file.file.file]
404
- rc = os.spawnvpe(os.P_NOWAIT, args[0], args, os.environ)
412
+
413
+ print("difftool args", args)
414
+
415
+ # todo
416
+ import subprocess
417
+ rc = subprocess.Popen(args)
418
+
419
+ # rc = os.spawnve(os.P_NOWAIT, args[0], args, os.environ)
405
420
 
406
421
  logex.info("difftool_files_task_it started", args)
407
422
 
@@ -413,7 +413,7 @@ class StageFileCmd(GitCmd):
413
413
  repofiles = list(
414
414
  filter(lambda x: x.repo.path == repo.path, self.selfiles))
415
415
 
416
- repofiles = list(map(lambda x: x.file.file, repofiles))
416
+ repofiles = list(map(lambda x: x.file, repofiles))
417
417
 
418
418
  if len(repofiles) == 0:
419
419
  yield FuncTask().set_name("nop").set_func()
@@ -5,6 +5,9 @@ import os
5
5
  import fnmatch
6
6
  import queue
7
7
 
8
+ #
9
+ from core.githubver import check_github_new_version
10
+
8
11
  #
9
12
 
10
13
  from core.logs import LogOutHandler
@@ -19,10 +22,10 @@ from core.sysutil import get_terminal_size, open_file_explorer
19
22
 
20
23
  #
21
24
 
22
- from tkui.tkuicore import tk_show_error
25
+ from tkui.tkuicore import tk_show_error, tk_show_warning
23
26
  from tkui.singleinstance import switch2instance, tk_bg_bring_to_front, cleanup_single_instance
24
27
 
25
- from tkui.tkuiapp import ui_app, root, tk_add_bg_callb, tk_get_root
28
+ from tkui.tkuiapp import ui_app, root, tk_add_bg_callb, tk_get_root, VERSION_INFO
26
29
  from tkui.tkuiwidg import TNContextMenu
27
30
 
28
31
  from core.gitonapp import (GitonicApp, FetchCmd, PullCmd, CommitCmd,
@@ -1011,8 +1014,11 @@ def load_and_set_context_settings(sect, ctxmenu, gnam_dir, fnam_dir, fnam):
1011
1014
  logex.info("run command", *args)
1012
1015
 
1013
1016
  with PushDir(workdir):
1014
- rc = os.spawnvpe(
1015
- os.P_NOWAIT, args[0], args, os.environ)
1017
+
1018
+ # todo
1019
+ import subprocess
1020
+ rc = subprocess.Popen(args)
1021
+
1016
1022
  logex.info("call result", rc)
1017
1023
 
1018
1024
  return _runner
@@ -1027,10 +1033,12 @@ def load_and_set_context_settings(sect, ctxmenu, gnam_dir, fnam_dir, fnam):
1027
1033
  #
1028
1034
  #
1029
1035
  app = None
1036
+ new_version = None
1030
1037
 
1031
1038
 
1032
1039
  def main_func():
1033
1040
  global app
1041
+ global new_version
1034
1042
 
1035
1043
  if switch2instance(PATH):
1036
1044
  logex.info("allready running. switch to instance")
@@ -1039,6 +1047,16 @@ def main_func():
1039
1047
  tk_get_root().add_quit_handler(cleanup_single_instance)
1040
1048
 
1041
1049
  app = GitonicApp()
1050
+
1051
+ new_version, ex_version = check_github_new_version()
1052
+
1053
+ if ex_version:
1054
+ print(f"!!!!!!! new version available {new_version}")
1055
+ tk_show_error("version information","could not connect to update site.\n\nERR: check your internet connection.")
1056
+
1057
+ if new_version:
1058
+ print(f"!!!!!!! new version available {new_version}")
1059
+ tk_show_warning("version information",f"there is a new version\nof gitonic availabe\n\n{new_version}")
1042
1060
 
1043
1061
  # cmd = RefreshCmd(app).setup().complete()
1044
1062
  # app.sort_refs()
@@ -1099,6 +1117,9 @@ def main_func():
1099
1117
  ui_app.pane_commit.msg_cb.set_val(msgshort)
1100
1118
  ui_app.pane_commit.msg_text.set_val(msglong)
1101
1119
 
1120
+ if ui_app.pane_commit.clrcommit_ck.get_val():
1121
+ commit_clear()
1122
+
1102
1123
  # log
1103
1124
 
1104
1125
  ui_app.pane_log.repos.on_click = on_filter_log_repo
@@ -1181,8 +1202,14 @@ def main_func():
1181
1202
  tk_bg_bring_to_front(tk_get_root())
1182
1203
 
1183
1204
  #
1184
-
1185
- ui_app.set_title(VERSION)
1205
+ titstr = VERSION
1206
+ if new_version:
1207
+ titstr += f" ===> !!! NEW VERSION AVAILABLE {new_version} !!!"
1208
+ VERSION_INFO.set_val( f"NEW VERSION AVAILABLE: {new_version}" )
1209
+ if ex_version:
1210
+ VERSION_INFO.set_val( "version: could not connect to update site." )
1211
+
1212
+ ui_app.set_title(titstr)
1186
1213
 
1187
1214
  # update first time
1188
1215
  root.after(153, refresh_tracked_from_workspace)
@@ -31,7 +31,7 @@ def create_socket(port=0):
31
31
 
32
32
  def create_client_socket(port=0):
33
33
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
34
- sock.connect(("", port))
34
+ sock.connect(("localhost", port))
35
35
  try:
36
36
  rc = sock.send("helo\n".encode())
37
37
  print_t("send helo", rc)
@@ -42,6 +42,7 @@ def create_client_socket(port=0):
42
42
 
43
43
 
44
44
  def bring_to_front(wndw):
45
+ # todo not working on windows
45
46
  wndw.deiconify()
46
47
  wndw.lift()
47
48
 
@@ -111,9 +112,13 @@ def switch2instance(path):
111
112
 
112
113
  global _fnam
113
114
 
114
- _fnam = os.path.join("~", path, "socket")
115
+ _fnam = os.path.join("~", path)
115
116
  _fnam = os.path.expanduser(_fnam)
116
117
 
118
+ os.makedirs(_fnam, exist_ok=True)
119
+
120
+ _fnam = os.path.join(_fnam, "socket")
121
+
117
122
  print_t("EXE", _fnam)
118
123
 
119
124
  global _sock
@@ -286,6 +286,11 @@ filler = TNLabel(
286
286
  footer, text=f"env: Python {sysver[0]}.{sysver[1]}.{sysver[2]}", image="info", compound=tk.LEFT)
287
287
  filler.pack(side=tk.LEFT, expand=True, fill=tk.X, padx=15)
288
288
 
289
+
290
+ VERSION_INFO = TNLabel(
291
+ footer, text="version: latest", image="info", compound=tk.LEFT)
292
+ VERSION_INFO.pack(side=tk.LEFT, expand=True, fill=tk.X, padx=15)
293
+
289
294
  #
290
295
 
291
296
  root.resizable(True, True)
@@ -30,6 +30,9 @@ def tk_get_icon(name, height=HEIGHT, image_size=(HEIGHT+3, HEIGHT+3), bg="lightg
30
30
  def tk_show_error(title, message):
31
31
  tk_messagebox.showerror(title, message)
32
32
 
33
+ def tk_show_warning(title, message):
34
+ tk_messagebox.showwarning(title, message)
35
+
33
36
  #
34
37
 
35
38
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitonic
3
- Version: 0.18.1
3
+ Version: 0.18.5
4
4
  Summary: manage a multi git workspace
5
5
  Home-page: https://github.com/kr-g/gitonic
6
6
  Author: k. goger
@@ -15,11 +15,13 @@ Classifier: Topic :: Utilities
15
15
  Classifier: Topic :: Desktop Environment
16
16
  Classifier: Topic :: Software Development :: Version Control :: Git
17
17
  Classifier: Programming Language :: Python :: 3
18
- Requires-Python: >=3.12,<3.13
18
+ Requires-Python: >=3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE.md
21
21
  Requires-Dist: pillow
22
22
  Requires-Dist: tkinter-tooltip
23
+ Requires-Dist: semver
24
+ Requires-Dist: urllib3
23
25
  Provides-Extra: pep08
24
26
  Requires-Dist: pycodestyle; extra == "pep08"
25
27
  Requires-Dist: flake8; extra == "pep08"
@@ -51,9 +53,10 @@ Dynamic: requires-python
51
53
  [![PEP-08](https://img.shields.io/badge/code%20style-PEP08-green.svg)](https://www.python.org/dev/peps/pep-0008/)
52
54
 
53
55
 
54
- you are reading VERSION = v0.18.1
56
+ you are reading VERSION = v0.18.5
57
+
58
+ version v0.18.0 will come with some bigger changes.
55
59
 
56
- version v0.18.1 will come with some bigger changes.
57
60
 
58
61
  read latest news here:
59
62
 
@@ -257,14 +260,7 @@ or in case autopep8 is installed in a venv, e.g.
257
260
 
258
261
  ### black
259
262
 
260
- black is also an offical python tool, but resolves not fully to issues reported by pycodestyle.
261
- there might be some rework required (from case to case).
262
- result is quite similar to
263
- [autopep8](https://github.com/hhatto/autopep8)
264
- beside the list reported by pycodestyle (after formatting)
265
- is a bit longer comparing to
266
- [autopep8](https://github.com/hhatto/autopep8)
267
- what does a better job here.
263
+ [black](https://github.com/psf/black)
268
264
 
269
265
  {
270
266
  ".py": {
@@ -278,8 +274,8 @@ what does a better job here.
278
274
 
279
275
  ### yapf
280
276
 
281
- yapf (google python code formmater) is slow comparing the former tools, and re-arranges code so
282
- that it is reported as error by pycodestyle after formatting.
277
+ [yapf](https://github.com/google/yapf)
278
+ (google python code formatter).
283
279
 
284
280
  {
285
281
  ".py": {
@@ -294,7 +290,7 @@ that it is reported as error by pycodestyle after formatting.
294
290
 
295
291
  ## templates for c, c++ formatters
296
292
 
297
- all of the following tools are NOT part of `gitonic` standard installation.
293
+ all of the following tools are **NOT** part of `gitonic` standard installation.
298
294
 
299
295
 
300
296
  ### uncrustify
@@ -517,6 +513,22 @@ for running on linux with xfce.
517
513
  ],
518
514
  "workdir": "$GIT",
519
515
  "changes-all": [
516
+ {
517
+ "name": "git push $_GIT",
518
+ "para": [
519
+ "git",
520
+ "push"
521
+ ],
522
+ "logexpert" : true
523
+ },
524
+ {
525
+ "name": "git pull $_GIT",
526
+ "para": [
527
+ "git",
528
+ "pull"
529
+ ],
530
+ "logexpert" : true
531
+ },
520
532
  {
521
533
  "name": "gitk $_GIT",
522
534
  "para": [
@@ -609,11 +621,14 @@ to run gitonic use the script from the virtual environment directly
609
621
  ~/gitonic/bin/gitonic
610
622
 
611
623
 
612
- it is recommented to create an alias in `.bash_aliases`.
624
+ it is recommented to create some alias in `.bash_aliases`.
613
625
  add the following line at the end of `.bash_aliases`
614
626
 
615
627
  alias gitonic=~/gitonic/bin/gitonic
616
628
 
629
+ alias gtcd=~/gitonic/bin/gtcd
630
+ alias gtls=~/gitonic/bin/gtls
631
+
617
632
 
618
633
  ## other installation dependencies
619
634
 
@@ -662,8 +677,20 @@ add a `.git-credentials` file as described here
662
677
  [`git-credentials`](https://git-scm.com/docs/git-credential-store)
663
678
 
664
679
 
680
+ NOTE: the structure for an entry in `.git-credentials` is as following,
681
+ e.g. for github put a single text line with
682
+
683
+ https://your-user:your-personal-classic-token@github.com
684
+
685
+
686
+ NOTE: `github` personal access tokens (classic) are maintained on `github` under:
687
+
688
+ profile > settings > developer settings > personal access tokens > tokens (classic)
689
+
690
+
665
691
  add a `.gitconfig` file as described here
666
692
  [`git-config`](https://git-scm.com/docs/git-config)
693
+
667
694
  and configure for diff and merge tools.
668
695
  NOTE: you need to install the diff-tool e.g.
669
696
  [`meld merge`](https://meldmerge.org/) manually,
@@ -731,6 +758,13 @@ gitonic is released under the following
731
758
  git logos from [git-scm](https://git-scm.com/downloads/logos)
732
759
 
733
760
 
761
+ ## included components licenses
762
+
763
+ [tkinter-tooktip](https://github.com/gnikit/tkinter-tooltip)
764
+
765
+ [google-material-icons](https://github.com/google/material-design-icons)
766
+
767
+
734
768
  # support and donations
735
769
 
736
770
  support the further development of `gitonic` with a donation of your choice.
@@ -745,6 +779,32 @@ thank you !!!
745
779
 
746
780
 
747
781
  ## version v0.19.0 - ????????
782
+ -
783
+
784
+
785
+ ## version v0.18.5 - 20251207
786
+ - fixes for windows platform (looking for contributors on windows platform !!!)
787
+ - gitcmd file quoting
788
+ - localhost paramter for single instance
789
+ - git difftool
790
+ - context menu process start
791
+ - rework handling commit clear
792
+ -
793
+
794
+
795
+ ## version v0.18.4 - 20251207
796
+ - skipped
797
+ -
798
+
799
+
800
+ ## version v0.18.3 - 20251113
801
+ - fix python version in setup
802
+ -
803
+
804
+
805
+ ## version v0.18.2 - 20251113
806
+ - check for latest version of gitonic
807
+ - fix #9 for renamed file handling
748
808
  -
749
809
 
750
810
 
@@ -753,12 +813,13 @@ thank you !!!
753
813
  -
754
814
 
755
815
 
756
- ## version v0.18.0 - 20251109
816
+ ## version v0.18.0 - 20251109 - not available on pypi
757
817
  - redesign multi tasking / tk eventloop
758
818
  - user interface is now non-blocking
759
819
  - multi tasking tested with python 3.12
760
820
  - **not yet tested** with python 3.13 / 3.14
761
- - `gitonic` is released for python3.12 (fixed version)
821
+ - `gitonic` is released for **python3.12 (fixed version)**
822
+ - open issue [free threading](https://github.com/kr-g/gitonic/issues/8)
762
823
  - current implementation uses threads to fork `git` processes in the background
763
824
  - the main tk eventloop receives the thread results and process this in callbacks
764
825
  - read here for detailed information [`tk eventloop`](https://tkdocs.com/tutorial/eventloop.html))
@@ -773,9 +834,9 @@ thank you !!!
773
834
  - filter log for each repo
774
835
  - codebase refactored
775
836
  - new commandline tools (UNDER CONTSRUCTION - not yet final - dont expect anything!!! - this might be dropped in the future)
776
- - `gtcd.py`
837
+ - `gtcd.py` alias `gtcd`
777
838
  - opens a new terminal for a git repo quickly
778
- - `gtls.py`
839
+ - `gtls.py` alias `gtls`
779
840
  - list all changes for all tracked git repo
780
841
  -
781
842
 
@@ -975,7 +1036,7 @@ thank you !!!
975
1036
  - settings tabs
976
1037
  - check for installed git
977
1038
  - ~~git exe configuration in settings~~
978
- - check for latest version of gitonic
1039
+ - ~~check for latest version of gitonic~~
979
1040
  -
980
1041
  - ~~config file for last known config~~
981
1042
  - ~~diff-tool blocks main screen (see next)~~
@@ -1018,7 +1079,7 @@ thank you !!!
1018
1079
  - less sensitive (disappears to quickly)
1019
1080
  - multiple row feature
1020
1081
  - splash screen
1021
- - new version notification
1082
+ - ~~new version notification ~~
1022
1083
  -
1023
1084
 
1024
1085
 
@@ -29,12 +29,12 @@ gitonic/core/const.py
29
29
  gitonic/core/dataflow.py
30
30
  gitonic/core/file.py
31
31
  gitonic/core/gitcmd.py
32
+ gitonic/core/githubver.py
32
33
  gitonic/core/gitobj.py
33
34
  gitonic/core/giton.py
34
35
  gitonic/core/gitonapp.py
35
36
  gitonic/core/gitutil.py
36
37
  gitonic/core/logs.py
37
- gitonic/core/ncur.py
38
38
  gitonic/core/proc.py
39
39
  gitonic/core/runr.py
40
40
  gitonic/core/sysutil.py
@@ -1,5 +1,7 @@
1
1
  pillow
2
2
  tkinter-tooltip
3
+ semver
4
+ urllib3
3
5
 
4
6
  [DEFAULT]
5
7
  pycodestyle
@@ -1,24 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- import curses
4
-
5
-
6
- def main(stdscr):
7
- while True:
8
-
9
- key = stdscr.getch()
10
-
11
- if key == ord('q'):
12
- break # quit app
13
-
14
- elif key == curses.KEY_UP:
15
- stdscr.addstr(0, 0, "UP ") # print feedback
16
-
17
- elif key == curses.KEY_DOWN:
18
- stdscr.addstr(1, 0, "DOWN")
19
-
20
- stdscr.refresh()
21
-
22
-
23
- if __name__ == "__main__":
24
- curses.wrapper(main)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes