[Svnmerge] Directory conflicts, unicode values in array self.revs

Hermanns, Horst h.hermanns at telekom.de
Tue Mar 25 00:52:18 PDT 2008


I did not see my message in the Svnmerge Mail Archive (perhaps something
went wrong), so I send it once more.

Raman Gupta wrote:
>25683 would be the rev where the bug manifests itself but it isn't the
cause of the mixed unicode/non-unicode values. We now at least know that
the >underlying problem has been around for a while and has not been
introduced recently.
>
>Any chance you can provide a reproducible test script for this problem?


I'm not so familiar with the svnmerge_test.py, so I made a Shell-Script
to reproduce the problem.

Scenario:
	- Checkout a Test-Repo (URL 'TESTREPO' in script header)
	- Create a Base-Dir BASE
	- copy BASE to bra1/bra2/bra3 and initialise merge tracking
	- make changes in bra2 and merge back to BASE
	- make changes in bra1 and merge back to BASE (only to create
non continuous revisions)
	- make changes in bra3 and merge back to BASE
	- merge changes in BASE to bra1 -> create conflict

Additonally I added follwing Debug-Output to svnmerge.py
   519              # Find the index using a binary search
   520              i = bisect(self.revs, rev) - 1
   521
   522 +            print "Output self.revs and i"
   523 +            print self.revs
   524 +            print i

Please find attached the script and a output-log
(svnmerge_unicode_test.sh, output_conflict_unicode.log). The Output of
self.revs and index starts at line 200.
	...
	Output self.revs and i
	[0, 723, u'730', u'731', u'732', u'734', u'736', u'738', 739]
	1
	...

I've made a second run with type change of self.revs (for ...,
self.revs[revi]=int(self.revs[revi]). No errors occur with this version.
See 'output_type_change.log'.
	...
	Output self.revs and i
	[0, 706, 713, 714, 715, 717, 719, 721, 722]
	4
	...

I hope this will help to solve the problem.


Thanks and Cheers
Horst

-----------
--> svnmerge_unicode_test.sh

#!/bin/sh
set -x
TESTREPO="http://localhost/svn/test"

svn co $TESTREPO test_unicode_conf
cd test_unicode_conf

# - Create Base-Dir BASE
# - copy BASE with 'svnmerge init' to bra1/bra2/bra3
# - make changes in bra2 and merge back to BASE
# - make changes in bra1 and merge back to BASE (only to create non
continuous revisions)
# - make changes in bra3 and merge back to BASE
# - merge changes in BASE to bra1
#  -> Conflict

# Create BASE-Dir
svn mkdir BASE
svn ci -m "test"

svn copy $TESTREPO/BASE $TESTREPO/bra1 -m " "
svn copy $TESTREPO/BASE $TESTREPO/bra2 -m " "
svn copy $TESTREPO/BASE $TESTREPO/bra3 -m " "
svn update
cd bra1
svnmerge.py init
svn ci -F svnmerge-commit-message.txt
cd ..
svn update
cd bra2
svnmerge.py init
svn ci -F svnmerge-commit-message.txt
cd ..
svn update
cd bra3
svnmerge.py init
svn ci -F svnmerge-commit-message.txt

cd ..
cd BASE
svn update
svnmerge.py init $TESTREPO/bra1
svn ci -F svnmerge-commit-message.txt
svnmerge.py init $TESTREPO/bra2
svn ci -F svnmerge-commit-message.txt
svnmerge.py init $TESTREPO/bra3
svn ci -F svnmerge-commit-message.txt

cd ..
cd bra2
touch test2
svn add test2
svn ci -m "bra2"

cd ..
cd BASE
svn update
svnmerge.py merge -b -S $TESTREPO/bra2
svn ci -F svnmerge-commit-message.txt

cd ..
cd bra1
touch test1
svn add test1
svn ci -m "bra1"

cd ..
cd BASE
svn update
svnmerge.py merge -b -S $TESTREPO/bra1
svn ci -F svnmerge-commit-message.txt

cd ..
cd bra3
touch test3
svn add test3
svn ci -m "bra3"

cd ..
cd BASE
svn update
svnmerge.py merge -b -S $TESTREPO/bra3
svn ci -F svnmerge-commit-message.txt

cd ..
cd bra1
svn update
svnmerge.py merge -b -vv
svn pl -v
cat dir_conflicts.prej

---------------------------

--> output_conflict_unicode.log
...
svnmerge: memorizing phantom revision(s): 724-729,733,735,737
svnmerge: memorizing reflected revision(s): 730,736
svnmerge: skipping initialized revision(s): 730-732
svnmerge: merging in revision(s) 734,738 from
"http://localhost/svn/test/BASE"
svn --non-interactive propget --strict "svnmerge-blocked" "."
Output self.revs and i
[0, 723, u'730', u'731', u'732', u'734', u'736', u'738', 739]
1
svn --non-interactive propdel "svnmerge-integrated" "."
property 'svnmerge-integrated' deleted from '.'.

Output self.revs and i
[0, 723, 739]
1
svn --non-interactive propdel "svnmerge-blocked" "."
property 'svnmerge-blocked' deleted from '.'.

svn --non-interactive merge --force -r 733:734
http://localhost/svn/test/BASE .
A    test2
 C   .

Output self.revs and i
[0, 723, u'730', u'731', u'732', u'734', u'736', u'738', 739]
1
svn --non-interactive propdel "svnmerge-integrated" "."
property 'svnmerge-integrated' deleted from '.'.
...

-------------------------------

--> output_type_change.log
...
svnmerge: memorizing phantom revision(s): 707-712,716,718,720
svnmerge: memorizing reflected revision(s): 713,719
svnmerge: skipping initialized revision(s): 713-715
svnmerge: merging in revision(s) 717,721 from
"http://localhost/svn/test4/test/test2/BASE"
svn --non-interactive propget --strict "svnmerge-blocked" "."
Output self.revs and i
[0, 706, 713, 714, 715, 717, 719, 721, 722]
4
svnmerge: property data written to temp file: /test/test2/bra1:1-707
/test/test2/bra2:1-708 /test/test2/bra3:1-709
svn --non-interactive propset "svnmerge-integrated" -F "/tmp/tmpO5PXIy"
"."
property 'svnmerge-integrated' set on '.'

Output self.revs and i
[0, 706, 722]
1
svn --non-interactive propdel "svnmerge-blocked" "."
property 'svnmerge-blocked' deleted from '.'.

svn --non-interactive merge --force -r 716:717
http://localhost/svn/test4/test/test2/BASE .
A    test2
 U   .

Output self.revs and i
[0, 706, 713, 714, 715, 717, 719, 721, 722]
6
svnmerge: property data written to temp file: /test/test2/bra1:1-718
/test/test2/bra2:1-716 /test/test2/bra3:1-709
svn --non-interactive propset "svnmerge-integrated" -F "/tmp/tmpGw5qZy"
"."
property 'svnmerge-integrated' set on '.'

Output self.revs and i
[0, 706, 722]
1
svn --non-interactive propdel "svnmerge-blocked" "."
property 'svnmerge-blocked' deleted from '.'.
...




More information about the Svnmerge mailing list