Git development
 help / color / mirror / Atom feed
* Removal of "--merge-order"?
@ 2006-02-24 16:32 Linus Torvalds
  2006-02-24 16:53 ` Randy.Dunlap
  2006-02-24 19:25 ` Junio C Hamano
  0 siblings, 2 replies; 9+ messages in thread
From: Linus Torvalds @ 2006-02-24 16:32 UTC (permalink / raw)
  To: Junio C Hamano, Git Mailing List


I just tested it again, and

	git-rev-list --merge-order HEAD

takes an inordinate amount of time:

	real    5m1.139s
	user    4m59.504s
	sys     0m1.220s

and that's on a reasonably fast machine (not my fastest, but no slouch by 
any measure - my fastest machine I'm not allowed to really benchmark 
publicly ;)

It may be a cool algorithm, but it's essentially useless on any bigger 
tree. And nobody uses it, since "--topo-order" gives the guarantees that 
people really care about, and finishes in 0.537 seconds on the same 
machine with the same tree.

It also depends on the openssh "bignum" stuff, which means that any 
machine where we just rely on our own SHA1 implementation and don't use 
openssh doesn't have the flag anyway.

In other words, I'd really prefer if it was gone. Some of the things I 
might do to git-rev-list would be much simpler if I didn't have to worry 
about merge-order, and the way it interfaces with the rest of 
git-rev-list.

Comments?

			Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 16:32 Removal of "--merge-order"? Linus Torvalds
@ 2006-02-24 16:53 ` Randy.Dunlap
  2006-02-24 17:23   ` Linus Torvalds
  2006-02-24 19:25 ` Junio C Hamano
  1 sibling, 1 reply; 9+ messages in thread
From: Randy.Dunlap @ 2006-02-24 16:53 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Junio C Hamano, Git Mailing List

On Fri, 24 Feb 2006, Linus Torvalds wrote:

>
> I just tested it again, and
>
> 	git-rev-list --merge-order HEAD
>
> takes an inordinate amount of time:
>
> 	real    5m1.139s
> 	user    4m59.504s
> 	sys     0m1.220s

That's too bad.

> and that's on a reasonably fast machine (not my fastest, but no slouch by
> any measure - my fastest machine I'm not allowed to really benchmark
> publicly ;)
>
> It may be a cool algorithm, but it's essentially useless on any bigger
> tree. And nobody uses it, since "--topo-order" gives the guarantees that
> people really care about, and finishes in 0.537 seconds on the same
> machine with the same tree.
>
> It also depends on the openssh "bignum" stuff, which means that any
> machine where we just rely on our own SHA1 implementation and don't use
> openssh doesn't have the flag anyway.
>
> In other words, I'd really prefer if it was gone. Some of the things I
> might do to git-rev-list would be much simpler if I didn't have to worry
> about merge-order, and the way it interfaces with the rest of
> git-rev-list.
>
> Comments?

I'm just a lowly user, but I see people trying to export git
trees to other SCMs, and they seem to prefer merge-order.
This is your chance to correct me about:
(a) how I am wrong; (b) how they are wrong.  8;)

I've heard/seen you say that merge-order is not interesting,
but I still believe that *your* merge order of the Linux kernel
tree is almost all that people really care about.
Apparently I needed to go to LCA to hear you discuss git.

-- 
~Randy

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 16:53 ` Randy.Dunlap
@ 2006-02-24 17:23   ` Linus Torvalds
  2006-02-24 17:32     ` Ryan Anderson
  2006-02-24 17:47     ` Randy.Dunlap
  0 siblings, 2 replies; 9+ messages in thread
From: Linus Torvalds @ 2006-02-24 17:23 UTC (permalink / raw)
  To: Randy.Dunlap; +Cc: Junio C Hamano, Git Mailing List



On Fri, 24 Feb 2006, Randy.Dunlap wrote:
> 
> I'm just a lowly user, but I see people trying to export git
> trees to other SCMs, and they seem to prefer merge-order.
> This is your chance to correct me about:
> (a) how I am wrong; (b) how they are wrong.  8;)

Well, I didn't even realize anybody at all was using it. I've never seen 
any mention of it, and considering how ungodly slow it is, I would have 
expected somebody to pipe up about it..

I did a google search for "git" and "merge-order", and the only actual use 
(as opposed to mention in a man-page) I found in the 20 hits google showed 
was an old version of gitk.

> I've heard/seen you say that merge-order is not interesting,
> but I still believe that *your* merge order of the Linux kernel
> tree is almost all that people really care about.

Could you actually point to somebody using it? They're hiding it well.

> Apparently I needed to go to LCA to hear you discuss git.

I certainly never delved into any of that.. 

		Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 17:23   ` Linus Torvalds
@ 2006-02-24 17:32     ` Ryan Anderson
  2006-02-24 17:47     ` Randy.Dunlap
  1 sibling, 0 replies; 9+ messages in thread
From: Ryan Anderson @ 2006-02-24 17:32 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Randy.Dunlap, Junio C Hamano, Git Mailing List

On Fri, Feb 24, 2006 at 09:23:24AM -0800, Linus Torvalds wrote:
> On Fri, 24 Feb 2006, Randy.Dunlap wrote:
> > 
> > I'm just a lowly user, but I see people trying to export git
> > trees to other SCMs, and they seem to prefer merge-order.
> > This is your chance to correct me about:
> > (a) how I am wrong; (b) how they are wrong.  8;)
> 
> Well, I didn't even realize anybody at all was using it. I've never seen 
> any mention of it, and considering how ungodly slow it is, I would have 
> expected somebody to pipe up about it..
> 
> I did a google search for "git" and "merge-order", and the only actual use 
> (as opposed to mention in a man-page) I found in the 20 hits google showed 
> was an old version of gitk.

http://www.gelato.unsw.edu.au/archives/git/0511/12965.html

But topo-order would probably work as well, the default ordering just
didn't work correctly in my tests.

Certainly not a case that votes *against* removal, just noting an actual
user at one point.

-- 

Ryan Anderson
  sometimes Pug Majere

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 17:23   ` Linus Torvalds
  2006-02-24 17:32     ` Ryan Anderson
@ 2006-02-24 17:47     ` Randy.Dunlap
  2006-02-24 18:07       ` Linus Torvalds
  1 sibling, 1 reply; 9+ messages in thread
From: Randy.Dunlap @ 2006-02-24 17:47 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Randy.Dunlap, Junio C Hamano, Git Mailing List

On Fri, 24 Feb 2006, Linus Torvalds wrote:

>
>
> On Fri, 24 Feb 2006, Randy.Dunlap wrote:
> >
> > I'm just a lowly user, but I see people trying to export git
> > trees to other SCMs, and they seem to prefer merge-order.
> > This is your chance to correct me about:
> > (a) how I am wrong; (b) how they are wrong.  8;)
>
> Well, I didn't even realize anybody at all was using it. I've never seen
> any mention of it, and considering how ungodly slow it is, I would have
> expected somebody to pipe up about it..
>
> I did a google search for "git" and "merge-order", and the only actual use
> (as opposed to mention in a man-page) I found in the 20 hits google showed
> was an old version of gitk.
>
> > I've heard/seen you say that merge-order is not interesting,
> > but I still believe that *your* merge order of the Linux kernel
> > tree is almost all that people really care about.
>
> Could you actually point to somebody using it? They're hiding it well.

Other than Ryan's reply, I found 2 users in a quick search,
but they have already stated that they are willing to change, so I
don't see objections unless someone else comes forward.

(Martin Langhoff, archimport)
http://marc.theaimsgroup.com/?l=git&m=112682069025547&w=2
Jon Seymour:
http://marc.theaimsgroup.com/?l=git&m=112998877717814&w=2

> > Apparently I needed to go to LCA to hear you discuss git.
>
> I certainly never delved into any of that..

Darn.

-- 
~Randy

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 17:47     ` Randy.Dunlap
@ 2006-02-24 18:07       ` Linus Torvalds
  2006-02-24 18:10         ` Randy.Dunlap
  2006-02-24 21:37         ` Johannes Schindelin
  0 siblings, 2 replies; 9+ messages in thread
From: Linus Torvalds @ 2006-02-24 18:07 UTC (permalink / raw)
  To: Randy.Dunlap; +Cc: Junio C Hamano, Git Mailing List



On Fri, 24 Feb 2006, Randy.Dunlap wrote:
>
> Other than Ryan's reply, I found 2 users in a quick search,
> but they have already stated that they are willing to change, so I
> don't see objections unless someone else comes forward.

One thing we could do - and might be simpler - is to make the merge-order 
thing be a post-processing phase of git-rev-list.

IOW, instead of

	git-rev-list --merge-order

we could perhaps do

	git-rev-list --parents [--topo-order?] | git-merge-order

so that the merge-order code wouldn't impact git-rev-list itself.

As it is, the merge-order code ends up hooking into the "process_commit" 
thing (and thus to "filter_commit" which does the parent rewriting, and 
then show_commit), which makes it harder to work with.

Now, rev-list.c is not the biggest file (apply.c is about twice the size), 
but in many ways it's the most complex one by far. It's also the most 
performance-critical one, and the one that it would be really nice if we 
were to be able to libify it.

For example, instead of the horrid scriping language, I _think_ I could 
almost libify it by just hooking into "show_commit", and using a callback 
function for that (and then the stand-alone program would just make the 
callback function be one that prints out the commit). 

With some care, we might be able to make things like "git diff" be small C 
programs (or, more likely, to save space and not replicate the binaries 
many times - make the "git" binary able to do all the simple things on its 
own: "git-diff" would be just a link to "git").

That would possibly be a simpler way to get away from using nonportable 
scripts. Plain C really does remain one of the most portable things out 
there.

			Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 18:07       ` Linus Torvalds
@ 2006-02-24 18:10         ` Randy.Dunlap
  2006-02-24 21:37         ` Johannes Schindelin
  1 sibling, 0 replies; 9+ messages in thread
From: Randy.Dunlap @ 2006-02-24 18:10 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Randy.Dunlap, Junio C Hamano, Git Mailing List

On Fri, 24 Feb 2006, Linus Torvalds wrote:

>
>
> On Fri, 24 Feb 2006, Randy.Dunlap wrote:
> >
> > Other than Ryan's reply, I found 2 users in a quick search,
> > but they have already stated that they are willing to change, so I
> > don't see objections unless someone else comes forward.
>
> One thing we could do - and might be simpler - is to make the merge-order
> thing be a post-processing phase of git-rev-list.
>
> IOW, instead of
>
> 	git-rev-list --merge-order
>
> we could perhaps do
>
> 	git-rev-list --parents [--topo-order?] | git-merge-order
>
> so that the merge-order code wouldn't impact git-rev-list itself.

Makes sense to me... thanks.
But even that may not be needed if noone else really needs it.

> As it is, the merge-order code ends up hooking into the "process_commit"
> thing (and thus to "filter_commit" which does the parent rewriting, and
> then show_commit), which makes it harder to work with.
>
> Now, rev-list.c is not the biggest file (apply.c is about twice the size),
> but in many ways it's the most complex one by far. It's also the most
> performance-critical one, and the one that it would be really nice if we
> were to be able to libify it.
>
> For example, instead of the horrid scriping language, I _think_ I could
> almost libify it by just hooking into "show_commit", and using a callback
> function for that (and then the stand-alone program would just make the
> callback function be one that prints out the commit).
>
> With some care, we might be able to make things like "git diff" be small C
> programs (or, more likely, to save space and not replicate the binaries
> many times - make the "git" binary able to do all the simple things on its
> own: "git-diff" would be just a link to "git").
>
> That would possibly be a simpler way to get away from using nonportable
> scripts. Plain C really does remain one of the most portable things out
> there.

-- 
~Randy

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 16:32 Removal of "--merge-order"? Linus Torvalds
  2006-02-24 16:53 ` Randy.Dunlap
@ 2006-02-24 19:25 ` Junio C Hamano
  1 sibling, 0 replies; 9+ messages in thread
From: Junio C Hamano @ 2006-02-24 19:25 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: git

Linus Torvalds <torvalds@osdl.org> writes:

> In other words, I'd really prefer if it was gone. Some of the things I 
> might do to git-rev-list would be much simpler if I didn't have to worry 
> about merge-order, and the way it interfaces with the rest of 
> git-rev-list.
>
> Comments?
>
> 			Linus

I am really glad you brought it up.  I would not miss it at all.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Removal of "--merge-order"?
  2006-02-24 18:07       ` Linus Torvalds
  2006-02-24 18:10         ` Randy.Dunlap
@ 2006-02-24 21:37         ` Johannes Schindelin
  1 sibling, 0 replies; 9+ messages in thread
From: Johannes Schindelin @ 2006-02-24 21:37 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Randy.Dunlap, Junio C Hamano, Git Mailing List

Hi,

On Fri, 24 Feb 2006, Linus Torvalds wrote:

> Now, rev-list.c is not the biggest file (apply.c is about twice the size), 
> but in many ways it's the most complex one by far. It's also the most 
> performance-critical one, and the one that it would be really nice if we 
> were to be able to libify it.

This is what I wanted to try today, but unfortunately I had to do real 
work :-(

> For example, instead of the horrid scriping language, I _think_ I could 
> almost libify it by just hooking into "show_commit", and using a callback 
> function for that (and then the stand-alone program would just make the 
> callback function be one that prints out the commit). 

I don't find the scripting language you invented particularly horrid. 
Maybe some odd things (like "if" branching to the "else" block whenever 
*any* argument was passed), but not horrid.

But in the end I would prefer a libified git, if only to get rid of 
double parsing (if you pipe the output of git-rev-list to another git 
program, chances are that you parse the commit objects at least twice).

> That would possibly be a simpler way to get away from using nonportable 
> scripts. Plain C really does remain one of the most portable things out 
> there.

Yes.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2006-02-24 21:41 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-24 16:32 Removal of "--merge-order"? Linus Torvalds
2006-02-24 16:53 ` Randy.Dunlap
2006-02-24 17:23   ` Linus Torvalds
2006-02-24 17:32     ` Ryan Anderson
2006-02-24 17:47     ` Randy.Dunlap
2006-02-24 18:07       ` Linus Torvalds
2006-02-24 18:10         ` Randy.Dunlap
2006-02-24 21:37         ` Johannes Schindelin
2006-02-24 19:25 ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox