gitpane 1.0.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.
- gitpane-1.0.0/LICENSE +21 -0
- gitpane-1.0.0/MANIFEST.in +2 -0
- gitpane-1.0.0/PKG-INFO +141 -0
- gitpane-1.0.0/THIRD_PARTY_NOTICES.md +109 -0
- gitpane-1.0.0/docs/PYPI_README.md +94 -0
- gitpane-1.0.0/pyproject.toml +93 -0
- gitpane-1.0.0/setup.cfg +4 -0
- gitpane-1.0.0/src/gitpane/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/account/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/account/account_choice.py +297 -0
- gitpane-1.0.0/src/gitpane/account/address_owner.py +67 -0
- gitpane-1.0.0/src/gitpane/account/authentication.py +1811 -0
- gitpane-1.0.0/src/gitpane/account/authentication_worker.py +836 -0
- gitpane-1.0.0/src/gitpane/account/credential_manager.py +480 -0
- gitpane-1.0.0/src/gitpane/account/credential_manager_install.py +171 -0
- gitpane-1.0.0/src/gitpane/account/keyring_reader.py +135 -0
- gitpane-1.0.0/src/gitpane/account/keyring_state.py +158 -0
- gitpane-1.0.0/src/gitpane/account/ssh.py +312 -0
- gitpane-1.0.0/src/gitpane/account/ssh_askpass.py +216 -0
- gitpane-1.0.0/src/gitpane/account/ssh_prompt.py +222 -0
- gitpane-1.0.0/src/gitpane/application.py +684 -0
- gitpane-1.0.0/src/gitpane/commit/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/commit/commit_metadata.py +88 -0
- gitpane-1.0.0/src/gitpane/commit/commit_push.py +276 -0
- gitpane-1.0.0/src/gitpane/commit/commit_write.py +830 -0
- gitpane-1.0.0/src/gitpane/config.py +1066 -0
- gitpane-1.0.0/src/gitpane/controller/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/controller/account_controller.py +677 -0
- gitpane-1.0.0/src/gitpane/controller/clone_controller.py +776 -0
- gitpane-1.0.0/src/gitpane/controller/close_readiness.py +212 -0
- gitpane-1.0.0/src/gitpane/controller/commit_timing_controller.py +566 -0
- gitpane-1.0.0/src/gitpane/controller/conflict_controller.py +885 -0
- gitpane-1.0.0/src/gitpane/controller/console_registry.py +38 -0
- gitpane-1.0.0/src/gitpane/controller/emoji_window_controller.py +95 -0
- gitpane-1.0.0/src/gitpane/controller/file_action_controller.py +479 -0
- gitpane-1.0.0/src/gitpane/controller/history_read_controller.py +671 -0
- gitpane-1.0.0/src/gitpane/controller/history_rewrite_controller.py +739 -0
- gitpane-1.0.0/src/gitpane/controller/navigation_controller.py +658 -0
- gitpane-1.0.0/src/gitpane/controller/opening_controller.py +375 -0
- gitpane-1.0.0/src/gitpane/controller/operation_policy.py +76 -0
- gitpane-1.0.0/src/gitpane/controller/rebase_controller.py +797 -0
- gitpane-1.0.0/src/gitpane/controller/rebase_editor_controller.py +309 -0
- gitpane-1.0.0/src/gitpane/controller/reference_form_controller.py +1677 -0
- gitpane-1.0.0/src/gitpane/controller/reference_read_controller.py +242 -0
- gitpane-1.0.0/src/gitpane/controller/refresh_controller.py +477 -0
- gitpane-1.0.0/src/gitpane/controller/replay_controller.py +805 -0
- gitpane-1.0.0/src/gitpane/controller/session_registry.py +337 -0
- gitpane-1.0.0/src/gitpane/controller/setting_controller.py +592 -0
- gitpane-1.0.0/src/gitpane/controller/shutdown_controller.py +345 -0
- gitpane-1.0.0/src/gitpane/controller/staging_controller.py +199 -0
- gitpane-1.0.0/src/gitpane/controller/staging_session_registry.py +47 -0
- gitpane-1.0.0/src/gitpane/controller/stash_controller.py +367 -0
- gitpane-1.0.0/src/gitpane/controller/transport_controller.py +813 -0
- gitpane-1.0.0/src/gitpane/controller/welcome_controller.py +102 -0
- gitpane-1.0.0/src/gitpane/controller/window_activation.py +116 -0
- gitpane-1.0.0/src/gitpane/controller/worktree_state_controller.py +169 -0
- gitpane-1.0.0/src/gitpane/emoji/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/emoji/emoji_catalogue.py +156 -0
- gitpane-1.0.0/src/gitpane/git_config/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/git_config/git_setting.py +441 -0
- gitpane-1.0.0/src/gitpane/history/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/history/avatar.py +241 -0
- gitpane-1.0.0/src/gitpane/history/file_history.py +359 -0
- gitpane-1.0.0/src/gitpane/history/graph.py +145 -0
- gitpane-1.0.0/src/gitpane/history/history_filter.py +31 -0
- gitpane-1.0.0/src/gitpane/history/history_parse.py +605 -0
- gitpane-1.0.0/src/gitpane/history/repository.py +1600 -0
- gitpane-1.0.0/src/gitpane/history/repository_value.py +341 -0
- gitpane-1.0.0/src/gitpane/history/revision.py +180 -0
- gitpane-1.0.0/src/gitpane/history/revision_file.py +182 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/graph.py +210 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/guard.py +288 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/index.py +125 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/prepare.py +378 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/protocol.py +320 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/publish.py +444 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/recovery.py +481 -0
- gitpane-1.0.0/src/gitpane/history_rewrite/value.py +229 -0
- gitpane-1.0.0/src/gitpane/operation/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/operation/console_line.py +313 -0
- gitpane-1.0.0/src/gitpane/operation/console_tone.py +76 -0
- gitpane-1.0.0/src/gitpane/operation/diagnostic.py +954 -0
- gitpane-1.0.0/src/gitpane/operation/launch_signature.py +254 -0
- gitpane-1.0.0/src/gitpane/operation/operation_status.py +87 -0
- gitpane-1.0.0/src/gitpane/operation/operation_trace.py +766 -0
- gitpane-1.0.0/src/gitpane/operation/repository_operation.py +781 -0
- gitpane-1.0.0/src/gitpane/preference/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/preference/preference_location.py +40 -0
- gitpane-1.0.0/src/gitpane/preference/preference_store.py +590 -0
- gitpane-1.0.0/src/gitpane/process/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/process/exact_arguments.py +77 -0
- gitpane-1.0.0/src/gitpane/process/git_output_text.py +20 -0
- gitpane-1.0.0/src/gitpane/process/process_group.py +851 -0
- gitpane-1.0.0/src/gitpane/process/process_log.py +114 -0
- gitpane-1.0.0/src/gitpane/process/process_runner.py +1033 -0
- gitpane-1.0.0/src/gitpane/process/released_child_watch.py +138 -0
- gitpane-1.0.0/src/gitpane/recent/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/recent/mount_table.py +422 -0
- gitpane-1.0.0/src/gitpane/recent/recent_availability.py +414 -0
- gitpane-1.0.0/src/gitpane/recent/recent_name.py +11 -0
- gitpane-1.0.0/src/gitpane/recent/recent_search.py +114 -0
- gitpane-1.0.0/src/gitpane/reference/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/reference/reference_edit.py +2030 -0
- gitpane-1.0.0/src/gitpane/reference/reference_snapshot.py +196 -0
- gitpane-1.0.0/src/gitpane/reference/stash.py +730 -0
- gitpane-1.0.0/src/gitpane/reference/stash_list.py +164 -0
- gitpane-1.0.0/src/gitpane/sequencer/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/sequencer/commit_message_rule.py +154 -0
- gitpane-1.0.0/src/gitpane/sequencer/conflict.py +506 -0
- gitpane-1.0.0/src/gitpane/sequencer/merge_recovery.py +163 -0
- gitpane-1.0.0/src/gitpane/sequencer/merge_state.py +166 -0
- gitpane-1.0.0/src/gitpane/sequencer/mergetool.py +856 -0
- gitpane-1.0.0/src/gitpane/sequencer/rebase.py +750 -0
- gitpane-1.0.0/src/gitpane/sequencer/rebase_edit_file.py +224 -0
- gitpane-1.0.0/src/gitpane/sequencer/rebase_state.py +523 -0
- gitpane-1.0.0/src/gitpane/sequencer/replay.py +1435 -0
- gitpane-1.0.0/src/gitpane/sequencer/replay_legacy.py +253 -0
- gitpane-1.0.0/src/gitpane/sequencer/replay_state.py +747 -0
- gitpane-1.0.0/src/gitpane/submodule/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/submodule/checkout_refusal.py +102 -0
- gitpane-1.0.0/src/gitpane/submodule/checkout_refusal_notice.py +111 -0
- gitpane-1.0.0/src/gitpane/submodule/cloned_without_checkout.py +65 -0
- gitpane-1.0.0/src/gitpane/submodule/submodule_discovery.py +1180 -0
- gitpane-1.0.0/src/gitpane/submodule/submodule_loss.py +218 -0
- gitpane-1.0.0/src/gitpane/system/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/system/appearance_portal.py +125 -0
- gitpane-1.0.0/src/gitpane/system/application_identity.py +48 -0
- gitpane-1.0.0/src/gitpane/system/command_line.py +36 -0
- gitpane-1.0.0/src/gitpane/system/desktop_icon_fact.py +128 -0
- gitpane-1.0.0/src/gitpane/system/desktop_icon_support.py +270 -0
- gitpane-1.0.0/src/gitpane/system/desktop_shortcut.py +536 -0
- gitpane-1.0.0/src/gitpane/system/icns_image.py +35 -0
- gitpane-1.0.0/src/gitpane/system/installed_launcher.py +136 -0
- gitpane-1.0.0/src/gitpane/system/linux_distribution.py +151 -0
- gitpane-1.0.0/src/gitpane/system/network_folder.py +46 -0
- gitpane-1.0.0/src/gitpane/system/path_identity.py +95 -0
- gitpane-1.0.0/src/gitpane/system/private_tree_removal.py +47 -0
- gitpane-1.0.0/src/gitpane/system/process_program.py +63 -0
- gitpane-1.0.0/src/gitpane/system/qt_folder.py +38 -0
- gitpane-1.0.0/src/gitpane/system/ready_channel_watch.py +67 -0
- gitpane-1.0.0/src/gitpane/system/startup_activation.py +65 -0
- gitpane-1.0.0/src/gitpane/system/terminal_detach.py +384 -0
- gitpane-1.0.0/src/gitpane/system/xdg_session.py +85 -0
- gitpane-1.0.0/src/gitpane/text/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/text/text_query.py +97 -0
- gitpane-1.0.0/src/gitpane/text/typed_path.py +75 -0
- gitpane-1.0.0/src/gitpane/text/typed_text.py +17 -0
- gitpane-1.0.0/src/gitpane/thread/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/thread/weak_signal.py +93 -0
- gitpane-1.0.0/src/gitpane/tool/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/tool/app_bundle.py +164 -0
- gitpane-1.0.0/src/gitpane/tool/desktop_text_editor.py +156 -0
- gitpane-1.0.0/src/gitpane/tool/difftool.py +429 -0
- gitpane-1.0.0/src/gitpane/tool/editor.py +445 -0
- gitpane-1.0.0/src/gitpane/tool/editor_bridge.py +193 -0
- gitpane-1.0.0/src/gitpane/tool/editor_recipe.py +481 -0
- gitpane-1.0.0/src/gitpane/tool/file_reveal.py +94 -0
- gitpane-1.0.0/src/gitpane/tool/git_executable.py +264 -0
- gitpane-1.0.0/src/gitpane/tool/git_version.py +62 -0
- gitpane-1.0.0/src/gitpane/tool/kdiff3.py +41 -0
- gitpane-1.0.0/src/gitpane/tool/kdiff3_install.py +162 -0
- gitpane-1.0.0/src/gitpane/tool/launch_services_text_editor.py +104 -0
- gitpane-1.0.0/src/gitpane/tool/mergetool_recipe.py +84 -0
- gitpane-1.0.0/src/gitpane/tool/system_editor_default.py +80 -0
- gitpane-1.0.0/src/gitpane/tool/system_text_editor.py +44 -0
- gitpane-1.0.0/src/gitpane/tool/system_tool.py +816 -0
- gitpane-1.0.0/src/gitpane/tool/terminal_recipe.py +390 -0
- gitpane-1.0.0/src/gitpane/transport/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/transport/branch_exchange.py +1690 -0
- gitpane-1.0.0/src/gitpane/transport/clone.py +1273 -0
- gitpane-1.0.0/src/gitpane/transport/credential_read_retry.py +35 -0
- gitpane-1.0.0/src/gitpane/transport/git_refusal.py +207 -0
- gitpane-1.0.0/src/gitpane/transport/push_tracking.py +121 -0
- gitpane-1.0.0/src/gitpane/transport/refusal_notice.py +225 -0
- gitpane-1.0.0/src/gitpane/transport/remote.py +747 -0
- gitpane-1.0.0/src/gitpane/transport/remote_config.py +544 -0
- gitpane-1.0.0/src/gitpane/ui/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/console/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/console/error_dialog.py +332 -0
- gitpane-1.0.0/src/gitpane/ui/console/operation_dialog.py +408 -0
- gitpane-1.0.0/src/gitpane/ui/console/operation_output.py +91 -0
- gitpane-1.0.0/src/gitpane/ui/console/operation_output_view.py +373 -0
- gitpane-1.0.0/src/gitpane/ui/emoji/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/emoji/emoji_font.py +257 -0
- gitpane-1.0.0/src/gitpane/ui/emoji/emoji_grid.py +125 -0
- gitpane-1.0.0/src/gitpane/ui/emoji/emoji_window.py +154 -0
- gitpane-1.0.0/src/gitpane/ui/emoji/file_action_icon.py +131 -0
- gitpane-1.0.0/src/gitpane/ui/emoji/opentype_family_name.py +182 -0
- gitpane-1.0.0/src/gitpane/ui/history_rewrite/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/history_rewrite/details.py +78 -0
- gitpane-1.0.0/src/gitpane/ui/history_rewrite/preview.py +565 -0
- gitpane-1.0.0/src/gitpane/ui/history_rewrite/preview_model.py +291 -0
- gitpane-1.0.0/src/gitpane/ui/history_rewrite/question.py +87 -0
- gitpane-1.0.0/src/gitpane/ui/history_rewrite/recovery_dialog.py +262 -0
- gitpane-1.0.0/src/gitpane/ui/look/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/look/action_icon.py +504 -0
- gitpane-1.0.0/src/gitpane/ui/look/application_icon.py +78 -0
- gitpane-1.0.0/src/gitpane/ui/look/application_style.py +317 -0
- gitpane-1.0.0/src/gitpane/ui/look/avatar_label.py +53 -0
- gitpane-1.0.0/src/gitpane/ui/look/color_contrast.py +43 -0
- gitpane-1.0.0/src/gitpane/ui/look/desktop_appearance_follower.py +118 -0
- gitpane-1.0.0/src/gitpane/ui/look/fixed_font.py +21 -0
- gitpane-1.0.0/src/gitpane/ui/look/gtk_settings.py +116 -0
- gitpane-1.0.0/src/gitpane/ui/look/icon_density.py +16 -0
- gitpane-1.0.0/src/gitpane/ui/look/reference_font.py +19 -0
- gitpane-1.0.0/src/gitpane/ui/look/theme_color.py +63 -0
- gitpane-1.0.0/src/gitpane/ui/look/theme_look.py +95 -0
- gitpane-1.0.0/src/gitpane/ui/look/theme_palette.py +173 -0
- gitpane-1.0.0/src/gitpane/ui/look/warning_icon.py +86 -0
- gitpane-1.0.0/src/gitpane/ui/look/windows_control_look.py +250 -0
- gitpane-1.0.0/src/gitpane/ui/reader/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/reader/commit_message.py +129 -0
- gitpane-1.0.0/src/gitpane/ui/reader/commit_panel.py +378 -0
- gitpane-1.0.0/src/gitpane/ui/reader/diff_panel.py +626 -0
- gitpane-1.0.0/src/gitpane/ui/reader/file_action.py +138 -0
- gitpane-1.0.0/src/gitpane/ui/reader/file_tree_panel.py +235 -0
- gitpane-1.0.0/src/gitpane/ui/reader/reader_toolbar.py +56 -0
- gitpane-1.0.0/src/gitpane/ui/reader/revision_tree.py +80 -0
- gitpane-1.0.0/src/gitpane/ui/reader/search_result.py +165 -0
- gitpane-1.0.0/src/gitpane/ui/reader/source_text.py +134 -0
- gitpane-1.0.0/src/gitpane/ui/reader/source_view.py +151 -0
- gitpane-1.0.0/src/gitpane/ui/reader/syntax_span.py +67 -0
- gitpane-1.0.0/src/gitpane/ui/reference/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/reference/branch_selector.py +106 -0
- gitpane-1.0.0/src/gitpane/ui/reference/checkout_dialog.py +419 -0
- gitpane-1.0.0/src/gitpane/ui/reference/checkout_revision_dialog.py +182 -0
- gitpane-1.0.0/src/gitpane/ui/reference/commit_summary.py +339 -0
- gitpane-1.0.0/src/gitpane/ui/reference/create_branch_dialog.py +346 -0
- gitpane-1.0.0/src/gitpane/ui/reference/create_tag_dialog.py +283 -0
- gitpane-1.0.0/src/gitpane/ui/reference/delete_local_branch_dialog.py +323 -0
- gitpane-1.0.0/src/gitpane/ui/reference/delete_tag_dialog.py +394 -0
- gitpane-1.0.0/src/gitpane/ui/reference/form_opening.py +53 -0
- gitpane-1.0.0/src/gitpane/ui/reference/reference_dialog.py +417 -0
- gitpane-1.0.0/src/gitpane/ui/reference/reference_feedback.py +62 -0
- gitpane-1.0.0/src/gitpane/ui/reference/reference_form.py +139 -0
- gitpane-1.0.0/src/gitpane/ui/reference/rename_branch_dialog.py +179 -0
- gitpane-1.0.0/src/gitpane/ui/reference/reset_branch_dialog.py +430 -0
- gitpane-1.0.0/src/gitpane/ui/reference/reset_dialog.py +263 -0
- gitpane-1.0.0/src/gitpane/ui/reference/revision_dialog.py +121 -0
- gitpane-1.0.0/src/gitpane/ui/reference/revision_picker.py +227 -0
- gitpane-1.0.0/src/gitpane/ui/reference/select_branches_dialog.py +199 -0
- gitpane-1.0.0/src/gitpane/ui/reference/stash_dialog.py +171 -0
- gitpane-1.0.0/src/gitpane/ui/repository/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/repository/graph_delegate.py +298 -0
- gitpane-1.0.0/src/gitpane/ui/repository/history_avatar.py +130 -0
- gitpane-1.0.0/src/gitpane/ui/repository/history_model.py +179 -0
- gitpane-1.0.0/src/gitpane/ui/repository/repository_list_popup.py +319 -0
- gitpane-1.0.0/src/gitpane/ui/repository/repository_window.py +2580 -0
- gitpane-1.0.0/src/gitpane/ui/resource/ArrowDown.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/ArrowUp.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/BranchCheckout.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/BranchCreate.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/BranchDelete.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/CopyToClipboard.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/GitPane-16.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/GitPane-24.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/GitPane-256.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/GitPane-32.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/GitPane-48.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/GitPane-64.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/GitPane.ico +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/NotoColorEmoji-OFL.txt +92 -0
- gitpane-1.0.0/src/gitpane/ui/resource/NotoColorEmoji_WindowsCompatible.ttf +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/Renamed.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/ResetAnotherBranchToHere.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/ResetCurrentBranchToHere.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/Stash.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/Tag.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/TagCreate.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/TagDelete.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/Unmerged.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/resource/checkout.png +0 -0
- gitpane-1.0.0/src/gitpane/ui/sequencer/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/sequencer/conflict_dialog.py +532 -0
- gitpane-1.0.0/src/gitpane/ui/sequencer/merge_recovery_dialog.py +67 -0
- gitpane-1.0.0/src/gitpane/ui/sequencer/rebase_dialog.py +461 -0
- gitpane-1.0.0/src/gitpane/ui/sequencer/rebase_editor_window.py +220 -0
- gitpane-1.0.0/src/gitpane/ui/sequencer/replay_conflict_prompt.py +105 -0
- gitpane-1.0.0/src/gitpane/ui/sequencer/replay_dialog.py +501 -0
- gitpane-1.0.0/src/gitpane/ui/setting/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/setting/account_page.py +724 -0
- gitpane-1.0.0/src/gitpane/ui/setting/add_account_dialog.py +1005 -0
- gitpane-1.0.0/src/gitpane/ui/setting/credential_manager_dialog.py +151 -0
- gitpane-1.0.0/src/gitpane/ui/setting/git_setting_widget.py +388 -0
- gitpane-1.0.0/src/gitpane/ui/setting/setting_block.py +19 -0
- gitpane-1.0.0/src/gitpane/ui/setting/setting_dialog.py +750 -0
- gitpane-1.0.0/src/gitpane/ui/setting/ssh_widget.py +232 -0
- gitpane-1.0.0/src/gitpane/ui/setting/utility_page.py +240 -0
- gitpane-1.0.0/src/gitpane/ui/staging/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/staging/staging_action.py +356 -0
- gitpane-1.0.0/src/gitpane/ui/staging/staging_window.py +745 -0
- gitpane-1.0.0/src/gitpane/ui/transport/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/transport/clone_dialog.py +879 -0
- gitpane-1.0.0/src/gitpane/ui/transport/push_dialog.py +580 -0
- gitpane-1.0.0/src/gitpane/ui/transport/push_rejection_prompt.py +100 -0
- gitpane-1.0.0/src/gitpane/ui/transport/push_tracking_question.py +88 -0
- gitpane-1.0.0/src/gitpane/ui/transport/remote_dialog.py +943 -0
- gitpane-1.0.0/src/gitpane/ui/welcome/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/welcome/invalid_repository_prompt.py +114 -0
- gitpane-1.0.0/src/gitpane/ui/welcome/welcome_window.py +1137 -0
- gitpane-1.0.0/src/gitpane/ui/widget/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/widget/busy_indicator.py +106 -0
- gitpane-1.0.0/src/gitpane/ui/widget/commit_date_text.py +55 -0
- gitpane-1.0.0/src/gitpane/ui/widget/content_growth.py +262 -0
- gitpane-1.0.0/src/gitpane/ui/widget/content_measure.py +99 -0
- gitpane-1.0.0/src/gitpane/ui/widget/dialog_layout.py +668 -0
- gitpane-1.0.0/src/gitpane/ui/widget/drop_down_wheel_filter.py +32 -0
- gitpane-1.0.0/src/gitpane/ui/widget/flow_layout.py +110 -0
- gitpane-1.0.0/src/gitpane/ui/widget/long_text.py +542 -0
- gitpane-1.0.0/src/gitpane/ui/widget/mnemonic.py +13 -0
- gitpane-1.0.0/src/gitpane/ui/widget/numbered_text_edit.py +127 -0
- gitpane-1.0.0/src/gitpane/ui/widget/plain_label.py +15 -0
- gitpane-1.0.0/src/gitpane/ui/widget/plain_tooltip.py +19 -0
- gitpane-1.0.0/src/gitpane/ui/widget/refresh_advice.py +25 -0
- gitpane-1.0.0/src/gitpane/ui/widget/result_label.py +227 -0
- gitpane-1.0.0/src/gitpane/ui/widget/result_status_bar.py +53 -0
- gitpane-1.0.0/src/gitpane/ui/widget/scrolled_text.py +69 -0
- gitpane-1.0.0/src/gitpane/ui/widget/shortcut_text.py +31 -0
- gitpane-1.0.0/src/gitpane/ui/widget/standard_icon_label.py +55 -0
- gitpane-1.0.0/src/gitpane/ui/widget/system_shortcut.py +75 -0
- gitpane-1.0.0/src/gitpane/ui/widget/unavailable_reason.py +29 -0
- gitpane-1.0.0/src/gitpane/ui/widget/wheel_safe_drop_down.py +24 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/button_focus.py +42 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/compositor_answer.py +152 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/compositor_growth_cap.py +73 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/desktop_activation.py +203 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/dialog_modality.py +122 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/item_activation.py +42 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/modal_focus_relay.py +124 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/wayland_activation.py +695 -0
- gitpane-1.0.0/src/gitpane/ui/window_control/window_placement.py +305 -0
- gitpane-1.0.0/src/gitpane/vendor/DISTLIB-LICENSE.txt +284 -0
- gitpane-1.0.0/src/gitpane/vendor/w32.exe +0 -0
- gitpane-1.0.0/src/gitpane/vendor/w64-arm.exe +0 -0
- gitpane-1.0.0/src/gitpane/vendor/w64.exe +0 -0
- gitpane-1.0.0/src/gitpane/worktree/__init__.py +0 -0
- gitpane-1.0.0/src/gitpane/worktree/command_sequence.py +110 -0
- gitpane-1.0.0/src/gitpane/worktree/file_action_target.py +61 -0
- gitpane-1.0.0/src/gitpane/worktree/file_menu_action.py +52 -0
- gitpane-1.0.0/src/gitpane/worktree/historical_restore.py +361 -0
- gitpane-1.0.0/src/gitpane/worktree/ignore_rule.py +266 -0
- gitpane-1.0.0/src/gitpane/worktree/mutation.py +1539 -0
- gitpane-1.0.0/src/gitpane/worktree/partial_patch.py +435 -0
- gitpane-1.0.0/src/gitpane/worktree/staged_reset.py +447 -0
- gitpane-1.0.0/src/gitpane/worktree/staging.py +1418 -0
- gitpane-1.0.0/src/gitpane/worktree/trash.py +302 -0
- gitpane-1.0.0/src/gitpane/worktree/worktree_file.py +406 -0
- gitpane-1.0.0/src/gitpane/worktree/worktree_service.py +584 -0
- gitpane-1.0.0/src/gitpane/worktree/worktree_snapshot.py +630 -0
- gitpane-1.0.0/src/gitpane.egg-info/PKG-INFO +141 -0
- gitpane-1.0.0/src/gitpane.egg-info/SOURCES.txt +355 -0
- gitpane-1.0.0/src/gitpane.egg-info/dependency_links.txt +1 -0
- gitpane-1.0.0/src/gitpane.egg-info/entry_points.txt +2 -0
- gitpane-1.0.0/src/gitpane.egg-info/requires.txt +23 -0
- gitpane-1.0.0/src/gitpane.egg-info/top_level.txt +1 -0
gitpane-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Thongvan Alexis
|
|
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.
|
gitpane-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gitpane
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Lightweight desktop Git client for Windows, Linux and macOS, in the spirit of Git Extensions
|
|
5
|
+
Author: Thongvan Alexis
|
|
6
|
+
License-Expression: MIT AND OFL-1.1 AND PSF-2.0
|
|
7
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
8
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
9
|
+
Classifier: Environment :: MacOS X
|
|
10
|
+
Classifier: Environment :: Win32 (MS Windows)
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Natural Language :: English
|
|
13
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
14
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
20
|
+
Requires-Python: <3.15,>=3.13
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
License-File: THIRD_PARTY_NOTICES.md
|
|
24
|
+
License-File: src/gitpane/ui/resource/NotoColorEmoji-OFL.txt
|
|
25
|
+
License-File: src/gitpane/vendor/DISTLIB-LICENSE.txt
|
|
26
|
+
Requires-Dist: PySide6-Essentials<6.12,>=6.11.2
|
|
27
|
+
Requires-Dist: Pygments<3,>=2.21
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: PySide6-Essentials==6.11.2; extra == "dev"
|
|
30
|
+
Requires-Dist: shiboken6==6.11.2; extra == "dev"
|
|
31
|
+
Requires-Dist: Pygments==2.21.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pip==26.2.1; extra == "dev"
|
|
33
|
+
Requires-Dist: setuptools==84.0.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest==9.1.1; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-qt==4.5.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-xdist==3.8.0; extra == "dev"
|
|
37
|
+
Requires-Dist: execnet==2.1.2; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff==0.16.6; extra == "dev"
|
|
39
|
+
Requires-Dist: colorama==0.4.6; sys_platform == "win32" and extra == "dev"
|
|
40
|
+
Requires-Dist: iniconfig==2.3.0; extra == "dev"
|
|
41
|
+
Requires-Dist: packaging==26.3; extra == "dev"
|
|
42
|
+
Requires-Dist: pluggy==1.6.0; extra == "dev"
|
|
43
|
+
Requires-Dist: typing_extensions==4.16.0; extra == "dev"
|
|
44
|
+
Requires-Dist: build==1.6.1; extra == "dev"
|
|
45
|
+
Requires-Dist: pyproject_hooks==1.3.3; extra == "dev"
|
|
46
|
+
Dynamic: license-file
|
|
47
|
+
|
|
48
|
+
# GitPane
|
|
49
|
+
|
|
50
|
+
GitPane is a Git Extensions clone that runs on Windows, macOS and most Linux distributions. I only reimplemented the features I have used every day for the past 16 years.
|
|
51
|
+
|
|
52
|
+
GitPane needs Git and Python 3.13 or 3.14 (Python 3.15 is not supported yet).
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
Install GitPane with pipx: it creates a private environment for GitPane and puts the `gitpane` command on your PATH. On Linux and macOS, the system Python does not accept new packages, so pipx is the simple way (regular pip into a venv of your own also works).
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
### macOS
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
brew install python@3.13 pipx
|
|
63
|
+
pipx ensurepath
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
In a **new** terminal:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pipx install --python python3.13 gitpane
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Run `gitpane` in any terminal, then click **Settings › Utilities › Create desktop shortcut** to get a launcher on your desktop.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
### Linux
|
|
76
|
+
|
|
77
|
+
Fedora:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
sudo dnf install pipx
|
|
81
|
+
pipx ensurepath
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Ubuntu and Debian:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
sudo apt update
|
|
88
|
+
sudo apt install pipx libxcb-cursor0 # required for X11 versions of linux
|
|
89
|
+
pipx ensurepath
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
In a **new** terminal:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pipx install gitpane
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Run `gitpane` in any terminal, then click **Settings › Utilities › Create desktop shortcut** to get a launcher on your desktop.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
### Windows
|
|
102
|
+
|
|
103
|
+
Install Python 3.14 from [python.org](https://www.python.org/downloads/windows/), then in PowerShell or Command Prompt:
|
|
104
|
+
|
|
105
|
+
```powershell
|
|
106
|
+
python -m pip install --user pipx
|
|
107
|
+
python -m pipx ensurepath
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
pip may warn that `pipx.exe` is not on PATH: `ensurepath` has just fixed that.
|
|
111
|
+
|
|
112
|
+
In a **new** terminal:
|
|
113
|
+
|
|
114
|
+
```powershell
|
|
115
|
+
pipx install gitpane
|
|
116
|
+
```
|
|
117
|
+
Run `gitpane` in any terminal, then click **Settings › Utilities › Create desktop shortcut** to get a launcher on your desktop.
|
|
118
|
+
|
|
119
|
+
## Update
|
|
120
|
+
|
|
121
|
+
Close GitPane, then:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
pipx upgrade gitpane
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
## Command line
|
|
129
|
+
|
|
130
|
+
- `gitpane` starts GitPane and gives the terminal back. Closing the terminal does not close GitPane.
|
|
131
|
+
- `gitpane --attach` keeps GitPane attached to the terminal: its output and errors are shown there, and Ctrl+C stops it.
|
|
132
|
+
- `gitpane --log` writes a diagnostic log and shows its path.
|
|
133
|
+
- `gitpane --version` prints the version (Linux and macOS).
|
|
134
|
+
|
|
135
|
+
## When gitpane is not found
|
|
136
|
+
|
|
137
|
+
Run `pipx ensurepath` again (`python -m pipx ensurepath` on Windows), then open a **new** terminal: the PATH change only reaches terminals opened after it.
|
|
138
|
+
|
|
139
|
+
## License
|
|
140
|
+
|
|
141
|
+
GitPane is under the MIT license. It ships the Noto Color Emoji font under the SIL Open Font License 1.1 (OFL-1.1) and the Windows launchers of distlib under the Python Software Foundation License 2.0 (PSF-2.0).
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
## GitPane action drawings
|
|
4
|
+
|
|
5
|
+
The maintainer supplied thirteen redrawn PNGs on 2026-09-13 in commit `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`, replacing the previously imported images. Those files are preserved byte for byte. The provenance below records that maintainer declaration; it does not assign an additional image-specific license or make a legal assurance.
|
|
6
|
+
|
|
7
|
+
Stash and Resolve are original geometric drawings created for GitPane with the existing Qt drawing language. Their maintained source is [tools/draw_conflict_icon.py](tools/draw_conflict_icon.py), using the existing gold palette and green action color. They were neither copied nor traced from upstream artwork. Regenerate only those two files with `.venv/Scripts/python.exe tools/draw_conflict_icon.py`. Runtime resources are the local PNG files under `src/gitpane/ui/resource/`.
|
|
8
|
+
|
|
9
|
+
The "Choose another revision" button icon of the Cherry pick commit form (a list sheet with one highlighted row and a mouse pointer) is an original geometric drawing created for GitPane with the same Qt drawing language. It is painted at runtime by `_paint_revision_choice` in [src/gitpane/ui/look/action_icon.py](src/gitpane/ui/look/action_icon.py) and has no image file. It was neither copied nor traced from Git Extensions or any other upstream artwork.
|
|
10
|
+
|
|
11
|
+
The "Rebase current branch here interactively" entry of the history graph menu (a grey target branch with three commits, two blue commits beside it and a curved blue arrow bringing them down onto the target) is an original geometric drawing created for GitPane from the maintainer's own hand sketch, with the same Qt drawing language. It is painted at runtime by `_paint_rebase` in [src/gitpane/ui/look/action_icon.py](src/gitpane/ui/look/action_icon.py) and has no image file. It was neither copied nor traced from Git Extensions or any other upstream artwork.
|
|
12
|
+
|
|
13
|
+
The "Stash pop" toolbar icon (the Stash tray with its sheet raised out of it and a green arrow pointing up on the sheet) is an original geometric drawing created for GitPane, chosen by the maintainer on 2026-09-19 among four GitPane sketches. It reuses the tray geometry of GitPane's own Stash drawing and the existing gold and green palette. It is painted at runtime by `_paint_stash_pop` in [src/gitpane/ui/look/action_icon.py](src/gitpane/ui/look/action_icon.py) and has no image file. It was neither copied nor traced from Git Extensions or any other upstream artwork.
|
|
14
|
+
|
|
15
|
+
### ArrowDown.png
|
|
16
|
+
|
|
17
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
18
|
+
- **SHA-256:** `dec43df395521333c878595143d987187bb86351fb4debd4dbd67bda23fec423`.
|
|
19
|
+
|
|
20
|
+
### ArrowUp.png
|
|
21
|
+
|
|
22
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
23
|
+
- **SHA-256:** `58934c6cef434c249c08553d4c6cff36ffcbdb3c5fb553fd8e29e805fe0e29c2`.
|
|
24
|
+
|
|
25
|
+
### BranchCheckout.png
|
|
26
|
+
|
|
27
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
28
|
+
- **SHA-256:** `6331408167f5ef106d0a743c10c67ea98d3aa9abe1732e6a782c24d6dc3db9fb`.
|
|
29
|
+
|
|
30
|
+
### BranchCreate.png
|
|
31
|
+
|
|
32
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
33
|
+
- **SHA-256:** `e782a8bc0fcd78358ba4f75ae498f4b284b814315c82ea22cf8f881d043254d2`.
|
|
34
|
+
|
|
35
|
+
### BranchDelete.png
|
|
36
|
+
|
|
37
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
38
|
+
- **SHA-256:** `017fb620a4b964660e33eb410663304f9e193f0b3211a2cc010145524e67fbe9`.
|
|
39
|
+
|
|
40
|
+
### checkout.png
|
|
41
|
+
|
|
42
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
43
|
+
- **SHA-256:** `13838b8d23962c88d3013b257acbf7826bf37dc3c12615dfbb7e1aecd52e5e49`.
|
|
44
|
+
|
|
45
|
+
### CopyToClipboard.png
|
|
46
|
+
|
|
47
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
48
|
+
- **SHA-256:** `bdfe68b3e706135122914f4c4d46f0dcdaaf8688ea955f01b0d217bf01a23280`.
|
|
49
|
+
|
|
50
|
+
### Renamed.png
|
|
51
|
+
|
|
52
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
53
|
+
- **SHA-256:** `9236c87cacd29b3c67f7be979a54acd7e76f0530c34e85417a15b79461b79bec`.
|
|
54
|
+
|
|
55
|
+
### ResetAnotherBranchToHere.png
|
|
56
|
+
|
|
57
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
58
|
+
- **SHA-256:** `f1ec601281ebee395d576ec659f3e98ce01f5c36a9deb15c607ddc9ddc76c222`.
|
|
59
|
+
|
|
60
|
+
### ResetCurrentBranchToHere.png
|
|
61
|
+
|
|
62
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
63
|
+
- **SHA-256:** `7a39350f2ac63f4e91202f0064883ec1e85668b9faea8d9afc62318c03ae482e`.
|
|
64
|
+
|
|
65
|
+
### Stash.png
|
|
66
|
+
|
|
67
|
+
- **Source:** Original GitPane drawing; source: `tools/draw_conflict_icon.py`.
|
|
68
|
+
- **SHA-256:** `5af52be7748964ba97d24c072dae43e20f7b759a37fafac332effdc17decc83f`.
|
|
69
|
+
|
|
70
|
+
### Tag.png
|
|
71
|
+
|
|
72
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
73
|
+
- **SHA-256:** `3bdcc3b37825a0625f18e0981a5739bb3cacbb080822972a16bca31ab67a2a91`.
|
|
74
|
+
|
|
75
|
+
### TagCreate.png
|
|
76
|
+
|
|
77
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
78
|
+
- **SHA-256:** `f5e8722cfcf1142c22c6e0681ab8dc3548c041ec6bb228628a5cbc1a1d859e59`.
|
|
79
|
+
|
|
80
|
+
### TagDelete.png
|
|
81
|
+
|
|
82
|
+
- **Source:** Redrawn PNG supplied by the maintainer; source commit: `63b30122579ee3ba7fbedded70b4fc164b8a6ebd`.
|
|
83
|
+
- **SHA-256:** `2d3edb0b95432ac2c10d404973f35e7681db354fde99720e941544874068d7fc`.
|
|
84
|
+
|
|
85
|
+
### Unmerged.png
|
|
86
|
+
|
|
87
|
+
- **Source:** Original GitPane drawing; source: `tools/draw_conflict_icon.py`.
|
|
88
|
+
- **SHA-256:** `6d30f86d97d1e9b8188b4a5976cad90b8c0574d10b862356e2cff6fcea79c905`.
|
|
89
|
+
|
|
90
|
+
## distlib Windows launchers
|
|
91
|
+
|
|
92
|
+
GitPane bundles the unchanged windowless x86, x64 and ARM64 launchers from **distlib 0.4.2**, as distributed inside the project's pinned **pip 26.2.1**. These resource bytes let OpenSSH run a native askpass executable without a console or a runtime dependency on pip. GitPane appends its own isolated-Python entry script in a private temporary directory for each operation; the original resources remain unchanged.
|
|
93
|
+
|
|
94
|
+
Source: [pypa/distlib](https://github.com/pypa/distlib), `PC/launcher.c`; upstream tutorial: [script launchers](https://distlib.readthedocs.io/en/latest/tutorial.html#using-the-scripts-api). Copyright Vinay Sajip and contributors; distributed under the Python Software Foundation license. The complete upstream license is bundled at `src/gitpane/vendor/DISTLIB-LICENSE.txt` and included in wheel package data.
|
|
95
|
+
|
|
96
|
+
| Resource | SHA-256 |
|
|
97
|
+
|---|---|
|
|
98
|
+
| `vendor/w32.exe` | `47872cc77f8e18cf642f868f23340a468e537e64521d9a3a416c8b84384d064b` |
|
|
99
|
+
| `vendor/w64.exe` | `7a319ffaba23a017d7b1e18ba726ba6c54c53d6446db55f92af53c279894f8ad` |
|
|
100
|
+
| `vendor/w64-arm.exe` | `c5dc9884a8f458371550e09bd396e5418bf375820a31b9899f6499bf391c7b2e` |
|
|
101
|
+
|
|
102
|
+
## Noto Color Emoji
|
|
103
|
+
|
|
104
|
+
Noto Color Emoji 2.057 by Google, Windows-compatible build, is the colour font of the emoji keyboard grid and of the Commit message field. It is shipped complete, without any modification and under its upstream file name `NotoColorEmoji_WindowsCompatible.ttf`, in `src/gitpane/ui/resource/`. Symbols Noto does not have, such as the bold italic small i, the black rightwards arrowhead and the combining marks, are drawn by the system fonts; no other font is bundled.
|
|
105
|
+
|
|
106
|
+
- **Source:** https://raw.githubusercontent.com/googlefonts/noto-emoji/v2026-09-24-unicode18_0/2D/fonts/NotoColorEmoji_WindowsCompatible.ttf (10739048 bytes).
|
|
107
|
+
- **SHA-256:** `2c7ede2f5438f9c1da098778bd681535933a345334008bb03fc51119f6b1cd72`.
|
|
108
|
+
- **License:** SIL Open Font License 1.1. The shipped copy `src/gitpane/ui/resource/NotoColorEmoji-OFL.txt` is a byte for byte copy of https://raw.githubusercontent.com/googlefonts/noto-emoji/v2026-09-24-unicode18_0/2D/fonts/LICENSE, SHA-256 `6a73f9541c2de74158c0e7cf6b0a58ef774f5a780bf191f2d7ec9cc53efe2bf2`. The notice "Copyright 2022 Google Inc." stays inside the unmodified font.
|
|
109
|
+
- **Tool:** [tools/fetch_emoji_font.py](tools/fetch_emoji_font.py) downloads both files at the pinned tag and refuses any file whose SHA-256 differs. Run `.venv/Scripts/python.exe tools/fetch_emoji_font.py`; it downloads nothing when both files are already in place with the right hash.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# GitPane
|
|
2
|
+
|
|
3
|
+
GitPane is a Git Extensions clone that runs on Windows, macOS and most Linux distributions. I only reimplemented the features I have used every day for the past 16 years.
|
|
4
|
+
|
|
5
|
+
GitPane needs Git and Python 3.13 or 3.14 (Python 3.15 is not supported yet).
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
Install GitPane with pipx: it creates a private environment for GitPane and puts the `gitpane` command on your PATH. On Linux and macOS, the system Python does not accept new packages, so pipx is the simple way (regular pip into a venv of your own also works).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
### macOS
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
brew install python@3.13 pipx
|
|
16
|
+
pipx ensurepath
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
In a **new** terminal:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pipx install --python python3.13 gitpane
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Run `gitpane` in any terminal, then click **Settings › Utilities › Create desktop shortcut** to get a launcher on your desktop.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
### Linux
|
|
29
|
+
|
|
30
|
+
Fedora:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
sudo dnf install pipx
|
|
34
|
+
pipx ensurepath
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Ubuntu and Debian:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
sudo apt update
|
|
41
|
+
sudo apt install pipx libxcb-cursor0 # required for X11 versions of linux
|
|
42
|
+
pipx ensurepath
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
In a **new** terminal:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pipx install gitpane
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Run `gitpane` in any terminal, then click **Settings › Utilities › Create desktop shortcut** to get a launcher on your desktop.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
### Windows
|
|
55
|
+
|
|
56
|
+
Install Python 3.14 from [python.org](https://www.python.org/downloads/windows/), then in PowerShell or Command Prompt:
|
|
57
|
+
|
|
58
|
+
```powershell
|
|
59
|
+
python -m pip install --user pipx
|
|
60
|
+
python -m pipx ensurepath
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
pip may warn that `pipx.exe` is not on PATH: `ensurepath` has just fixed that.
|
|
64
|
+
|
|
65
|
+
In a **new** terminal:
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
pipx install gitpane
|
|
69
|
+
```
|
|
70
|
+
Run `gitpane` in any terminal, then click **Settings › Utilities › Create desktop shortcut** to get a launcher on your desktop.
|
|
71
|
+
|
|
72
|
+
## Update
|
|
73
|
+
|
|
74
|
+
Close GitPane, then:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pipx upgrade gitpane
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
## Command line
|
|
82
|
+
|
|
83
|
+
- `gitpane` starts GitPane and gives the terminal back. Closing the terminal does not close GitPane.
|
|
84
|
+
- `gitpane --attach` keeps GitPane attached to the terminal: its output and errors are shown there, and Ctrl+C stops it.
|
|
85
|
+
- `gitpane --log` writes a diagnostic log and shows its path.
|
|
86
|
+
- `gitpane --version` prints the version (Linux and macOS).
|
|
87
|
+
|
|
88
|
+
## When gitpane is not found
|
|
89
|
+
|
|
90
|
+
Run `pipx ensurepath` again (`python -m pipx ensurepath` on Windows), then open a **new** terminal: the PATH change only reaches terminals opened after it.
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
GitPane is under the MIT license. It ships the Noto Color Emoji font under the SIL Open Font License 1.1 (OFL-1.1) and the Windows launchers of distlib under the Python Software Foundation License 2.0 (PSF-2.0).
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools==84.0.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "gitpane"
|
|
7
|
+
dynamic = ["version"]
|
|
8
|
+
description = "Lightweight desktop Git client for Windows, Linux and macOS, in the spirit of Git Extensions"
|
|
9
|
+
readme = "docs/PYPI_README.md"
|
|
10
|
+
authors = [{name = "Thongvan Alexis"}]
|
|
11
|
+
license = "MIT AND OFL-1.1 AND PSF-2.0"
|
|
12
|
+
license-files = [
|
|
13
|
+
"LICENSE",
|
|
14
|
+
"THIRD_PARTY_NOTICES.md",
|
|
15
|
+
"src/gitpane/ui/resource/NotoColorEmoji-OFL.txt",
|
|
16
|
+
"src/gitpane/vendor/DISTLIB-LICENSE.txt",
|
|
17
|
+
]
|
|
18
|
+
classifiers = [
|
|
19
|
+
"Development Status :: 5 - Production/Stable",
|
|
20
|
+
"Environment :: X11 Applications :: Qt",
|
|
21
|
+
"Environment :: MacOS X",
|
|
22
|
+
"Environment :: Win32 (MS Windows)",
|
|
23
|
+
"Intended Audience :: Developers",
|
|
24
|
+
"Natural Language :: English",
|
|
25
|
+
"Operating System :: Microsoft :: Windows :: Windows 10",
|
|
26
|
+
"Operating System :: POSIX :: Linux",
|
|
27
|
+
"Operating System :: MacOS",
|
|
28
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
29
|
+
"Programming Language :: Python :: 3.13",
|
|
30
|
+
"Programming Language :: Python :: 3.14",
|
|
31
|
+
"Topic :: Software Development :: Version Control :: Git",
|
|
32
|
+
]
|
|
33
|
+
# The upper bound follows the one PySide6-Essentials declares; a test keeps both equal.
|
|
34
|
+
requires-python = ">=3.13,<3.15"
|
|
35
|
+
# Narrow ranges rather than exact pins, so pip and pipx can install GitPane next to other packages;
|
|
36
|
+
# the dev extra below pins the exact versions the tests run with. shiboken6 comes with PySide6-Essentials.
|
|
37
|
+
dependencies = ["PySide6-Essentials>=6.11.2,<6.12", "Pygments>=2.21,<3"]
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
dev = [
|
|
41
|
+
"PySide6-Essentials==6.11.2",
|
|
42
|
+
"shiboken6==6.11.2",
|
|
43
|
+
"Pygments==2.21.0",
|
|
44
|
+
"pip==26.2.1",
|
|
45
|
+
"setuptools==84.0.0",
|
|
46
|
+
"pytest==9.1.1",
|
|
47
|
+
"pytest-qt==4.5.0",
|
|
48
|
+
"pytest-xdist==3.8.0",
|
|
49
|
+
"execnet==2.1.2",
|
|
50
|
+
"ruff==0.16.6",
|
|
51
|
+
"colorama==0.4.6; sys_platform == 'win32'",
|
|
52
|
+
"iniconfig==2.3.0",
|
|
53
|
+
"packaging==26.3",
|
|
54
|
+
"pluggy==1.6.0",
|
|
55
|
+
"typing_extensions==4.16.0",
|
|
56
|
+
"build==1.6.1",
|
|
57
|
+
"pyproject_hooks==1.3.3",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[project.gui-scripts]
|
|
61
|
+
gitpane = "gitpane.application:main"
|
|
62
|
+
|
|
63
|
+
[tool.setuptools.dynamic]
|
|
64
|
+
# setuptools reads this literal from the text of config.py without running the module.
|
|
65
|
+
version = {attr = "gitpane.config.APPLICATION_VERSION"}
|
|
66
|
+
|
|
67
|
+
[tool.setuptools.packages.find]
|
|
68
|
+
where = ["src"]
|
|
69
|
+
include = ["gitpane*"]
|
|
70
|
+
namespaces = true
|
|
71
|
+
|
|
72
|
+
[tool.setuptools.package-data]
|
|
73
|
+
gitpane = ["vendor/*.exe", "vendor/*.txt"]
|
|
74
|
+
"gitpane.ui" = ["resource/*.png", "resource/*.ico", "resource/*.ttf", "resource/*.txt"]
|
|
75
|
+
|
|
76
|
+
[tool.pytest.ini_options]
|
|
77
|
+
qt_api = "pyside6"
|
|
78
|
+
testpaths = ["tests"]
|
|
79
|
+
strict_markers = true
|
|
80
|
+
# A full headless batch leaves about 430 000 files in the system temporary folder, a tmpfs limited in inodes on Ubuntu.
|
|
81
|
+
# Keeping only the folders of failed tests leaves room for the next batch and still keeps what explains a failure.
|
|
82
|
+
tmp_path_retention_policy = "failed"
|
|
83
|
+
# Warnings the offscreen plugin prints for window system requests it has no window system to pass on to; they say
|
|
84
|
+
# nothing about the application, so they never fail a test that fails on Qt warnings.
|
|
85
|
+
qt_log_ignore = [
|
|
86
|
+
'^This plugin does not support propagateSizeHints\(\)$',
|
|
87
|
+
'^This plugin does not support raise\(\)$',
|
|
88
|
+
'^This plugin does not support grabbing the keyboard$',
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
[tool.ruff]
|
|
92
|
+
line-length = 250
|
|
93
|
+
target-version = "py313"
|
gitpane-1.0.0/setup.cfg
ADDED
|
File without changes
|
|
File without changes
|