Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/tests/cmdline/merge_automatic_tests.py view on Meta::CPAN
# Automatic merges ignore subtree mergeinfo during reintegrate.
@SkipUnless(server_has_mergeinfo)
@Issue(4258)
def subtree_to_and_fro(sbox):
"reintegrate considers source subtree mergeinfo"
# A (-----o-o-o-o------------x
# ( \ \ /
# ( \ \ /
# A_COPY ( o---------o--s--o--
# 2 3 4 5 6 7 8 9
# Some paths we'll care about.
A_COPY_gamma_path = sbox.ospath('A_COPY/D/gamma')
psi_path = sbox.ospath('A/D/H/psi')
A_COPY_D_path = sbox.ospath('A_COPY/D')
A_path = sbox.ospath('A')
sbox.build()
wc_dir = sbox.wc_dir
# Setup a simple 'trunk & branch': Copy ^/A to ^/A_COPY in r2 and then
# make a few edits under A in r3-6 (edits r3, r4, r6 are under subtree 'D'):
wc_disk, wc_status = set_up_branch(sbox)
# r7 - Edit a file on the branch.
svntest.main.file_write(A_COPY_gamma_path, "Branch edit to 'gamma'.\n")
svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
'-m', 'Edit a file on our branch')
# r8 - Do a subtree sync merge from ^/A/D to A_COPY/D.
# Note that among other things this changes A_COPY/D/H/psi.
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'merge',
sbox.repo_url + '/A/D', A_COPY_D_path)
svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
'-m', 'Automatic subtree merge')
# r9 - Make an edit to A/D/H/psi.
svntest.main.file_write(psi_path, "Trunk Edit to 'psi'.\n")
svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
'-m', 'Edit a file on our trunk')
# Now reintegrate ^/A_COPY back to A. Prior to issue #4258's fix, the
# the subtree merge to A_COPY/D just looks like any other branch edit and
# was not considered a merge. So the changes which exist on A/D and were
# merged to A_COPY/D, were merged *back* to A, resulting in a conflict:
#
# C:\...\working_copies\merge_automatic_tests-18>svn merge ^^/A_COPY A
# DBG: merge.c:11461: base on source: ^/A@1
# DBG: merge.c:11462: base on target: ^/A@1
# DBG: merge.c:11567: yca ^/A@1
# DBG: merge.c:11568: base ^/A@1
# DBG: merge.c:11571: right ^/A_COPY@8
# Conflict discovered in file 'A\D\H\psi'.
# Select: (p) postpone, (df) diff-full, (e) edit,
# (mc) mine-conflict, (tc) theirs-conflict,
# (s) show all options: p
# --- Merging r2 through r9 into 'A':
# C A\D\H\psi
# U A\D\gamma
# --- Recording mergeinfo for merge of r2 through r9 into 'A':
# U A
# Summary of conflicts:
# Text conflicts: 1
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
exit_code, out, err = svntest.actions.run_and_verify_svn(
None, [], svntest.verify.AnyOutput,
'merge', sbox.repo_url + '/A_COPY', A_path)
# Better to produce the same warning that explicitly using the
# --reintegrate option would produce:
svntest.verify.verify_outputs("Automatic Reintegrate failed, but not "
"in the way expected",
err, None,
"(svn: E195016: Reintegrate can only be used if "
"revisions 2 through 9 were previously "
"merged from .*/A to the reintegrate source, "
"but this is not the case:\n)"
"|( A_COPY\n)"
"|( Missing ranges: /A:5\n)"
"|(\n)"
"|" + svntest.main.stack_trace_regexp,
None,
True) # Match *all* lines of stdout
#----------------------------------------------------------------------
# Automatic merges ignore subtree mergeinfo gaps older than the last rev
# synced to the target root.
@SkipUnless(server_has_mergeinfo)
def merge_to_reverse_cherry_subtree_to_merge_to(sbox):
"sync merge considers target subtree mergeinfo"
# A (--o-o-o-o------------------
# ( \ \ \ \
# ( \ \ \ \
# B ( o--o------x-------rc-----x
# Some paths we'll care about.
A_COPY_path = sbox.ospath('A_COPY')
A_COPY_B_path = sbox.ospath('A_COPY/B')
A_COPY_beta_path = sbox.ospath('A_COPY/B/E/beta')
sbox.build()
wc_dir = sbox.wc_dir
# Setup a simple 'trunk & branch': Copy ^/A to ^/A_COPY in r2 and then
# make a few edits under A in r3-6:
wc_disk, wc_status = set_up_branch(sbox)
# Sync merge ^/A to A_COPY, then reverse merge r5 from ^/A/B to A_COPY/B.
# This results in mergeinfo on the target which makes it appear that the
# branch is synced up to r6, but the subtree mergeinfo on A_COPY/B reveals
# that r5 has not been merged to that subtree:
#
# Properties on 'A_COPY':
# svn:mergeinfo
# /A:2-6
# Properties on 'A_COPY\B':
# svn:mergeinfo
# /A/B:2-4,6
( run in 0.783 second using v1.01-cache-2.11-cpan-39bf76dae61 )