Giter VIP home page Giter VIP logo

gitonic's Introduction

PEP-08

you are reading VERSION = v0.0.14-develop

gitonic

gitonic simplifies working with multiple git repositories.

gitonic comes with an easy to use Tkinter GUI.

background

where software components/ artefacts are stored in multiple repositories separately gitonic helps to keep track

what's new ?

Check CHANGELOG for latest ongoing, or upcoming news.

limitations

Check BACKLOG for open development tasks and limitations.

IMPORTANT:

gitonic interacts with git just like starting in bash / commandline. at the present time there is no additional error checking. this must be done by checking the log tab manually where all cmdline output goes.

recommended readings prior using gitonic

an introduction on how git works in general can be found in the official git documentation in section Git-Basics.

another very good book progit2 can be downloaded from the official github project page. under releases are different formats such as pdf, epub ...

how to use

todo - documentation pending

working with mutiple git repositories

when adding a git repo to the tracked list, and staging files (from different repositories) a following commit command is executed on all repositories in the tracked list with the same commit message. this is not a bug; moreover it is intened to be like that.

hotkeys

following list contains all hotkeys:

key action
Esc minimize the app window
Esc Esc press quickly Esc twice to close the app
Control-p pull all tracked gits
Control-Shift-p fetch all tracked gits
F1 refresh all in changed files view
F2 select all in changed files view
F3 un-select all in changed files view
F5 select previous tab
F6 select next tab
Alt-a stage file(s) in git
Alt-q un-stage file(s) in git
Alt-w diff file(s)
Alt-d difftool file(s)
Alt-f auto format file(s) with black PEP08
Alt-c go to commit tab and clear commit message field(s)
Alt-x commit file(s)
Alt-s push git(s)
Alt-e commit and push git(s), like pressing Alt-x and Alt-s

HINT:

if not responding to a hotkey, make sure that CapsLock is disabled

file status staged / unstaged

the file status is the same as when calling git status --porcelain. see also under git status output.

status comment
M modified
A added
D deleted
R renamed
C copied
U updated but unmerged
?? not in git. untracked

NOTE: gitonic use porcelain format version 1.

file formatter

it is possible to configure external formatter tools depending on the file extension.

gitonic will use the configuration file ~/.gitonic/formatter.json.

the general structure is:

{
  ".file-ext": {
    "cmd": "full-path-to-command",
    "para": [
      "%file"
    ]
  }
}

where .file-ext is a simple file extension such as .py, or a comma separated list of extensions .c,.h,.cpp. wild-cards are not supported.

where para is an array of cmd-line options passed to the formatter command where %file is a placeholder and replaced by the file name

for different file extensions gitonic will call the formatter accordingly even if the selected files are of different types (extensions)

templates for python pep08 formatters

all of the following tools are part of gitonic standard installation (available as extra, see below under installation). choose the one what fits best for your needs.

autopep8

autopep8 is a python formatter what fixes problems reported by pycodestyle. pycodestyle is an official tool from python's code quality authority.

{
  ".py": {
    "cmd": "autopep8",
    "para": [
      "-i",
      "%file"
    ]
  }
}

to use the same code formatter also for cython's files with extension .pyx change the setting to

{
  ".py,.pyx": {
    "cmd": "autopep8",
    "para": [
      "-i",
      "%file"
    ]
  }
}

black

black is also an offical python tool, but resolves not fully to issues reported by pycodestyle. there might be some rework required (from case to case). result is quite similar to autopep8 beside the list reported by pycodestyle (after formatting) is a bit longer comparing to autopep8 what does a better job here.

{
  ".py": {
    "cmd": "black",
    "para": [
      "%file"
    ]
  }
}

yapf

yapf (google python code formmater) is slow comparing the former tools, and re-arranges code so that it is reported as error by pycodestyle after formatting.

{
  ".py": {
    "cmd": "yapf",
    "para": [
      "-i",
      "%file"
    ]
  }
}

templates for c, c++ formatters

all of the following tools are NOT part of gitonic standard installation.

uncrustify

uncrustify is a code formatter for c, c++ (and other languages).

here in this config sample it is configured for extensions .c, .h, and .cpp.

IMPORTANT: uncrustify requires an additional config file, a sample can be found here uncrustify.cfg

here in the sample the uncrustify config file is placed in path ~/.gitonic/uncrustify.cfg. make sure that it is there.

the following needs to be placed inside ~/.gitonic/formatter.json

".c,.h,.cpp": {
    "cmd": "uncrustify",
    "para": [
          "-c",
          "~/.gitonic/uncrustify.cfg",
          "--replace",
          "%file",
          "--no-backup",
          "--if-changed"
    ]
}

custom context menu handler

when clicking on the changes tab right a context memu opens offering to open the system file manager tool (file explorer) at the base git repo path or at the changed file path.

in addition it is possible to add own custom context menu entries here. configuration is done with ~/.gitonic/context.json file.

the general structure is:

{
  "a-context-name-ctx": {
    "expr": "*",
    "menu": [
      [
        "some text $GIT",
        [
          "cmd-path",
          "whatever_param=$GIT"
        ]
      ],
      [
        "some other text $PATH",
        [
          "cmd-path2",
          "whatever_param=$PATH"
        ]
      ]
    ]
  },
  ...
}

here the variables $GIT, $PATH, or $FILE are replaced by the corrosponding path before execution.

the expr key contains a single file pattern, or a list of file patterns - when to enable the context menu. the file pattern is following Unix filename pattern matching.

the menu array contains the text to display in the menu, and the command params as embedded array.

the context name as such can have any value (as long it is unique in the structure).

below a sample ~/.gitonic/context.json file for running on linux with xfce.

{
  "term-ctx": {
    "expr": "*",
    "menu": [
      [
        "Open Terminal at $GIT",
        [
          "xfce4-terminal",
          "--working-directory=$GIT"
        ]
      ],
      [
        "Open Terminal at $PATH",
        [
          "xfce4-terminal",
          "--working-directory=$PATH"
        ]
      ],
      [
        "Edit .gitignore at $GIT",
        [
          "xed",
          "$GIT/.gitignore"
        ]
      ]
    ]
  },
  "spyder-ctx": {
    "expr": "*.py",
    "menu": [
      [
        "spyder python $FILE",
        [
          "~/spyder/.venv/bin/spyder",
          "$FILE"
        ]
      ]
    ]
  },
  "geany-ctx": {
    "expr": [
      "*.c",
      "*.cpp",
      "*.h"
    ],
    "menu": [
      [
        "geany c $FILE",
        [
          "geany",
          "$FILE"
        ]
      ]
    ]
  }
}

remark: the sample config file provides support for opening

  • terminal, in this case xfce4-terminal, can be replaced by e.g. xterm - depending on your distribution
  • .gitignore file for selected repo with xed
  • spyder-ide.org, for files matching *.py
  • geany, for files matching *.c, *.cpp, *.h

limitation:

at the present time the context menu only works on the underlying file (row) in the table. there is no support for multiple files (selection) as of now.

platform

tested on python3, and linux

development status

alpha state, use on your own risk!!!

installation

it is recommented to install gitonic into a virtual environment. the following script will install gitonic in your home directory (linux).

# create virtual environment 
cd ~
python3 -m venv gitonic

# install gitonic with recommended extras
~/gitonic/bin/pip install gitonic[PEP08,MELD]
or
~/gitonic/bin/pip install gitonic[DEFAULT]

this script can be found here install_linux.sh

to install just gitonic without the extras replace with

# install gitonic 
~/gitonic/bin/pip install gitonic

to run gitonic use the script from the virtual environment directly (no prior venv activation required)

~/gitonic/bin/gitonic

it is recommented to create an alias in .bash_aliases. add the following line at the end of .bash_aliases

alias gitonic=~/gitonic/bin/gitonic

other installation dependencies

to use git difftool, and mergetool, download and install a 3rd party tool like meld merge and configure like described below.

note:

with gitonic >= v0.12.0 meld is already included in standard installation (as extra, see also under installation) and download is obsolete when installed as part of gitonic. you just need to configure git then.

in case meld installation fails install into the virtual environment

cd ~
~/gitonic/bin/pip install PyGObject

all installation options

options can be combined by |. use

~/gitonic/bin/pip install gitonic[*options*] 
option included packages
PEP08 pycodestyle, flake8, autopep8
PEP08_BLACK pycodestyle, flake8, black
PEP08_FULL pycodestyle, flake8, autopep8, black, yapf
MELD meld
DEFAULT pycodestyle, flake8, autopep8, meld

installation on raspberry pi, or fedora

when during startup an error is thrown, refer to installation on raspberry, fedorra

git configuration

add a .git-credentials file as described here git-credentials

add a .gitconfig file as described here git-config and configure for diff and merge tools. NOTE: you need to install the diff-tool e.g. meld merge manually, if meld is not installed pressing the button will have no effect.

[user]
    name = your name
    email = [email protected]
    
[credential]
    helper = store

[diff]
    tool = meld
[difftool]
    prompt = false
[difftool "meld"]
    cmd = meld --newtab "$LOCAL" "$REMOTE"

[merge]
    tool = meld
[mergetool "meld"]
    # Choose one of these 2 lines (not both!) 
    # cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
    cmd = meld --newtab "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

additional notes

the following tools are part of the standard git distribution

other gui-clients are listed on git-scm

internals

following files are used:

file description
~/.gitonic/commit.json the last commit messages show in the combo box
~/.gitonic/config.json configuration settings
~/.gitonic/context.json configuration for context menu on changes tab
~/.gitonic/formatter.json configuration for external formatter tools
~/.gitonic/tracked.json tracked git repositories
~/.gitonic/socket internal use

HINT: crash after configuration change can be resolved by changing the setting manually in config.json, or delete the config file to fall back to the defaults

license

gitonic is released under the following LICENSE

gitonic's People

Contributors

kr-g avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

gitonic's Issues

git mv

after moving a file with git mv the porcelaine status is R and deleted

git diff /difftool is not started for staged files

currently there is no support for staged files and running diff or difftool.
gitonic supports showing diff for unstaged files only.

resolution A:
unstage the file and use then diff or difftool

resolution B:
use bash/ commandline and run

git diff --cached + filename(optional)

or

git difftool --cached + filename(optional)

installation on raspberry pi, or fedora

when during startup an error is thrown, such as:

from PIL import Image, ImageTk, ImageDraw, ImageFont
ImportError: cannot import name 'ImageTk' from 'PIL' (/usr/lib64/python3.10/site-packages/PIL/__init__.py)

here it is required to install imagetk in addtion

# debian ubuntu etc
sudo apt-get install python3-pil python3-pil.imagetk

# fedora
sudo yum install python3-pillow python3-pillow-tk

fatal: Failed to resolve HEAD

an error is thrown in case there is no branch set up, or no upstream branch is set up

fatal: Failed to resolve HEAD

to resolve set up a proper upstream

gitonic not responding

it was reported that gitonic is freezed without reacting.
switching the windows on desktop worked.

resolution:

check if there are other tools open (like meld-merge) which were started from gitonic.
do close them, after that gitonic will responde again.

icons in v0.0.8

it was reported that with v0.0.8 there is a problem with the icons
do upgrade pytkfaicons to v0.0.7 to resolve

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.