Giter Site home page Giter Site logo

soramimi / guitar Goto Github PK

View Code? Open in Web Editor NEW
1.6K 43.0 124.0 39.26 MB

Git GUI Client

Home Page: https://soramimi.github.io/Guitar/

License: GNU General Public License v2.0

QMake 1.66% Shell 0.16% C++ 93.65% Ruby 0.84% C 1.21% CMake 0.55% Makefile 0.27% Qt Script 0.10% SWIG 1.55% Batchfile 0.01%
git gui client windows linux macos qt qt5 qt5-gui raspberry-pi

guitar's Introduction

Guitar

Git GUI Client

Summary

  • Open Source, Free Software (GPL v2)
  • Of course, commercial purposes is also free.
  • Run on Windows, macOS and Linux
  • Written in C++
  • Powered by Qt 5

Download Nightly Builds

Documents

Markdown format:

Doxygen

Screenshots

Windows

Windows

macOS

macOS

Ubuntu

Ubuntu

Raspbian

Raspbian

Dark Theme

Dark Theme

Haiku

Haiku

Log and Graph

Log and Graph

Diff View

Diff View

guitar's People

Contributors

darkshram avatar eskibrew avatar ethan42411 avatar extrowerk avatar fabiololix avatar follower avatar gbl avatar hoop33 avatar jonaski avatar milkcocoa0902 avatar mugwort-rc avatar probonopd avatar ruimaciel avatar soramimi avatar tx-charlie avatar yumetodo avatar zxalexis avatar

Stargazers

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

Watchers

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

guitar's Issues

remember window state

It would be nice for the app to remember the window state, full screen, location, and size.

Display the pull requests for the viewed repository

It would be nice if it could display the pull requests for the viewed repository like how it currently displays the commits in a separate tab and allow the user to download the pull request as a .patch file.

fetch lockup

Hi again,

I have an issue that seems to arise when I open guitar, do a fetch over the wireless after boot/wake. If the fetch command stalls, it fails to time out, leaving the application to crash. I have to terminate manually.

Automatic refresh support

It would be nice if it supported the ability to automatically refresh the change list for all opened repositories on a user defined time-frame.

[Feature Request] Clear Guitar Logs.

I wanted to be able to clear the log messages shown at the bottom of Guitar.

I wanted to be able to review what git messages were sent and read what git status messages are printed in the Log window.

But there is no easy way to clear the Log window. Closing and re-opening the Log window doesn't even clear them.

Asking if it's possible to reduce the number of duplicate messages in the Logs panel?

I tend to see more of these log messages more often than other log messages:

> git status -s -u --porcelain
> git status -s -u --porcelain
> git status -s -u --porcelain

And sometimes, I would get duplicate log messages:

> git diff --full-index -a 1129360c7135566d08cda236a617f749ad712cfa -- "foo.java"
> git diff --full-index -a 1129360c7135566d08cda236a617f749ad712cfa -- "foo.java"
> git diff --full-index -a 6459f73202b0eba271bc32b6ec3ef8bc27199048 -- "bar.java"
> git diff --full-index -a 6459f73202b0eba271bc32b6ec3ef8bc27199048 -- "bar.java"

I'm wondering if it's possible to reduce the amount of duplicate messages shown in the Logs panel in Guitar? If this issue is fixed, please let me know.

Dependency is not satisfiable: libssl1.0.0 [Ubuntu 19.10]

Please add support for Ubuntu 19.10

$ sudo gdebi guitar_1.1.1_amd64.deb 
Reading package lists... Done
Building dependency tree        
Reading state information... Done
Reading state information... Done
This package is uninstallable
Dependency is not satisfiable: libssl1.0.0

how do we setup `welcome to the Guitar Wizard` ?

i installed guitar using .deb file, than after i setup the welcome to the Guitar Wizard and click finish it open again, if i close it, all the app quit, is there something wrong with what i did ?

Find in file

So I was diffing 2 massive files, which I had some tags in there to help me find my changes and wanted to use search functionality to save me having to look through the file line by line.

I couldn't find such a feature, so I would like to propose it to be added.
something like ctrl-f to bring up a search box to let you find in the diff view.

Add an "amend commit" feature

Could it be possible to add a mechanism for 'git commit --amend' just to change the last commit ? For example, if a file was forgotten in the last commit (or maybe to correct misspell error in the message itself).

Somme gui clients do this with a combo-box in the commit message window.

Valgrind reports memory leak

newを書かないでスマートポインタを使うとかする必要がありそう。

88 bytes in 1 blocks are definitely lost in loss record 12,662 of 16,956
  FileDiffWidget::FileDiffWidget(QWidget*) in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:32
  1: operator new(unsigned long) in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
  2: QLayoutPrivate::createWidgetItem(QLayout const*, QWidget*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  3: QGridLayout::addWidget(QWidget*, int, int, int, int, QFlags<Qt::AlignmentFlag>) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  4: Ui_FileDiffWidget::setupUi(QWidget*) in /home/yumetodo/ドキュメント/build-Guitar-Desktop_Qt_5_8_0_GCC_64bit-Debug/ui_FileDiffWidget.h:89
  5: FileDiffWidget::FileDiffWidget(QWidget*) in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:32
  6: Ui_MainWindow::setupUi(QMainWindow*) in /home/yumetodo/ドキュメント/build-Guitar-Desktop_Qt_5_8_0_GCC_64bit-Debug/ui_MainWindow.h:490
  7: MainWindow::MainWindow(QWidget*) in /home/yumetodo/ドキュメント/Guitar/src/MainWindow.cpp:146
  8: main in /home/yumetodo/ドキュメント/Guitar/src/main.cpp:60
88 bytes in 1 blocks are definitely lost in loss record 12,663 of 16,956
  FileDiffWidget::setupPreviewWidget() in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:404
  1: operator new(unsigned long) in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
  2: QLayoutPrivate::createWidgetItem(QLayout const*, QWidget*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  3: QGridLayout::addWidget(QWidget*, int, int, int, int, QFlags<Qt::AlignmentFlag>) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  4: FileDiffWidget::setupPreviewWidget() in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:404
  5: FileDiffWidget::setRightOnly(QByteArray const&, Git::Diff const&) in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:499
  6: FileDiffWidget::updateDiffView(Git::Diff const&, bool) in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:570
  7: MainWindow::updateDiffView(QListWidgetItem*) in /home/yumetodo/ドキュメント/Guitar/src/MainWindow.cpp:2078
  8: MainWindow::on_listWidget_files_currentRowChanged(int) in /home/yumetodo/ドキュメント/Guitar/src/MainWindow.cpp:2105
  9: MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) in /home/yumetodo/ドキュメント/build-Guitar-Desktop_Qt_5_8_0_GCC_64bit-Debug/moc_MainWindow.cpp:303
  10: MainWindow::qt_metacall(QMetaObject::Call, int, void**) in /home/yumetodo/ドキュメント/build-Guitar-Desktop_Qt_5_8_0_GCC_64bit-Debug/moc_MainWindow.cpp:351
  11: QMetaObject::activate(QObject*, int, int, void**) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  12: QListWidget::currentRowChanged(int) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  13: /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  14: QMetaObject::activate(QObject*, int, int, void**) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  15: QItemSelectionModel::currentChanged(QModelIndex const&, QModelIndex const&) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  16: QItemSelectionModel::setCurrentIndex(QModelIndex const&, QFlags<QItemSelectionModel::SelectionFlag>) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  17: QAbstractItemView::mousePressEvent(QMouseEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  18: QWidget::event(QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  19: QFrame::event(QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  20: QAbstractItemView::viewportEvent(QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  21: QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  22: QApplicationPrivate::notify_helper(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  23: QApplication::notify(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  24: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  25: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
176 bytes in 2 blocks are definitely lost in loss record 15,454 of 16,956
  FileDiffWidget::setupPreviewWidget() in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:404
  1: operator new(unsigned long) in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
  2: QLayoutPrivate::createWidgetItem(QLayout const*, QWidget*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  3: QGridLayout::addWidget(QWidget*, int, int, int, int, QFlags<Qt::AlignmentFlag>) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  4: FileDiffWidget::setupPreviewWidget() in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:404
  5: FileDiffWidget::setSideBySide(QByteArray const&, Git::Diff const&, bool, QString const&) in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:522
  6: FileDiffWidget::updateDiffView(Git::Diff const&, bool) in /home/yumetodo/ドキュメント/Guitar/src/FileDiffWidget.cpp:564
  7: MainWindow::updateDiffView(QListWidgetItem*) in /home/yumetodo/ドキュメント/Guitar/src/MainWindow.cpp:2078
  8: MainWindow::on_listWidget_files_currentRowChanged(int) in /home/yumetodo/ドキュメント/Guitar/src/MainWindow.cpp:2105
  9: MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) in /home/yumetodo/ドキュメント/build-Guitar-Desktop_Qt_5_8_0_GCC_64bit-Debug/moc_MainWindow.cpp:303
  10: MainWindow::qt_metacall(QMetaObject::Call, int, void**) in /home/yumetodo/ドキュメント/build-Guitar-Desktop_Qt_5_8_0_GCC_64bit-Debug/moc_MainWindow.cpp:351
  11: QMetaObject::activate(QObject*, int, int, void**) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  12: QListWidget::currentRowChanged(int) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  13: /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  14: QMetaObject::activate(QObject*, int, int, void**) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  15: QItemSelectionModel::currentChanged(QModelIndex const&, QModelIndex const&) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  16: QItemSelectionModel::setCurrentIndex(QModelIndex const&, QFlags<QItemSelectionModel::SelectionFlag>) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  17: QAbstractItemView::mousePressEvent(QMouseEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  18: QWidget::event(QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  19: QFrame::event(QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  20: QAbstractItemView::viewportEvent(QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  21: QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  22: QApplicationPrivate::notify_helper(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  23: QApplication::notify(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0
  24: QCoreApplication::notifyInternal2(QObject*, QEvent*) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5.8.0
  25: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) in /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5.8.0

Git repository not recognised

I get the following error on my repo:

> git fetch
> git remote -v
> git status -s -u --porcelain
> git status -s -u --porcelain
> git rev-parse HEAD
> git status -s -u --porcelain
> git log --pretty=format:"commit:%H#gpg:%G?#key:%GK#parent:%P#author:%an#mail:%ae#date:%ci##%s" --all -10000 
> git branch -vv -a --abbrev=40
> git remote
> git config  user.name
> git config  user.email
fatal: Not a git repository (or any of the parent directories): .git

However I can use the command line version of git just fine. My other repositories work fine. Is there some logs to see what may be causing this issue?

[Feature Request] Add "ref/stash" labels

Currently, in the Guitar interface, I see extra branches in my working directories. It took a while, but I finally realized that those extra branches are actually my "ref/stash" branches.

Since I didn't see any labels that indicate these extra branches are "ref/stash" branches, may I request for extra labels to indicate them in the Guitar interface?

Thanks.

reset doesnt work if in merge state

I very often encounter a file thats in a merge state. Usually I want to use the file from master, so the reset option in the file right click menu is handy.
However I notice that if that file is in a merge state, it does not reset and guitar remains in a stuck state. Then I have to resort to the command line or other git client to fix the issue.

zlib のコンパイルを省略

LinuxやMacOSなどではパッケージ管理ソフトで手軽に入れれるためzlib のコンパイルが無駄な処理になる場合があるため
zlib をもとから入っているものとし、zlib のコンパイルをしないようにするのはどうですか

Right-Click Context Menu Items

It would be nice if it could integrate itself into Windows Explorer's Right-Click Context Menu so it can be made easier to clone into a certain folder and then pull, etc. the repository that the folder is assigned to.

Compilation fails

Compilation fails on Haiku:

src/texteditor/TextEditorWidget.cpp: In member function 'void TextEditorWidget::paintScreen(QPainter*)':
src/texteditor/TextEditorWidget.cpp:327:29: error: reference to 'screen' is ambiguous
    Character const *line = &screen()->at(o);

Wish: CMAKE-based buildsystem

Hello there!

Thank you for building this wonderful application, the world really needs a good and simple GIT GUI :-)

I discovered your application through HaukuDepot and not through any of the Linux packaging systems. I suspect that your project could get more exposure and adoption if it had a CMake-based build procedure, which is the de facto (and soon official) standard for many Qt projects:
http://doc.qt.io/qtcreator/creator-project-cmake.html

Not only will Linux distro packagers find it easier to package it, manual compilation will be a simple matter of these standard commands:

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr sudo make install

Let me know if you're interested in my help!

PS. Cmake supports Mac/Win/Linux and other platforms.

Thank you,
Niels

Incorrect value of CFBundleExecutable key in Info.plist

After successful building of App for MacOS the App does not start with an error-message box saying: "You can't open the application "Guitard.app" because it may be damaged or incomplete"

Looking inside the package content I found that value of CFBundleExecutable key in Info.plist was "Guitar", while the actual executable file was "Guitard" - note the letter "d" at the end.

After changing CFBundleExecutable to "Guitard" everything works well.

A couple of other minor comments:

  1. Please emphasise in the build guide for MacOS that zlib should be cloned in the same folder as Gutar - because of the relative path in lib.pro
  2. You may also clarify in the build guide that the App package is build into ../Guitar/_bin folder
  3. Some documentation could be helpful :)

Unable to delete remote branch when "remote ref does not exist"

Version:

Guitar v1.1.1 (6003546)

Step to reproduce:

  1. On Github, create a new branch. Branch will be <branch name> for this issue, as it can be any name.
  2. In Guitar, click on the "Fetch" button.
  3. In Guitar, you should see a new branch appearing, prepended with "r/o/<branch name>".
  4. On Github, delete the new branch.
  5. In Guitar, try attempting to remove the remote branch.
  6. You will get the following error:
error: unable to delete '<branch name>': remote ref does not exist

Expected result:

If it cannot find any remote refs, it should remove the r/o/<branch name>, as it doesn't exist on the remote repository.

Actual result:

The r/o/<branch name> stays persistent in Guitar.

proposal: Support D&D directory

ディレクトリをD&Dで開けるようにするべきではないか。
もっとも実装はだいぶ面倒そうではある。

Project tree expansion looks strange

When your project tree has subtrees, the project view shows the tree starting at the root every time the branch changes, like this:

image

I would have expected only one Minecraft entry, and Minecraft/Mods/Fabric as a directory under Minecraft/Mods, not as a complete new folder.

Display a list of releases

It would be nice if it could somehow obtain a list of releases for the viewed repository and show them in a dialog box with the ability for the user to download the selected release's file(s) to a specified location.

Some suggestion about Merge and Push option

Hi,
May I make some suggestion?

  1. Add a no fast-forward option when execute merge the branch.
  2. I found when I execute "Push all tags", that was no show authentication dialog box, and then nothing happen on my remote git server(Gitea), but I use "git push origin --tags" command was normal.
  3. Add a option to select which remote server to push.

Thank you very much

File list out of sync with large amount of changed files

Ive noticed a unusual bug.
When there is a large amount of files changed (i have about 20 in my case).
And a file changes, the when I click a file in the list, it often selects a different one.
Especially after staging one or two files, the file list doesn't seem to get updated.

Cache list of commits

It would be nice if it cached the list of commits of the open repository/repositories in a file for each one so that way switching by them won't take as long (especially when viewing one that has a lot of commits to it, such as ReactOS's repository).

Please fix commit for Github

For me push not work i dont see my commits when push with guitar.
And not ask my for my password anything :(

Cordialy

`Guitar, v0.2.0 (3453e9d)

git --version
git version 2.18.0
git fetch
git remote -v
git status -s -u --porcelain
git status -s -u --porcelain
git rev-parse HEAD
git diff --raw --abbrev=40 cef99c44604e97054186860bf981ff82a2f68642 aea45b9a759433e3d92acab7ce3075bb068b5c26
git log --pretty=format:"commit:%H#parent:%P#author:%an#mail:%ae#date:%ci##%s" --all -10000
git branch -v -a --abbrev=40
git config user.name
git config user.email
git status -s -u --porcelain
git status -s -u --porcelain
git diff --raw --abbrev=40 cef99c44604e97054186860bf981ff82a2f68642 aea45b9a759433e3d92acab7ce3075bb068b5c26
git remote
git push
git status -s -u --porcelain
git status -s -u --porcelain
git status -s -u --porcelain
git status -s -u --porcelain
git remote
git push
git status -s -u --porcelain
git status -s -u --porcelain
git status -s -u --porcelain
git status -s -u --porcelain`

UI: Dockable panels

feature request: *1 dockable panels in the mainwindow. The users can rearrange the UI/UX as they need. *2 unlock the toolbar (so it can be moved to another place).
There will be switches in the preferences window (lock the panels, and options like that).
I can spend some of my time working on such features.

Suggestion regarding its UI

It should allow for switching between open repositories by single-clicking on one (instead of having to double click).

proposal: Support GPG

commit時にgpg署名できたりtree viewで署名の検証結果が見られる機能

Wunused-but-set-variable

/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:-1: In member function ‘virtual void DarkStyle::drawControl(QStyle::ControlElement, const QStyleOption*, QPainter*, const QWidget*) const’:
/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:992: 警告: variable ‘partId’ set but not used [-Wunused-but-set-variable]
    int partId = BP_PUSHBUTTON;
        ^
/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:993: 警告: variable ‘stateId’ set but not used [-Wunused-but-set-variable]
    int stateId = 0;
        ^
/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:1051: 警告: variable ‘stateId’ set but not used [-Wunused-but-set-variable]
    int stateId = 0;
        ^
/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:-1: In member function ‘virtual void DarkStyle::drawComplexControl(QStyle::ComplexControl, const QStyleOptionComplex*, QPainter*, const QWidget*) const’:
/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:1635: 警告: variable ‘partId’ set but not used [-Wunused-but-set-variable]
     int partId = 0;
         ^
/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:1639: 警告: variable ‘flags’ set but not used [-Wunused-but-set-variable]
     State flags = option->state;
           ^
/home/yumetodo/Documents/Guitar/darktheme/src/DarkStyle.cpp:1937: 警告: unused variable ‘slider’ [-Wunused-variable]
   if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
                                 ^

Linux: Guitar stops reading git command output after a while

Thanks a lot for this great software, it has become my favourite Git gui.

However, there's a problem when I'm using the software on Linux; after some time, especially when switching repositories. When this happens, and your're running from the command line, you'll see failed: pipe messages on the terminal.

I think this is because, when starting a subprocess to execute a git command, the stdout from the subcommand gets closed, but the stderr doesn't. Because of this, the file descriptor pool fills up, and if you do a ls /proc/<pid-of-Guitar>/fd, you see lots of files that point to pipes.

Closing fd_err_write at the end of the loop in UnixProcess.cpp::run() fixes this:

diff --git a/src/unix/UnixProcess.cpp b/src/unix/UnixProcess.cpp
index 930e122..334eac0 100644
--- a/src/unix/UnixProcess.cpp
+++ b/src/unix/UnixProcess.cpp
@@ -190,6 +190,7 @@ protected:
                        t2.wait();
 
                        close(fd_out_write);
+                       close(fd_err_write);
 
                } catch (std::string const &e) {
                        close(stdin_pipe[R]);

If you want me to, I can make this a pull request, but I'm reluctant to start a fork for such a small thing.

Segmentation fault when resize windwow

Ubuntu 16.04にてごくまれに発生するので一応報告。再現条件がわからないので直せる気がしない。

env

$ uname -a
Linux yumetodo-desktop 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

image

log

image

Thread 6 (Thread 0x7fffd3fff700 (LWP 4255)):
#0  0x00007ffff5961b5d in poll () at ../sysdeps/unix/syscall-template.S:84
No locals.
#1  0x00007ffff28b238c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#2  0x00007ffff28b249c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#3  0x00007ffff6794cbf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#4  0x00007ffff67429ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#5  0x00007ffff6577bdc in QThread::exec() () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#6  0x00007ffff09d7535 in ?? () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5DBus.so.5
No symbol table info available.
#7  0x00007ffff657c549 in ?? () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#8  0x00007ffff56516ba in start_thread (arg=0x7fffd3fff700) at pthread_create.c:333
        __res = <optimized out>
        pd = 0x7fffd3fff700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140736750155520, -3966560272602360337, 0, 140737488345455, 140736750156224, 140737488345640, 3966639437984306671, 3966572552769639919}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#9  0x00007ffff596d82d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
No locals.

Thread 5 (Thread 0x7fffe2377700 (LWP 4254)):
#0  0x00007ffff5961b5d in poll () at ../sysdeps/unix/syscall-template.S:84
No locals.
#1  0x00007ffff28b238c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#2  0x00007ffff28b2712 in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#3  0x00007fffec5609d6 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
No symbol table info available.
#4  0x00007ffff28d8bb5 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#5  0x00007ffff56516ba in start_thread (arg=0x7fffe2377700) at pthread_create.c:333
        __res = <optimized out>
        pd = 0x7fffe2377700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140736988673792, -3966560272602360337, 0, 140737005456255, 140736988674496, 140736884445376, 3966604867792541167, 3966572552769639919}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#6  0x00007ffff596d82d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
No locals.

Thread 4 (Thread 0x7fffe2b78700 (LWP 4253)):
#0  0x00007ffff5961b5d in poll () at ../sysdeps/unix/syscall-template.S:84
No locals.
#1  0x00007ffff28b238c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#2  0x00007ffff28b249c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#3  0x00007ffff28b24d9 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#4  0x00007ffff28d8bb5 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#5  0x00007ffff56516ba in start_thread (arg=0x7fffe2b78700) at pthread_create.c:333
        __res = <optimized out>
        pd = 0x7fffe2b78700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140736997066496, -3966560272602360337, 0, 140737005455903, 140736997067200, 0, 3966605966767298031, 3966572552769639919}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#6  0x00007ffff596d82d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
No locals.

Thread 3 (Thread 0x7fffe3379700 (LWP 4252)):
#0  0x00007ffff5961b5d in poll () at ../sysdeps/unix/syscall-template.S:84
No locals.
#1  0x00007ffff28b238c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#2  0x00007ffff28b249c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#3  0x00007fffe338128d in ?? () from /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
No symbol table info available.
#4  0x00007ffff28d8bb5 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#5  0x00007ffff56516ba in start_thread (arg=0x7fffe3379700) at pthread_create.c:333
        __res = <optimized out>
        pd = 0x7fffe3379700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140737005459200, -3966560272602360337, 0, 140737488341983, 140737005459904, 8122464, 3966602674137994735, 3966572552769639919}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#6  0x00007ffff596d82d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
No locals.

Thread 2 (Thread 0x7fffeeac7700 (LWP 4251)):
#0  0x00007ffff5961b5d in poll () at ../sysdeps/unix/syscall-template.S:84
No locals.
#1  0x00007ffff1979c62 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
No symbol table info available.
#2  0x00007ffff197b8d7 in xcb_wait_for_event () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
No symbol table info available.
#3  0x00007ffff0c86429 in ?? () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5XcbQpa.so.5
No symbol table info available.
#4  0x00007ffff657c549 in ?? () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#5  0x00007ffff56516ba in start_thread (arg=0x7fffeeac7700) at pthread_create.c:333
        __res = <optimized out>
        pd = 0x7fffeeac7700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140737197668096, -3966560272602360337, 0, 140737488345391, 140737197668800, 140737488345576, 3966597231340688879, 3966572552769639919}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#6  0x00007ffff596d82d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
No locals.

Thread 1 (Thread 0x7ffff7fc1740 (LWP 4247)):
#0  0x00000000004295a1 in MainWindow::on_treeWidget_repos_customContextMenuRequested (this=0x7fffffffe180, pos=...) at ../Guitar/src/MainWindow.cpp:1336
        treeitem = 0x0
        repo = 0x0
        index = 0
#1  0x00000000004b82e8 in MainWindow::qt_static_metacall (_o=0x7fffffffe180, _c=QMetaObject::InvokeMetaMethod, _id=24, _a=0x7fffffffd370) at moc_MainWindow.cpp:296
        _t = 0x7fffffffe180
#2  0x00000000004b8612 in MainWindow::qt_metacall (this=0x7fffffffe180, _c=QMetaObject::InvokeMetaMethod, _id=24, _a=0x7fffffffd370) at moc_MainWindow.cpp:351
No locals.
#3  0x00007ffff676d564 in QMetaObject::activate(QObject*, int, int, void**) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#4  0x00007ffff750a8e5 in QWidget::customContextMenuRequested(QPoint const&) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#5  0x00007ffff7523ca1 in QWidget::event(QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#6  0x00007ffff76027be in QFrame::event(QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#7  0x00007ffff77182cc in QAbstractItemView::viewportEvent(QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#8  0x00007ffff77555bc in QTreeView::viewportEvent(QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#9  0x00007ffff67441f2 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#10 0x00007ffff74deda5 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#11 0x00007ffff74e79c3 in QApplication::notify(QObject*, QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#12 0x00007ffff6744458 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#13 0x00007ffff753cb4d in ?? () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#14 0x00007ffff753f32b in ?? () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#15 0x00007ffff74dedcc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#16 0x00007ffff74e6236 in QApplication::notify(QObject*, QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Widgets.so.5
No symbol table info available.
#17 0x00007ffff6744458 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#18 0x00007ffff6d1cbb0 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Gui.so.5
No symbol table info available.
#19 0x00007ffff6d1e955 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Gui.so.5
No symbol table info available.
#20 0x00007ffff6cfba1b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Gui.so.5
No symbol table info available.
#21 0x00007ffff0cf94b0 in ?? () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5XcbQpa.so.5
No symbol table info available.
#22 0x00007ffff28b2197 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#23 0x00007ffff28b23f0 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#24 0x00007ffff28b249c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#25 0x00007ffff6794cbf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#26 0x00007ffff67429ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#27 0x00007ffff674a9f4 in QCoreApplication::exec() () from /home/yumetodo/Qt5.8.0/5.8/gcc_64/lib/libQt5Core.so.5
No symbol table info available.
#28 0x00000000004212b8 in main (argc=1, argv=0x7fffffffe2e8) at ../Guitar/src/main.cpp:70
        a = <incomplete type>
        style = 0x8a7f80
        f_open_here = false
        w = {<QMainWindow> = {<No data fields>}, static staticMetaObject = {d = {superdata = 0x7ffff7b988a0 <QMainWindow::staticMetaObject>, stringdata = 0x4cb860 <qt_meta_stringdata_MainWindow>, data = 0x4cc500 <qt_meta_data_MainWindow>, static_metacall = 0x4b8084 <MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, pv = 0x8b2600, ui = 0x8ca800}
        1333 [1]	{
0x429530                   55                          push   %rbp
0x429531  <+0x0001>        48 89 e5                    mov    %rsp,%rbp
0x429534  <+0x0004>        53                          push   %rbx
0x429535  <+0x0005>        48 81 ec b8 01 00 00        sub    $0x1b8,%rsp
0x42953c  <+0x000c>        48 89 bd 58 fe ff ff        mov    %rdi,-0x1a8(%rbp)
0x429543  <+0x0013>        48 89 b5 50 fe ff ff        mov    %rsi,-0x1b0(%rbp)
0x42954a  <+0x001a>        64 48 8b 04 25 28 00 00 00  mov    %fs:0x28,%rax
0x429553  <+0x0023>        48 89 45 e8                 mov    %rax,-0x18(%rbp)
0x429557  <+0x0027>        31 c0                       xor    %eax,%eax
        1334 [1]		QTreeWidgetItem *treeitem = ui->treeWidget_repos->currentItem();
0x429559  <+0x0029>        48 8b 85 58 fe ff ff        mov    -0x1a8(%rbp),%rax
0x429560  <+0x0030>        48 8b 40 38                 mov    0x38(%rax),%rax
0x429564  <+0x0034>        48 8b 80 30 01 00 00        mov    0x130(%rax),%rax
0x42956b  <+0x003b>        48 89 c7                    mov    %rax,%rdi
0x42956e  <+0x003e>        e8 7d 73 ff ff              callq  0x4208f0 <_ZNK11QTreeWidget11currentItemEv@plt>
0x429573  <+0x0043>        48 89 85 18 ff ff ff        mov    %rax,-0xe8(%rbp)
        1335 [1]		RepositoryItem const *repo = repositoryItem(treeitem);
0x42957a  <+0x004a>        48 8b 95 18 ff ff ff        mov    -0xe8(%rbp),%rdx
0x429581  <+0x0051>        48 8b 85 58 fe ff ff        mov    -0x1a8(%rbp),%rax
0x429588  <+0x0058>        48 89 d6                    mov    %rdx,%rsi
0x42958b  <+0x005b>        48 89 c7                    mov    %rax,%rdi
0x42958e  <+0x005e>        e8 8b a3 ff ff              callq  0x42391e <MainWindow::repositoryItem(QTreeWidgetItem*)>
0x429593  <+0x0063>        48 89 85 20 ff ff ff        mov    %rax,-0xe0(%rbp)
        1336 [1]		int index = treeitem->data(0, IndexRole).toInt();
0x42959a  <+0x006a>        48 8b 85 18 ff ff ff        mov    -0xe8(%rbp),%rax
0x4295a1  <+0x0071>        48 8b 00                    mov    (%rax),%rax
0x4295a4  <+0x0074>        48 83 c0 18                 add    $0x18,%rax
0x4295a8  <+0x0078>        48 8b 00                    mov    (%rax),%rax
0x4295ab  <+0x007b>        48 8d 7d b0                 lea    -0x50(%rbp),%rdi
0x4295af  <+0x007f>        48 8b b5 18 ff ff ff        mov    -0xe8(%rbp),%rsi
0x4295b6  <+0x0086>        b9 00 01 00 00              mov    $0x100,%ecx
0x4295bb  <+0x008b>        ba 00 00 00 00              mov    $0x0,%edx
0x4295c0  <+0x0090>        ff d0                       callq  *%rax
0x4295c2  <+0x0092>        48 8d 45 b0                 lea    -0x50(%rbp),%rax
0x4295c6  <+0x0096>        be 00 00 00 00              mov    $0x0,%esi
0x4295cb  <+0x009b>        48 89 c7                    mov    %rax,%rdi
0x4295ce  <+0x009e>        e8 4d 6c ff ff              callq  0x420220 <_ZNK8QVariant5toIntEPb@plt>
0x4295d3  <+0x00a3>        89 85 64 fe ff ff           mov    %eax,-0x19c(%rbp)
0x4295d9  <+0x00a9>        48 8d 45 b0                 lea    -0x50(%rbp),%rax
0x4295dd  <+0x00ad>        48 89 c7                    mov    %rax,%rdi
0x4295e0  <+0x00b0>        e8 1b 6e ff ff              callq  0x420400 <_ZN8QVariantD1Ev@plt>
        1337 [1]		if (isGroupItem(treeitem)) { // group item
0x4295e5  <+0x00b5>        48 8b 85 18 ff ff ff        mov    -0xe8(%rbp),%rax
0x4295ec  <+0x00bc>        48 89 c7                    mov    %rax,%rdi
0x4295ef  <+0x00bf>        e8 d3 88 ff ff              callq  0x421ec7 <isGroupItem(QTreeWidgetItem*)>
0x4295f4  <+0x00c4>        84 c0                       test   %al,%al
0x4295f6  <+0x00c6>        0f 84 29 03 00 00           je     0x429925 <MainWindow::on_treeWidget_repos_customContextMenuRequested(QPoint const&)+1013>
        1338 [1]			QMenu menu;
0x4295fc  <+0x00cc>        48 8d 45 b0                 lea    -0x50(%rbp),%rax
0x429600  <+0x00d0>        be 00 00 00 00              mov    $0x0,%esi
0x429605  <+0x00d5>        48 89 c7                    mov    %rax,%rdi
0x429608  <+0x00d8>        e8 13 77 ff ff              callq  0x420d20 <_ZN5QMenuC1EP7QWidget@plt>
        1339 [1]			QAction *a_add_new_group = menu.addAction(tr("&Add new group"));
0x42960d  <+0x00dd>        48 8d 85 f0 fe ff ff        lea    -0x110(%rbp),%rax
0x429614  <+0x00e4>        b9 ff ff ff ff              mov    $0xffffffff,%ecx
0x429619  <+0x00e9>        ba 00 00 00 00              mov    $0x0,%edx
0x42961e  <+0x00ee>        48 8d 35 72 1f 09 00        lea    0x91f72(%rip),%rsi        # 0x4bb597
0x429625  <+0x00f5>        48 89 c7                    mov    %rax,%rdi
0x429628  <+0x00f8>        e8 3c ef 00 00              callq  0x438569 <MainWindow::tr(char const*, char const*, int)>
0x42962d  <+0x00fd>        48 8d 95 f0 fe ff ff        lea    -0x110(%rbp),%rdx
0x429634  <+0x0104>        48 8d 45 b0                 lea    -0x50(%rbp),%rax
0x429638  <+0x0108>        48 89 d6                    mov    %rdx,%rsi
0x42963b  <+0x010b>        48 89 c7                    mov    %rax,%rdi
0x42963e  <+0x010e>        e8 cd 52 ff ff              callq  0x41e910 <_ZN5QMenu9addActionERK7QString@plt>
0x429643  <+0x0113>        48 89 85 28 ff ff ff        mov    %rax,-0xd8(%rbp)
0x42964a  <+0x011a>        48 8d 85 f0 fe ff ff        lea    -0x110(%rbp),%rax
0x429651  <+0x0121>        48 89 c7                    mov    %rax,%rdi
0x429654  <+0x0124>        e8 e7 7f ff ff              callq  0x421640 <QString::~QString()>
        1340 [1]			QAction *a_delete_group = menu.addAction(tr("&Delete group"));

Add a commit messages history feature

It would be nice to have a short list of the last commit messages (5 to 10) available in the commit message windows.

Just for the lazy people like me who use a few standard messages but how are too lazy to write them too often.

webclient error

Hello,
Using Qt Createor 4.2.1 Community with the Kit being Qt 5.8.0 MSVC2015 64 bit.
Getting the following error as shown in the image.

image

automatic stash/apply option

It would be very handy to have an option to automatically stash any changed files, and reapply the stash after doing a pull.

A way to solve merge conflicts

Hi,

I'm in search of a decent Git GUI and found this repository. As I'm a Qt developer myself I was able to build and run the software. It was a bit clumsy but OK. (I'm thinking to fix them via sub-repos later for zlib and openssl)

Anyway, my problem is I want to do a big merge between two branches and having expected conflicts. But couldn't find a way to trigger a merge tool (e.g. Kdiff3) for that particular file. Am I missing something or this feature is really missing.

I really don't have extra time nowadays, but seriously considering to contribute this project in the future.

Thanks for your great job.

Add a git basic worklow graphical view

Two other git graphical clients, Elegit, and Git Horizon use a nice graphical way to display:

  • the state of the git repo

  • the basib git workflow in the meaning pull->stage->commit->push (not in the GitFlow meaning)

  • Elegit do it with graphical button-arrows beetwin windows with a nice distinction between "remote" and "local"

  • Git Horizon go further with a full diagram bar with arrow (and numbers) between buttons

This is particularly very nice for git beginners (i have personally learn a lot about the "way of git" after playing with both tools).

It would be nice for example to revamp in this way the following buttons:

  • fetch
  • pull
  • stage
  • unstage
  • commit
  • push

And eventually in the same way:

  • branch
  • tag
  • uncommit
  • merge

graphic contribution

Hello
I´m a graphic designer looking for cool open source projects to make a graphic contribution, for free of course :P
δm wondering if you are interested in a new logo for your project.

Regards

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.