Giter Club home page Giter Club logo

cutegit's Introduction

CuteGit

alt text

This is a simple multi-document UI for the Git executable (and other versioning systems in a near future). It is not meant to compete with paywares, just provide minimal versioning functionality.

Dependencies

Building

  • Make sure to update submodules
    git submodule init
    git submodule update
  • Open /CuteGit.pro in QtCreator
  • Build and run

Things it does

  • Open one or more repositories
  • Refresh view
  • For repositories of type Git and Gerrit:
    • Show repository status (clean, merge, rebase, ...)
    • Show repository files as a flat list, colored according to status
    • Show the branches and tags
    • Show the branch log
    • Show the graph as output by Git (might be graphical some day)
    • Show the selected file's log
    • Show the unstaged diffs in the selected item (folder or file)
    • Show the output of the executed commands
    • Change current branch
    • Mark files as staged / unstaged
    • Remove files form tracking
    • Revert files
    • Commit
    • Amend (on interactive rebase, commit is always amend)
    • Fetch, pull and push
    • Modify a commit message
    • Rebase current branch on another one
    • Merge current branch with another one
    • Begin rebase on a commit, continue and abort rebase
    • Reset on a commit
    • Save and pop stash (no selectable stash yet)
    • Branch from a commit
    • Tag a commit
    • View diff with previous commit
    • View diff between any two commits
  • For repositories of type Mercurial:
    • Show the branches
    • Show repository files as a flat list, colored according to status
    • Mark files as staged / unstaged
    • Show the branch log
    • Show the selected file's log
    • Commit
    • Branch from a commit
  • For repositories of type SVN:
    • Nothing yet

Classes

CuteGit

  • Registers types
  • Creates application controller
  • Creates QML engine

CController

  • Creates and provides access to
    • the list of known repositories
    • the list of open repositories
    • the current repository
    • the Git interactive rebase editing

CRepository

  • Represents a repository
  • Creates and provides access to
    • the corresponding versioning system commands
    • the file system model
    • the filter for the file system model
    • the model for lines of output when executing a process
    • the name of the current branch
    • the repository status (normal, rebasing, merging, ...)
    • the list of branches
    • the log of the current branch
    • the diff of the selected file
    • the log of the selected file
  • Exposes to QML / JS the versioning methods: stage, unstage, commit, push, ...

CTreeFileModel

  • Inherits QFileSystemModel
  • Shows changed files as a tree
  • Provides access to the repository files

CTreeFileModelProxy

  • Inherits QSortFilterProxyModel
  • Encapsulates CTreeFileModel
  • Enables filtering files on
    • file name
    • GIT status property

CFlatFileModel

  • Inherits QAbstractListModel
  • Shows changed files as a list
  • Provides access to the repository files

CFlatFileModelProxy

  • Inherits QSortFilterProxyModel
  • Encapsulates CFlatFileModel
  • Enables filtering files on
    • file name
    • GIT status property

CRepoFile

  • The properties of a repository file
    • status
    • staged / unstaged flag

CCommands

  • A (kind of) interface for a versioning system
  • Makes the versioning system abstract

CGitCommands

  • Inherits CCommands
  • Implements Git versioning commands

CSVNCommands

  • Inherits CCommands
  • Will implement SVN versioning commands

CHGCommands

  • Inherits CCommands
  • Partially implements Mercurial versioning commands

CLogModel

  • A collection of log lines

CLogModelProxy

  • Inherits QSortFilterProxyModel
  • Encapsulates CLogModel
  • Enables filtering a log on
    • commit author
    • commit message

CLogLine

  • A line of log : commit id, date, author, message

CDiffModel

  • A collection of CDiffLine

CDiffModelProxy

  • Inherits QSortFilterProxyModel
  • Encapsulates CDiffModel
  • Enables filtering a diff

CDiffLine

  • A line of diff between two files

Code summary

As of 2019-09-20:

     151 text files.
     150 unique files.                                          
      27 files ignored.

http://cloc.sourceforge.net v 1.64  T=0.33 s (370.7 files/s, 52317.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C++                             27           1422            661           4270
QML                             57            839            142           4094
TypeScript                       3             59              0           2794
C/C++ Header                    33            898            930           1293
Qt Project                       1             13             17             35
XML                              2              0              0             23
Bourne Shell                     1              0              6              6
-------------------------------------------------------------------------------
SUM:                           124           3231           1756          12515
-------------------------------------------------------------------------------

cutegit's People

Contributors

jango73 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

linecode

cutegit's Issues

Show labels in log view

Describe the solution you'd like
In the log view, labes should indicate:

  • Current HEAD
  • Head of all branches (local and remote)
  • Tags

Manage gerrit features

Check if repo is a gerrit repo:

  • In .git/hooks/commit-msg, check presence of "Gerrit" and "add_ChangeId()"
  • In file .git/config, section [remote "origin"], variable url, check for presence of "gerrit"
  • Example:
    • [remote "origin"]
      • url = ssh:// < username > @ gerrit.xxx.xxx:29418/some_repo

If repo is marked as gerrit repo:

  • Push to "origin HEAD:refs/for/" instead of "origin branch"
    • Hint: branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
    • Hint: git push origin HEAD:refs/for/$branch
  • Ability to copy the remote commit-msg to .git/hooks/
    • Hint: scp -p -P 29418 < your username > @ < your Gerrit review server > :hooks/commit-msg < local path to your git > /.git/hooks/

Refactoring : CRepository

Create a CRepository class that holds all the models instead of CTreeFileModel holding them.
Since there are two file models, one class should rule them all.

Ability to create a branch

Add to commit context menu:

  • Branch from this

Git command:
git checkout -b < branchname > < sha1-of-commit >

Graph display to show history of all branches

Git command for ASCII graph:
git log --graph --all --pretty=format:"%h | %s | %an | %aI"
(Commit Id, subject, author, date)

Git command for commit hash and parents hash:
git log --pretty="%H %P"

Notes

For embedded diff:
https://github.com/google/diff-match-patch

Show n lines of context in diff:
--unified=< n >

Check if local is ahead of remote:
git rev-list origin..HEAD

Check if local is behing remote:
git rev-list HEAD..origin

Graph drawing:
strathausen/dracula

Implement SVN support

  • Make controller aware of repository type (Git or SVN)
  • Create feature flags in CCommands (can rebase, can push, etc...)
  • Create CSVNCommands, inherits CCommands

"Expand all" and "Collapse all" buttons in tree view not working

Describe the bug
"Expand all" and "Collapse all" buttons in tree view don't do anything.

To Reproduce
Steps to reproduce the behavior:

  1. Open a repo with some subfolders
  2. Select "View -> Files as a tree"
  3. Click on 'Expand all'

Expected behavior
All tree nodes should expand.

Ability to change commit order

Describe the solution you'd like

  • From a log menu, select the commit to rebase on
  • In a list view, view the commit's child commits and change their order
  • Apply or cancel

Describe alternatives you've considered

  • In a console:
    • git rebase -i .....
    • change order of lines in text file

Customizable UI

  • Allow multiple diff and blame views.
  • Add panes by subdiving existing ones
  • Choose content of every pane:
    • Files
    • Log
    • Graph
    • Diff
    • Blame
    • Output

Create a 'default action' button

The app should take a guess at the "smartest" action to do. A button could be dedicated to that action.
Examples:

  • Current branch is more than n commits behind : "Pull" (Save stash, pull, pop stash)
  • Current branch is more than n commits ahead : "Push"
  • Working tree has some staged files: "Commit"
    ...

Fixes after refactoring

CGitCommands:

  • Make commands that modify files stackable

CRepository:

  • Improve file status update: not just a model reset but row by row update

Finalize cloning

  • Real time output of cloning process
  • Select cloned repository tab on finished

Ability to edit command line

Describe the solution you'd like
The command line executed when issuing commands should be visible and editable before being executed. A nice place would be the status bar.

Describe alternatives you've considered
The only alternative is to execute the command in the console.

Ability to view diff between any two commits

Describe the solution you'd like

  • Mark a commit as "left commit"
  • Mark a commit as "right commit"
  • View the result in the diff view

Describe alternatives you've considered
Git on console.

Make a better file log view

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

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.