git-visual-timeline 0.1.0__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 (29) hide show
  1. git_visual_timeline-0.1.0/LICENSE +21 -0
  2. git_visual_timeline-0.1.0/PKG-INFO +102 -0
  3. git_visual_timeline-0.1.0/README.md +65 -0
  4. git_visual_timeline-0.1.0/pyproject.toml +61 -0
  5. git_visual_timeline-0.1.0/setup.cfg +4 -0
  6. git_visual_timeline-0.1.0/src/git_visual_timeline.egg-info/PKG-INFO +102 -0
  7. git_visual_timeline-0.1.0/src/git_visual_timeline.egg-info/SOURCES.txt +27 -0
  8. git_visual_timeline-0.1.0/src/git_visual_timeline.egg-info/dependency_links.txt +1 -0
  9. git_visual_timeline-0.1.0/src/git_visual_timeline.egg-info/entry_points.txt +2 -0
  10. git_visual_timeline-0.1.0/src/git_visual_timeline.egg-info/requires.txt +12 -0
  11. git_visual_timeline-0.1.0/src/git_visual_timeline.egg-info/top_level.txt +1 -0
  12. git_visual_timeline-0.1.0/src/gvt/__init__.py +1 -0
  13. git_visual_timeline-0.1.0/src/gvt/app.py +606 -0
  14. git_visual_timeline-0.1.0/src/gvt/cli.py +75 -0
  15. git_visual_timeline-0.1.0/src/gvt/git/__init__.py +0 -0
  16. git_visual_timeline-0.1.0/src/gvt/git/cache.py +51 -0
  17. git_visual_timeline-0.1.0/src/gvt/git/repo.py +320 -0
  18. git_visual_timeline-0.1.0/src/gvt/widgets/__init__.py +0 -0
  19. git_visual_timeline-0.1.0/src/gvt/widgets/changed_files.py +127 -0
  20. git_visual_timeline-0.1.0/src/gvt/widgets/commit_bar.py +107 -0
  21. git_visual_timeline-0.1.0/src/gvt/widgets/commit_toast.py +85 -0
  22. git_visual_timeline-0.1.0/src/gvt/widgets/diff_view.py +360 -0
  23. git_visual_timeline-0.1.0/src/gvt/widgets/file_tree.py +192 -0
  24. git_visual_timeline-0.1.0/src/gvt/widgets/modals.py +770 -0
  25. git_visual_timeline-0.1.0/src/gvt/widgets/status_bar.py +149 -0
  26. git_visual_timeline-0.1.0/src/gvt/widgets/timeline.py +411 -0
  27. git_visual_timeline-0.1.0/tests/test_cache.py +71 -0
  28. git_visual_timeline-0.1.0/tests/test_git_repo.py +93 -0
  29. git_visual_timeline-0.1.0/tests/test_widgets.py +126 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Adam Reese
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,102 @@
1
+ Metadata-Version: 2.4
2
+ Name: git-visual-timeline
3
+ Version: 0.1.0
4
+ Summary: Git Visual Timeline — a keyboard-driven TUI for exploring file commit history
5
+ Author-email: Adam Reese <areese801@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/areese801/git-visual-timeline
8
+ Project-URL: Repository, https://github.com/areese801/git-visual-timeline
9
+ Project-URL: Issues, https://github.com/areese801/git-visual-timeline/issues
10
+ Keywords: git,tui,timeline,diff,blame,textual
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Software Development :: Version Control :: Git
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: textual>=0.40.0
26
+ Requires-Dist: gitpython>=3.1.40
27
+ Requires-Dist: pygments>=2.17.0
28
+ Requires-Dist: thefuzz[speedup]>=0.20.0
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=7.0; extra == "dev"
31
+ Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
32
+ Requires-Dist: textual-dev>=1.0; extra == "dev"
33
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
34
+ Requires-Dist: build; extra == "dev"
35
+ Requires-Dist: twine; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # gvt — Git Visual Timeline
39
+
40
+ A keyboard-driven TUI for exploring the commit history of any file in a git repo. Think lazygit meets a video timeline scrubber, focused on per-file history.
41
+
42
+ ## Install
43
+
44
+ ```bash
45
+ pip install git-visual-timeline
46
+ ```
47
+
48
+ ## Usage
49
+
50
+ ```bash
51
+ # Open in any git repo
52
+ gvt
53
+
54
+ # Jump directly to a file
55
+ gvt path/to/file.py
56
+ ```
57
+
58
+ ## Features
59
+
60
+ - **Visual timeline** with heatmap-colored ticks (green=adds, red=deletes, amber=mixed)
61
+ - **Step-through mode** — scrub one commit at a time to see what changed
62
+ - **Pin mode** — press `x` to mark start/end and diff any two commits
63
+ - **Syntax-highlighted diffs** with inline and whole-file views
64
+ - **Commit search** (`c`) — fuzzy search all repo commits by message, branch name, or author, then drill into changed files
65
+ - **File search** (`f`) — fzf-style file picker
66
+ - **Time filter** (`t`) — filter timeline by date range (1w, 1m, 3m, custom date)
67
+ - **Inline blame** (`b`) — right-aligned blame annotations
68
+ - **Contributor breakdown** (`B`) — visual bar chart of who changed the file
69
+ - **WIP indicator** — hollow tick showing uncommitted changes
70
+ - **5-pane layout** with numbered switching (1-5) and Ctrl+hjkl navigation
71
+ - **tmux integration** — seamless pane switching at edges (add `gvt` to your `is_vim` regex)
72
+ - **Context-sensitive status bar** showing relevant shortcuts per pane
73
+
74
+ ## Keybindings
75
+
76
+ | Key | Action |
77
+ |-----|--------|
78
+ | `1`-`5` | Jump to pane |
79
+ | `Ctrl+h/j/k/l` | Navigate panes directionally |
80
+ | `h`/`l` | Move timeline cursor |
81
+ | `x` | Pin start/end commits |
82
+ | `X` | Snap nearest pin to cursor |
83
+ | `n`/`p` | Next/prev diff hunk |
84
+ | `w` | Toggle whole-file view |
85
+ | `b` | Toggle inline blame |
86
+ | `B` | Contributor breakdown |
87
+ | `c` | Search commits (all repo) |
88
+ | `f` | Search files |
89
+ | `t` | Time filter |
90
+ | `+`/`-` | More/less diff context |
91
+ | `?` | Help |
92
+ | `q` | Quit (with confirmation) |
93
+ | `qq` | Quit immediately |
94
+
95
+ ## Requirements
96
+
97
+ - Python 3.10+
98
+ - A git repository
99
+
100
+ ## License
101
+
102
+ MIT
@@ -0,0 +1,65 @@
1
+ # gvt — Git Visual Timeline
2
+
3
+ A keyboard-driven TUI for exploring the commit history of any file in a git repo. Think lazygit meets a video timeline scrubber, focused on per-file history.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install git-visual-timeline
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```bash
14
+ # Open in any git repo
15
+ gvt
16
+
17
+ # Jump directly to a file
18
+ gvt path/to/file.py
19
+ ```
20
+
21
+ ## Features
22
+
23
+ - **Visual timeline** with heatmap-colored ticks (green=adds, red=deletes, amber=mixed)
24
+ - **Step-through mode** — scrub one commit at a time to see what changed
25
+ - **Pin mode** — press `x` to mark start/end and diff any two commits
26
+ - **Syntax-highlighted diffs** with inline and whole-file views
27
+ - **Commit search** (`c`) — fuzzy search all repo commits by message, branch name, or author, then drill into changed files
28
+ - **File search** (`f`) — fzf-style file picker
29
+ - **Time filter** (`t`) — filter timeline by date range (1w, 1m, 3m, custom date)
30
+ - **Inline blame** (`b`) — right-aligned blame annotations
31
+ - **Contributor breakdown** (`B`) — visual bar chart of who changed the file
32
+ - **WIP indicator** — hollow tick showing uncommitted changes
33
+ - **5-pane layout** with numbered switching (1-5) and Ctrl+hjkl navigation
34
+ - **tmux integration** — seamless pane switching at edges (add `gvt` to your `is_vim` regex)
35
+ - **Context-sensitive status bar** showing relevant shortcuts per pane
36
+
37
+ ## Keybindings
38
+
39
+ | Key | Action |
40
+ |-----|--------|
41
+ | `1`-`5` | Jump to pane |
42
+ | `Ctrl+h/j/k/l` | Navigate panes directionally |
43
+ | `h`/`l` | Move timeline cursor |
44
+ | `x` | Pin start/end commits |
45
+ | `X` | Snap nearest pin to cursor |
46
+ | `n`/`p` | Next/prev diff hunk |
47
+ | `w` | Toggle whole-file view |
48
+ | `b` | Toggle inline blame |
49
+ | `B` | Contributor breakdown |
50
+ | `c` | Search commits (all repo) |
51
+ | `f` | Search files |
52
+ | `t` | Time filter |
53
+ | `+`/`-` | More/less diff context |
54
+ | `?` | Help |
55
+ | `q` | Quit (with confirmation) |
56
+ | `qq` | Quit immediately |
57
+
58
+ ## Requirements
59
+
60
+ - Python 3.10+
61
+ - A git repository
62
+
63
+ ## License
64
+
65
+ MIT
@@ -0,0 +1,61 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "git-visual-timeline"
7
+ version = "0.1.0"
8
+ description = "Git Visual Timeline — a keyboard-driven TUI for exploring file commit history"
9
+ readme = "README.md"
10
+ license = {text = "MIT"}
11
+ requires-python = ">=3.10"
12
+ authors = [
13
+ {name = "Adam Reese", email = "areese801@gmail.com"},
14
+ ]
15
+ classifiers = [
16
+ "Development Status :: 3 - Alpha",
17
+ "Environment :: Console",
18
+ "Intended Audience :: Developers",
19
+ "License :: OSI Approved :: MIT License",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Topic :: Software Development :: Version Control :: Git",
27
+ ]
28
+ keywords = ["git", "tui", "timeline", "diff", "blame", "textual"]
29
+ dependencies = [
30
+ "textual>=0.40.0",
31
+ "gitpython>=3.1.40",
32
+ "pygments>=2.17.0",
33
+ "thefuzz[speedup]>=0.20.0",
34
+ ]
35
+
36
+ [project.optional-dependencies]
37
+ dev = [
38
+ "pytest>=7.0",
39
+ "pytest-asyncio>=0.21",
40
+ "textual-dev>=1.0",
41
+ "ruff>=0.1.0",
42
+ "build",
43
+ "twine",
44
+ ]
45
+
46
+ [project.urls]
47
+ Homepage = "https://github.com/areese801/git-visual-timeline"
48
+ Repository = "https://github.com/areese801/git-visual-timeline"
49
+ Issues = "https://github.com/areese801/git-visual-timeline/issues"
50
+
51
+ [project.scripts]
52
+ gvt = "gvt.cli:main"
53
+
54
+ [tool.setuptools.packages.find]
55
+ where = ["src"]
56
+
57
+ [tool.ruff]
58
+ line-length = 88
59
+
60
+ [tool.pytest.ini_options]
61
+ asyncio_mode = "auto"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,102 @@
1
+ Metadata-Version: 2.4
2
+ Name: git-visual-timeline
3
+ Version: 0.1.0
4
+ Summary: Git Visual Timeline — a keyboard-driven TUI for exploring file commit history
5
+ Author-email: Adam Reese <areese801@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/areese801/git-visual-timeline
8
+ Project-URL: Repository, https://github.com/areese801/git-visual-timeline
9
+ Project-URL: Issues, https://github.com/areese801/git-visual-timeline/issues
10
+ Keywords: git,tui,timeline,diff,blame,textual
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Software Development :: Version Control :: Git
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: textual>=0.40.0
26
+ Requires-Dist: gitpython>=3.1.40
27
+ Requires-Dist: pygments>=2.17.0
28
+ Requires-Dist: thefuzz[speedup]>=0.20.0
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=7.0; extra == "dev"
31
+ Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
32
+ Requires-Dist: textual-dev>=1.0; extra == "dev"
33
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
34
+ Requires-Dist: build; extra == "dev"
35
+ Requires-Dist: twine; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # gvt — Git Visual Timeline
39
+
40
+ A keyboard-driven TUI for exploring the commit history of any file in a git repo. Think lazygit meets a video timeline scrubber, focused on per-file history.
41
+
42
+ ## Install
43
+
44
+ ```bash
45
+ pip install git-visual-timeline
46
+ ```
47
+
48
+ ## Usage
49
+
50
+ ```bash
51
+ # Open in any git repo
52
+ gvt
53
+
54
+ # Jump directly to a file
55
+ gvt path/to/file.py
56
+ ```
57
+
58
+ ## Features
59
+
60
+ - **Visual timeline** with heatmap-colored ticks (green=adds, red=deletes, amber=mixed)
61
+ - **Step-through mode** — scrub one commit at a time to see what changed
62
+ - **Pin mode** — press `x` to mark start/end and diff any two commits
63
+ - **Syntax-highlighted diffs** with inline and whole-file views
64
+ - **Commit search** (`c`) — fuzzy search all repo commits by message, branch name, or author, then drill into changed files
65
+ - **File search** (`f`) — fzf-style file picker
66
+ - **Time filter** (`t`) — filter timeline by date range (1w, 1m, 3m, custom date)
67
+ - **Inline blame** (`b`) — right-aligned blame annotations
68
+ - **Contributor breakdown** (`B`) — visual bar chart of who changed the file
69
+ - **WIP indicator** — hollow tick showing uncommitted changes
70
+ - **5-pane layout** with numbered switching (1-5) and Ctrl+hjkl navigation
71
+ - **tmux integration** — seamless pane switching at edges (add `gvt` to your `is_vim` regex)
72
+ - **Context-sensitive status bar** showing relevant shortcuts per pane
73
+
74
+ ## Keybindings
75
+
76
+ | Key | Action |
77
+ |-----|--------|
78
+ | `1`-`5` | Jump to pane |
79
+ | `Ctrl+h/j/k/l` | Navigate panes directionally |
80
+ | `h`/`l` | Move timeline cursor |
81
+ | `x` | Pin start/end commits |
82
+ | `X` | Snap nearest pin to cursor |
83
+ | `n`/`p` | Next/prev diff hunk |
84
+ | `w` | Toggle whole-file view |
85
+ | `b` | Toggle inline blame |
86
+ | `B` | Contributor breakdown |
87
+ | `c` | Search commits (all repo) |
88
+ | `f` | Search files |
89
+ | `t` | Time filter |
90
+ | `+`/`-` | More/less diff context |
91
+ | `?` | Help |
92
+ | `q` | Quit (with confirmation) |
93
+ | `qq` | Quit immediately |
94
+
95
+ ## Requirements
96
+
97
+ - Python 3.10+
98
+ - A git repository
99
+
100
+ ## License
101
+
102
+ MIT
@@ -0,0 +1,27 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ src/git_visual_timeline.egg-info/PKG-INFO
5
+ src/git_visual_timeline.egg-info/SOURCES.txt
6
+ src/git_visual_timeline.egg-info/dependency_links.txt
7
+ src/git_visual_timeline.egg-info/entry_points.txt
8
+ src/git_visual_timeline.egg-info/requires.txt
9
+ src/git_visual_timeline.egg-info/top_level.txt
10
+ src/gvt/__init__.py
11
+ src/gvt/app.py
12
+ src/gvt/cli.py
13
+ src/gvt/git/__init__.py
14
+ src/gvt/git/cache.py
15
+ src/gvt/git/repo.py
16
+ src/gvt/widgets/__init__.py
17
+ src/gvt/widgets/changed_files.py
18
+ src/gvt/widgets/commit_bar.py
19
+ src/gvt/widgets/commit_toast.py
20
+ src/gvt/widgets/diff_view.py
21
+ src/gvt/widgets/file_tree.py
22
+ src/gvt/widgets/modals.py
23
+ src/gvt/widgets/status_bar.py
24
+ src/gvt/widgets/timeline.py
25
+ tests/test_cache.py
26
+ tests/test_git_repo.py
27
+ tests/test_widgets.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ gvt = gvt.cli:main
@@ -0,0 +1,12 @@
1
+ textual>=0.40.0
2
+ gitpython>=3.1.40
3
+ pygments>=2.17.0
4
+ thefuzz[speedup]>=0.20.0
5
+
6
+ [dev]
7
+ pytest>=7.0
8
+ pytest-asyncio>=0.21
9
+ textual-dev>=1.0
10
+ ruff>=0.1.0
11
+ build
12
+ twine
@@ -0,0 +1 @@
1
+ __version__ = "0.1.0"