darcs

Patch 420 resolve issue1809: don't call modernizePatch during co...

Title resolve issue1809: don't call modernizePatch during co...
Superseder Nosy List ganesh, tux_rocker
Related Issues
Status accepted Assigned To tux_rocker
Milestone

Created on 2010-10-16.23:08:42 by ganesh, last changed 2011-05-10.22:06:23 by darcswatch. Tracked on DarcsWatch.

Files
File name Status Uploaded Type Edit Remove
resolve-issue1809_-don_t-call-modernizepatch-during-conversion.dpatch ganesh, 2010-10-16.23:08:42 text/x-darcs-patch
unnamed ganesh, 2010-10-16.23:08:42
See mailing list archives for discussion on individual patches.
Messages
msg12729 (view) Author: ganesh Date: 2010-10-16.23:08:42
1 patch for repository http://darcs.net/screened:

Sat Oct 16 23:48:48 BST 2010  Ganesh Sittampalam <ganesh@earth.li>
  * resolve issue1809: don't call modernizePatch during conversion
  
  The call to modernizePatch was introduced to fix issue744, but:
  (a) It seems to have been ineffective as it's only called for
  patches where isMerger is true, so none of the patch transformations
  can kick in.
  (b) It had the apparently unwanted side-effect of completely disabling
  any attempts to convert mergers into conflictors.
  
  This patch reverts that, and adds some test material for the
  'darcs convert' command.
Attachments
msg12743 (view) Author: darcswatch Date: 2010-10-17.11:29:39
This patch bundle (with 1 patches) was just applied to the repository http://darcs.net/screened.
This message was brought to you by DarcsWatch
http://darcswatch.nomeata.de/repo_http:__darcs.net_screened.html#bundle-5db3c715deec1adeca4396ab370cb6bd55c48847
msg12854 (view) Author: tux_rocker Date: 2010-10-31.16:34:40
Hi,

This looks as if it doesn't break things, so I am applying it. I do have a
question about the generated data files below however, out of curiosity :)

> New patches:
> 
> [resolve issue1809: don't call modernizePatch during conversion
> Ganesh Sittampalam <ganesh@earth.li>**20101016224848
>  Ignore-this: 884eedd93a6718c791494c995eedcc03
>  
>  The call to modernizePatch was introduced to fix issue744, but:
>  (a) It seems to have been ineffective as it's only called for
>  patches where isMerger is true, so none of the patch transformations
>  can kick in.
>  (b) It had the apparently unwanted side-effect of completely disabling
>  any attempts to convert mergers into conflictors.
>  
>  This patch reverts that, and adds some test material for the
>  'darcs convert' command.
>  
> hunk ./src/Darcs/Commands/Convert.lhs 189
>                       Just d -> p : concatMap fixDep d
>                       Nothing -> [p]
>            convertOne :: Patch C(x y) -> FL RealPatch C(x y)
> -          convertOne x | isMerger x = case mergeUnravelled $ publicUnravel $ modernizePatch x of
> +          convertOne x | isMerger x = case mergeUnravelled $ publicUnravel x of

So this is the real change here: we remove a call to modernizePatch. Notice
the "isMerger" guard, which means that modernizePatch will never be invoked
on the ComP patches that contain the weird "mv a b ; add b" sequences that it
is supposed to get rid of.

> hunk ./src/Darcs/Patch/Prim.lhs 953
>                       then Nothing
>                       else Just $ before : tok : rest
>  
> -modernizePrim :: Prim C(x y) -> FL Prim C(x y)
> -modernizePrim (Split ps) = concatFL $ mapFL_FL modernizePrim ps
> -modernizePrim p = p :>: NilFL
> -
>  instance MyEq Prim where
>      unsafeCompare (Move a b) (Move c d) = a == c && b == d
>      unsafeCompare (DP d1 p1) (DP d2 p2)
> hunk ./src/Darcs/Patch/V1/Commute.lhs 693
>      isHunk p = do PP p' <- return p
>                    isHunk p'
>  
> --- |@modernizePatch@ is used during conversion to Darcs 2 format.
> --- It does the following:
> ---
> ---   * removes mergers by linearising them, thus removing the ability
> ---     to commute them
> ---
> ---   * drops mv a b ; add b which was introduced by an error in earlier
> ---     versions of darcs (TODO: check this; identify the versions)
> -modernizePatch :: Patch C(x y) -> Patch C(x y)
> -modernizePatch p@(Merger _ _ _ _) = fromPrims $ effect p
> -modernizePatch p@(Regrem _ _ _ _) = fromPrims $ effect p
> -modernizePatch (ComP ps) = ComP $ filtermv $ mapFL_FL modernizePatch ps
> -    where filtermv :: FL Patch C(x y) -> FL Patch C(x y)
> -          filtermv (PP (Move _ b :: Prim C(x z)):>:xs)
> -            | IsEq <- hasadd xs = filtermv xs
> -              where hasadd :: FL Patch C(a b) -> EqCheck C(x z)
> -                    hasadd (PP (FP b' AddFile):>:_) | b' == b = unsafeCoerceP IsEq
> -                    hasadd (PP (DP b' AddDir):>:_) | b' == b = unsafeCoerceP IsEq
> -                    hasadd (PP (FP b' RmFile):>:_) | b' == b = NotEq
> -                    hasadd (PP (DP b' RmDir):>:_) | b' == b = NotEq
> -                    hasadd (_:>:z) = hasadd z
> -                    hasadd NilFL = NotEq
> -          filtermv (x:>:xs) = x :>: filtermv xs
> -          filtermv NilFL = NilFL
> -
> -modernizePatch (PP p) = fromPrims $ modernizePrim p
> -
>  instance FromPrims Patch where
>      fromPrims (p :>: NilFL) = PP p
>      fromPrims ps = joinPatchesFL $ mapFL_FL PP ps

And so we completely remove modernizePatch. It is apparently unused now.

In the following primitive patches, Ganesh adds a test for the convert
command. It uses data files in the tests/data/convert directory.

> addfile ./tests/bin/convert-writer.sh
> hunk ./tests/bin/convert-writer.sh 1
> +#!/usr/bin/env bash
> hunk ./tests/bin/convert-writer.sh 3
> +## Copyright (C) 2009 Ganesh Sittampalam
> +##
> +## Permission is hereby granted, free of charge, to any person
> +## obtaining a copy of this software and associated documentation
> +## files (the "Software"), to deal in the Software without
> +## restriction, including without limitation the rights to use, copy,
> +## modify, merge, publish, distribute, sublicense, and/or sell copies
> +## of the Software, and to permit persons to whom the Software is
> +## furnished to do so, subject to the following conditions:
> +##
> +## The above copyright notice and this permission notice shall be
> +## included in all copies or substantial portions of the Software.
> +##
> +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> +## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> +## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> +## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> +## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> +## SOFTWARE.
> +
> +# This script is a convenient hack for generating test material
> +# for convert.sh.
> +
> +# To generate new test material, move this into the tests
> +# directory temporarily, set up the test repo in the relevant
> +# section of this code, set the test name, then
> +# 'cabal test convert-writer.sh', then manually inspect the
> +# test data and/or play with the repo it made to be sure it's
> +# as wanted.
> +
> +# Note that the script is deliberately setup to fail so we
> +# can inspect the output of darcs convert, and also get hold of
> +# the generated test repos easily for playing with.
> +
> +. lib
> +
> +# only run this once
> +grep darcs-2 $HOME/.darcs/defaults || exit 200
> +
> +rm -rf temp
> +mkdir temp
> +cd temp
> +
> +# set up the test repo here
> +mkdir repo
> +cd repo
> +darcs init --hashed
> +echo wibble > wibble
> +darcs rec -lam 'wibble'
> +cd ..
> +
> +darcs get repo repoA
> +cd repoA
> +echo 'A' >> wibble
> +darcs rec -lam 'A'
> +cd ..
> +
> +darcs get repo repoB
> +cd repoB
> +echo 'B' >> wibble
> +darcs rec -lam 'B'
> +cd ..
> +
> +darcs get repoA repoAB
> +cd repoAB
> +darcs pull -a --allow-conflicts ../repoB
> +echo 'AB' >> wibble
> +darcs rec -lam 'AB'
> +cd ..
> +
> +darcs get repo repoC
> +cd repoC
> +echo 'C' >> wibble
> +darcs rec -lam 'C'
> +cd ..
> +
> +darcs get repoAB repoABC
> +cd repoABC
> +darcs pull -a --allow-conflicts ../repoC
> +echo 'ABC' >> wibble
> +darcs rec -lam 'ABC'
> +cd ..
> +
> +darcs get repo repoD
> +cd repoD
> +echo 'D' >> wibble
> +darcs rec -lam 'D'
> +cd ..
> +
> +
> +cd repo
> +darcs pull -a --allow-conflicts ../repoABC
> +darcs pull -a --allow-conflicts ../repoD
> +cd ..
> +
> +# end test repo setup: change the test name below too
> +testname=tworesolutions
> +
> +echo 'I understand the consequences of my action' | darcs convert repo repo2
> +
> +mkdir empty-hashed
> +cd empty-hashed
> +darcs init --hashed
> +cd ..
> +
> +mkdir empty-darcs2
> +cd empty-darcs2
> +darcs init --darcs-2
> +cd ..
> +
> +cd repo
> +darcs send -a -o $TESTDATA/convert/darcs1/$testname.dpatch ../empty-hashed
> +cd ..
> +
> +cd repo2
> +darcs send -a -o $TESTDATA/convert/darcs2/$testname.dpatch ../empty-darcs2
> +cd ..
> +
> +# fail so we can see the output
> +exit 1

This is a script called convert-writer that creates repositories that contain
conflicts and resolutions in a couple of ways.  It only creates hunk-hunk
conflicts though. It was used to make the test data in tests/data/convert.

> addfile ./tests/convert.sh
> hunk ./tests/convert.sh 1
> +#!/usr/bin/env bash
> +
> +## Tests for convert command based on previously checked results
> +## to generate new test material for this test,
> +## see bin/convert-writer.sh
> +##
> +## Copyright (C) 2009 Ganesh Sittampalam
> +##
> +## Permission is hereby granted, free of charge, to any person
> +## obtaining a copy of this software and associated documentation
> +## files (the "Software"), to deal in the Software without
> +## restriction, including without limitation the rights to use, copy,
> +## modify, merge, publish, distribute, sublicense, and/or sell copies
> +## of the Software, and to permit persons to whom the Software is
> +## furnished to do so, subject to the following conditions:
> +##
> +## The above copyright notice and this permission notice shall be
> +## included in all copies or substantial portions of the Software.
> +##
> +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> +## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> +## BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> +## ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> +## CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> +## SOFTWARE.
> +
> +. lib
> +
> +grep old-fashioned $HOME/.darcs/defaults || grep hashed $HOME/.darcs/defaults || exit 200
> +
> +runtest() {
> +    rm -rf temp
> +    mkdir temp
> +    cd temp
> +
> +    mkdir repo
> +    cd repo
> +    darcs init
> +    darcs apply --allow-conflicts $TESTDATA/convert/darcs1/$1.dpatch
> +    cd ..
> +    echo 'I understand the consequences of my action' | darcs convert repo repo2
> +    mkdir empty-darcs2
> +    cd empty-darcs2
> +    darcs init --darcs-2
> +    cd ..
> +    cd repo2
> +    darcs send -a -o ../$1-darcs2.dpatch ../empty-darcs2
> +    cd ..
> +    diff -I'1 patch for repository ' -I'patches for repository ' -u $TESTDATA/convert/darcs2/$1.dpatch $1-darcs2.dpatch
> +}
> +
> +runtest simple
> +runtest twowayconflict
> +runtest threewayconflict
> +runtest threewayanddep
> +runtest threewayandmultideps
> +runtest resolution
> +runtest tworesolutions

So this is the actual test scripts. For every .dpatch file from the data
directory, it applies it to an empty repo, converts the resulting repo to
darcs-2, and compares the repository contents to a stored reference copy.

Now follows the test data (both the darcs-1 input and darcs-2 reference
copies). In for example the files test/data/convert/darcs1/resolution.dpatch
and tests/data/convert/darcs2/resolution.dpatch, we see that it is tested
that mergers are turned into conflictors.

Comparing the darcs-1 and darcs-2 versions of these files is actually a good
way to learn how darcs handles conflicts :)

I have a question about tests/data/convert/darcs2threewayandmultipdeps.dpatch.
It contains an empty patch B2. If I apply the bundle to an empty repo, I can
unpull B2 just fine without unpulling anything else. This surprises me quite
a bit. Is this an example of the lossy conversion done by 'darcs convert'?

> adddir ./tests/data/convert
> adddir ./tests/data/convert/darcs1
> addfile ./tests/data/convert/darcs1/resolution.dpatch
> hunk ./tests/data/convert/darcs1/resolution.dpatch 1
> +5 patches for repository /tmp/tmp6648/temp/empty-hashed:
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * AB
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * C
> +
> +New patches:
> +
> +[wibble
> +tester**20101016223207
> + Ignore-this: 64b5a1e603ddf61e59421bdde45b3bc
> +] {
> +addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +}
> +[A
> +tester**20101016223207
> + Ignore-this: bc0d30ac5170e1a25ccb20e6cb06ac86
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016223207
> + Ignore-this: 3bbebcf8fa444bdcb31ab799c6754067
> +] merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +[AB
> +tester**20101016223207
> + Ignore-this: 8fa03d26b9dbbcdb50a323e5c58b16dd
> +] hunk ./wibble 2
> + wibble
> ++AB
> +[C
> +tester**20101016223207
> + Ignore-this: e7c0716361e411645066f8a3c2eff769
> +] merger 0.0 (
> +hunk ./wibble 2
> ++AB
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++C
> +)
> +)
> +)
> +
> +Context:
> +
> +Patch bundle hash:
> +b23d175b10d6fdaee3bb25ac92b55723de2822cd
> addfile ./tests/data/convert/darcs1/simple.dpatch
> hunk ./tests/data/convert/darcs1/simple.dpatch 1
> +1 patch for repository /tmp/tmp5746/temp/empty-hashed:
> +
> +Sat Oct 16 23:28:30 BST 2010  tester
> +  * wibble
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222830
> + Ignore-this: f155bc27211e0233c23b8c0a757b8071
> +] {
> +addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +}
> +
> +Context:
> +
> +Patch bundle hash:
> +1bfa82f0941e1dcc13f9f94179dd6a7426ca0b6f
> addfile ./tests/data/convert/darcs1/threewayanddep.dpatch
> hunk ./tests/data/convert/darcs1/threewayanddep.dpatch 1
> +5 patches for repository /tmp/tmp5530/temp/empty-hashed:
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * A1
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * A2
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * C
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222754
> + Ignore-this: 355914edd0f88f0ea7c2ef60aec9c2a1
> +] {
> +addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +}
> +[A1
> +tester**20101016222754
> + Ignore-this: 54df34ebd488b772c37c3d43a38b0bfa
> +] hunk ./wibble 2
> + wibble
> ++A1
> +[A2
> +tester**20101016222754
> + Ignore-this: 4d1b08c7274743e7d0d2f210518d5a19
> +] hunk ./wibble 3
> + wibble
> + A1
> ++A2
> +[B
> +tester**20101016222754
> + Ignore-this: 9ba51da6bb1506afa2104326cd5df54b
> +] merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B
> +)
> +)
> +[C
> +tester**20101016222754
> + Ignore-this: 295e8a851b7a936b3d08b0ce7eaaf2ac
> +] merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B
> +)
> +)
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++C
> +)
> +)
> +)
> +
> +Context:
> +
> +Patch bundle hash:
> +3c77da1c02a49215134a9607493af93d55608f56
> addfile ./tests/data/convert/darcs1/threewayandmultideps.dpatch
> hunk ./tests/data/convert/darcs1/threewayandmultideps.dpatch 1
> +7 patches for repository /tmp/tmp5411/temp/empty-hashed:
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * A1
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * A2
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * B1
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * B2
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * C1
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * C2
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222721
> + Ignore-this: 64432ba123d81c8f0e688b44feb8f587
> +] {
> +addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +}
> +[A1
> +tester**20101016222721
> + Ignore-this: d749f48333e6ff2e994b1df71e76933b
> +] hunk ./wibble 2
> + wibble
> ++A1
> +[A2
> +tester**20101016222721
> + Ignore-this: 6f006a52975a708a8038d52e5e39ef0f
> +] hunk ./wibble 3
> + wibble
> + A1
> ++A2
> +[B1
> +tester**20101016222721
> + Ignore-this: f4d4b5b1c73bd6fa8abe6e5e680d66a7
> +] merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B1
> +)
> +)
> +[B2
> +tester**20101016222721
> + Ignore-this: 1d60b6c0ba913fff4d1e32ad26ae07bb
> +] merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B1
> +)
> +hunk ./wibble 3
> ++A2
> +)
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++B1
> +hunk ./wibble 2
> ++A1
> +)
> +hunk ./wibble 3
> ++B2
> +)
> +)
> +[C1
> +tester**20101016222721
> + Ignore-this: 25b6a6959d19980ad16983a542c6825
> +] merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B1
> +)
> +hunk ./wibble 3
> ++A2
> +)
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++B1
> +hunk ./wibble 2
> ++A1
> +)
> +hunk ./wibble 3
> ++B2
> +)
> +)
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B1
> +)
> +)
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++C1
> +)
> +)
> +)
> +)
> +[C2
> +tester**20101016222721
> + Ignore-this: c16d607216c36d5f7727c64d2ec103d4
> +] merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B1
> +)
> +)
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++C1
> +)
> +)
> +)
> +merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B1
> +)
> +hunk ./wibble 3
> ++A2
> +)
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++B1
> +hunk ./wibble 2
> ++A1
> +)
> +hunk ./wibble 3
> ++B2
> +)
> +)
> +)
> +merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++C1
> +)
> +)
> +merger 0.0 (
> +hunk ./wibble 3
> ++A2
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++B1
> +)
> +)
> +)
> +merger 0.0 (
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A1
> +hunk ./wibble 2
> ++C1
> +)
> +hunk ./wibble 3
> ++A2
> +)
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++C1
> +hunk ./wibble 2
> ++A1
> +)
> +hunk ./wibble 3
> ++C2
> +)
> +)
> +)
> +)
> +
> +Context:
> +
> +Patch bundle hash:
> +1069761dac242f9583871b27db2fabbd00d6f805
> addfile ./tests/data/convert/darcs1/threewayconflict.dpatch
> hunk ./tests/data/convert/darcs1/threewayconflict.dpatch 1
> +4 patches for repository /tmp/tmp5605/temp/empty-hashed:
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * C
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222814
> + Ignore-this: c125275c671c210086eccb12de9f6c1c
> +] {
> +addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +}
> +[A
> +tester**20101016222814
> + Ignore-this: 653be63c1f8a6f4bc1de1e45c0ae9084
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016222814
> + Ignore-this: 1a8e3f57d2baeca09f2dda003e4df58d
> +] merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +[C
> +tester**20101016222814
> + Ignore-this: 9d40b33ef1b73b9a950f39c4e8a75dfe
> +] merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++C
> +)
> +)
> +
> +Context:
> +
> +Patch bundle hash:
> +c189b5635aed28be92cfbcf0de65c0f40c79da7a
> addfile ./tests/data/convert/darcs1/tworesolutions.dpatch
> hunk ./tests/data/convert/darcs1/tworesolutions.dpatch 1
> +7 patches for repository /tmp/tmp6805/temp/empty-hashed:
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * AB
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * C
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * ABC
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * D
> +
> +New patches:
> +
> +[wibble
> +tester**20101016223433
> + Ignore-this: 577185c51e4839dd1041372fbfa8515b
> +] {
> +addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +}
> +[A
> +tester**20101016223433
> + Ignore-this: 580c4417986d5c56590bf36f5a125f38
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016223433
> + Ignore-this: a9f2335fe2dc972fd0bc09edc6252256
> +] merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +[AB
> +tester**20101016223433
> + Ignore-this: cba095e78e2bdfe15dbdf2cb5c69cc6d
> +] hunk ./wibble 2
> + wibble
> ++AB
> +[C
> +tester**20101016223433
> + Ignore-this: da2a7e05abed8dba0077e69e55bd926
> +] merger 0.0 (
> +hunk ./wibble 2
> ++AB
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++C
> +)
> +)
> +)
> +[ABC
> +tester**20101016223433
> + Ignore-this: db94de3935df87d0a991c0ab6a58e5b1
> +] hunk ./wibble 2
> + wibble
> ++ABC
> +[D
> +tester**20101016223433
> + Ignore-this: 829adb4326b290aa6f741b3a15fbabfc
> +] merger 0.0 (
> +hunk ./wibble 2
> ++ABC
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++AB
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++C
> +)
> +)
> +)
> +merger 0.0 (
> +hunk ./wibble 2
> ++AB
> +merger 0.0 (
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++D
> +)
> +)
> +)
> +)
> +)
> +
> +Context:
> +
> +Patch bundle hash:
> +5fc1d0ff89472d10a0b19ae4f7849b1b99d500b4
> addfile ./tests/data/convert/darcs1/twowayconflict.dpatch
> hunk ./tests/data/convert/darcs1/twowayconflict.dpatch 1
> +3 patches for repository /tmp/tmp5677/temp/empty-hashed:
> +
> +Sat Oct 16 23:28:22 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:28:22 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:28:22 BST 2010  tester
> +  * B
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222822
> + Ignore-this: 88662d08dd524d92ad4cca6df0d643e4
> +] {
> +addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +}
> +[A
> +tester**20101016222822
> + Ignore-this: 2d69de402438481946682efcad5e20cd
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016222822
> + Ignore-this: 9c8daaedcb674c022ddbcef19752d694
> +] merger 0.0 (
> +hunk ./wibble 2
> ++A
> +hunk ./wibble 2
> ++B
> +)
> +
> +Context:
> +
> +Patch bundle hash:
> +1e2ce71b56e4666c1b086b09ae351a6c3c768b8c
> adddir ./tests/data/convert/darcs2
> addfile ./tests/data/convert/darcs2/resolution.dpatch
> hunk ./tests/data/convert/darcs2/resolution.dpatch 1
> +5 patches for repository /tmp/tmp6648/temp/empty-darcs2:
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * AB
> +
> +Sat Oct 16 23:32:07 BST 2010  tester
> +  * C
> +
> +New patches:
> +
> +[wibble
> +tester**20101016223207
> + Ignore-this: 64b5a1e603ddf61e59421bdde45b3bc
> +] addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +[A
> +tester**20101016223207
> + Ignore-this: bc0d30ac5170e1a25ccb20e6cb06ac86
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016223207
> + Ignore-this: 3bbebcf8fa444bdcb31ab799c6754067
> +] conflictor [
> +hunk ./wibble 2
> ++A
> +]
> +:
> +hunk ./wibble 2
> ++B
> +[AB
> +tester**20101016223207
> + Ignore-this: 8fa03d26b9dbbcdb50a323e5c58b16dd
> +] hunk ./wibble 2
> + wibble
> ++AB
> +[C
> +tester**20101016223207
> + Ignore-this: e7c0716361e411645066f8a3c2eff769
> +] conflictor [
> +hunk ./wibble 2
> ++AB
> +]
> +:
> +hunk ./wibble 2
> ++C
> +
> +Context:
> +
> +Patch bundle hash:
> +cc43b921f6010f451b2dbe275b7fcd04c3862335
> addfile ./tests/data/convert/darcs2/simple.dpatch
> hunk ./tests/data/convert/darcs2/simple.dpatch 1
> +1 patch for repository /tmp/tmp5746/temp/empty-darcs2:
> +
> +Sat Oct 16 23:28:30 BST 2010  tester
> +  * wibble
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222830
> + Ignore-this: f155bc27211e0233c23b8c0a757b8071
> +] addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +
> +Context:
> +
> +Patch bundle hash:
> +75ced55c52362a8b2ff171b48751d19000fe1790
> addfile ./tests/data/convert/darcs2/threewayanddep.dpatch
> hunk ./tests/data/convert/darcs2/threewayanddep.dpatch 1
> +5 patches for repository /tmp/tmp5530/temp/empty-darcs2:
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * A1
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * A2
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:27:54 BST 2010  tester
> +  * C
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222754
> + Ignore-this: 355914edd0f88f0ea7c2ef60aec9c2a1
> +] addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +[A1
> +tester**20101016222754
> + Ignore-this: 54df34ebd488b772c37c3d43a38b0bfa
> +] hunk ./wibble 2
> + wibble
> ++A1
> +[A2
> +tester**20101016222754
> + Ignore-this: 4d1b08c7274743e7d0d2f210518d5a19
> +] hunk ./wibble 3
> + wibble
> + A1
> ++A2
> +[B
> +tester**20101016222754
> + Ignore-this: 9ba51da6bb1506afa2104326cd5df54b
> +] conflictor [
> +hunk ./wibble 2
> ++A1
> ++A2
> +]
> +:
> +hunk ./wibble 2
> ++B
> +[C
> +tester**20101016222754
> + Ignore-this: 295e8a851b7a936b3d08b0ce7eaaf2ac
> +] conflictor {{
> +:
> +hunk ./wibble 2
> ++A1
> ++A2
> +:
> +hunk ./wibble 2
> ++B
> +}} []
> +:
> +hunk ./wibble 2
> ++C
> +
> +Context:
> +
> +Patch bundle hash:
> +f9974a2fdbdea580b1be0eaba951e6285f9bfb5d
> addfile ./tests/data/convert/darcs2/threewayandmultideps.dpatch
> hunk ./tests/data/convert/darcs2/threewayandmultideps.dpatch 1
> +7 patches for repository /tmp/tmp5411/temp/empty-darcs2:
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * A1
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * A2
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * B1
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * B2
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * C1
> +
> +Sat Oct 16 23:27:21 BST 2010  tester
> +  * C2
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222721
> + Ignore-this: 64432ba123d81c8f0e688b44feb8f587
> +] addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +[A1
> +tester**20101016222721
> + Ignore-this: d749f48333e6ff2e994b1df71e76933b
> +] hunk ./wibble 2
> + wibble
> ++A1
> +[A2
> +tester**20101016222721
> + Ignore-this: 6f006a52975a708a8038d52e5e39ef0f
> +] hunk ./wibble 3
> + wibble
> + A1
> ++A2
> +[B1
> +tester**20101016222721
> + Ignore-this: f4d4b5b1c73bd6fa8abe6e5e680d66a7
> +] conflictor [
> +hunk ./wibble 2
> ++A1
> ++A2
> +]
> +:
> +hunk ./wibble 2
> ++B1
> +[B2
> +tester**20101016222721
> + Ignore-this: 1d60b6c0ba913fff4d1e32ad26ae07bb
> +] 
> +[C1
> +tester**20101016222721
> + Ignore-this: 25b6a6959d19980ad16983a542c6825
> +] conflictor {{
> +:
> +hunk ./wibble 2
> ++A1
> ++A2
> +:
> +hunk ./wibble 2
> ++B1
> ++B2
> +}} []
> +:
> +hunk ./wibble 2
> ++C1
> +[C2
> +tester**20101016222721
> + Ignore-this: c16d607216c36d5f7727c64d2ec103d4
> +] conflictor {{
> +:
> +hunk ./wibble 2
> ++A1
> ++A2
> +:
> +hunk ./wibble 2
> ++B1
> ++B2
> +}} []
> +:
> +hunk ./wibble 2
> ++C1
> ++C2
> +
> +Context:
> +
> +Patch bundle hash:
> +7f2bd6324e6e1f2d4efe67f98696ca0ead048fe5
> addfile ./tests/data/convert/darcs2/threewayconflict.dpatch
> hunk ./tests/data/convert/darcs2/threewayconflict.dpatch 1
> +4 patches for repository /tmp/tmp5605/temp/empty-darcs2:
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:28:14 BST 2010  tester
> +  * C
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222814
> + Ignore-this: c125275c671c210086eccb12de9f6c1c
> +] addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +[A
> +tester**20101016222814
> + Ignore-this: 653be63c1f8a6f4bc1de1e45c0ae9084
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016222814
> + Ignore-this: 1a8e3f57d2baeca09f2dda003e4df58d
> +] conflictor [
> +hunk ./wibble 2
> ++A
> +]
> +:
> +hunk ./wibble 2
> ++B
> +[C
> +tester**20101016222814
> + Ignore-this: 9d40b33ef1b73b9a950f39c4e8a75dfe
> +] conflictor {{
> +:
> +hunk ./wibble 2
> ++A
> +:
> +hunk ./wibble 2
> ++B
> +}} []
> +:
> +hunk ./wibble 2
> ++C
> +
> +Context:
> +
> +Patch bundle hash:
> +ba3e1ce15840fd37358fcd43c4c03273d1779153
> addfile ./tests/data/convert/darcs2/tworesolutions.dpatch
> hunk ./tests/data/convert/darcs2/tworesolutions.dpatch 1
> +7 patches for repository /tmp/tmp6805/temp/empty-darcs2:
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * B
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * AB
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * C
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * ABC
> +
> +Sat Oct 16 23:34:33 BST 2010  tester
> +  * D
> +
> +New patches:
> +
> +[wibble
> +tester**20101016223433
> + Ignore-this: 577185c51e4839dd1041372fbfa8515b
> +] addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +[A
> +tester**20101016223433
> + Ignore-this: 580c4417986d5c56590bf36f5a125f38
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016223433
> + Ignore-this: a9f2335fe2dc972fd0bc09edc6252256
> +] conflictor [
> +hunk ./wibble 2
> ++A
> +]
> +:
> +hunk ./wibble 2
> ++B
> +[AB
> +tester**20101016223433
> + Ignore-this: cba095e78e2bdfe15dbdf2cb5c69cc6d
> +] hunk ./wibble 2
> + wibble
> ++AB
> +[C
> +tester**20101016223433
> + Ignore-this: da2a7e05abed8dba0077e69e55bd926
> +] conflictor [
> +hunk ./wibble 2
> ++AB
> +]
> +:
> +hunk ./wibble 2
> ++C
> +[ABC
> +tester**20101016223433
> + Ignore-this: db94de3935df87d0a991c0ab6a58e5b1
> +] hunk ./wibble 2
> + wibble
> ++ABC
> +[D
> +tester**20101016223433
> + Ignore-this: 829adb4326b290aa6f741b3a15fbabfc
> +] conflictor [
> +hunk ./wibble 2
> ++ABC
> +]
> +:
> +hunk ./wibble 2
> ++D
> +
> +Context:
> +
> +Patch bundle hash:
> +b0ac3265aeb09b15b7dbc1dcf9447dae35d00a86
> addfile ./tests/data/convert/darcs2/twowayconflict.dpatch
> hunk ./tests/data/convert/darcs2/twowayconflict.dpatch 1
> +3 patches for repository /tmp/tmp5677/temp/empty-darcs2:
> +
> +Sat Oct 16 23:28:22 BST 2010  tester
> +  * wibble
> +
> +Sat Oct 16 23:28:22 BST 2010  tester
> +  * A
> +
> +Sat Oct 16 23:28:22 BST 2010  tester
> +  * B
> +
> +New patches:
> +
> +[wibble
> +tester**20101016222822
> + Ignore-this: 88662d08dd524d92ad4cca6df0d643e4
> +] addfile ./wibble
> +hunk ./wibble 1
> ++wibble
> +[A
> +tester**20101016222822
> + Ignore-this: 2d69de402438481946682efcad5e20cd
> +] hunk ./wibble 2
> + wibble
> ++A
> +[B
> +tester**20101016222822
> + Ignore-this: 9c8daaedcb674c022ddbcef19752d694
> +] conflictor [
> +hunk ./wibble 2
> ++A
> +]
> +:
> +hunk ./wibble 2
> ++B
> +
> +Context:
> +
> +Patch bundle hash:
> +33bebb546403626fc8539d4709fbcdb99e47e94c
msg12855 (view) Author: ganesh Date: 2010-10-31.17:10:02
On Sun, 31 Oct 2010, Reinier Lamers wrote:

> I have a question about tests/data/convert/darcs2threewayandmultipdeps.dpatch.
> It contains an empty patch B2. If I apply the bundle to an empty repo, I can
> unpull B2 just fine without unpulling anything else. This surprises me quite
> a bit. Is this an example of the lossy conversion done by 'darcs convert'?

I actually had completely failed to notice this, so thanks for pointing it 
out!

After some investigation, it is indeed an example of such a case, and 
darcs convert does warn the user of this. I find it rather disappointing 
that such a simple conflict isn't converted. The fact that you can unpull 
B2 is a simple consequence of it being an empty patch.

Also, we should probably improve our documentation to warn users that 
repos with unresolved conflicts should not be converted if that results in 
a "lossy convert" message, as they might lose data; you'll notice that if 
you did a convert just up to B2 in this case then the actual B2 change 
would be completely gone.

All of this is true with the old more broken convert too, so this change 
is still a strict improvement; it generates far fewer lossy converts.

Cheers,

Ganesh
msg12858 (view) Author: darcswatch Date: 2010-10-31.18:09:22
This patch bundle (with 1 patches) was just applied to the repository http://darcs.net/.
This message was brought to you by DarcsWatch
http://darcswatch.nomeata.de/repo_http:__darcs.net_.html#bundle-5db3c715deec1adeca4396ab370cb6bd55c48847
msg14384 (view) Author: darcswatch Date: 2011-05-10.22:06:23
This patch bundle (with 1 patches) was just applied to the repository http://darcs.net/reviewed.
This message was brought to you by DarcsWatch
http://darcswatch.nomeata.de/repo_http:__darcs.net_reviewed.html#bundle-5db3c715deec1adeca4396ab370cb6bd55c48847
History
Date User Action Args
2010-10-16 23:08:42ganeshcreate
2010-10-16 23:10:27darcswatchsetdarcswatchurl: http://darcswatch.nomeata.de/repo_http:__darcs.net_.html#bundle-5db3c715deec1adeca4396ab370cb6bd55c48847
2010-10-17 11:29:39darcswatchsetstatus: needs-screening -> needs-review
messages: + msg12743
2010-10-31 15:23:22tux_rockersetstatus: needs-review -> review-in-progress
assignedto: tux_rocker
nosy: + tux_rocker
2010-10-31 16:34:41tux_rockersetmessages: + msg12854
2010-10-31 17:10:02ganeshsetmessages: + msg12855
2010-10-31 18:09:22darcswatchsetstatus: review-in-progress -> accepted
messages: + msg12858
2011-05-10 22:06:23darcswatchsetmessages: + msg14384