#!/usr/bin/env python # # resolve_tests.py: testing 'svn resolve' # # Subversion is a tool for revision control. # See http://subversion.tigris.org for more information. # # ==================================================================== # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ###################################################################### # General modules import shutil, sys, re, os import time # Our testing module import svntest from svntest import wc # (abbreviation) Item = wc.StateItem XFail = svntest.testcase.XFail Skip = svntest.testcase.Skip SkipUnless = svntest.testcase.SkipUnless from merge_tests import set_up_branch # 'svn resolve --accept [ base | mine-full | theirs-full ]' was segfaulting # on 1.6.x. Prior to this test, the bug was only caught by the Ruby binding # tests, see http://svn.haxx.se/dev/archive-2010-01/0088.shtml. def automatic_conflict_resolution(sbox): "resolve -R --accept [base | mf | tf]" sbox.build() wc_dir = sbox.wc_dir # Some paths we'll care about A_COPY_path = os.path.join(wc_dir, "A_COPY") psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi") # Branch A to A_COPY in r2, then make some changes under 'A' in r3-6. wc_disk, wc_status = set_up_branch(sbox) # Make a change on the A_COPY branch such that a subsequent merge # conflicts. svntest.main.file_write(psi_COPY_path, "Branch content.\n") svntest.actions.run_and_verify_svn(None, None, [], 'commit', '-m', 'log msg', wc_dir) def do_text_conflicting_merge(): svntest.actions.run_and_verify_svn(None, None, [], 'revert', '--recursive', A_COPY_path) svntest.actions.run_and_verify_svn(None, "(--- Merging r3 into .*A_COPY':\n)|" "(C .*psi\n)|" "(Summary of conflicts:\n)|" "( Text conflicts: 1\n)", [], 'merge', '-c3', sbox.repo_url + '/A', A_COPY_path) # Test 'svn resolve -R --accept base' do_text_conflicting_merge() svntest.actions.run_and_verify_resolve([psi_COPY_path], '-R', '--accept', 'base', A_COPY_path) wc_disk.tweak('A_COPY/D/H/psi', contents="This is the file 'psi'.\n") svntest.actions.verify_disk(wc_dir, wc_disk) # Test 'svn resolve -R --accept mine-full' do_text_conflicting_merge() svntest.actions.run_and_verify_resolve([psi_COPY_path], '-R', '--accept', 'mine-full', A_COPY_path) wc_disk.tweak('A_COPY/D/H/psi', contents="Branch content.\n") svntest.actions.verify_disk(wc_dir, wc_disk) # Test 'svn resolve -R --accept theirs-full' do_text_conflicting_merge() svntest.actions.run_and_verify_resolve([psi_COPY_path], '-R', '--accept', 'theirs-full', A_COPY_path) wc_disk.tweak('A_COPY/D/H/psi', contents="New content") svntest.actions.verify_disk(wc_dir, wc_disk) ######################################################################## # Run the tests # list all tests here, starting with None: test_list = [ None, automatic_conflict_resolution, ] if __name__ == '__main__': svntest.main.run_tests(test_list) # NOTREACHED ### End of file.