mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Olivier Galibert <galibert@pobox.com>
To: Pavel Machek <pavel@suse.cz>
Cc: linux-kernel@vger.kernel.org
Subject: Re: BitBucket: GPL-ed KitBeeper clone
Date: Fri, 7 Mar 2003 17:54:13 +0100	[thread overview]
Message-ID: <20030307165413.GA78966@dspnet.fr.eu.org> (raw)
In-Reply-To: <20030307123237.GG18420@atrey.karlin.mff.cuni.cz>

On Fri, Mar 07, 2003 at 01:32:37PM +0100, Pavel Machek wrote:
> > Nope.  CVS uses RCS, and RCS only knows about trees, not graphs.
> > Specifically, branch merges are not tagged as such, and as a result
> > CVS is unable to pick up the best grandparent when doing a merge.
> > That's the main reason of why branching under CVS is so painful
> > (forgetting about the performance issues).
> 
> I see. But I still somehow can not understand how merging is
> possible. Merge possibly means work-by-hand, right? So it is not as
> simple as noting that 1.8 and 1.7.1.1 were merged into 1.9, no? [And
> what if developer did really crap job at merging that, like dropping
> all changes from 1.7.1.1?]

Calling A and B the versions to merge and R the reference, diff3 uses
this algorithm (probably the simplest possible):
- Compute the diff between A and R, call it dA
- Compute the diff between B and R, call it dB
- Merge the two diffs into one (and conflict where you can't)
- Apply the merged diff to R

Better algorithms do the alignments per-character instead of per-line,
detect moved and changed functions, detect duplicate inserts, etc.
None, of course, is perfect, as Larry could tell you.

Now if the development went that way:

1.7  -> 1.7.1.1 (branching, i.e. copy)
 v         v
 v      1.7.1.2
1.8        v
 v   -> 1.7.1.3 (merge)
1.9        v
 v         v
1.10       v
 v   -> 1.7.1.4 (merge)
 v         v
 v      1.7.1.5
 v         v
1.11 <-         (merge)

Pretty much standard, a developper created a new branch, made some
changes in it, synced with mainline, synced with mailine again a
little later, made some new changes and finally folded the branch back
in the mainline.  Let's admit the developper changes don't conflict by
themselves with the mainline changes.

CVS, for all the merges, is going to pick 1.7 as the reference.  The
first time, for 1.7.1.3, it's going to work correctly.  It will fuse
the 1.7->1.8 patch with the 1.7.1.1->1.7.1.2 patch and apply the
result to 1.7 to get 1.7.1.3.  The two patches have no reason to
overlap.  1.7.1.2->1.7.1.3 will essentially be identical to 1.7->1.8,
and 1.8->1.7.1.3 will essentially be identical to 1.7.1.2->1.7.1.3.

As soon as the next merge, i.e 1.7.1.4, it breaks.  CVS is going to
try to fuse the 1.7->1.10 patch with the 1.7->1.7.1.3 patch.  But
1.7->1.10 = 1.7->1.8+1.8->1.10 and 1.7->1.7.1.3 ~= 1.7->1.7.1.2+1.7->1.8.
So they have components in common, hance they _will_ conflict.

If CVS had taken the latest common ancestor by keeping in the
repository the existence of the 1.8->1.7.1.3 link, it would have taken
the 1.8 version as the reference.  The patches to fuse would have been
1.8->1.10 and 1.8->1.7.1.3, which have no reason to conflict.

Same for the next merge, the optimal merge point is in that case 1.10,
and it ends up being a null merge, i.e. 1.11 is a copy of 1.7.1.5.

You can see the final structure is a DAG, with each node having a max
of 2 ancestors.  And that's what PRCS and bk are working with,
fundamentally.

  OG.

  reply	other threads:[~2003-03-07 16:43 UTC|newest]

Thread overview: 199+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-02  0:11 Adam J. Richter
2003-03-02  0:20 ` Larry McVoy
2003-03-02  0:20 ` David Lang
2003-03-02  0:49 ` Arador
2003-03-02  1:03   ` Jeff Garzik
2003-03-02  2:15   ` Alan Cox
2003-03-02  1:19     ` Jeff Garzik
2003-03-02  1:40       ` BitBucket: GPL-ed *notrademarkhere* clone Andrea Arcangeli
2003-03-02  1:45         ` Jeff Garzik
2003-03-02  2:09           ` Andrea Arcangeli
2003-03-02 17:28             ` Jeff Garzik
2003-03-02 18:16               ` Andrea Arcangeli
2003-03-02 20:12                 ` Jeff Garzik
2003-03-02 21:49                   ` Geert Uytterhoeven
2003-03-03 18:37                 ` Larry McVoy
2003-03-03 18:46                   ` Larry McVoy
2003-03-03 22:57                   ` Andrea Arcangeli
2003-03-03 23:14                     ` Pavel Machek
2003-03-03 23:56                     ` David Lang
2003-03-04  0:02                       ` Jeff Garzik
2003-03-04  0:05                         ` Larry McVoy
2003-03-04  0:15                         ` Andrea Arcangeli
2003-03-04  0:30                           ` Jeff Garzik
2003-03-04  2:20                       ` Martin J. Bligh
2003-03-04  5:29                         ` Linus Torvalds
2003-03-04  5:56                           ` Dimitrie O. Paun
2003-03-04 14:51                             ` Jeff Garzik
2003-03-02  3:29           ` H. Peter Anvin
2003-03-02 17:12             ` Jeff Garzik
2003-03-02 18:39               ` H. Peter Anvin
2003-03-02 20:01                 ` Jeff Garzik
2003-03-03  0:47               ` nickn
2003-03-03  0:55                 ` David Lang
2003-03-03  2:31                   ` Jeff Garzik
2003-03-03  2:32                 ` Jeff Garzik
2003-03-04  1:07                   ` Horst von Brand
2003-03-04  1:10                     ` H. Peter Anvin
2003-03-03 21:53               ` Joel Becker
2003-03-04 23:37                 ` Olaf Hering
2003-03-06 16:47                 ` Pavel Machek
2003-03-06 16:41               ` Pavel Machek
2003-03-07 11:24                 ` Tupshin Harper
2003-03-07 11:28                   ` Pavel Machek
2003-03-07 21:53                 ` H. Peter Anvin
2003-03-08 23:18                   ` Daniel Phillips
2003-03-03  0:13           ` Pavel Machek
2003-03-03  0:10       ` BitBucket: GPL-ed KitBeeper clone Pavel Machek
2003-03-04 16:16         ` David Woodhouse
2003-03-04 16:27           ` Pavel Machek
2003-03-02  1:26 ` Olivier Galibert
2003-03-06 16:18   ` Pavel Machek
2003-03-07 12:12     ` Olivier Galibert
2003-03-07 12:32       ` Pavel Machek
2003-03-07 16:54         ` Olivier Galibert [this message]
2003-03-07 17:14           ` Geert Uytterhoeven
2003-03-07 19:08           ` Pavel Machek
2003-03-07 19:25             ` Eli Carter
2003-03-07 20:29               ` Pavel Machek
2003-03-07 23:16             ` Linus Torvalds
2003-03-08 22:52               ` Zack Brown
2003-03-09  0:05                 ` Larry McVoy
2003-03-09  1:21                   ` Davide Libenzi
2003-03-09  2:45                   ` Zack Brown
2003-03-09  3:19                     ` Roman Zippel
2003-03-09  3:42                       ` Linus Torvalds
2003-03-09  4:32                         ` Roman Zippel
2003-03-09 13:34                           ` Eric W. Biederman
2003-03-09 15:35                             ` Roman Zippel
2003-03-09 16:55                               ` Martin J. Bligh
2003-03-09 17:20                                 ` Zack Brown
2003-03-09 17:48                                   ` Martin J. Bligh
2003-03-09 19:58                                   ` Larry McVoy
2003-03-09 21:32                                     ` Zack Brown
2003-03-09 21:54                                       ` Valdis.Kletnieks
2003-03-09 23:28                                         ` Larry McVoy
2003-03-13 20:00                                     ` Pavel Machek
2003-03-09 17:39                                 ` Linus Torvalds
2003-03-09 17:58                                   ` Martin J. Bligh
2003-03-09 18:20                                   ` Larry McVoy
2003-03-09 23:19                                     ` fs
2003-03-13  0:41                                     ` Pavel Machek
2003-03-13 21:21                                       ` Horst von Brand
2003-03-09 20:01                                   ` Roman Zippel
2003-03-13  0:13                             ` Pavel Machek
2003-03-09 14:49                         ` Olivier Galibert
2003-03-13  0:05                         ` Pavel Machek
2003-03-10  0:02                     ` Thoughts about ideal kernel SCM Petr Baudis
2003-03-10  0:32                       ` Larry McVoy
2003-03-12 19:29                         ` Petr Baudis
2003-03-13 10:36                       ` Pavel Machek
2003-03-14 22:56                         ` Petr Baudis
2003-03-17 20:59                       ` Petr Baudis
2003-03-10  3:41                     ` BitBucket: GPL-ed KitBeeper clone Horst von Brand
2003-03-10 13:52                       ` Jamie Lokier
2003-03-10 23:03                     ` Daniel Phillips
2003-03-11 18:40                       ` Zack Brown
2003-03-11 18:46                         ` Martin J. Bligh
2003-03-11 19:30                           ` Daniel Phillips
2003-03-11 19:33                             ` Martin J. Bligh
2003-03-11 20:08                               ` Andrew Morton
2003-03-11 20:29                                 ` Martin J. Bligh
2003-03-12  6:14                             ` Werner Almesberger
2003-03-13  2:48                               ` Daniel Phillips
2003-03-13  3:11                                 ` Werner Almesberger
2003-03-14 12:29                             ` Pavel Machek
2003-03-15 20:53                               ` Martin J. Bligh
2003-03-15 21:26                               ` Daniel Phillips
2003-03-15 21:32                               ` Petr Baudis
2003-03-15 23:39                                 ` Petr Baudis
2003-03-16  0:39                               ` Horst von Brand
2003-04-07 21:22                               ` Petr Baudis
2003-03-12  3:47                         ` Horst von Brand
2003-03-12  4:03                           ` Larry McVoy
2003-03-12  4:49                             ` [PATCH] ~/kernel/sys.c (2.5.64) (trivial) Jay Patrick Howard
2003-03-12  5:22                           ` BitBucket: GPL-ed KitBeeper clone Zack Brown
2003-03-12  5:44                             ` Horst von Brand
2003-03-12 13:48                               ` Daniel Phillips
2003-03-13  1:03                                 ` Horst von Brand
2003-03-13 16:53                                   ` Daniel Phillips
2003-03-15 15:02                                     ` Horst von Brand
2003-03-15 21:25                                       ` Daniel Phillips
2003-03-12  6:19                             ` Werner Almesberger
2003-03-13  1:31                               ` Horst von Brand
2003-03-12 15:32                             ` Horst von Brand
2003-03-12 16:13                               ` Daniel Phillips
2003-03-12 20:37                                 ` Horst von Brand
2003-03-12 20:54                                   ` H. Peter Anvin
2003-03-13  2:00                                   ` Daniel Phillips
2003-03-15  1:03                                     ` Horst von Brand
2003-03-12 13:22                           ` Daniel Phillips
2003-03-13  0:52                             ` Horst von Brand
2003-03-13 17:00                               ` Daniel Phillips
2003-03-13 21:48                                 ` Zack Brown
2003-03-13 22:04                                   ` Daniel Phillips
2003-03-15 16:21                                 ` Horst von Brand
2003-03-15 21:25                                   ` Daniel Phillips
2003-03-15 21:53                                     ` Robert Anderson
2003-03-15 21:50                                       ` Randy.Dunlap
2003-03-15 22:16                                         ` Robert Anderson
2003-03-15 22:18                                         ` Robert Anderson
2003-03-16  0:18                                       ` Petr Baudis
2003-03-16  0:53                                         ` Davide Libenzi
2003-03-16  0:55                                         ` [arch-users] " Stig Brautaset
2003-03-16  1:44                                         ` Tom Lord
2003-03-16  2:06                                           ` Adam Spiers
2003-03-16  3:28                                             ` David Lang
2003-03-16  5:43                                         ` Robert Anderson
2003-03-16 11:57                                         ` (Re: BitBucket: GPL-ed KitBeeper clone) Moving to arch-users Petr Baudis
2003-03-14 11:34                         ` BitBucket: GPL-ed KitBeeper clone Pavel Machek
2003-03-12 23:38                     ` Pavel Machek
2003-03-09  2:06             ` Horst von Brand
     [not found]             ` <b4b98v_14m_1@penguin.transmeta.com>
2003-03-12 23:23               ` Pavel Machek
2003-03-13 21:15                 ` Horst von Brand
2003-03-08  0:18       ` Olaf Dietsche
2003-03-02  1:37 ` Filip Van Raemdonck
  -- strict thread matches above, loose matches on Subject: below --
2003-04-08 17:52 Chuck Ebbert
2003-04-08 18:02 ` Larry McVoy
2003-04-08 23:19   ` Jamie Lokier
2003-04-09  0:47     ` Larry McVoy
2003-04-09  1:34       ` Jamie Lokier
2003-04-09  1:43       ` Robert White
2003-04-09  2:09     ` Mark Mielke
2003-04-09 13:14       ` Mr. James W. Laferriere
2003-04-09 13:35         ` Matti Aarnio
2003-04-08 13:06 Chuck Ebbert
2003-04-07 23:57 Chuck Ebbert
2003-04-08  0:30 ` Larry McVoy
     [not found] <1047571030.5373.161.camel@passion.cambridge.redhat.com>
2003-03-15 14:17 ` Horst von Brand
2003-03-15 18:48   ` Larry McVoy
2003-03-15 18:51   ` David Woodhouse
     [not found] <20030309001008$2ed5@gated-at.bofh.it>
     [not found] ` <20030309001008$4e61@gated-at.bofh.it>
     [not found]   ` <20030309001008$0732@gated-at.bofh.it>
     [not found]     ` <20030309001008$747c@gated-at.bofh.it>
     [not found]       ` <20030309001008$6342@gated-at.bofh.it>
2003-03-15 10:47         ` Kai Henningsen
2003-03-13 16:21 Ed Vance
2003-03-15 14:31 ` Horst von Brand
2003-03-12 19:00 Kaz Kylheku
2003-03-03 17:02 Adam J. Richter
2003-03-02  2:23 Adam J. Richter
2003-03-03 15:26 ` Edward S. Marshall
2003-03-03 23:06   ` Daniel Phillips
2003-02-26 20:02 BitBucket: GPL-ed BitKeeper clone Pavel Machek
2003-03-01 18:05 ` BitBucket: GPL-ed KitBeeper clone Pavel Janík
2003-03-01 18:39   ` Christoph Hellwig
2003-03-01 22:43     ` Pavel Janík
2003-03-02  9:11       ` Christoph Hellwig
2003-03-02  9:30         ` John Bradford
2003-03-02  9:32           ` Christoph Hellwig
2003-03-03 12:39           ` Pavel Machek
2003-03-03 14:12           ` Alan Cox
2003-03-03 13:57             ` John Bradford
2003-03-03 14:22               ` Richard B. Johnson
2003-03-03 15:08                 ` John Bradford
2003-03-03 17:50                   ` David Lang
2003-03-03 19:37                   ` Pavel Machek
2003-03-03 19:49                     ` John Bradford
2003-03-03 14:22               ` Charles Cazabon
2003-03-02  9:57         ` Pavel Janík
2003-03-03  8:05       ` Helge Hafting
2003-03-03  8:28         ` Bernd Eckenfels
2003-03-01 20:58   ` Paul Fulghum
2003-03-02  4:52     ` Mike Galbraith
2003-03-03  0:02   ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030307165413.GA78966@dspnet.fr.eu.org \
    --to=galibert@pobox.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®