Le 29/05/2016 14:04, Peter Uhnak a écrit :
On Sun, May 29, 2016 at 11:21:21AM +0200, Thierry Goubier wrote:
Le 29/05/2016 11:15, Peter Uhnák a écrit :
> All this is so that my .5 would not conflict with someone else .5
How is this a problem? Because it will be "Me.5" and "You.5", so there
can't be any conflict.
Me.5 and Me.5 are possible...
Think of numbering your own stuff on two different branches.
More, Metacello depends on Me.5 5 to be greater than You.5 5 for some of the
baselines / configurations to work properly :)
Can't it use the ancestry to decide?
I suggested that to Dale... Disregard version numbers, only consider as
newer if the other is in the ancestry chain.
Would also be a lot more precise, because we would then use the package
version UID instead of the name.version number approximation which can
leads to failures or loading the wrong package in some cases.
Because my impression is from this that merges are naive, compared to
git which actually checks the ancestry of both up the common endpoint
and diffs based on that.
This does not describe the Monticello merges. Monticello merges do walk
the ancestry chain to find a common ancestor and does a three way merge,
as git does.
The problem is that the Monticello ancestry chain is often damaged for
three reasons: removing part of it to reduce memory usage (Done for the
Pharo3 release), removing all or part of it because your package
ancestry chain is too long (I remember seeing some packages doing that
on purpose?), the common ancestor doesn't exist anymore in the
repositories visible to Monticello (long-lived packages that have moved
between repositories, typically).
When Monticello sees a version in the history, it expects the full
package to be available in the repositories; if this package is the
common ancestor of the merge and can't be retrieved, then the merge will
fail.
What GitFileTree/git does there is to ensure that if a version is in the
ancestry, it can be retrieved. Git merge also use that property. Any
GitFileTree-like layer would provide the same property (FossilFileTree,
for example).
Note: in the git documentation, it is stated that git may create virtual
ancestors in some cases, to simplify/reduce the merge work. In such
cases, if set up, the gitfiletree merge driver will be called for all
those merges (i.e. a single merge in git may trigger multiple merges).
Obvious, isn't it ;)
Thierry
Peter
Thierry
Peter
On Sun, May 29, 2016 at 10:37 AM, Sven Van Caekenberghe <s...@stfx.eu
<mailto:s...@stfx.eu>> wrote:
> On 29 May 2016, at 10:28, Holger Freyther <hol...@freyther.de
<mailto:hol...@freyther.de>> wrote:
>
>
>> On 29 May 2016, at 09:58, Sven Van Caekenberghe <s...@stfx.eu
<mailto:s...@stfx.eu>> wrote:
>>
>>
>>>
>>> For some reason the package manager is refreshing all packages. I
don't know why it happens, and it's quite annoying (because it slows down commits), but
it doesn't cause any actual problems, so don't worry about it too much.
>>
>> As I understand it, what happens is the following: before you commit to
your MC repo, you have to find the next version number; a check is then done in all
relevant repos; the cached content is not used, but an actual refresh is done. All
this is so that my .5 would not conflict with someone else .5 - the chance that this
happens is very small, and the check does not really prevent it.
>
> I assumed that but can it be limited to the Repositories that are
associated with the package? I am afraid that next time I travel I can not commit
to my local repository (and ofcourse the speed part). :)
We should go one step further: add an option to totally disable this
check to go outside the target repo, it makes little sense. But MC
is a complex beast ...
> holger