# [ANNOUNCE qgit-0.95]

4 messages from 2005-09-24 to 2005-09-25. Participants: Marco Costalba, Petr Baudis, Alan Chandler.
Thread: https://gitlist.dev/t/1935

## Marco Costalba, 2005-09-24 16:06

Subject: [ANNOUNCE qgit-0.95]
Message-ID: <20050924160641.60151.qmail@web26307.mail.ukl.yahoo.com>
URL: https://gitlist.dev/e/20050924160641.60151.qmail%40web26307.mail.ukl.yahoo.com

```
This is a performance update release.

The detailed list of changes is below, but the bottom line is 
qgit-0.95 is _really_ fast.

It tooks about 4 seconds, on my box, to run qgit --all on today linux tree against 
about 65 seconds with gitk. Also the used memory it seems lower.

As a 'theoretical maximum speed' a bare:

git-rev-list --header --topo-order --parents HEAD > /dev/null

Runs in about 2 seconds.

So this is the main reason I post this release. I doubt a little bit about this results 
because the spread with gitk it seems too much, so I would like a double check.

NOTE: Before to test qgit you need to UNSET flag 

           edit->settings->cache->'diff against working dir'

to avoid a slow 'git-status' (with involved 'git-update-index --refresh') call.


CHANGELOG

- more scalable pixmap memory handling.
  Graph pixmaps are created only for visible items and freed
  when log lines became not visible so that the amount of memory
  used is constant and independent from archive size. This is also a
  performance improvement because of the 'lazy setup' policy.

- changed GUI update policy to group all the updates in one big chunk at
  fixed intervals. This is faster then an incremental update.

- more scalable file names handling.
  File paths are splitted in base and file name, both are then indipendently
  indexed. This gives huge memory savings and also better scalability because the
  'different file names' set grows much more slowly then new commits. Using two index 
  tables gives good memory saving when you have lot of files in the same (deep) directory.

- Rewritten git-rev-list parsing to avoid as much as possible to move data around.


INSTALLATION

You need scons and Qt developer libs version 3.3.4 or better already installed. You need 'mt'
version of Qt libraries.

QGit is NOT compatible with Qt4.

On some platforms (Debian) you should set QTDIR before to compile.


DOWNLOAD

Download link is:
http://prdownloads.sourceforge.net/qgit/qgit-0.95.tar.bz2?download

But now there is also a git archive: 
http://digilander.libero.it/mcostalba/qgit.git

Please use 'cg-clone http://digilander.libero.it/mcostalba/qgit.git' 
I still have to set-up a 'git clone' friendly archive.

If you have problems with the sources you can download a binary:
http://digilander.libero.it/mcostalba/qgit



Marco



		
__________________________________ 
Yahoo! Mail - PC Magazine Editors' Choice 2005 
http://mail.yahoo.com

```

## Petr Baudis, 2005-09-24 18:16

Subject: Re: [ANNOUNCE qgit-0.95]
Message-ID: <20050924181636.GD25069@pasky.or.cz>
URL: https://gitlist.dev/e/20050924181636.GD25069%40pasky.or.cz
In-Reply-To: <20050924160641.60151.qmail@web26307.mail.ukl.yahoo.com>

```
Dear diary, on Sat, Sep 24, 2005 at 06:06:40PM CEST, I got a letter
where Marco Costalba <mcostalba@yahoo.it> told me that...
> This is a performance update release.
> 
> The detailed list of changes is below, but the bottom line is 
> qgit-0.95 is _really_ fast.
> 
> It tooks about 4 seconds, on my box, to run qgit --all on today linux tree against 
> about 65 seconds with gitk. Also the used memory it seems lower.
> 
> As a 'theoretical maximum speed' a bare:
> 
> git-rev-list --header --topo-order --parents HEAD > /dev/null
> 
> Runs in about 2 seconds.
> 
> So this is the main reason I post this release. I doubt a little bit about this results 
> because the spread with gitk it seems too much, so I would like a double check.

Yes, it is several times faster than gitk, good work. Had to do this in
order to be able to compile it with gcc-3.3.6, though (it complained
about goto'ing after initialization of nc - that's bogus since there's
the return, but...):

diff --git a/src/git_startup.cpp b/src/git_startup.cpp
--- a/src/git_startup.cpp
+++ b/src/git_startup.cpp
@@ -469,7 +469,9 @@ again:
 			if (!resumeTimer.isActive())
 				resumeTimer.start(1, true); // with 0 ms there is an oops in libqt-mt
  			return; // we suspend here to let GUI updating
+		}
 
+		if (false) {
 resume:
 			suspended = false;
 			processTime.start();


Besides that, this is what I don't like about qgit:

* It'd be nice to be able to choose to see all commits in the initial
dialog by single click (I know about --all). Perhaps a radio buttons
choosing between all and selected? Also, you might add the "diff against
working copy" option to that dialog as well.

* The graph column is too narrow. It should be auto-sized so that the
graph fits in, or at least there should be some clear indication that
the graph does not fit to the column at the given point. This confused
me a lot at first.

* Could you make the grey background for odd commits span to the whole
line, including the commit graph?

* The commit time is relative to now, which makes no sense to me. Also,
it is in the second column instead of the last one like in gitk, which
seems better to me. At least, the column is too narrow and then it
blends together with the commit title.

* In the filter radio buttons groups, only first few letters of the
labels are visible, and apparently no tooltips. Same problem in the
settings dialog, most of the options have the labels cut around 2/3, and
the window is non-resizable on top of that - why? I hate non-resizable
windows, especially because they are usually too small. :-)

* Single-clicking at a commit produces a significantly slower response
than in gitk, where I see the difflist and stuff nearly instantly - it
takes several hundreds of ms in qgit. That's quite annoying.

* Getting to the diff view was non-obvious for me. It'd be nice to have
some [diff] button as well somewhere. Or you could also show the diff in
the bottom part of screen in the commit view, I think gitk solved this
nicely.

* Clicking on the file was supposed to bring some annotated view, but if
it is so, it should write "Annotate" in the window title, and should
indicate that it is computing it on the background (and is really slow
in that, or I don't know, but always only single revision was shown
there). It is unclear what the "pin file" checkbox is supposed to mean,
and the whole dialog is just very confusing. :-)

* The lane information might be available as a tooltip in addition to
right-clicking on it - that wouldn't occur to me.

* Why is the Edit menu aligned to the right?

* Well - I don't like the line graphics and prefer gitk's. This is
perhaps a matter of taste, though. I find the graphics to be too tiny,
thin and not so clear as gitk's, which makes it harder to see the commit
flow. I also like diagonal lines more than angles, but that might be
just because I'm used to them.

OTOH, qgit actually flows the commits around the 0.99.6 release and such
better than gitk, keeping them all in a single lane instead of flowing
off to the right. It is still a bit hard to see what actually went on,
but curing that would require sorting the commits by date.


Nice work otherwise. :-)

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
VI has two modes: the one in which it beeps and the one in which
it doesn't.

```

## Alan Chandler, 2005-09-25 06:32

Subject: Re: [ANNOUNCE qgit-0.95]
Message-ID: <200509250732.06754.alan@chandlerfamily.org.uk>
URL: https://gitlist.dev/e/200509250732.06754.alan%40chandlerfamily.org.uk
In-Reply-To: <20050924160641.60151.qmail@web26307.mail.ukl.yahoo.com>

```
On Saturday 24 Sep 2005 17:06, Marco Costalba wrote:
...
> INSTALLATION
>
> You need scons and Qt developer libs version 3.3.4 or better already
> installed. You need 'mt' version of Qt libraries.
>
> QGit is NOT compatible with Qt4.
>
> On some platforms (Debian) you should set QTDIR before to compile.


I am running Debian unstable with libqt3-mt-dev installed, and qt3-dev-tools.  
I set QTDIR to /usr/share/qt3. (and running with KDE incidentally)

However when I run make I get errors of the form shown below (QSettings 
errors) and eventually the compile stage fails.

/usr/share/qt3/bin/uic -o src/rangeselectbase.h src/rangeselectbase.ui
/usr/share/qt3/bin/uic -impl rangeselectbase.h -o src/uic_rangeselectbase.cc 
src/rangeselectbase.ui
/usr/share/qt3/bin/moc -o src/moc_rangeselectbase.cc src/rangeselectbase.h
QSettings: error creating /.qt
QSettings: error creating /.qt
QSettings: error creating /.qt
QSettings: error creating /.qt
QSettings: error creating /.qt
QSettings::sync: filename is null/empty
QSettings: error creating /.qt
QSettings::sync: filename is null/empty
QSettings: error creating /.qt
QSettings::sync: filename is null/empty
g++ -O2 -DQT_THREAD_SUPPORT -D_REENTRANT -I/usr/include/qt3 
-I/usr/share/qt3/include -c -o src/git_startup.o src/git_startup.cpp
src/git_startup.cpp: In member function `void Git::parseReadFromStdout()':
src/git_startup.cpp:473: error: jump to label `resume'
src/git_startup.cpp:439: error:   from here
src/git_startup.cpp:467: error:   crosses initialization of `newCommits*nc'
scons: *** [src/git_startup.o] Error 1
scons: building terminated because of errors.
make: *** [all] Error 2
alan@kanger qgit-0.95 $ 


Is there something else I should have installed.





-- 
Alan Chandler
http://www.chandlerfamily.org.uk

```

## Alan Chandler, 2005-09-25 06:47

Subject: Re: [ANNOUNCE qgit-0.95]
Message-ID: <200509250747.08411.alan@chandlerfamily.org.uk>
URL: https://gitlist.dev/e/200509250747.08411.alan%40chandlerfamily.org.uk
In-Reply-To: <200509250732.06754.alan@chandlerfamily.org.uk>

```
On Sunday 25 Sep 2005 07:32, Alan Chandler wrote:
...
> However when I run make I get errors of the form shown below (QSettings
> errors) and eventually the compile stage fails.
>
> /usr/share/qt3/bin/uic -o src/rangeselectbase.h src/rangeselectbase.ui
> /usr/share/qt3/bin/uic -impl rangeselectbase.h -o
> src/uic_rangeselectbase.cc src/rangeselectbase.ui
> /usr/share/qt3/bin/moc -o src/moc_rangeselectbase.cc src/rangeselectbase.h
> QSettings: error creating /.qt
> QSettings: error creating /.qt
> QSettings: error creating /.qt
> QSettings: error creating /.qt
> QSettings: error creating /.qt
> QSettings::sync: filename is null/empty
> QSettings: error creating /.qt
> QSettings::sync: filename is null/empty
> QSettings: error creating /.qt
> QSettings::sync: filename is null/empty
> g++ -O2 -DQT_THREAD_SUPPORT -D_REENTRANT -I/usr/include/qt3
> -I/usr/share/qt3/include -c -o src/git_startup.o src/git_startup.cpp
> src/git_startup.cpp: In member function `void Git::parseReadFromStdout()':
> src/git_startup.cpp:473: error: jump to label `resume'
> src/git_startup.cpp:439: error:   from here
> src/git_startup.cpp:467: error:   crosses initialization of `newCommits*nc'
> scons: *** [src/git_startup.o] Error 1
> scons: building terminated because of errors.
> make: *** [all] Error 2
> alan@kanger qgit-0.95 $

Although the QSettings are still there, fixing up git_startup.cpp as per 
Pasky's patch fixed it for me

Sorry for the noise.


-- 
Alan Chandler
http://www.chandlerfamily.org.uk

```
