[fcm] 01/01: Upstream 2016.10.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Tue Nov 1 12:28:30 UTC 2016


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to tag upstream/2016.10.0
in repository fcm.

commit 5a2ea963654121f09cfd228261cdea3631a1770b
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Tue Nov 1 00:13:42 2016 +0000

    Upstream 2016.10.0
---
 CHANGES.md                                         |  27 ++
 CONTRIBUTING.md                                    |   3 +-
 README.md                                          |   2 +
 doc/etc/fcm-version.js                             |   2 +-
 doc/installation/index.html                        |  12 +-
 doc/user_guide/annex_quick_ref_tree_conflicts.html |  21 +-
 lib/FCM/Admin/System.pm                            |  24 +-
 lib/FCM/System/CM/Prompt.pm                        |   4 +-
 lib/FCM/System/CM/ResolveConflicts.pm              |  26 +-
 lib/FCM/System/Make/Share/Dest.pm                  |  14 +-
 t/fcm-add-trac-env/00-basic.t                      |  16 +-
 t/fcm-add/test_header                              | 233 +-----------------
 t/fcm-branch-create/00-simple.t                    |   4 +-
 t/fcm-branch-create/test_header                    | 233 +-----------------
 t/fcm-branch-delete/test_header                    | 233 +-----------------
 t/fcm-branch-diff/00-simple.t                      | 166 +++++++++----
 t/fcm-branch-diff/test_header                      |  37 +--
 t/fcm-branch-info/00-simple.t                      |   5 +-
 t/fcm-branch-info/test_header                      |  37 +--
 t/fcm-branch-list/00-simple.t                      |   4 +-
 t/fcm-branch-list/test_header                      |  37 +--
 t/fcm-commit/00-simple.t                           |  11 +-
 t/fcm-commit/01-subtree.t                          |  11 +-
 t/fcm-commit/test_header                           |  37 +--
 t/fcm-conflicts/11-tree-edit-replace.t             |  79 ++++++
 t/fcm-conflicts/test_header                        |  39 +--
 t/fcm-diff/00-simple.t                             |   7 +-
 t/fcm-diff/test_header                             |  37 +--
 t/fcm-loc-layout/test_header                       |  37 +--
 t/fcm-make/00-build-basic.t                        |   3 +-
 t/fcm-make/05-build-c-cxx-basic.t                  |   3 +-
 t/fcm-make/12-build-class-prop.t                   |   3 +-
 t/fcm-make/23-build-omp.t                          |   6 +-
 t/fcm-make/41-ctx-name.t                           |  27 +-
 t/fcm-make/42-make-mirror-make2.t                  |  19 +-
 t/fcm-make/43-ctx-name-inherit.t                   |   8 +-
 t/fcm-make/44-ctx-name-inherit-compat.t            |   7 +-
 t/fcm-make/46-archive-mode.t                       |  20 +-
 t/fcm-merge/00-simple.t                            |  22 +-
 t/fcm-merge/01-complex.t                           | 168 +++++++------
 t/fcm-merge/test_header                            | 271 +--------------------
 t/fcm-status/test_header                           |  37 +--
 t/fcm-switch/test_header                           | 233 +-----------------
 t/fcm-update/00-simple.t                           |   2 +-
 t/fcm-update/01-subtree.t                          |   2 +-
 t/fcm-update/test_header                           | 233 +-----------------
 .../test_header => lib/bash/svn_test_header}       |  63 +++--
 t/lib/bash/test_header                             |  39 ++-
 t/svn-hooks/03-post-commit-bg.t                    |   2 +
 49 files changed, 769 insertions(+), 1797 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index 481556a..c5de0c8 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -5,6 +5,33 @@ for a full listing of issues for each release.
 
 --------------------------------------------------------------------------------
 
+## 2016.10.07 (2016-10-07)
+
+FCM release 35.
+
+### Noteworthy Changes
+
+[#239](https://github.com/metomi/fcm/pull/239):
+fcm conflicts: handle tree conflict:
+*local file edit, incoming file replace upon merge*.
+
+[#238](https://github.com/metomi/fcm/pull/238):
+fcm make: use `TMPDIR` (if defined in the environment) for temporary files on
+load/dump of `ctx.gz`, instead of `/tmp/`.
+
+--------------------------------------------------------------------------------
+
+## 2016.09.0 (2016-09-19)
+
+FCM release 34. Minor bug fix, and minor update to admin utilities.
+
+### Noteworthy Changes
+
+[#235](https://github.com/metomi/fcm/pull/235):
+fcm make: build: fix `sprintf` redundant argument warning on Perl 5.22+.
+
+--------------------------------------------------------------------------------
+
 ## 2016.05.1 (2016-05-19)
 
 FCM release 34. Minor update to admin utilities, nothing noteworthy for users.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 12e7758..d81b344 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -25,13 +25,14 @@ below:
 
 * Jim Bolton (Met Office, UK)
 * Andrew Clark (Met Office, UK)
+* Paul Cresswell (Met Office, UK)
 * Martin Dix (CSIRO, Australia)
 * Ben Fitzpatrick (Met Office, UK)
 * Dave Matthews (Met Office, UK)
 * Stephen Oxley (Met Office, UK)
-* Matt Shin (Met Office, UK)
 * Matt Pryor (Met Office, UK)
 * Roddy Sharp (Met Office, UK)
+* Matt Shin (Met Office, UK)
 * Stuart Whitehouse (Met Office, UK)
 
 (All contributors are identifiable with email addresses in the version
diff --git a/README.md b/README.md
index 0c66920..5086c8c 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
 # FCM
 
+[![Build Status](https://travis-ci.org/metomi/fcm.svg?branch=master)](https://travis-ci.org/metomi/fcm)
+
 FCM: a modern Fortran build system,
 and wrappers to Subversion for scientific software development
 
diff --git a/doc/etc/fcm-version.js b/doc/etc/fcm-version.js
index f15894a..36a4c69 100644
--- a/doc/etc/fcm-version.js
+++ b/doc/etc/fcm-version.js
@@ -1 +1 @@
-FCM.VERSION="2016.05.1";
+FCM.VERSION="2016.10.0";
diff --git a/doc/installation/index.html b/doc/installation/index.html
index d0454cd..35f652a 100644
--- a/doc/installation/index.html
+++ b/doc/installation/index.html
@@ -37,7 +37,9 @@
   <h2 id="requirements">System Requirements</h2>
 
   <p>FCM is intended to run on a Unix/Linux system. It is known to work on
-  RHEL-6 and some part of it on AIX-7.</p>
+  recent popular Linux distributions such as RHEL-6. See
+  <a href="https://github.com/metomi/metomi-vms">metomi-vms @ Github</a> for
+  information.</p>
 
   <p>FCM releases can be downloaded from <a href=
   "https://github.com/metomi/fcm/releases">Github</a>. Download the tar.gz file
@@ -54,7 +56,7 @@
     <dd>
       <p><dfn>used by:</dfn> <code>fcm</code>.</p>
 
-      <p><dfn>versions known to work:</dfn> 5.10.1.</p>
+      <p><dfn>versions known to work:</dfn> RHEL-6: 5.10.1</p>
 
       <p><dfn>remark:</dfn> We assume that all <em>core</em> Perl modules (as
       documented by <a href="http://perldoc.perl.org/">perldoc.perl.org</a>) of
@@ -132,7 +134,7 @@
       <p><dfn>used by:</dfn> (optional, but highly recommended as a companion
       to Subversion)</p>
 
-      <p><dfn>versions known to work:</dfn> 0.11.7.</p>
+      <p><dfn>versions known to work:</dfn> RHEL-6: 1.0.5.</p>
     </dd>
 
     <dt><a href="http://furius.ca/xxdiff/">xxdiff</a></dt>
@@ -167,7 +169,7 @@
       <p><dfn>used by:</dfn> the mirror system of <code>fcm make</code>, the
       deprecated <code>fcm extract</code>.</p>
 
-      <p><dfn>versions known to work:</dfn> AIX-7: 3.0.9, RHEL-6: 3.0.6.</p>
+      <p><dfn>versions known to work:</dfn> RHEL-6: 3.0.6.</p>
 
       <p><dfn>remark:</dfn> used to mirror source file to another
       <var>USER at HOST</var>.</p>
@@ -178,7 +180,7 @@
     <dd>
       <p><dfn>used by:</dfn> the deprecated <code>fcm build</code>.</p>
 
-      <p><dfn>versions known to work:</dfn> AIX-7: 3.80, RHEL-6: 3.81.</p>
+      <p><dfn>versions known to work:</dfn> RHEL-6: 3.81.</p>
     </dd>
   </dl>
   </div>
diff --git a/doc/user_guide/annex_quick_ref_tree_conflicts.html b/doc/user_guide/annex_quick_ref_tree_conflicts.html
index 8c0808e..f9baaf0 100644
--- a/doc/user_guide/annex_quick_ref_tree_conflicts.html
+++ b/doc/user_guide/annex_quick_ref_tree_conflicts.html
@@ -126,7 +126,7 @@ A   +   FILENAME
     <dt id="add:add"><samp>local add, incoming add upon merge</samp></dt>
 
     <dd>
-      <p><dfn>what it means:</dfn>: files or directories added with the same
+      <p><dfn>what it means</dfn>: files or directories added with the same
       name independently</p>
 
       <p><dfn>what keep local does</dfn>: uses rename to shuffle the old file
@@ -148,10 +148,10 @@ A   +   FILENAME
       <p><dfn>meaning</dfn>: file or directory modified on the branch locally,
       but deleted on the merge branch</p>
 
-      <p><dfn>what keep local does</dfn>:just runs <code>fcm
+      <p><dfn>what keep local does</dfn>: just runs <code>fcm
       resolve</code>.</p>
 
-      <p><dfn>what discarding local does</dfn>:deletes the file or directory
+      <p><dfn>what discarding local does</dfn>: deletes the file or directory
       and runs <code>fcm resolve</code>.</p>
     </dd>
 
@@ -173,6 +173,21 @@ A   +   FILENAME
       old file and runs <code>fcm resolve</code>.</p>
     </dd>
 
+    <dt id="edit:replace"><samp>local edit, incoming replace upon
+    merge</samp></dt>
+
+    <dd>
+      <p><dfn>meaning</dfn>: file modified on branch locally, but replaced
+      (deleted, and new file added) on merge branch</p>
+
+      <p><dfn>what keep local does</dfn>: just runs <code>fcm
+      resolve</code>.</p>
+
+      <p><dfn>what discarding local does</dfn>: <code>svn delete</code> local
+      file, and <code>svn copy</code> the incoming file into it. It then runs
+      <code>fcm resolve</code>.</p>
+    </dd>
+
     <dt id="delete:delete:no_rename"><samp>local delete, incoming delete upon
     merge (no renaming)</samp></dt>
 
diff --git a/lib/FCM/Admin/System.pm b/lib/FCM/Admin/System.pm
index d8738bd..70709dd 100644
--- a/lib/FCM/Admin/System.pm
+++ b/lib/FCM/Admin/System.pm
@@ -140,6 +140,11 @@ sub add_trac_environment {
         my @command = (q{trac-admin}, $project->get_trac_live_path(), @args);
         $RUN->($log, sub {!system(@command)});
     };
+    my $TRAC_ADMIN_CONT = sub {
+        my ($log, @args) = @_;
+        my @command = (q{trac-admin}, $project->get_trac_live_path(), @args);
+        $RUNNER->run_continue($log, sub {!system(@command)});
+    };
     $TRAC_ADMIN->(
         "initialising Trac environment",
         q{initenv},
@@ -152,18 +157,22 @@ sub add_trac_environment {
     if ($group) {
         _chgrp_and_chmod($project->get_trac_live_path(), $group);
     }
+    # Note: For some reason, the commands to remove example components,
+    # versions, milestones, priorities fail using the "pip install trac" version
+    # on Travis CI. It is safe to allow the logic to continue after a failure
+    # here as they are really unimportant and can easily be configured later.
     for my $item (qw{component1 component2}) {
-        $TRAC_ADMIN->(
+        $TRAC_ADMIN_CONT->(
             "removing example component $item", q{component remove}, $item,
         );
     }
     for my $item (qw{1.0 2.0}) {
-        $TRAC_ADMIN->(
+        $TRAC_ADMIN_CONT->(
             "removing example version $item", q{version remove}, $item,
         );
     }
     for my $item (qw{milestone1 milestone2 milestone3 milestone4}) {
-        $TRAC_ADMIN->(
+        $TRAC_ADMIN_CONT->(
             "removing example milestone $item", q{milestone remove}, $item,
         );
     }
@@ -173,13 +182,16 @@ sub add_trac_environment {
         ['blocker'  => 'critical'],
     ) {
         my ($old, $new) = @{$item};
-        $TRAC_ADMIN->(
+        $TRAC_ADMIN_CONT->(
             "changing priority $old to $new", qw{priority change}, $old, $new,
         );
     }
     $TRAC_ADMIN->(
         "adding admin permission", qw{permission add admin TRAC_ADMIN},
     );
+    $TRAC_ADMIN->(
+        "adding admin permission", qw{permission add owner TRAC_ADMIN},
+    );
     my @admin_users = shellwords($CONFIG->get_trac_admin_users());
     for my $item (@admin_users) {
         $TRAC_ADMIN->(
@@ -275,7 +287,7 @@ sub backup_svn_repository {
     }
     my $base_name = $project->get_svn_base_name();
     run_mkpath($CONFIG->get_svn_backup_dir());
-    my $work_dir = tempdir("$base_name.backup.XXXXXX", CLEANUP => 1);
+    my $work_dir = tempdir("$base_name.backup.XXXXXX", CLEANUP => 1, TMPDIR => 1);
     my $work_path = catfile($work_dir, $base_name);
     $RUN->(
         sprintf(
@@ -353,7 +365,7 @@ sub backup_trac_environment {
     my $trac_live_path = $project->get_trac_live_path();
     my $base_name = $project->get_name();
     run_mkpath($CONFIG->get_trac_backup_dir());
-    my $work_dir = tempdir("$base_name.backup.XXXXXX", CLEANUP => 1);
+    my $work_dir = tempdir("$base_name.backup.XXXXXX", CLEANUP => 1, TMPDIR => 1);
     my $work_path = catfile($work_dir, $base_name);
     $RUNNER->run_with_retries(
         sprintf(
diff --git a/lib/FCM/System/CM/Prompt.pm b/lib/FCM/System/CM/Prompt.pm
index 749c477..0e981a6 100644
--- a/lib/FCM/System/CM/Prompt.pm
+++ b/lib/FCM/System/CM/Prompt.pm
@@ -48,6 +48,7 @@ my %S = (
     'TC_ST_ADD'         => 'added',
     'TC_ST_DELETE'      => 'deleted',
     'TC_ST_EDIT'        => 'edited',
+    'TC_ST_REPLACE'     => 'replaced',
     'TC_ST_RENAME'      => 'renamed to %s',
 );
 
@@ -64,9 +65,10 @@ my %Q_CONF = (
     # D => delete,
     # E => edit,
     # M => missing,
+    # P => replace,
     # R => rename
     (   map {('TC_' . $_ => {'format' => \&_q_tree_conflict, 'type' => $TYPE_YN})}
-            qw(LAIA LDID LDIE LDIR LEID LEIR LRID LRIE LRIR)
+            qw(LAIA LDID LDIE LDIR LEID LEIP LEIR LRID LRIE LRIR)
     ),
 );
 
diff --git a/lib/FCM/System/CM/ResolveConflicts.pm b/lib/FCM/System/CM/ResolveConflicts.pm
index 9b92d59..7b9761e 100644
--- a/lib/FCM/System/CM/ResolveConflicts.pm
+++ b/lib/FCM/System/CM/ResolveConflicts.pm
@@ -38,6 +38,7 @@ use File::Temp;
 # D => delete,
 # E => edit,
 # M => missing,
+# P => replace,
 # R => rename,
 # although the 'rename' has to be detected by our code below.
 
@@ -55,6 +56,7 @@ our %TREE_CONFLICT_GET_FINAL_ACTIONS_FUNC_FOR = (
     LDIR => \&_cm_tree_conflict_get_actions_for_ldir,
     LEID => \&_cm_tree_conflict_get_actions_for_leid,
     LEIR => \&_cm_tree_conflict_get_actions_for_leir,
+    LEIP => \&_cm_tree_conflict_get_actions_for_leip,
     LRID => \&_cm_tree_conflict_get_actions_for_lrid,
     LRIE => \&_cm_tree_conflict_get_actions_for_lrie,
     LRIR => \&_cm_tree_conflict_get_actions_for_lrir,
@@ -577,6 +579,20 @@ sub _cm_tree_conflict_get_actions_for_leid {
     };
 }
 
+# Return the actions needed to resolve 'local edit, incoming replace'
+sub _cm_tree_conflict_get_actions_for_leip {
+    my ($attrib_ref, $keep_local, $files_ref) = @_;
+    my ($cfile) = @{$files_ref};
+    my ($url, $url_peg) = _cm_tree_conflict_source($attrib_ref, 'right', $cfile);
+    my $cdir = dirname($cfile);
+    sub {
+        if (!$keep_local) {
+            $attrib_ref->{svn}->call('delete', $cfile);
+            $attrib_ref->{svn}->call('copy', $url, "$cdir/");
+        }
+    };
+}
+
 # Return the actions needed to resolve 'local edit, incoming rename'
 sub _cm_tree_conflict_get_actions_for_leir {
     my ($attrib_ref, $keep_local, $files_ref) = @_;
@@ -644,11 +660,11 @@ __PACKAGE__->class({'local' => '$', 'incoming' => '$', 'type' => '$'});
 # incoming delete.
 sub as_string {
     my ($self) = shift();
-    sprintf(
-        'L%sI%s',
-        uc(substr($self->get_local(), 0, 1)),
-        uc(substr($self->get_incoming(), 0, 1)),
-    );
+    my $local = $self->get_local() eq 'replace'
+        ? 'P' : uc(substr($self->get_local(), 0, 1));
+    my $incoming = $self->get_incoming() eq 'replace'
+        ? 'P' : uc(substr($self->get_incoming(), 0, 1));
+    sprintf('L%sI%s', $local, $incoming);
 }
 
 1;
diff --git a/lib/FCM/System/Make/Share/Dest.pm b/lib/FCM/System/Make/Share/Dest.pm
index 517785d..b292895 100644
--- a/lib/FCM/System/Make/Share/Dest.pm
+++ b/lib/FCM/System/Make/Share/Dest.pm
@@ -29,7 +29,7 @@ use FCM::System::Exception;
 use File::Basename qw{dirname};
 use File::Path qw{mkpath rmtree};
 use File::Spec::Functions qw{catfile rel2abs};
-use IO::File;
+use File::Temp;
 use IO::Uncompress::Gunzip qw{gunzip};
 use IO::Compress::Gzip qw{gzip};
 use Scalar::Util qw{blessed reftype};
@@ -101,9 +101,9 @@ sub _ctx_load {
         $dest = $m_ctx->get_dest();
     }
     my $old_m_ctx = eval {
-        my $handle = IO::File->new_tmpfile();
+        my $handle = File::Temp->new('TMPDIR' => 1);
         # Open the file here to work around permission problems with file ACLs
-        my $path_handle = new IO::File $path || die("Cannot open cache file $path\n");
+        open(my $path_handle, '<', $path) || die($!);
         gunzip($path_handle, $handle) || die($!);
         $handle->seek(0, 0);
         fd_retrieve($handle);
@@ -161,7 +161,7 @@ sub _dest_done {
     $m_ctx->set_dest_lock(undef);
     if (-d $dest_parent) {
         eval {
-            my $handle = IO::File->new_tmpfile();
+            my $handle = File::Temp->new('TMPDIR' => 1);
             nstore_fd($m_ctx, $handle) || die($!);
             $handle->seek(0, 0) || die($!);
             gzip($handle, _path($attrib_ref, $m_ctx, 'sys-ctx')) || die($!);
@@ -268,9 +268,13 @@ sub _path {
         ? %{$m_ctx} : ('dest' => $m_ctx, 'name' => q{});
     $ctx{'dest'} ||= q{};
     $ctx{'name'} ||= q{};
+    my $path_of_key = $attrib_ref->{path_of}{$key};
     catfile(
         ($ctx{'dest'} ? $ctx{'dest'} : ()),
-        split(q{/}, sprintf($attrib_ref->{path_of}{$key}, $ctx{'name'})),
+        split(
+            q{/},
+            ($path_of_key ? sprintf($path_of_key, $ctx{'name'}) : $path_of_key),
+        ),
         @paths,
     );
 }
diff --git a/t/fcm-add-trac-env/00-basic.t b/t/fcm-add-trac-env/00-basic.t
index c6b0a94..ab3febe 100755
--- a/t/fcm-add-trac-env/00-basic.t
+++ b/t/fcm-add-trac-env/00-basic.t
@@ -24,14 +24,14 @@
 if ! which trac-admin 1>/dev/null 2>/dev/null; then
     skip_all 'trac-admin not available'
 fi
-tests 20
+tests 28
 #-------------------------------------------------------------------------------
 set -e
 mkdir -p etc srv/{svn,trac}
 # Configuration
 export FCM_CONF_PATH="$PWD/etc"
 ADMIN_USERS='holly ivy'
-cat >etc/admin.cfg <<__CONF__
+cat >'etc/admin.cfg' <<__CONF__
 svn_live_dir=$PWD/srv/svn
 trac_admin_users=$ADMIN_USERS
 trac_live_dir=$PWD/srv/trac
@@ -49,12 +49,16 @@ for NAME in bus car lorry taxi; do
     # Trac environment directory exists
     run_pass "$TEST_KEY-d" test -d "$PWD/srv/trac/$NAME"
     # Admin users are set
+    trac-admin "$PWD/srv/trac/$NAME" 'permission' 'export' "$TEST_KEY-d-perms"
+    # For some reason, the "echo" for the next test is lost in the ether unless
+    # we have an "echo" here.
+    echo
     for ADMIN_USER in $ADMIN_USERS; do
-        trac-admin "$PWD/srv/trac/$NAME" permission list "$ADMIN_USER" \
-            >"$TEST_KEY.perm.out"
-        file_grep "$TEST_KEY.perm.out" \
-            "$ADMIN_USER  *TRAC_ADMIN" "$TEST_KEY.perm.out"
+        file_grep "$TEST_KEY-d-perms-$ADMIN_USER" \
+            "$ADMIN_USER,admin" "$TEST_KEY-d-perms"
     done
+    file_grep "$TEST_KEY-d-perms-owner" "owner,TRAC_ADMIN" "$TEST_KEY-d-perms"
+    file_grep "$TEST_KEY-d-perms-admin" "admin,TRAC_ADMIN" "$TEST_KEY-d-perms"
     # Subversion repository paths in place
     if [[ -d "srv/svn/$NAME" ]]; then
         file_grep "$TEST_KEY-repository_dir" \
diff --git a/t/fcm-add/test_header b/t/fcm-add/test_header
deleted file mode 100644
index ecde158..0000000
--- a/t/fcm-add/test_header
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# (C) British Crown Copyright 2006-16 Met Office.
-#
-# This file is part of FCM, tools for managing and building source code.
-#
-# FCM is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# FCM is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with FCM. If not, see <http://www.gnu.org/licenses/>.
-# ------------------------------------------------------------------------------
-# Optional enviroment variables:
-#   TEST_PROJECT (tests using given project name)
-#   TEST_REMOTE_HOST (tests using svn+ssh repositories located on given host)
-# ------------------------------------------------------------------------------
-
-. $(dirname $0)/../lib/bash/test_header
-
-function file_cmp() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if cmp $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_grep() {
-    local TEST_KEY=$1
-    local PATTERN=$2
-    local FILE=$3
-    if grep -q -e "$PATTERN" $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_test() {
-    local TEST_KEY=$1
-    local FILE=$2
-    local OPTION=${3:--e}
-    if test $OPTION $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-    else
-        fail $TEST_KEY
-    fi
-}
-
-function file_xxdiff() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if xxdiff -D $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function init_repos() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    ROOT_URL=$REPOS_URL
-    PROJECT=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        PROJECT=$TEST_PROJECT"/"
-    fi
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/$PROJECT/trunk -m "initial trunk import"
-    svn mkdir -q $REPOS_URL/$PROJECT/tags -m "make tags"
-    svn mkdir -q --parents $REPOS_URL/$PROJECT/branches/dev/Share -m " "
-}
-
-function init_repos_layout_roses() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    svn mkdir -q --parents $REPOS_URL/a/a/0/0/0/trunk
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/a/a/0/0/0/trunk -m "initial trunk import"
-    TMPFILE=$(mktemp)
-    cat >$TMPFILE <<__LAYOUT__
-depth-project = 5
-depth-branch = 1
-depth-tag = 1
-dir-trunk = trunk
-dir-branch =
-dir-tag =
-level-owner-branch =
-level-owner-tag =
-template-branch =
-template-tag =
-__LAYOUT__
-    TMPDIR=$(mktemp -d)
-    svn checkout -q $REPOS_URL $TMPDIR
-    svn propset -q --file=$TMPFILE fcm:layout $TMPDIR
-    svn commit -q -m " " $TMPDIR
-    rm -f $TMPFILE
-    rm -rf $TMPDIR
-    ROOT_URL=$REPOS_URL
-}
-
-function init_branch() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    local ROOT_PATH=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        ROOT_PATH=$ROOT_PATH/$TEST_PROJECT
-    fi
-    MESSAGE=$(echo -e "Created $ROOT_PATH/branches/dev/Share/$BRANCH_NAME from /trunk at 1.")
-    svn copy -q -r1 $ROOT_URL/trunk $ROOT_URL/branches/dev/Share/$BRANCH_NAME \
-                    -m "Made a branch $MESSAGE"
-}
-
-function init_branch_wc() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch $BRANCH_NAME $REPOS_URL
-    svn checkout -q $ROOT_URL/branches/dev/Share/$BRANCH_NAME $TEST_DIR/wc
-}
-
-function init_merge_branches() {
-    local BRANCH_NAME=$1
-    local OTHER_BRANCH_NAME=$2
-    local REPOS_URL=$3
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch_wc $BRANCH_NAME $REPOS_URL
-    cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
-    done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
-    svn commit -q -m "Made changes for future merge of this branch"
-    svn update -q
-    init_branch $OTHER_BRANCH_NAME $REPOS_URL
-    svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
-    echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
-    svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
-    svn commit -q -m "Made changes for future merge"
-    svn update -q
-    svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made trunk change"
-    svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made another trunk change"
-    svn update -q
-}
-
-function run_pass() {
-    local TEST_KEY=$1
-    shift 1
-    if ! "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function run_fail() {
-    local TEST_KEY=$1
-    shift 1
-    if "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function setup() {
-    mkdir -p $TEST_DIR/.subversion
-    mkdir -p $TEST_DIR/run
-    cd $TEST_DIR/run
-}
-
-function teardown() {
-    cd $TEST_DIR
-    rm -rf $TEST_DIR/test_repos
-    rm -rf $TEST_DIR/wc
-    rm -rf $TEST_DIR/run
-    rm -rf $TEST_DIR/.subversion
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        ssh $TEST_REMOTE_HOST "rm -rf $TEST_REMOTE_DIR"
-    fi
-}
-
-REPOS_URL=
-ROOT_URL=
-PROJECT=
diff --git a/t/fcm-add/test_header b/t/fcm-add/test_header
new file mode 120000
index 0000000..9a2064b
--- /dev/null
+++ b/t/fcm-add/test_header
@@ -0,0 +1 @@
+../lib/bash/svn_test_header
\ No newline at end of file
diff --git a/t/fcm-branch-create/00-simple.t b/t/fcm-branch-create/00-simple.t
index 0aaea8d..981326a 100644
--- a/t/fcm-branch-create/00-simple.t
+++ b/t/fcm-branch-create/00-simple.t
@@ -34,6 +34,7 @@ TEST_KEY=$TEST_KEY_BASE-fcm-bc
 run_pass "$TEST_KEY" fcm branch-create -t SHARE --rev-flag=NONE \
                                         --non-interactive \
                                         my_branch_test
+branch_tidy "$TEST_KEY.out"
 file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <<__OUT__
 [info] Source: $ROOT_URL/trunk at 1 (4)
 Change summary:
@@ -44,7 +45,6 @@ Commit message is as follows:
 --------------------------------------------------------------------------------
 Created /${PROJECT}branches/dev/Share/my_branch_test from /${PROJECT}trunk at 1.
 --------------------------------------------------------------------------------
-
 Committed revision 5.
 [info] Created: $ROOT_URL/branches/dev/Share/my_branch_test
 __OUT__
@@ -69,6 +69,7 @@ TEST_KEY=$TEST_KEY_BASE-fcm-bc-branch-of-branch
 run_pass "$TEST_KEY" fcm branch-create -t SHARE --rev-flag=NONE \
                                        --non-interactive \
                                        --branch-of-branch my_branch_test
+branch_tidy "$TEST_KEY.out"
 file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <<__OUT__
 [info] Source: $ROOT_URL/branches/dev/Share/branch_test at 4 (4)
 Change summary:
@@ -79,7 +80,6 @@ Commit message is as follows:
 --------------------------------------------------------------------------------
 Created /${PROJECT}branches/dev/Share/my_branch_test from /${PROJECT}branches/dev/Share/branch_test at 4.
 --------------------------------------------------------------------------------
-
 Committed revision 5.
 [info] Created: $ROOT_URL/branches/dev/Share/my_branch_test
 __OUT__
diff --git a/t/fcm-branch-create/test_header b/t/fcm-branch-create/test_header
deleted file mode 100644
index ecde158..0000000
--- a/t/fcm-branch-create/test_header
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# (C) British Crown Copyright 2006-16 Met Office.
-#
-# This file is part of FCM, tools for managing and building source code.
-#
-# FCM is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# FCM is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with FCM. If not, see <http://www.gnu.org/licenses/>.
-# ------------------------------------------------------------------------------
-# Optional enviroment variables:
-#   TEST_PROJECT (tests using given project name)
-#   TEST_REMOTE_HOST (tests using svn+ssh repositories located on given host)
-# ------------------------------------------------------------------------------
-
-. $(dirname $0)/../lib/bash/test_header
-
-function file_cmp() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if cmp $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_grep() {
-    local TEST_KEY=$1
-    local PATTERN=$2
-    local FILE=$3
-    if grep -q -e "$PATTERN" $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_test() {
-    local TEST_KEY=$1
-    local FILE=$2
-    local OPTION=${3:--e}
-    if test $OPTION $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-    else
-        fail $TEST_KEY
-    fi
-}
-
-function file_xxdiff() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if xxdiff -D $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function init_repos() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    ROOT_URL=$REPOS_URL
-    PROJECT=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        PROJECT=$TEST_PROJECT"/"
-    fi
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/$PROJECT/trunk -m "initial trunk import"
-    svn mkdir -q $REPOS_URL/$PROJECT/tags -m "make tags"
-    svn mkdir -q --parents $REPOS_URL/$PROJECT/branches/dev/Share -m " "
-}
-
-function init_repos_layout_roses() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    svn mkdir -q --parents $REPOS_URL/a/a/0/0/0/trunk
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/a/a/0/0/0/trunk -m "initial trunk import"
-    TMPFILE=$(mktemp)
-    cat >$TMPFILE <<__LAYOUT__
-depth-project = 5
-depth-branch = 1
-depth-tag = 1
-dir-trunk = trunk
-dir-branch =
-dir-tag =
-level-owner-branch =
-level-owner-tag =
-template-branch =
-template-tag =
-__LAYOUT__
-    TMPDIR=$(mktemp -d)
-    svn checkout -q $REPOS_URL $TMPDIR
-    svn propset -q --file=$TMPFILE fcm:layout $TMPDIR
-    svn commit -q -m " " $TMPDIR
-    rm -f $TMPFILE
-    rm -rf $TMPDIR
-    ROOT_URL=$REPOS_URL
-}
-
-function init_branch() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    local ROOT_PATH=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        ROOT_PATH=$ROOT_PATH/$TEST_PROJECT
-    fi
-    MESSAGE=$(echo -e "Created $ROOT_PATH/branches/dev/Share/$BRANCH_NAME from /trunk at 1.")
-    svn copy -q -r1 $ROOT_URL/trunk $ROOT_URL/branches/dev/Share/$BRANCH_NAME \
-                    -m "Made a branch $MESSAGE"
-}
-
-function init_branch_wc() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch $BRANCH_NAME $REPOS_URL
-    svn checkout -q $ROOT_URL/branches/dev/Share/$BRANCH_NAME $TEST_DIR/wc
-}
-
-function init_merge_branches() {
-    local BRANCH_NAME=$1
-    local OTHER_BRANCH_NAME=$2
-    local REPOS_URL=$3
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch_wc $BRANCH_NAME $REPOS_URL
-    cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
-    done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
-    svn commit -q -m "Made changes for future merge of this branch"
-    svn update -q
-    init_branch $OTHER_BRANCH_NAME $REPOS_URL
-    svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
-    echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
-    svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
-    svn commit -q -m "Made changes for future merge"
-    svn update -q
-    svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made trunk change"
-    svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made another trunk change"
-    svn update -q
-}
-
-function run_pass() {
-    local TEST_KEY=$1
-    shift 1
-    if ! "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function run_fail() {
-    local TEST_KEY=$1
-    shift 1
-    if "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function setup() {
-    mkdir -p $TEST_DIR/.subversion
-    mkdir -p $TEST_DIR/run
-    cd $TEST_DIR/run
-}
-
-function teardown() {
-    cd $TEST_DIR
-    rm -rf $TEST_DIR/test_repos
-    rm -rf $TEST_DIR/wc
-    rm -rf $TEST_DIR/run
-    rm -rf $TEST_DIR/.subversion
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        ssh $TEST_REMOTE_HOST "rm -rf $TEST_REMOTE_DIR"
-    fi
-}
-
-REPOS_URL=
-ROOT_URL=
-PROJECT=
diff --git a/t/fcm-branch-create/test_header b/t/fcm-branch-create/test_header
new file mode 120000
index 0000000..9a2064b
--- /dev/null
+++ b/t/fcm-branch-create/test_header
@@ -0,0 +1 @@
+../lib/bash/svn_test_header
\ No newline at end of file
diff --git a/t/fcm-branch-delete/test_header b/t/fcm-branch-delete/test_header
deleted file mode 100644
index ecde158..0000000
--- a/t/fcm-branch-delete/test_header
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# (C) British Crown Copyright 2006-16 Met Office.
-#
-# This file is part of FCM, tools for managing and building source code.
-#
-# FCM is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# FCM is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with FCM. If not, see <http://www.gnu.org/licenses/>.
-# ------------------------------------------------------------------------------
-# Optional enviroment variables:
-#   TEST_PROJECT (tests using given project name)
-#   TEST_REMOTE_HOST (tests using svn+ssh repositories located on given host)
-# ------------------------------------------------------------------------------
-
-. $(dirname $0)/../lib/bash/test_header
-
-function file_cmp() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if cmp $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_grep() {
-    local TEST_KEY=$1
-    local PATTERN=$2
-    local FILE=$3
-    if grep -q -e "$PATTERN" $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_test() {
-    local TEST_KEY=$1
-    local FILE=$2
-    local OPTION=${3:--e}
-    if test $OPTION $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-    else
-        fail $TEST_KEY
-    fi
-}
-
-function file_xxdiff() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if xxdiff -D $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function init_repos() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    ROOT_URL=$REPOS_URL
-    PROJECT=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        PROJECT=$TEST_PROJECT"/"
-    fi
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/$PROJECT/trunk -m "initial trunk import"
-    svn mkdir -q $REPOS_URL/$PROJECT/tags -m "make tags"
-    svn mkdir -q --parents $REPOS_URL/$PROJECT/branches/dev/Share -m " "
-}
-
-function init_repos_layout_roses() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    svn mkdir -q --parents $REPOS_URL/a/a/0/0/0/trunk
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/a/a/0/0/0/trunk -m "initial trunk import"
-    TMPFILE=$(mktemp)
-    cat >$TMPFILE <<__LAYOUT__
-depth-project = 5
-depth-branch = 1
-depth-tag = 1
-dir-trunk = trunk
-dir-branch =
-dir-tag =
-level-owner-branch =
-level-owner-tag =
-template-branch =
-template-tag =
-__LAYOUT__
-    TMPDIR=$(mktemp -d)
-    svn checkout -q $REPOS_URL $TMPDIR
-    svn propset -q --file=$TMPFILE fcm:layout $TMPDIR
-    svn commit -q -m " " $TMPDIR
-    rm -f $TMPFILE
-    rm -rf $TMPDIR
-    ROOT_URL=$REPOS_URL
-}
-
-function init_branch() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    local ROOT_PATH=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        ROOT_PATH=$ROOT_PATH/$TEST_PROJECT
-    fi
-    MESSAGE=$(echo -e "Created $ROOT_PATH/branches/dev/Share/$BRANCH_NAME from /trunk at 1.")
-    svn copy -q -r1 $ROOT_URL/trunk $ROOT_URL/branches/dev/Share/$BRANCH_NAME \
-                    -m "Made a branch $MESSAGE"
-}
-
-function init_branch_wc() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch $BRANCH_NAME $REPOS_URL
-    svn checkout -q $ROOT_URL/branches/dev/Share/$BRANCH_NAME $TEST_DIR/wc
-}
-
-function init_merge_branches() {
-    local BRANCH_NAME=$1
-    local OTHER_BRANCH_NAME=$2
-    local REPOS_URL=$3
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch_wc $BRANCH_NAME $REPOS_URL
-    cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
-    done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
-    svn commit -q -m "Made changes for future merge of this branch"
-    svn update -q
-    init_branch $OTHER_BRANCH_NAME $REPOS_URL
-    svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
-    echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
-    svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
-    svn commit -q -m "Made changes for future merge"
-    svn update -q
-    svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made trunk change"
-    svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made another trunk change"
-    svn update -q
-}
-
-function run_pass() {
-    local TEST_KEY=$1
-    shift 1
-    if ! "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function run_fail() {
-    local TEST_KEY=$1
-    shift 1
-    if "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function setup() {
-    mkdir -p $TEST_DIR/.subversion
-    mkdir -p $TEST_DIR/run
-    cd $TEST_DIR/run
-}
-
-function teardown() {
-    cd $TEST_DIR
-    rm -rf $TEST_DIR/test_repos
-    rm -rf $TEST_DIR/wc
-    rm -rf $TEST_DIR/run
-    rm -rf $TEST_DIR/.subversion
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        ssh $TEST_REMOTE_HOST "rm -rf $TEST_REMOTE_DIR"
-    fi
-}
-
-REPOS_URL=
-ROOT_URL=
-PROJECT=
diff --git a/t/fcm-branch-delete/test_header b/t/fcm-branch-delete/test_header
new file mode 120000
index 0000000..9a2064b
--- /dev/null
+++ b/t/fcm-branch-delete/test_header
@@ -0,0 +1 @@
+../lib/bash/svn_test_header
\ No newline at end of file
diff --git a/t/fcm-branch-diff/00-simple.t b/t/fcm-branch-diff/00-simple.t
index f658c89..509efc3 100644
--- a/t/fcm-branch-diff/00-simple.t
+++ b/t/fcm-branch-diff/00-simple.t
@@ -28,7 +28,9 @@ setup
 init_repos
 init_branch_wc branch_test $REPOS_URL
 cd $TEST_DIR/wc
-FILE_LIST=$(find . -type f | sed "/\.svn/d" | sort | head -5)
+FILE_LIST="lib/python/info/__init__.py lib/python/info/poems.py \
+module/hello_constants.f90 module/hello_constants.inc \
+module/hello_constants_dummy.inc"
 for FILE in $FILE_LIST; do 
     sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $FILE
     sed -i "/#/d; /^ *!/d" $FILE
@@ -54,12 +56,14 @@ svn switch -q $ROOT_URL/branches/dev/Share/branch_test
 TEST_KEY=$TEST_KEY_BASE-fcm-branch-diff
 run_pass "$TEST_KEY" fcm branch-diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: added_directory/hello_constants.f90
 ===================================================================
---- added_directory/hello_constants.f90	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants.f90	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants.f90	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants.f90	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants.f90	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants.f90	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1,5 @@
 +MODULE Hello_Constants
 +
@@ -68,27 +72,35 @@ Index: added_directory/hello_constants.f90
 +END MODULE Hello_Constants
 Index: added_directory/hello_constants.inc
 ===================================================================
---- added_directory/hello_constants.inc	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants.inc	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants.inc	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants.inc	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants.inc	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants.inc	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1,2 @@
 +CHARACTER (
 +LEN=80), PARAMETER :: hello_strINg = 'Hello Earth!!'
 Index: added_directory/hello_constants_dummy.inc
 ===================================================================
---- added_directory/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants_dummy.inc	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants_dummy.inc	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants_dummy.inc	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants_dummy.inc	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1 @@
 +INCLUDE 'hello_constants.INc'
 Index: added_file
 ===================================================================
---- added_file	($ROOT_URL/trunk)	(revision 0)
-+++ added_file	(revision 6)
+#IF SVN1.8 --- added_file	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_file	(revision 6)
+#IF SVN1.9 --- added_file	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_file	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1 @@
 +INCLUDE 'hello_constants.INc'
 Index: lib/python/info/poems.py
 ===================================================================
---- lib/python/info/poems.py	($ROOT_URL/trunk)	(revision 1)
-+++ lib/python/info/poems.py	(working copy)
+#IF SVN1.8 --- lib/python/info/poems.py	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ lib/python/info/poems.py	(working copy)
+#IF SVN1.9 --- lib/python/info/poems.py	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ lib/python/info/poems.py	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1,24 +1,23 @@
 -#!/usr/bin/env python
 -# -*- coding: utf-8 -*-
@@ -125,8 +137,10 @@ Index: lib/python/info/poems.py
 +prINt "\n",  __doc__
 Index: module/hello_constants.f90
 ===================================================================
---- module/hello_constants.f90	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants.f90	(working copy)
+#IF SVN1.8 --- module/hello_constants.f90	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants.f90	(working copy)
+#IF SVN1.9 --- module/hello_constants.f90	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants.f90	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1,5 +0,0 @@
 -MODULE Hello_Constants
 -
@@ -135,29 +149,37 @@ Index: module/hello_constants.f90
 -END MODULE Hello_Constants
 Index: module/hello_constants.inc
 ===================================================================
---- module/hello_constants.inc	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants.inc	(working copy)
+#IF SVN1.8 --- module/hello_constants.inc	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants.inc	(working copy)
+#IF SVN1.9 --- module/hello_constants.inc	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants.inc	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1 +0,0 @@
 -CHARACTER (LEN=80), PARAMETER :: hello_string = 'Hello Earth!'
 Index: module/hello_constants_dummy.inc
 ===================================================================
---- module/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants_dummy.inc	(working copy)
+#IF SVN1.8 --- module/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants_dummy.inc	(working copy)
+#IF SVN1.9 --- module/hello_constants_dummy.inc	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants_dummy.inc	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1 +0,0 @@
 -INCLUDE 'hello_constants.inc'
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm bdi
 TEST_KEY=$TEST_KEY_BASE-bdi
 run_pass "$TEST_KEY" fcm bdi
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: added_directory/hello_constants.f90
 ===================================================================
---- added_directory/hello_constants.f90	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants.f90	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants.f90	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants.f90	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants.f90	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants.f90	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1,5 @@
 +MODULE Hello_Constants
 +
@@ -166,27 +188,35 @@ Index: added_directory/hello_constants.f90
 +END MODULE Hello_Constants
 Index: added_directory/hello_constants.inc
 ===================================================================
---- added_directory/hello_constants.inc	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants.inc	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants.inc	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants.inc	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants.inc	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants.inc	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1,2 @@
 +CHARACTER (
 +LEN=80), PARAMETER :: hello_strINg = 'Hello Earth!!'
 Index: added_directory/hello_constants_dummy.inc
 ===================================================================
---- added_directory/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants_dummy.inc	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants_dummy.inc	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants_dummy.inc	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants_dummy.inc	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1 @@
 +INCLUDE 'hello_constants.INc'
 Index: added_file
 ===================================================================
---- added_file	($ROOT_URL/trunk)	(revision 0)
-+++ added_file	(revision 6)
+#IF SVN1.8 --- added_file	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_file	(revision 6)
+#IF SVN1.9 --- added_file	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_file	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1 @@
 +INCLUDE 'hello_constants.INc'
 Index: lib/python/info/poems.py
 ===================================================================
---- lib/python/info/poems.py	($ROOT_URL/trunk)	(revision 1)
-+++ lib/python/info/poems.py	(working copy)
+#IF SVN1.8 --- lib/python/info/poems.py	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ lib/python/info/poems.py	(working copy)
+#IF SVN1.9 --- lib/python/info/poems.py	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ lib/python/info/poems.py	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1,24 +1,23 @@
 -#!/usr/bin/env python
 -# -*- coding: utf-8 -*-
@@ -223,8 +253,10 @@ Index: lib/python/info/poems.py
 +prINt "\n",  __doc__
 Index: module/hello_constants.f90
 ===================================================================
---- module/hello_constants.f90	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants.f90	(working copy)
+#IF SVN1.8 --- module/hello_constants.f90	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants.f90	(working copy)
+#IF SVN1.9 --- module/hello_constants.f90	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants.f90	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1,5 +0,0 @@
 -MODULE Hello_Constants
 -
@@ -233,17 +265,23 @@ Index: module/hello_constants.f90
 -END MODULE Hello_Constants
 Index: module/hello_constants.inc
 ===================================================================
---- module/hello_constants.inc	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants.inc	(working copy)
+#IF SVN1.8 --- module/hello_constants.inc	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants.inc	(working copy)
+#IF SVN1.9 --- module/hello_constants.inc	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants.inc	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1 +0,0 @@
 -CHARACTER (LEN=80), PARAMETER :: hello_string = 'Hello Earth!'
 Index: module/hello_constants_dummy.inc
 ===================================================================
---- module/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants_dummy.inc	(working copy)
+#IF SVN1.8 --- module/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants_dummy.inc	(working copy)
+#IF SVN1.9 --- module/hello_constants_dummy.inc	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants_dummy.inc	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1 +0,0 @@
 -INCLUDE 'hello_constants.inc'
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm branch-diff --wiki
@@ -280,18 +318,22 @@ svn add -q added_directory/foo$TEST_KEY
 echo "bar" > added_directory/bar$TEST_KEY
 run_pass "$TEST_KEY" fcm bdi
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: added_directory/foo00-simple-bdi-wc-changes
 ===================================================================
---- added_directory/foo00-simple-bdi-wc-changes	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/foo00-simple-bdi-wc-changes	(working copy)
+#IF SVN1.8 --- added_directory/foo00-simple-bdi-wc-changes	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/foo00-simple-bdi-wc-changes	(working copy)
+#IF SVN1.9 --- added_directory/foo00-simple-bdi-wc-changes	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/foo00-simple-bdi-wc-changes	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -0,0 +1 @@
 +foo
 Index: added_directory/hello_constants.f90
 ===================================================================
---- added_directory/hello_constants.f90	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants.f90	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants.f90	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants.f90	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants.f90	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants.f90	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1,5 @@
 +MODULE Hello_Constants
 +
@@ -300,27 +342,35 @@ Index: added_directory/hello_constants.f90
 +END MODULE Hello_Constants
 Index: added_directory/hello_constants.inc
 ===================================================================
---- added_directory/hello_constants.inc	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants.inc	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants.inc	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants.inc	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants.inc	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants.inc	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1,2 @@
 +CHARACTER (
 +LEN=80), PARAMETER :: hello_strINg = 'Hello Earth!!'
 Index: added_directory/hello_constants_dummy.inc
 ===================================================================
---- added_directory/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 0)
-+++ added_directory/hello_constants_dummy.inc	(revision 6)
+#IF SVN1.8 --- added_directory/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_directory/hello_constants_dummy.inc	(revision 6)
+#IF SVN1.9 --- added_directory/hello_constants_dummy.inc	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_directory/hello_constants_dummy.inc	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1 @@
 +INCLUDE 'hello_constants.INc'
 Index: added_file
 ===================================================================
---- added_file	($ROOT_URL/trunk)	(revision 0)
-+++ added_file	(revision 6)
+#IF SVN1.8 --- added_file	($ROOT_URL/trunk)	(revision 0)
+#IF SVN1.8 +++ added_file	(revision 6)
+#IF SVN1.9 --- added_file	(.../trunk)	(working copy)
+#IF SVN1.9 +++ added_file	(.../branches/dev/Share/branch_test)	(revision 6)
 @@ -0,0 +1 @@
 +INCLUDE 'hello_constants.INc'
 Index: lib/python/info/poems.py
 ===================================================================
---- lib/python/info/poems.py	($ROOT_URL/trunk)	(revision 1)
-+++ lib/python/info/poems.py	(working copy)
+#IF SVN1.8 --- lib/python/info/poems.py	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ lib/python/info/poems.py	(working copy)
+#IF SVN1.9 --- lib/python/info/poems.py	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ lib/python/info/poems.py	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1,24 +1,23 @@
 -#!/usr/bin/env python
 -# -*- coding: utf-8 -*-
@@ -357,8 +407,10 @@ Index: lib/python/info/poems.py
 +prINt "\n",  __doc__
 Index: module/hello_constants.f90
 ===================================================================
---- module/hello_constants.f90	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants.f90	(working copy)
+#IF SVN1.8 --- module/hello_constants.f90	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants.f90	(working copy)
+#IF SVN1.9 --- module/hello_constants.f90	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants.f90	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1,5 +0,0 @@
 -MODULE Hello_Constants
 -
@@ -367,17 +419,23 @@ Index: module/hello_constants.f90
 -END MODULE Hello_Constants
 Index: module/hello_constants.inc
 ===================================================================
---- module/hello_constants.inc	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants.inc	(working copy)
+#IF SVN1.8 --- module/hello_constants.inc	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants.inc	(working copy)
+#IF SVN1.9 --- module/hello_constants.inc	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants.inc	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1 +0,0 @@
 -CHARACTER (LEN=80), PARAMETER :: hello_string = 'Hello Earth!'
 Index: module/hello_constants_dummy.inc
 ===================================================================
---- module/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 1)
-+++ module/hello_constants_dummy.inc	(working copy)
+#IF SVN1.8 --- module/hello_constants_dummy.inc	($ROOT_URL/trunk)	(revision 1)
+#IF SVN1.8 +++ module/hello_constants_dummy.inc	(working copy)
+#IF SVN1.9 --- module/hello_constants_dummy.inc	(.../trunk)	(revision 1)
+#IF SVN1.9 +++ module/hello_constants_dummy.inc	(.../branches/dev/Share/branch_test)	(working copy)
 @@ -1 +0,0 @@
 -INCLUDE 'hello_constants.inc'
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 teardown
 #-------------------------------------------------------------------------------
diff --git a/t/fcm-branch-diff/test_header b/t/fcm-branch-diff/test_header
index ecde158..dec7938 100644
--- a/t/fcm-branch-diff/test_header
+++ b/t/fcm-branch-diff/test_header
@@ -158,34 +158,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-branch-info/00-simple.t b/t/fcm-branch-info/00-simple.t
index 0904833..4484f06 100644
--- a/t/fcm-branch-info/00-simple.t
+++ b/t/fcm-branch-info/00-simple.t
@@ -33,7 +33,9 @@ fcm branch-create -t SHARE --rev-flag=NONE \
                            --non-interactive \
                            --branch-of-branch my_branch_test >/dev/null
 svn switch -q $ROOT_URL/trunk
-FILE_LIST=$(find . -type f | sed "/\.svn/d" | sort | head -5)
+FILE_LIST="lib/python/info/__init__.py lib/python/info/poems.py \
+module/hello_constants.f90 module/hello_constants.inc \
+module/hello_constants_dummy.inc"
 for FILE in $FILE_LIST; do 
     sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $FILE
     sed -i "/#/d; /^ *!/d" $FILE
@@ -123,7 +125,6 @@ svn switch -q $ROOT_URL/branches/dev/Share/branch_test
 svn merge -q $ROOT_URL/branches/dev/Share/sibling_branch_test
 svn commit -q -m "Merged sibling into test branch"
 svn switch -q $ROOT_URL/branches/dev/Share/sibling_branch_test
-FILE_LIST=$(find . -type f | sed "/\.svn/d" | sort | head -5)
 TMPFILE=$(mktemp)
 for FILE in $FILE_LIST; do 
     cut -f 1 $FILE > $TMPFILE
diff --git a/t/fcm-branch-info/test_header b/t/fcm-branch-info/test_header
index ecde158..dec7938 100644
--- a/t/fcm-branch-info/test_header
+++ b/t/fcm-branch-info/test_header
@@ -158,34 +158,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-branch-list/00-simple.t b/t/fcm-branch-list/00-simple.t
index 0124d3c..92c1c31 100644
--- a/t/fcm-branch-list/00-simple.t
+++ b/t/fcm-branch-list/00-simple.t
@@ -41,7 +41,9 @@ MESSAGE=$(echo -e "Created $ROOT_PATH/branches/dev/fred/donuts from /trunk at 1.")
 svn mkdir -q -m "Dr Fooeybar branch" $ROOT_URL/branches/dev/drfooeybar/
 svn copy -q -r1 $ROOT_URL/trunk $ROOT_URL/branches/dev/drfooeybar/donuts \
             -m "Made a branch $MESSAGE" --non-interactive
-FILE_LIST=$(find . -type f | sed "/\.svn/d" | sort | head -5)
+FILE_LIST="lib/python/info/__init__.py lib/python/info/poems.py \
+module/hello_constants.f90 module/hello_constants.inc \
+module/hello_constants_dummy.inc"
 for FILE in $FILE_LIST; do 
     sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $FILE
     sed -i "/#/d; /^ *!/d" $FILE
diff --git a/t/fcm-branch-list/test_header b/t/fcm-branch-list/test_header
index ecde158..dec7938 100644
--- a/t/fcm-branch-list/test_header
+++ b/t/fcm-branch-list/test_header
@@ -158,34 +158,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-commit/00-simple.t b/t/fcm-commit/00-simple.t
index b04ab8a..1b94e80 100644
--- a/t/fcm-commit/00-simple.t
+++ b/t/fcm-commit/00-simple.t
@@ -29,7 +29,12 @@ init_repos
 init_branch sibling_branch_test $REPOS_URL
 init_branch_wc branch_test $REPOS_URL
 cd $TEST_DIR/wc
-FILE_LIST=$(find . -type f | sed "/\.svn/d" | sort | head -5)
+FILE_LIST="./lib/python/info/__init__.py
+./lib/python/info/poems.py
+./module/hello_constants.f90
+./module/hello_constants.inc
+./module/hello_constants_dummy.inc
+"
 for FILE in $FILE_LIST; do
     sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $FILE
     sed -i "/#/d; /^ *!/d" $FILE
@@ -55,7 +60,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : branches/dev/Share/branch_test]
 [Sub-dir: ]
-
 A  +    added_directory
 A  +    added_file
 D       module
@@ -71,10 +75,8 @@ Commit message is as follows:
 --------------------------------------------------------------------------------
 foo
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO A Share BRANCH.
 *** Please ensure that you have the owner's permission.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Adding         added_directory
 Adding         added_file
@@ -83,7 +85,6 @@ Sending        added_directory/hello_constants.f90
 Sending        added_directory/hello_constants.inc
 Sending        added_directory/hello_constants_dummy.inc
 Sending        lib/python/info/poems.py
-Transmitting file data .....
 Committed revision 6.
 Updating '.':
 At revision 6.
diff --git a/t/fcm-commit/01-subtree.t b/t/fcm-commit/01-subtree.t
index 7dffbc1..9325ff7 100644
--- a/t/fcm-commit/01-subtree.t
+++ b/t/fcm-commit/01-subtree.t
@@ -29,7 +29,12 @@ init_repos
 init_branch sibling_branch_test $REPOS_URL
 init_branch_wc branch_test $REPOS_URL
 cd $TEST_DIR/wc
-FILE_LIST=$(find . -type f | sed "/\.svn/d" | sort | head -5)
+FILE_LIST="./lib/python/info/__init__.py
+./lib/python/info/poems.py
+./module/hello_constants.f90
+./module/hello_constants.inc
+./module/hello_constants_dummy.inc
+"
 for FILE in $FILE_LIST; do
     sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $FILE
     sed -i "/#/d; /^ *!/d" $FILE
@@ -57,7 +62,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : branches/dev/Share/branch_test]
 [Sub-dir: ]
-
 A  +    added_directory
 A  +    added_file
 D       module
@@ -73,10 +77,8 @@ Commit message is as follows:
 --------------------------------------------------------------------------------
 foo
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO A Share BRANCH.
 *** Please ensure that you have the owner's permission.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Adding         added_directory
 Adding         added_file
@@ -85,7 +87,6 @@ Sending        added_directory/hello_constants.f90
 Sending        added_directory/hello_constants.inc
 Sending        added_directory/hello_constants_dummy.inc
 Sending        lib/python/info/poems.py
-Transmitting file data .....
 Committed revision 6.
 Updating '.':
 At revision 6.
diff --git a/t/fcm-commit/test_header b/t/fcm-commit/test_header
index ecde158..dec7938 100644
--- a/t/fcm-commit/test_header
+++ b/t/fcm-commit/test_header
@@ -158,34 +158,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-conflicts/11-tree-edit-replace.t b/t/fcm-conflicts/11-tree-edit-replace.t
new file mode 100644
index 0000000..141a6cb
--- /dev/null
+++ b/t/fcm-conflicts/11-tree-edit-replace.t
@@ -0,0 +1,79 @@
+#!/bin/bash
+# ------------------------------------------------------------------------------
+# (C) British Crown Copyright 2006-16 Met Office.
+#
+# This file is part of FCM, tools for managing and building source code.
+#
+# FCM is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# FCM is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with FCM. If not, see <http://www.gnu.org/licenses/>.
+# ------------------------------------------------------------------------------
+# Tree conflict: local file edit, incoming file replace upon merge
+#-------------------------------------------------------------------------------
+. "$(dirname "$0")/test_header"
+#-------------------------------------------------------------------------------
+check_svn_version
+tests 6
+#-------------------------------------------------------------------------------
+setup
+init_repos
+init_branch replace "${REPOS_URL}"
+init_branch_wc edit "${REPOS_URL}"
+cd "${TEST_DIR}/wc"
+svn switch -q "${ROOT_URL}/branches/dev/Share/replace"
+HELLO="$(<'pro/hello.pro')"
+svn delete -q 'pro/hello.pro'
+svn commit -q -m 'Remove local copy of conflict file'
+echo 'Replace contents (1)' >'pro/hello.pro'
+svn add 'pro/hello.pro'
+svn commit -q -m 'Replace local copy of conflict file'
+svn switch -q "${ROOT_URL}/branches/dev/Share/edit"
+echo 'Merge contents (1)' >>'pro/hello.pro'
+svn commit -q -m 'Modified and renamed merge copy of conflict file'
+svn update -q
+#-------------------------------------------------------------------------------
+TEST_KEY="${TEST_KEY_BASE}-leip-y"
+fcm merge --non-interactive "${ROOT_URL}/branches/dev/Share/replace" >'/dev/null'
+run_pass "${TEST_KEY}" fcm conflicts <<<'y'
+sed -i "/^Resolved conflicted state of 'pro\/hello.pro'$/d" \
+    ${TEST_DIR}/"${TEST_KEY}.out"
+file_cmp "${TEST_KEY}.out" "${TEST_KEY}.out" <<'__OUT__'
+[info] pro/hello.pro: in tree conflict.
+Locally: edited.
+Externally: replaced.
+Answer (y) to keep the file.
+Answer (n) to accept the external replace.
+Keep the local version?
+Enter "y" or "n" (or just press <return> for "n") Resolved conflicted state of 'pro/hello.pro'
+__OUT__
+file_cmp "${TEST_KEY}.err" "${TEST_KEY}.err" <'/dev/null'
+#-------------------------------------------------------------------------------
+TEST_KEY="${TEST_KEY_BASE}-leip-n"
+svn revert -R -q .
+rm '#commit_message#'
+fcm merge --non-interactive "${ROOT_URL}/branches/dev/Share/replace" >'/dev/null'
+run_pass "${TEST_KEY}" fcm conflicts <<<'n'
+sed -i "/^Resolved conflicted state of 'pro\/hello.pro'$/d" \
+    ${TEST_DIR}/"${TEST_KEY}.out"
+file_cmp "${TEST_KEY}.out" "${TEST_KEY}.out" <<'__OUT__'
+[info] pro/hello.pro: in tree conflict.
+Locally: edited.
+Externally: replaced.
+Answer (y) to keep the file.
+Answer (n) to accept the external replace.
+Keep the local version?
+Enter "y" or "n" (or just press <return> for "n") D         pro/hello.pro
+A         pro/hello.pro
+__OUT__
+file_cmp "${TEST_KEY}.err" "${TEST_KEY}.err" <'/dev/null'
+#-------------------------------------------------------------------------------
+exit
diff --git a/t/fcm-conflicts/test_header b/t/fcm-conflicts/test_header
index ecde158..7456ae2 100644
--- a/t/fcm-conflicts/test_header
+++ b/t/fcm-conflicts/test_header
@@ -28,7 +28,7 @@ function file_cmp() {
     local TEST_KEY=$1
     local FILE_ACTUAL=$2
     local FILE_EXPECT=${3:--}
-    if cmp $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
+    if diff -u $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT >&2; then
         pass $TEST_KEY
         return
     fi
@@ -158,34 +158,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-diff/00-simple.t b/t/fcm-diff/00-simple.t
index 1730d6d..46caf4f 100644
--- a/t/fcm-diff/00-simple.t
+++ b/t/fcm-diff/00-simple.t
@@ -28,7 +28,12 @@ setup
 init_repos
 init_branch_wc branch_test $REPOS_URL
 cd $TEST_DIR/wc
-FILE_LIST=$(find . -type f | sed "/\.svn/d" | sort | head -5)
+FILE_LIST="./lib/python/info/__init__.py
+./lib/python/info/poems.py
+./module/hello_constants.f90
+./module/hello_constants.inc
+./module/hello_constants_dummy.inc
+"
 for FILE in $FILE_LIST; do 
     sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $FILE
     sed -i "/#/d; /^ *!/d" $FILE
diff --git a/t/fcm-diff/test_header b/t/fcm-diff/test_header
index ecde158..dec7938 100644
--- a/t/fcm-diff/test_header
+++ b/t/fcm-diff/test_header
@@ -158,34 +158,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-loc-layout/test_header b/t/fcm-loc-layout/test_header
index 260f1c1..5cc0317 100644
--- a/t/fcm-loc-layout/test_header
+++ b/t/fcm-loc-layout/test_header
@@ -157,34 +157,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-make/00-build-basic.t b/t/fcm-make/00-build-basic.t
index 901e76d..edb3b4d 100755
--- a/t/fcm-make/00-build-basic.t
+++ b/t/fcm-make/00-build-basic.t
@@ -28,7 +28,7 @@ TEST_KEY="$TEST_KEY_BASE"
 run_pass "$TEST_KEY" fcm make
 find .fcm-make build -type f | sed 's/^\(\.fcm-make\/log\).*$/\1/' \
     | sort >"$TEST_KEY.find"
-file_cmp "$TEST_KEY.find" "$TEST_KEY.find" <<'__OUT__'
+sort >"${TEST_KEY}.find.expected" <<'__OUT__'
 .fcm-make/config-as-parsed.cfg
 .fcm-make/config-on-success.cfg
 .fcm-make/ctx.gz
@@ -38,6 +38,7 @@ build/include/world.mod
 build/o/hello.o
 build/o/world.o
 __OUT__
+file_cmp "$TEST_KEY.find" "$TEST_KEY.find" "${TEST_KEY}.find.expected"
 file_test "$TEST_KEY.log" fcm-make.log
 file_test "$TEST_KEY.fcm-make-as-parsed.cfg" fcm-make-as-parsed.cfg
 file_test "$TEST_KEY.fcm-make-on-success.cfg" fcm-make-on-success.cfg
diff --git a/t/fcm-make/05-build-c-cxx-basic.t b/t/fcm-make/05-build-c-cxx-basic.t
index d012d35..5c535cd 100755
--- a/t/fcm-make/05-build-c-cxx-basic.t
+++ b/t/fcm-make/05-build-c-cxx-basic.t
@@ -33,7 +33,7 @@ TEST_KEY="$TEST_KEY_BASE"
 run_pass "$TEST_KEY" fcm make
 find .fcm-make build -type f | sed 's/^\(\.fcm-make\/log\).*$/\1/' \
     | sort >"$TEST_KEY.find"
-file_cmp "$TEST_KEY.find" "$TEST_KEY.find" <<'__OUT__'
+sort >"${TEST_KEY}.find.expected" <<'__OUT__'
 .fcm-make/config-as-parsed.cfg
 .fcm-make/config-on-success.cfg
 .fcm-make/ctx.gz
@@ -43,6 +43,7 @@ build/bin/cxxhello
 build/o/chello.o
 build/o/cxxhello.o
 __OUT__
+file_cmp "$TEST_KEY.find" "$TEST_KEY.find" "${TEST_KEY}.find.expected"
 run_pass "$TEST_KEY.chello" $PWD/build/bin/chello
 file_cmp "$TEST_KEY.chello.out" "$TEST_KEY.chello.out" <<<'Hello C'
 run_pass "$TEST_KEY.cxxhello" $PWD/build/bin/cxxhello
diff --git a/t/fcm-make/12-build-class-prop.t b/t/fcm-make/12-build-class-prop.t
index 7cdc425..2d48deb 100755
--- a/t/fcm-make/12-build-class-prop.t
+++ b/t/fcm-make/12-build-class-prop.t
@@ -28,7 +28,7 @@ PATH=$PWD/bin:$PATH
 TEST_KEY="$TEST_KEY_BASE"
 run_pass "$TEST_KEY" fcm make
 find build* -type f | sort >"$TEST_KEY.find"
-file_cmp "$TEST_KEY.find" "$TEST_KEY.find" <<'__FIND__'
+sort >"${TEST_KEY}.find.expected" <<'__FIND__'
 build/bin/hello.bin
 build/o/hello.o
 build_house/bin/hello_house
@@ -38,6 +38,7 @@ build_office/o/hello_office.o
 build_road/bin/hello_road
 build_road/o/hello_road.o
 __FIND__
+file_cmp "$TEST_KEY.find" "$TEST_KEY.find" "${TEST_KEY}.find.expected"
 sed '/^\[info\] shell(0.*) \(my-fc\|gfortran\)/!d; s/^\[info\] shell(0.*) //' \
     .fcm-make/log >"$TEST_KEY.log"
 file_cmp "$TEST_KEY.log" "$TEST_KEY.log" <<__LOG__
diff --git a/t/fcm-make/23-build-omp.t b/t/fcm-make/23-build-omp.t
index 3cb1579..945f955 100755
--- a/t/fcm-make/23-build-omp.t
+++ b/t/fcm-make/23-build-omp.t
@@ -28,13 +28,15 @@ yes 1.0 | head -n 100 >"$TEST_KEY_BASE.exe.off.out"
 #-------------------------------------------------------------------------------
 TEST_KEY=$TEST_KEY_BASE-on # fc.flag-omp on in new mode
 run_pass "$TEST_KEY" fcm make
-grep ' !\$' fcm-make.log | sort >"$TEST_KEY.log.deps.expected"
-file_cmp  "$TEST_KEY.log.deps" "$TEST_KEY.log.deps.expected" <<'__LOG__'
+grep ' !\$' fcm-make.log | sort >"$TEST_KEY.log.deps"
+sort >"${TEST_KEY}.log.deps.expected" <<'__LOG__'
 [info]              -> (  include) !$i1.f90
 [info]              -> (  include) !$i2.f90
 [info]              -> ( f.module) !$m1
 [info]              -> ( f.module) !$m2
 __LOG__
+file_cmp "${TEST_KEY}.log.deps" \
+    "${TEST_KEY}.log.deps" "${TEST_KEY}.log.deps.expected"
 run_pass "$TEST_KEY.exe" $PWD/build/bin/p1.exe
 file_cmp "$TEST_KEY.exe.out" "$TEST_KEY_BASE.exe.on.out" "$TEST_KEY.exe.out"
 #-------------------------------------------------------------------------------
diff --git a/t/fcm-make/41-ctx-name.t b/t/fcm-make/41-ctx-name.t
index e893fa7..c51aaf5 100755
--- a/t/fcm-make/41-ctx-name.t
+++ b/t/fcm-make/41-ctx-name.t
@@ -21,6 +21,11 @@
 #-------------------------------------------------------------------------------
 . "$(dirname "$0")/test_header"
 
+file_cmp_sorted() {
+    sort - >"${1}.expected"
+    file_cmp "$1" "${2}" "${1}.expected"
+}
+
 find_fcm_make_files() {
     find . "$@" -type f \
         '(' -path '*/build/*' -o \
@@ -58,7 +63,8 @@ __CFG__
 #-------------------------------------------------------------------------------
 run_pass "${TEST_KEY_BASE}-1" fcm make
 find_fcm_make_files >"${TEST_KEY_BASE}-1.find.new"
-file_cmp "${TEST_KEY_BASE}-1.find.new" "${TEST_KEY_BASE}-1.find.new" <<'__FIND__'
+file_cmp_sorted \
+    "${TEST_KEY_BASE}-1.find.new" "${TEST_KEY_BASE}-1.find.new" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
 ./.fcm-make/ctx.gz
@@ -72,7 +78,8 @@ find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-2.find.old"
 file_cmp "${TEST_KEY_BASE}-2.find.old" \
     "${TEST_KEY_BASE}-2.find.old" "${TEST_KEY_BASE}-1.find.new"
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-2.find.new"
-file_cmp "${TEST_KEY_BASE}-2.find.new" "${TEST_KEY_BASE}-2.find.new" <<'__FIND__'
+file_cmp_sorted \
+    "${TEST_KEY_BASE}-2.find.new" "${TEST_KEY_BASE}-2.find.new" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
 ./.fcm-make2/ctx.gz
@@ -86,7 +93,7 @@ touch 'marker'
 sleep 1
 run_pass "${TEST_KEY_BASE}-1-incr" fcm make
 find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-1-incr.find.old"
-file_cmp "${TEST_KEY_BASE}-1-incr.find.old" \
+file_cmp_sorted "${TEST_KEY_BASE}-1-incr.find.old" \
     "${TEST_KEY_BASE}-1-incr.find.old" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
@@ -98,7 +105,7 @@ file_cmp "${TEST_KEY_BASE}-1-incr.find.old" \
 ./extract/a/a.f90
 __FIND__
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-1-incr.find.new"
-file_cmp "${TEST_KEY_BASE}-1-incr.find.new" \
+file_cmp_sorted "${TEST_KEY_BASE}-1-incr.find.new" \
     "${TEST_KEY_BASE}-1-incr.find.new" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
@@ -109,7 +116,7 @@ touch 'marker'
 sleep 1
 run_pass "${TEST_KEY_BASE}-2-incr" fcm make --name=2
 find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-2-incr.find.old"
-file_cmp "${TEST_KEY_BASE}-2-incr.find.old" \
+file_cmp_sorted "${TEST_KEY_BASE}-2-incr.find.old" \
     "${TEST_KEY_BASE}-2-incr.find.old" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
@@ -121,7 +128,7 @@ file_cmp "${TEST_KEY_BASE}-2-incr.find.old" \
 ./extract/a/a.f90
 __FIND__
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-2-incr.find.new"
-file_cmp "${TEST_KEY_BASE}-2-incr.find.new" \
+file_cmp_sorted "${TEST_KEY_BASE}-2-incr.find.new" \
     "${TEST_KEY_BASE}-2-incr.find.new" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
@@ -132,7 +139,7 @@ touch 'marker'
 sleep 1
 run_pass "${TEST_KEY_BASE}-1-new" fcm make --new
 find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-1-new.find.old"
-file_cmp "${TEST_KEY_BASE}-1-new.find.old" \
+file_cmp_sorted "${TEST_KEY_BASE}-1-new.find.old" \
     "${TEST_KEY_BASE}-1-new.find.old" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
@@ -143,7 +150,7 @@ file_cmp "${TEST_KEY_BASE}-1-new.find.old" \
 ./build/o/b.o
 __FIND__
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-1-new.find.new"
-file_cmp "${TEST_KEY_BASE}-1-new.find.new" \
+file_cmp_sorted "${TEST_KEY_BASE}-1-new.find.new" \
     "${TEST_KEY_BASE}-1-new.find.new" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
@@ -155,7 +162,7 @@ touch 'marker'
 sleep 1
 run_pass "${TEST_KEY_BASE}-2-new" fcm make --name=2 --new
 find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-2-new.find.old"
-file_cmp "${TEST_KEY_BASE}-2-new.find.old" \
+file_cmp_sorted "${TEST_KEY_BASE}-2-new.find.old" \
     "${TEST_KEY_BASE}-2-new.find.old" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
@@ -163,7 +170,7 @@ file_cmp "${TEST_KEY_BASE}-2-new.find.old" \
 ./extract/a/a.f90
 __FIND__
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-2-new.find.new"
-file_cmp "${TEST_KEY_BASE}-2-new.find.new" \
+file_cmp_sorted "${TEST_KEY_BASE}-2-new.find.new" \
     "${TEST_KEY_BASE}-2-new.find.new" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
diff --git a/t/fcm-make/42-make-mirror-make2.t b/t/fcm-make/42-make-mirror-make2.t
index 278c3ce..57a0a04 100755
--- a/t/fcm-make/42-make-mirror-make2.t
+++ b/t/fcm-make/42-make-mirror-make2.t
@@ -21,6 +21,11 @@
 #-------------------------------------------------------------------------------
 . "$(dirname "$0")/test_header"
 
+file_cmp_sorted() {
+    sort - >"${1}.expected"
+    file_cmp "$1" "${2}" "${1}.expected"
+}
+
 find_fcm_make_files() {
     find . "$@" -type f \
         '(' -path '*/build/*' -o \
@@ -52,7 +57,8 @@ __CFG__
 #-------------------------------------------------------------------------------
 run_pass "${TEST_KEY_BASE}-1" fcm make
 find_fcm_make_files >"${TEST_KEY_BASE}-1.find.new"
-file_cmp "${TEST_KEY_BASE}-1.find.new" "${TEST_KEY_BASE}-1.find.new" <<'__FIND__'
+file_cmp_sorted \
+    "${TEST_KEY_BASE}-1.find.new" "${TEST_KEY_BASE}-1.find.new" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
 ./.fcm-make/ctx.gz
@@ -68,7 +74,8 @@ find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-2.find.old"
 file_cmp "${TEST_KEY_BASE}-2.find.old" \
     "${TEST_KEY_BASE}-2.find.old" "${TEST_KEY_BASE}-1.find.new"
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-2.find.new"
-file_cmp "${TEST_KEY_BASE}-2.find.new" "${TEST_KEY_BASE}-2.find.new" <<'__FIND__'
+file_cmp_sorted \
+    "${TEST_KEY_BASE}-2.find.new" "${TEST_KEY_BASE}-2.find.new" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
 ./.fcm-make2/ctx.gz
@@ -80,7 +87,7 @@ touch 'marker'
 sleep 1
 run_pass "${TEST_KEY_BASE}-1-incr" fcm make
 find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-1-incr.find.old"
-file_cmp "${TEST_KEY_BASE}-1-incr.find.old" \
+file_cmp_sorted "${TEST_KEY_BASE}-1-incr.find.old" \
     "${TEST_KEY_BASE}-1-incr.find.old" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
@@ -90,7 +97,7 @@ file_cmp "${TEST_KEY_BASE}-1-incr.find.old" \
 ./extract/hello/hello.f90
 __FIND__
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-1-incr.find.new"
-file_cmp "${TEST_KEY_BASE}-1-incr.find.new" \
+file_cmp_sorted "${TEST_KEY_BASE}-1-incr.find.new" \
     "${TEST_KEY_BASE}-1-incr.find.new" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
@@ -103,7 +110,7 @@ touch 'marker'
 sleep 1
 run_pass "${TEST_KEY_BASE}-2-incr" fcm make -f fcm-make2.cfg
 find_fcm_make_files '!' -newer 'marker' >"${TEST_KEY_BASE}-2-incr.find.old"
-file_cmp "${TEST_KEY_BASE}-2-incr.find.old" \
+file_cmp_sorted "${TEST_KEY_BASE}-2-incr.find.old" \
     "${TEST_KEY_BASE}-2-incr.find.old" <<'__FIND__'
 ./.fcm-make/config-as-parsed.cfg
 ./.fcm-make/config-on-success.cfg
@@ -115,7 +122,7 @@ file_cmp "${TEST_KEY_BASE}-2-incr.find.old" \
 ./mirror/fcm-make2.cfg.orig
 __FIND__
 find_fcm_make_files -newer 'marker' >"${TEST_KEY_BASE}-2-incr.find.new"
-file_cmp "${TEST_KEY_BASE}-2-incr.find.new" \
+file_cmp_sorted "${TEST_KEY_BASE}-2-incr.find.new" \
     "${TEST_KEY_BASE}-2-incr.find.new" <<'__FIND__'
 ./.fcm-make2/config-as-parsed.cfg
 ./.fcm-make2/config-on-success.cfg
diff --git a/t/fcm-make/43-ctx-name-inherit.t b/t/fcm-make/43-ctx-name-inherit.t
index e63663b..63e3979 100755
--- a/t/fcm-make/43-ctx-name-inherit.t
+++ b/t/fcm-make/43-ctx-name-inherit.t
@@ -21,6 +21,11 @@
 #-------------------------------------------------------------------------------
 . "$(dirname "$0")/test_header"
 
+file_cmp_sorted() {
+    sort - >"${1}.expected"
+    file_cmp "$1" "${2}" "${1}.expected"
+}
+
 find_fcm_make_files() {
     find . "$@" -type f \
         '(' -path '*/build/*' -o \
@@ -70,7 +75,8 @@ __FORTRAN__
 
 run_pass "${TEST_KEY_BASE}-greet" fcm make -C "${PWD}/greet" -n '-friend'
 (cd 'greet' && find_fcm_make_files) >"${TEST_KEY_BASE}-greet.find"
-file_cmp "${TEST_KEY_BASE}-greet.find" "${TEST_KEY_BASE}-greet.find" <<'__FIND__'
+file_cmp_sorted \
+    "${TEST_KEY_BASE}-greet.find" "${TEST_KEY_BASE}-greet.find" <<'__FIND__'
 ./.fcm-make-friend/config-as-parsed.cfg
 ./.fcm-make-friend/config-on-success.cfg
 ./.fcm-make-friend/ctx.gz
diff --git a/t/fcm-make/44-ctx-name-inherit-compat.t b/t/fcm-make/44-ctx-name-inherit-compat.t
index cc59acd..807c2fa 100755
--- a/t/fcm-make/44-ctx-name-inherit-compat.t
+++ b/t/fcm-make/44-ctx-name-inherit-compat.t
@@ -21,6 +21,11 @@
 #-------------------------------------------------------------------------------
 . "$(dirname "$0")/test_header"
 
+file_cmp_sorted() {
+    sort - >"${1}.expected"
+    file_cmp "$1" "${2}" "${1}.expected"
+}
+
 find_fcm_make_files() {
     find . "$@" -type f \
         '(' -path '*/build/*' -o \
@@ -80,7 +85,7 @@ __FORTRAN__
 
 run_pass "${TEST_KEY_BASE}" fcm make -C "${PWD}/greet" -n '-friend'
 (cd 'greet' && find_fcm_make_files) >"${TEST_KEY_BASE}.find"
-file_cmp "${TEST_KEY_BASE}.find" "${TEST_KEY_BASE}.find" <<'__FIND__'
+file_cmp_sorted "${TEST_KEY_BASE}.find" "${TEST_KEY_BASE}.find" <<'__FIND__'
 ./.fcm-make-friend/config-as-parsed.cfg
 ./.fcm-make-friend/config-on-success.cfg
 ./.fcm-make-friend/ctx.gz
diff --git a/t/fcm-make/46-archive-mode.t b/t/fcm-make/46-archive-mode.t
index f85fa08..77ce467 100755
--- a/t/fcm-make/46-archive-mode.t
+++ b/t/fcm-make/46-archive-mode.t
@@ -20,6 +20,12 @@
 # Tests for "fcm make --archive"
 #-------------------------------------------------------------------------------
 . "$(dirname "$0")/test_header"
+
+file_cmp_sorted() {
+    sort - >"${1}.expected"
+    file_cmp "$1" "${2}" "${1}.expected"
+}
+
 tests 11
 #-------------------------------------------------------------------------------
 # Create a repository to extract
@@ -52,7 +58,7 @@ __CFG__
 TEST_KEY="${TEST_KEY_BASE}-on-new"
 run_pass "${TEST_KEY}" fcm make -a
 find '.fcm-make/cache' 'build' -type f | sort >"${TEST_KEY}.find"
-file_cmp "${TEST_KEY}.find" "${TEST_KEY}.find" <<'__FIND__'
+file_cmp_sorted "${TEST_KEY}.find" "${TEST_KEY}.find" <<'__FIND__'
 .fcm-make/cache/extract.tar.gz
 build/bin/hello
 build/include.tar.gz
@@ -66,14 +72,14 @@ TEST_KEY="${TEST_KEY_BASE}-on-incr"
 run_pass "${TEST_KEY}" fcm make -a
 find '.fcm-make/cache' 'build' -type f -newer 'new' \
     | sort >"${TEST_KEY}.find.new"
-file_cmp "${TEST_KEY}.find.new" "${TEST_KEY}.find.new" <<'__FIND__'
+file_cmp_sorted "${TEST_KEY}.find.new" "${TEST_KEY}.find.new" <<'__FIND__'
 .fcm-make/cache/extract.tar.gz
 build/include.tar.gz
 build/o.tar.gz
 __FIND__
 find '.fcm-make/cache' 'build' -type f '!' -newer 'new' \
     | sort >"${TEST_KEY}.find.old"
-file_cmp "${TEST_KEY}.find.old" "${TEST_KEY}.find.old" <<'__FIND__'
+file_cmp_sorted "${TEST_KEY}.find.old" "${TEST_KEY}.find.old" <<'__FIND__'
 build/bin/hello
 __FIND__
 
@@ -82,13 +88,13 @@ run_pass "${TEST_KEY}" \
     fcm make -a 'build.prop{archive-ok-target-category}=o'
 find '.fcm-make/cache' 'build' -type f -newer 'new' \
     | sort >"${TEST_KEY}.find.new"
-file_cmp "${TEST_KEY}.find.new" "${TEST_KEY}.find.new" <<'__FIND__'
+file_cmp_sorted "${TEST_KEY}.find.new" "${TEST_KEY}.find.new" <<'__FIND__'
 .fcm-make/cache/extract.tar.gz
 build/o.tar.gz
 __FIND__
 find '.fcm-make/cache' 'build' -type f '!' -newer 'new' \
     | sort >"${TEST_KEY}.find.old"
-file_cmp "${TEST_KEY}.find.old" "${TEST_KEY}.find.old" <<'__FIND__'
+file_cmp_sorted "${TEST_KEY}.find.old" "${TEST_KEY}.find.old" <<'__FIND__'
 build/bin/hello
 build/include/world_mod.mod
 __FIND__
@@ -96,10 +102,10 @@ __FIND__
 run_pass "${TEST_KEY_BASE}-off" fcm make
 find '.fcm-make/cache' 'build' -type f -newer 'new' \
     | sort >"${TEST_KEY}.find.new"
-file_cmp "${TEST_KEY}.find.new" "${TEST_KEY}.find.new" <'/dev/null'
+file_cmp_sorted "${TEST_KEY}.find.new" "${TEST_KEY}.find.new" <'/dev/null'
 find '.fcm-make/cache' 'build' -type f '!' -newer 'new' \
     | sort >"${TEST_KEY}.find.old"
-file_cmp "${TEST_KEY}.find.old" "${TEST_KEY}.find.old" <<'__FIND__'
+file_cmp_sorted "${TEST_KEY}.find.old" "${TEST_KEY}.find.old" <<'__FIND__'
 .fcm-make/cache/extract/hello/0/hello.f90
 .fcm-make/cache/extract/hello/0/world_mod.f90
 build/bin/hello
diff --git a/t/fcm-merge/00-simple.t b/t/fcm-merge/00-simple.t
index da9ac84..650cabe 100644
--- a/t/fcm-merge/00-simple.t
+++ b/t/fcm-merge/00-simple.t
@@ -31,7 +31,7 @@ cd $TEST_DIR/wc
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output before merging.
 test_mergeinfo "$TEST_KEY_BASE-pre" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 9 <<__RESULTS__
 begin-prop
 end-prop
 begin-info
@@ -47,7 +47,7 @@ begin-info
      /                         
   -------| |------------         trunk
                        |       
-                       9       
+                       WC      
 end-info
 begin-eligible
 r5
@@ -150,7 +150,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 TEST_KEY=$TEST_KEY_BASE-non-interactive-diff
 run_pass "$TEST_KEY" svn diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: .
 ===================================================================
@@ -160,7 +160,16 @@ Index: .
 Property changes on: .
 ___________________________________________________________________
 Added: svn:mergeinfo
+#IF SVN1.9 ## -0,0 +0,1 ##
    Merged /branches/dev/Share/merge1:r4-5
+#IF SVN1.9 Index: added_directory/hello_constants.f90
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_directory/hello_constants.inc
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_directory/hello_constants_dummy.inc
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_file
+#IF SVN1.9 ===================================================================
 Index: lib/python/info/poems.py
 ===================================================================
 --- lib/python/info/poems.py	(revision 9)
@@ -225,6 +234,8 @@ Index: module/hello_constants_dummy.inc
 @@ -1 +1 @@
 -INCLUDE 'hello_constants.inc'
 +INCLUDE 'hello_constants.INc'
+#IF SVN1.9 Index: module/tree_conflict_file
+#IF SVN1.9 ===================================================================
 Index: subroutine/hello_sub_dummy.h
 ===================================================================
 --- subroutine/hello_sub_dummy.h	(revision 9)
@@ -233,11 +244,12 @@ Index: subroutine/hello_sub_dummy.h
  #include "hello_sub.h"
 +Modified a line
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output after merging.
 test_mergeinfo "$TEST_KEY_BASE-post" \
-    $ROOT_URL/branches/dev/Share/merge1 - <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 9 <<__RESULTS__
 begin-prop
 /branches/dev/Share/merge1:4-5
 end-prop
@@ -254,7 +266,7 @@ begin-info
      /                         
   -------| |------------         trunk
                        |       
-                       9       
+                       WC      
 end-info
 begin-eligible
 end-eligible
diff --git a/t/fcm-merge/01-complex.t b/t/fcm-merge/01-complex.t
index e2ab894..4c6e426 100644
--- a/t/fcm-merge/01-complex.t
+++ b/t/fcm-merge/01-complex.t
@@ -33,7 +33,7 @@ svn switch -q $ROOT_URL/branches/dev/Share/merge1
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output before merging.
 test_mergeinfo "$TEST_KEY_BASE-trunk-into-branch-1-pre" \
-    $ROOT_URL/trunk <<__RESULTS__
+    $ROOT_URL/trunk - 9 <<__RESULTS__
 begin-prop
 end-prop
 begin-info
@@ -49,7 +49,7 @@ begin-info
       \                        
        --| |------------         branches/dev/Share/merge1
                        |       
-                       9       
+                       WC      
 end-info
 begin-eligible
 r8
@@ -95,14 +95,8 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 TEST_KEY=$TEST_KEY_BASE-trunk-into-branch-1-diff
 run_pass "$TEST_KEY" svn diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <<__OUT__
-Index: lib/python/info/__init__.py
-===================================================================
---- lib/python/info/__init__.py	(revision 9)
-+++ lib/python/info/__init__.py	(working copy)
-@@ -0,0 +1,2 @@
-+trunk change
-+another trunk change
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
+
 Index: .
 ===================================================================
 --- .	(revision 9)
@@ -111,8 +105,18 @@ Index: .
 Property changes on: .
 ___________________________________________________________________
 Added: svn:mergeinfo
+#IF SVN1.9 ## -0,0 +0,1 ##
    Merged /${PROJECT}trunk:r2-9
+Index: lib/python/info/__init__.py
+===================================================================
+--- lib/python/info/__init__.py	(revision 9)
++++ lib/python/info/__init__.py	(working copy)
+@@ -0,0 +1,2 @@
++trunk change
++another trunk change
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl" 
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm commit of fcm merge (1)
@@ -120,7 +124,8 @@ TEST_KEY=$TEST_KEY_BASE-trunk-into-branch-1-commit
 run_pass "$TEST_KEY" fcm commit <<__IN__
 y
 __IN__
-file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <<__OUT__
+commit_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
 [info] sed -i 1i\foo: starting commit message editor...
 Change summary:
 --------------------------------------------------------------------------------
@@ -128,7 +133,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : branches/dev/Share/merge1]
 [Sub-dir: ]
-
  M      .
 M       lib/python/info/__init__.py
 --------------------------------------------------------------------------------
@@ -137,14 +141,11 @@ Commit message is as follows:
 foo
 Merged into /${PROJECT}branches/dev/Share/merge1: /${PROJECT}trunk at 9 cf. /${PROJECT}trunk at 1
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO A Share BRANCH.
 *** Please ensure that you have the owner's permission.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Sending        .
 Sending        lib/python/info/__init__.py
-Transmitting file data .
 Committed revision 10.
 Updating '.':
 At revision 10.
@@ -180,7 +181,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output after merging.
 test_mergeinfo "$TEST_KEY_BASE-trunk-into-branch-1-post" \
-    $ROOT_URL/trunk <<__RESULTS__
+    $ROOT_URL/trunk - 10 <<__RESULTS__
 begin-prop
 /trunk:2-9
 end-prop
@@ -197,7 +198,7 @@ begin-info
       \         \              
        --| |------------         branches/dev/Share/merge1
                        |       
-                       10      
+                       WC      
 end-info
 begin-eligible
 end-eligible
@@ -209,7 +210,7 @@ __RESULTS__
 #-------------------------------------------------------------------------------
 # Tests fcm merge of branch-into-trunk (1)
 TEST_KEY=$TEST_KEY_BASE-branch-into-trunk-1
-BRANCH_MOD_FILE=$(find . -type f | sed "/\.svn/d" | sort | head -3| tail -1)
+BRANCH_MOD_FILE="added_directory/hello_constants_dummy.inc"
 echo "# added this line for simple repeat testing" >>$BRANCH_MOD_FILE
 svn commit -q -m "edit on branch for merge repeat test"
 svn update -q
@@ -221,7 +222,7 @@ cd $TEST_DIR/wc
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output before merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-trunk-1-pre" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 11 <<__RESULTS__
 begin-prop
 end-prop
 begin-info
@@ -237,7 +238,7 @@ begin-info
      /         /               
   -------| |------------         trunk
               |        |       
-              9        11      
+              9        WC      
 end-info
 begin-eligible
 r5
@@ -297,7 +298,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 TEST_KEY=$TEST_KEY_BASE-branch-into-trunk-1-diff
 run_pass "$TEST_KEY" svn diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: .
 ===================================================================
@@ -307,7 +308,16 @@ Index: .
 Property changes on: .
 ___________________________________________________________________
 Added: svn:mergeinfo
+#IF SVN1.9 ## -0,0 +0,1 ##
    Merged /${PROJECT}branches/dev/Share/merge1:r4-11
+#IF SVN1.9 Index: added_directory/hello_constants.f90
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_directory/hello_constants.inc
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_directory/hello_constants_dummy.inc
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_file
+#IF SVN1.9 ===================================================================
 Index: lib/python/info/poems.py
 ===================================================================
 --- lib/python/info/poems.py	(revision 11)
@@ -372,6 +382,8 @@ Index: module/hello_constants_dummy.inc
 @@ -1 +1 @@
 -INCLUDE 'hello_constants.inc'
 +INCLUDE 'hello_constants.INc'
+#IF SVN1.9 Index: module/tree_conflict_file
+#IF SVN1.9 ===================================================================
 Index: subroutine/hello_sub_dummy.h
 ===================================================================
 --- subroutine/hello_sub_dummy.h	(revision 11)
@@ -380,6 +392,8 @@ Index: subroutine/hello_sub_dummy.h
  #include "hello_sub.h"
 +Modified a line
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm commit of fcm merge (1)
@@ -396,7 +410,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : trunk]
 [Sub-dir: ]
-
  M      .
 A  +    added_directory
 A  +    added_file
@@ -412,10 +425,8 @@ Commit message is as follows:
 foo
 Merged into /${PROJECT}trunk: /${PROJECT}branches/dev/Share/merge1 at 11 cf. /${PROJECT}trunk at 9
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO THE TRUNK.
 *** Please ensure that your change conforms to your project's working practices.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Sending        .
 Adding         added_directory
@@ -426,7 +437,6 @@ Sending        module/hello_constants.f90
 Sending        module/hello_constants.inc
 Sending        module/hello_constants_dummy.inc
 Sending        subroutine/hello_sub_dummy.h
-Transmitting file data .....
 Committed revision 12.
 Updating '.':
 At revision 12.
@@ -462,7 +472,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output after merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-trunk-1-post" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 12 <<__RESULTS__
 begin-prop
 /branches/dev/Share/merge1:4-11
 end-prop
@@ -479,7 +489,7 @@ begin-info
      /          \              
   -------| |------------         trunk
                        |       
-                       12      
+                       WC      
 end-info
 begin-eligible
 end-eligible
@@ -493,7 +503,7 @@ __RESULTS__
 #-------------------------------------------------------------------------------
 # Tests fcm merge of branch-into-trunk (2)
 svn switch -q $ROOT_URL/branches/dev/Share/merge1
-MOD_FILE=$(find . -type f | sed "/\.svn/d" | sort | head -4 | tail -1)
+MOD_FILE="added_file"
 echo "call_extra_feature()" >>$MOD_FILE
 svn commit -q -m "Made branch change to add extra feature"
 svn update -q
@@ -504,7 +514,7 @@ svn switch -q $ROOT_URL/trunk
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output before merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-trunk-2-pre" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 14 <<__RESULTS__
 begin-prop
 /branches/dev/Share/merge1:4-11
 end-prop
@@ -521,7 +531,7 @@ begin-info
      /          \              
   -------| |------------         trunk
                        |       
-                       14      
+                       WC      
 end-info
 begin-eligible
 r13
@@ -564,7 +574,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 TEST_KEY=$TEST_KEY_BASE-branch-into-trunk-2-diff
 run_pass "$TEST_KEY" svn diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: .
 ===================================================================
@@ -574,6 +584,7 @@ Index: .
 Property changes on: .
 ___________________________________________________________________
 Modified: svn:mergeinfo
+#IF SVN1.9 ## -0,0 +0,1 ##
    Merged /${PROJECT}branches/dev/Share/merge1:r12-13
 Index: added_file
 ===================================================================
@@ -583,6 +594,8 @@ Index: added_file
  INCLUDE 'hello_constants.INc'
 +call_extra_feature()
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm commit of fcm merge branch-into-trunk (2)
@@ -590,8 +603,9 @@ TEST_KEY=$TEST_KEY_BASE-branch-into-trunk-2-commit
 run_pass "$TEST_KEY" fcm commit <<__IN__
 y
 __IN__
-sed -i "/^Updating '.':$/d" $TEST_DIR/"$TEST_KEY.out"
-file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <<__OUT__
+sed -i "/^Updating '.':$/d" "$TEST_DIR/$TEST_KEY.out"
+commit_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
 [info] sed -i 1i\foo: starting commit message editor...
 Change summary:
 --------------------------------------------------------------------------------
@@ -599,7 +613,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : trunk]
 [Sub-dir: ]
-
  M      .
 M       added_file
 --------------------------------------------------------------------------------
@@ -608,14 +621,11 @@ Commit message is as follows:
 foo
 Merged into /${PROJECT}trunk: /${PROJECT}branches/dev/Share/merge1 at 13 cf. /${PROJECT}branches/dev/Share/merge1 at 11
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO THE TRUNK.
 *** Please ensure that your change conforms to your project's working practices.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Sending        .
 Sending        added_file
-Transmitting file data .
 Committed revision 15.
 At revision 15.
 __OUT__
@@ -656,7 +666,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output after merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-trunk-2-post" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 15 <<__RESULTS__
 begin-prop
 /branches/dev/Share/merge1:4-13
 end-prop
@@ -673,7 +683,7 @@ begin-info
      /          \              
   -------| |------------         trunk
                        |       
-                       15      
+                       WC      
 end-info
 begin-eligible
 end-eligible
@@ -698,7 +708,7 @@ svn update -q
 #------------------------------------------------------------------------------
 # Test the various mergeinfo output before merging.
 test_mergeinfo "$TEST_KEY_BASE-trunk-into-branch-2-pre" \
-    $ROOT_URL/trunk <<__RESULTS__
+    $ROOT_URL/trunk - 17 <<__RESULTS__
 begin-prop
 /trunk:2-9
 end-prop
@@ -715,7 +725,7 @@ begin-info
       \        /               
        --| |------------         branches/dev/Share/merge1
               |        |       
-              13       17      
+              13       WC      
 end-info
 begin-eligible
 r12
@@ -758,7 +768,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 TEST_KEY=$TEST_KEY_BASE-trunk-into-branch-2-diff
 run_pass "$TEST_KEY" svn diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: .
 ===================================================================
@@ -768,6 +778,7 @@ Index: .
 Property changes on: .
 ___________________________________________________________________
 Modified: svn:mergeinfo
+#IF SVN1.9 ## -0,0 +0,1 ##
    Merged /${PROJECT}trunk:r10-16
 Index: added_file
 ===================================================================
@@ -778,6 +789,8 @@ Index: added_file
  call_extra_feature()
 +# trunk modification
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm commit of fcm merge trunk-into-branch (2)
@@ -785,8 +798,9 @@ TEST_KEY=$TEST_KEY_BASE-trunk-into-branch-2-commit
 run_pass "$TEST_KEY" fcm commit <<__IN__
 y
 __IN__
-sed -i "/^Updating '.':$/d" $TEST_DIR/"$TEST_KEY.out"
-file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <<__OUT__
+sed -i "/^Updating '.':$/d" "$TEST_DIR/$TEST_KEY.out"
+commit_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
 [info] sed -i 1i\foo: starting commit message editor...
 Change summary:
 --------------------------------------------------------------------------------
@@ -794,7 +808,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : branches/dev/Share/merge1]
 [Sub-dir: ]
-
  M      .
 M       added_file
 --------------------------------------------------------------------------------
@@ -803,14 +816,11 @@ Commit message is as follows:
 foo
 Merged into /${PROJECT}branches/dev/Share/merge1: /${PROJECT}trunk at 16 cf. /${PROJECT}branches/dev/Share/merge1 at 13
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO A Share BRANCH.
 *** Please ensure that you have the owner's permission.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Sending        .
 Sending        added_file
-Transmitting file data .
 Committed revision 18.
 At revision 18.
 __OUT__
@@ -863,7 +873,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output after merging.
 test_mergeinfo "$TEST_KEY_BASE-trunk-into-branch-2-post" \
-    $ROOT_URL/trunk <<__RESULTS__
+    $ROOT_URL/trunk - 18 <<__RESULTS__
 begin-prop
 /trunk:2-16
 end-prop
@@ -880,7 +890,7 @@ begin-info
       \         \              
        --| |------------         branches/dev/Share/merge1
                        |       
-                       18      
+                       WC      
 end-info
 begin-eligible
 end-eligible
@@ -902,7 +912,7 @@ svn switch -q $ROOT_URL/trunk
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output before merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-trunk-3-pre" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 19 <<__RESULTS__
 begin-prop
 /branches/dev/Share/merge1:4-13
 end-prop
@@ -919,7 +929,7 @@ begin-info
      /         /               
   -------| |------------         trunk
               |        |       
-              16       19      
+              16       WC      
 end-info
 begin-eligible
 r17
@@ -967,7 +977,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 TEST_KEY=$TEST_KEY_BASE-branch-into-trunk-3-diff
 run_pass "$TEST_KEY" svn diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: .
 ===================================================================
@@ -977,6 +987,7 @@ Index: .
 Property changes on: .
 ___________________________________________________________________
 Modified: svn:mergeinfo
+#IF SVN1.9 ## -0,0 +0,1 ##
    Merged /${PROJECT}branches/dev/Share/merge1:r14-19
 Index: added_directory/hello_constants_dummy.inc
 ===================================================================
@@ -985,7 +996,11 @@ Index: added_directory/hello_constants_dummy.inc
 @@ -1,2 +0,0 @@
 -INCLUDE 'hello_constants.INc'
 -# added this line for simple repeat testing
+#IF SVN1.9 Index: added_file.add
+#IF SVN1.9 ===================================================================
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm commit of fcm merge branch-into-trunk (3)
@@ -1003,7 +1018,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : trunk]
 [Sub-dir: ]
-
  M      .
 A  +    added_file.add
 D       added_directory/hello_constants_dummy.inc
@@ -1013,15 +1027,12 @@ Commit message is as follows:
 foo
 Merged into /${PROJECT}trunk: /${PROJECT}branches/dev/Share/merge1 at 19 cf. /${PROJECT}trunk at 16
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO THE TRUNK.
 *** Please ensure that your change conforms to your project's working practices.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Sending        .
 Adding         added_file.add
 Deleting       added_directory/hello_constants_dummy.inc
-
 Committed revision 20.
 At revision 20.
 __OUT__
@@ -1041,7 +1052,7 @@ Merged into /${PROJECT}trunk: /${PROJECT}branches/dev/Share/merge1 at 19 cf. /${PRO
 ------------------------------------------------------------------------
 r19 | $LOGNAME | date | 1 line
 
-Made branch change - deleted ./added_directory/hello_constants_dummy.inc, copied ./added_file
+Made branch change - deleted added_directory/hello_constants_dummy.inc, copied added_file
 ------------------------------------------------------------------------
 r18 | $LOGNAME | date | 3 lines
 
@@ -1055,7 +1066,7 @@ Made branch change for merge repeat test
 ------------------------------------------------------------------------
 r16 | $LOGNAME | date | 1 line
 
-Made trunk change - a simple edit of ./added_file
+Made trunk change - a simple edit of added_file
 ------------------------------------------------------------------------
 r15 | $LOGNAME | date | 3 lines
 
@@ -1128,7 +1139,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Test the various mergeinfo output after merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-trunk-3-post" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 20 <<__RESULTS__
 begin-prop
 /branches/dev/Share/merge1:4-19
 end-prop
@@ -1145,7 +1156,7 @@ begin-info
      /          \              
   -------| |------------         trunk
                        |       
-                       20      
+                       WC      
 end-info
 begin-eligible
 end-eligible
@@ -1167,14 +1178,14 @@ rm -rf $TEST_DIR/wc
 mkdir $TEST_DIR/wc
 svn checkout -q $ROOT_URL/branches/dev/Share/merge2 $TEST_DIR/wc
 cd $TEST_DIR/wc
-BRANCH_2_MOD_FILE=$(find . -type f | sed "/\.svn/d" | sort | head -3| tail -1)
+BRANCH_2_MOD_FILE="module/hello_constants.f90"
 echo "Second branch change" >>$BRANCH_2_MOD_FILE
 svn commit -q -m "Made branch change - added to $BRANCH_2_MOD_FILE"
 svn update -q
 #------------------------------------------------------------------------------
 # Test the various mergeinfo output before merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-branch-1-pre" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 21 <<__RESULTS__
 begin-prop
 end-prop
 begin-info
@@ -1190,7 +1201,7 @@ begin-info
       \                        
        --| |------------         branches/dev/Share/merge2
                        |       
-                       21      
+                       WC      
 end-info
 begin-eligible
 r5
@@ -1278,7 +1289,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 TEST_KEY=$TEST_KEY_BASE-branch-into-branch-1-diff
 run_pass "$TEST_KEY" svn diff
 diff_sort "$TEST_DIR/$TEST_KEY.out" "$TEST_DIR/$TEST_KEY.sorted.out"
-file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" <<__OUT__
+diff_svn_version_filter >"$TEST_DIR/$TEST_KEY.sorted.ctrl" <<__OUT__
 
 Index: .
 ===================================================================
@@ -1288,8 +1299,17 @@ Index: .
 Property changes on: .
 ___________________________________________________________________
 Added: svn:mergeinfo
+#IF SVN1.9 ## -0,0 +0,2 ##
    Merged /${PROJECT}trunk:r2-9
    Merged /${PROJECT}branches/dev/Share/merge1:r4-13
+#IF SVN1.9 Index: added_directory/hello_constants.f90
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_directory/hello_constants.inc
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_directory/hello_constants_dummy.inc
+#IF SVN1.9 ===================================================================
+#IF SVN1.9 Index: added_file
+#IF SVN1.9 ===================================================================
 Index: lib/python/info/__init__.py
 ===================================================================
 --- lib/python/info/__init__.py	(revision 21)
@@ -1362,6 +1382,8 @@ Index: module/hello_constants_dummy.inc
 @@ -1 +1 @@
 -INCLUDE 'hello_constants.inc'
 +INCLUDE 'hello_constants.INc'
+#IF SVN1.9 Index: module/tree_conflict_file
+#IF SVN1.9 ===================================================================
 Index: subroutine/hello_sub_dummy.h
 ===================================================================
 --- subroutine/hello_sub_dummy.h	(revision 21)
@@ -1370,6 +1392,8 @@ Index: subroutine/hello_sub_dummy.h
  #include "hello_sub.h"
 +Modified a line
 __OUT__
+file_cmp "$TEST_KEY.sorted.out" "$TEST_KEY.sorted.out" \
+    "$TEST_DIR/$TEST_KEY.sorted.ctrl"
 file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #-------------------------------------------------------------------------------
 # Tests fcm commit of fcm merge branch-into-branch (1)
@@ -1386,7 +1410,6 @@ Change summary:
 [Project: ${TEST_PROJECT:-}]
 [Branch : branches/dev/Share/merge2]
 [Sub-dir: ]
-
  M      .
 A  +    added_directory
 A  +    added_file
@@ -1403,10 +1426,8 @@ Commit message is as follows:
 foo
 Merged into /${PROJECT}branches/dev/Share/merge2: /${PROJECT}branches/dev/Share/merge1 at 13 cf. /${PROJECT}trunk at 1
 --------------------------------------------------------------------------------
-
 *** WARNING: YOU ARE COMMITTING TO A Share BRANCH.
 *** Please ensure that you have the owner's permission.
-
 Would you like to commit this change?
 Enter "y" or "n" (or just press <return> for "n"): Sending        .
 Adding         added_directory
@@ -1418,7 +1439,6 @@ Sending        module/hello_constants.f90
 Sending        module/hello_constants.inc
 Sending        module/hello_constants_dummy.inc
 Sending        subroutine/hello_sub_dummy.h
-Transmitting file data ......
 Committed revision 22.
 Updating '.':
 At revision 22.
@@ -1439,7 +1459,7 @@ Merged into /${PROJECT}branches/dev/Share/merge2: /${PROJECT}branches/dev/Share/
 ------------------------------------------------------------------------
 r21 | $LOGNAME | date | 1 line
 
-Made branch change - added to ./module/hello_constants.f90
+Made branch change - added to module/hello_constants.f90
 ------------------------------------------------------------------------
 r20 | $LOGNAME | date | 3 lines
 
@@ -1449,7 +1469,7 @@ Merged into /${PROJECT}trunk: /${PROJECT}branches/dev/Share/merge1 at 19 cf. /${PRO
 ------------------------------------------------------------------------
 r19 | $LOGNAME | date | 1 line
 
-Made branch change - deleted ./added_directory/hello_constants_dummy.inc, copied ./added_file
+Made branch change - deleted added_directory/hello_constants_dummy.inc, copied added_file
 ------------------------------------------------------------------------
 r18 | $LOGNAME | date | 3 lines
 
@@ -1463,7 +1483,7 @@ Made branch change for merge repeat test
 ------------------------------------------------------------------------
 r16 | $LOGNAME | date | 1 line
 
-Made trunk change - a simple edit of ./added_file
+Made trunk change - a simple edit of added_file
 ------------------------------------------------------------------------
 r15 | $LOGNAME | date | 3 lines
 
@@ -1536,7 +1556,7 @@ file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
 #------------------------------------------------------------------------------
 # Test the various mergeinfo output after merging.
 test_mergeinfo "$TEST_KEY_BASE-branch-into-branch-1-post" \
-    $ROOT_URL/branches/dev/Share/merge1 <<__RESULTS__
+    $ROOT_URL/branches/dev/Share/merge1 - 22 <<__RESULTS__
 begin-prop
 /branches/dev/Share/merge1:4-13
 /trunk:2-9
@@ -1554,7 +1574,7 @@ begin-info
       \         \              
        --| |------------         branches/dev/Share/merge2
                        |       
-                       22      
+                       WC      
 end-info
 begin-eligible
 r17
diff --git a/t/fcm-merge/test_header b/t/fcm-merge/test_header
deleted file mode 100644
index bd4c036..0000000
--- a/t/fcm-merge/test_header
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# (C) British Crown Copyright 2006-16 Met Office.
-#
-# This file is part of FCM, tools for managing and building source code.
-#
-# FCM is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# FCM is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with FCM. If not, see <http://www.gnu.org/licenses/>.
-# ------------------------------------------------------------------------------
-# Optional enviroment variables:
-#   TEST_PROJECT (tests using given project name)
-#   TEST_REMOTE_HOST (tests using svn+ssh repositories located on given host)
-# ------------------------------------------------------------------------------
-
-. $(dirname $0)/../lib/bash/test_header
-
-function file_cmp() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if cmp $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_grep() {
-    local TEST_KEY=$1
-    local PATTERN=$2
-    local FILE=$3
-    if grep -q -e "$PATTERN" $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_test() {
-    local TEST_KEY=$1
-    local FILE=$2
-    local OPTION=${3:--e}
-    if test $OPTION $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-    else
-        fail $TEST_KEY
-    fi
-}
-
-function file_xxdiff() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if xxdiff -D $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function init_repos() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    ROOT_URL=$REPOS_URL
-    PROJECT=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        PROJECT=$TEST_PROJECT"/"
-    fi
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/$PROJECT/trunk -m "initial trunk import"
-    svn mkdir -q $REPOS_URL/$PROJECT/tags -m "make tags"
-    svn mkdir -q --parents $REPOS_URL/$PROJECT/branches/dev/Share -m " "
-}
-
-function init_repos_layout_roses() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    svn mkdir -q --parents $REPOS_URL/a/a/0/0/0/trunk
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/a/a/0/0/0/trunk -m "initial trunk import"
-    TMPFILE=$(mktemp)
-    cat >$TMPFILE <<__LAYOUT__
-depth-project = 5
-depth-branch = 1
-depth-tag = 1
-dir-trunk = trunk
-dir-branch =
-dir-tag =
-level-owner-branch =
-level-owner-tag =
-template-branch =
-template-tag =
-__LAYOUT__
-    TMPDIR=$(mktemp -d)
-    svn checkout -q $REPOS_URL $TMPDIR
-    svn propset -q --file=$TMPFILE fcm:layout $TMPDIR
-    svn commit -q -m " " $TMPDIR
-    rm -f $TMPFILE
-    rm -rf $TMPDIR
-    ROOT_URL=$REPOS_URL
-}
-
-function init_branch() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    local ROOT_PATH=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        ROOT_PATH=$ROOT_PATH/$TEST_PROJECT
-    fi
-    MESSAGE=$(echo -e "Created $ROOT_PATH/branches/dev/Share/$BRANCH_NAME from /trunk at 1.")
-    svn copy -q -r1 $ROOT_URL/trunk $ROOT_URL/branches/dev/Share/$BRANCH_NAME \
-                    -m "Made a branch $MESSAGE"
-}
-
-function init_branch_wc() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch $BRANCH_NAME $REPOS_URL
-    svn checkout -q $ROOT_URL/branches/dev/Share/$BRANCH_NAME $TEST_DIR/wc
-}
-
-function init_merge_branches() {
-    local BRANCH_NAME=$1
-    local OTHER_BRANCH_NAME=$2
-    local REPOS_URL=$3
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch_wc $BRANCH_NAME $REPOS_URL
-    cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
-    done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
-    svn commit -q -m "Made changes for future merge of this branch"
-    svn update -q
-    init_branch $OTHER_BRANCH_NAME $REPOS_URL
-    svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
-    echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
-    svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
-    svn commit -q -m "Made changes for future merge"
-    svn update -q
-    svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made trunk change"
-    svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made another trunk change"
-    svn update -q
-}
-
-function run_pass() {
-    local TEST_KEY=$1
-    shift 1
-    if ! "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function run_fail() {
-    local TEST_KEY=$1
-    shift 1
-    if "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function get_results() {
-    local RESULT_KEY=$1
-    local RESULTS_FILE=$2
-    local BEGIN="^begin-$RESULT_KEY$"
-    local END="^end-$RESULT_KEY$"
-    local RESULTS_TEMP=$(mktemp)
-    sed -n "/$BEGIN/,/$END/{/$BEGIN\|$END/d; p;}" $RESULTS_FILE >$RESULTS_TEMP
-    echo $RESULTS_TEMP
-}
-
-function test_mergeinfo() {
-    local TEST_INFO_NAME="$1-svn-mergeinfo"
-    local DIFF_BRANCH=$2
-    local INPUT_RESULTS_FILE=${3:--}
-    local RESULTS_FILE=$(mktemp)
-    cat "$INPUT_RESULTS_FILE" > "$RESULTS_FILE"
-    # Test svn:mergeinfo property.
-    TEST_KEY=$TEST_INFO_NAME-prop
-    run_pass "$TEST_KEY" svn propget svn:mergeinfo .
-    file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <$(get_results prop $RESULTS_FILE)
-    file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
-    # Test svn mergeinfo output.
-    TEST_KEY=$TEST_INFO_NAME-info
-    run_pass "$TEST_KEY" svn mergeinfo $DIFF_BRANCH
-    file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <$(get_results info $RESULTS_FILE)    
-    file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
-    # Test svn mergeinfo show-revs eligible before merge.
-    TEST_KEY=$TEST_INFO_NAME-show-revs-eligible
-    run_pass "$TEST_KEY" svn mergeinfo --show-revs eligible $DIFF_BRANCH
-    file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <$(get_results eligible $RESULTS_FILE)        
-    file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
-    # Test svn mergeinfo show-revs merged before merge.
-    TEST_KEY=$TEST_INFO_NAME-show-revs-merged
-    run_pass "$TEST_KEY" svn mergeinfo --show-revs merged $DIFF_BRANCH
-    file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <$(get_results merged $RESULTS_FILE)            
-    file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
-}
-
-function setup() {
-    mkdir -p $TEST_DIR/.subversion
-    mkdir -p $TEST_DIR/run
-    cd $TEST_DIR/run
-}
-
-function teardown() {
-    cd $TEST_DIR
-    rm -rf $TEST_DIR/test_repos
-    rm -rf $TEST_DIR/wc
-    rm -rf $TEST_DIR/run
-    rm -rf $TEST_DIR/.subversion
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        ssh $TEST_REMOTE_HOST "rm -rf $TEST_REMOTE_DIR"
-    fi
-}
-
-REPOS_URL=
-ROOT_URL=
-PROJECT=
diff --git a/t/fcm-merge/test_header b/t/fcm-merge/test_header
new file mode 120000
index 0000000..9a2064b
--- /dev/null
+++ b/t/fcm-merge/test_header
@@ -0,0 +1 @@
+../lib/bash/svn_test_header
\ No newline at end of file
diff --git a/t/fcm-status/test_header b/t/fcm-status/test_header
index ecde158..dec7938 100644
--- a/t/fcm-status/test_header
+++ b/t/fcm-status/test_header
@@ -158,34 +158,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
diff --git a/t/fcm-switch/test_header b/t/fcm-switch/test_header
deleted file mode 100644
index f8104be..0000000
--- a/t/fcm-switch/test_header
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# (C) British Crown Copyright 2006-16 Met Office.
-#
-# This file is part of FCM, tools for managing and building source code.
-#
-# FCM is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# FCM is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with FCM. If not, see <http://www.gnu.org/licenses/>.
-# ------------------------------------------------------------------------------
-# Optional enviroment variables:
-#   TEST_PROJECT (tests using given project name)
-#   TEST_REMOTE_HOST (tests using svn+ssh repositories located on given host)
-# ------------------------------------------------------------------------------
-
-. $(dirname $0)/../lib/bash/test_header
-
-function file_cmp() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if diff -u $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT >&2; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_grep() {
-    local TEST_KEY=$1
-    local PATTERN=$2
-    local FILE=$3
-    if grep -q -e "$PATTERN" $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_test() {
-    local TEST_KEY=$1
-    local FILE=$2
-    local OPTION=${3:--e}
-    if test $OPTION $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-    else
-        fail $TEST_KEY
-    fi
-}
-
-function file_xxdiff() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if xxdiff -D $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function init_repos() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    ROOT_URL=$REPOS_URL
-    PROJECT=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        PROJECT=$TEST_PROJECT"/"
-    fi
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/$PROJECT/trunk -m "initial trunk import"
-    svn mkdir -q $REPOS_URL/$PROJECT/tags -m "make tags"
-    svn mkdir -q --parents $REPOS_URL/$PROJECT/branches/dev/Share -m " "
-}
-
-function init_repos_layout_roses() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    svn mkdir -q --parents $REPOS_URL/a/a/0/0/0/trunk
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/a/a/0/0/0/trunk -m "initial trunk import"
-    TMPFILE=$(mktemp)
-    cat >$TMPFILE <<__LAYOUT__
-depth-project = 5
-depth-branch = 1
-depth-tag = 1
-dir-trunk = trunk
-dir-branch =
-dir-tag =
-level-owner-branch =
-level-owner-tag =
-template-branch =
-template-tag =
-__LAYOUT__
-    TMPDIR=$(mktemp -d)
-    svn checkout -q $REPOS_URL $TMPDIR
-    svn propset -q --file=$TMPFILE fcm:layout $TMPDIR
-    svn commit -q -m " " $TMPDIR
-    rm -f $TMPFILE
-    rm -rf $TMPDIR
-    ROOT_URL=$REPOS_URL
-}
-
-function init_branch() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    local ROOT_PATH=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        ROOT_PATH=$ROOT_PATH/$TEST_PROJECT
-    fi
-    MESSAGE=$(echo -e "Created $ROOT_PATH/branches/dev/Share/$BRANCH_NAME from /trunk at 1.")
-    svn copy -q -r1 $ROOT_URL/trunk $ROOT_URL/branches/dev/Share/$BRANCH_NAME \
-                    -m "Made a branch $MESSAGE"
-}
-
-function init_branch_wc() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch $BRANCH_NAME $REPOS_URL
-    svn checkout -q $ROOT_URL/branches/dev/Share/$BRANCH_NAME $TEST_DIR/wc
-}
-
-function init_merge_branches() {
-    local BRANCH_NAME=$1
-    local OTHER_BRANCH_NAME=$2
-    local REPOS_URL=$3
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch_wc $BRANCH_NAME $REPOS_URL
-    cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
-    done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
-    svn commit -q -m "Made changes for future merge of this branch"
-    svn update -q
-    init_branch $OTHER_BRANCH_NAME $REPOS_URL
-    svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
-    echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
-    svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
-    svn commit -q -m "Made changes for future merge"
-    svn update -q
-    svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made trunk change"
-    svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made another trunk change"
-    svn update -q
-}
-
-function run_pass() {
-    local TEST_KEY=$1
-    shift 1
-    if ! "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function run_fail() {
-    local TEST_KEY=$1
-    shift 1
-    if "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function setup() {
-    mkdir -p $TEST_DIR/.subversion
-    mkdir -p $TEST_DIR/run
-    cd $TEST_DIR/run
-}
-
-function teardown() {
-    cd $TEST_DIR
-    rm -rf $TEST_DIR/test_repos
-    rm -rf $TEST_DIR/wc
-    rm -rf $TEST_DIR/run
-    rm -rf $TEST_DIR/.subversion
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        ssh $TEST_REMOTE_HOST "rm -rf $TEST_REMOTE_DIR"
-    fi
-}
-
-REPOS_URL=
-ROOT_URL=
-PROJECT=
diff --git a/t/fcm-switch/test_header b/t/fcm-switch/test_header
new file mode 120000
index 0000000..9a2064b
--- /dev/null
+++ b/t/fcm-switch/test_header
@@ -0,0 +1 @@
+../lib/bash/svn_test_header
\ No newline at end of file
diff --git a/t/fcm-update/00-simple.t b/t/fcm-update/00-simple.t
index d806358..a825b2c 100644
--- a/t/fcm-update/00-simple.t
+++ b/t/fcm-update/00-simple.t
@@ -61,7 +61,7 @@ TEST_KEY=$TEST_KEY_BASE-normal
 run_pass "$TEST_KEY" fcm update <<__IN__
 y
 __IN__
-sed -n "/^  *\*/p" "$TEST_DIR/$TEST_KEY.out" | LANG=C sort -o \
+sed -n "/^  *\*/p" "$TEST_DIR/$TEST_KEY.out" | sort -o \
     "$TEST_DIR/$TEST_KEY.update-status.sorted.out"
 file_cmp "$TEST_KEY.update-status.sorted.out" \
          "$TEST_KEY.update-status.sorted.out" <<__OUT__
diff --git a/t/fcm-update/01-subtree.t b/t/fcm-update/01-subtree.t
index 106d10c..3c0e6fd 100644
--- a/t/fcm-update/01-subtree.t
+++ b/t/fcm-update/01-subtree.t
@@ -62,7 +62,7 @@ TEST_KEY=$TEST_KEY_BASE-normal
 run_pass "$TEST_KEY" fcm update <<__IN__
 y
 __IN__
-sed -n "/^  *\*/p" "$TEST_DIR/$TEST_KEY.out" | LANG=C sort -o \
+sed -n "/^  *\*/p" "$TEST_DIR/$TEST_KEY.out" | sort -k 3 -o \
     "$TEST_DIR/$TEST_KEY.update-status.sorted.out"
 file_cmp "$TEST_KEY.update-status.sorted.out" \
          "$TEST_KEY.update-status.sorted.out" <<__OUT__
diff --git a/t/fcm-update/test_header b/t/fcm-update/test_header
deleted file mode 100644
index f8104be..0000000
--- a/t/fcm-update/test_header
+++ /dev/null
@@ -1,232 +0,0 @@
-#!/bin/bash
-# ------------------------------------------------------------------------------
-# (C) British Crown Copyright 2006-16 Met Office.
-#
-# This file is part of FCM, tools for managing and building source code.
-#
-# FCM is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# FCM is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with FCM. If not, see <http://www.gnu.org/licenses/>.
-# ------------------------------------------------------------------------------
-# Optional enviroment variables:
-#   TEST_PROJECT (tests using given project name)
-#   TEST_REMOTE_HOST (tests using svn+ssh repositories located on given host)
-# ------------------------------------------------------------------------------
-
-. $(dirname $0)/../lib/bash/test_header
-
-function file_cmp() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if diff -u $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT >&2; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_grep() {
-    local TEST_KEY=$1
-    local PATTERN=$2
-    local FILE=$3
-    if grep -q -e "$PATTERN" $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function file_test() {
-    local TEST_KEY=$1
-    local FILE=$2
-    local OPTION=${3:--e}
-    if test $OPTION $TEST_DIR/$FILE; then
-        pass $TEST_KEY
-    else
-        fail $TEST_KEY
-    fi
-}
-
-function file_xxdiff() {
-    local TEST_KEY=$1
-    local FILE_ACTUAL=$2
-    local FILE_EXPECT=${3:--}
-    if xxdiff -D $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
-        pass $TEST_KEY
-        return
-    fi
-    fail $TEST_KEY
-}
-
-function init_repos() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    ROOT_URL=$REPOS_URL
-    PROJECT=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        PROJECT=$TEST_PROJECT"/"
-    fi
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/$PROJECT/trunk -m "initial trunk import"
-    svn mkdir -q $REPOS_URL/$PROJECT/tags -m "make tags"
-    svn mkdir -q --parents $REPOS_URL/$PROJECT/branches/dev/Share -m " "
-}
-
-function init_repos_layout_roses() {
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
-        REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
-    else
-        svnadmin create --fs-type fsfs $TEST_DIR/test_repos
-        REPOS_URL="file://$TEST_DIR/test_repos"
-    fi
-    svn mkdir -q --parents $REPOS_URL/a/a/0/0/0/trunk
-    svn import -q $TEST_SOURCE_DIR/../etc/repo_files \
-        $REPOS_URL/a/a/0/0/0/trunk -m "initial trunk import"
-    TMPFILE=$(mktemp)
-    cat >$TMPFILE <<__LAYOUT__
-depth-project = 5
-depth-branch = 1
-depth-tag = 1
-dir-trunk = trunk
-dir-branch =
-dir-tag =
-level-owner-branch =
-level-owner-tag =
-template-branch =
-template-tag =
-__LAYOUT__
-    TMPDIR=$(mktemp -d)
-    svn checkout -q $REPOS_URL $TMPDIR
-    svn propset -q --file=$TMPFILE fcm:layout $TMPDIR
-    svn commit -q -m " " $TMPDIR
-    rm -f $TMPFILE
-    rm -rf $TMPDIR
-    ROOT_URL=$REPOS_URL
-}
-
-function init_branch() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    local ROOT_PATH=
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-        ROOT_PATH=$ROOT_PATH/$TEST_PROJECT
-    fi
-    MESSAGE=$(echo -e "Created $ROOT_PATH/branches/dev/Share/$BRANCH_NAME from /trunk at 1.")
-    svn copy -q -r1 $ROOT_URL/trunk $ROOT_URL/branches/dev/Share/$BRANCH_NAME \
-                    -m "Made a branch $MESSAGE"
-}
-
-function init_branch_wc() {
-    local BRANCH_NAME=$1
-    local REPOS_URL=$2
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch $BRANCH_NAME $REPOS_URL
-    svn checkout -q $ROOT_URL/branches/dev/Share/$BRANCH_NAME $TEST_DIR/wc
-}
-
-function init_merge_branches() {
-    local BRANCH_NAME=$1
-    local OTHER_BRANCH_NAME=$2
-    local REPOS_URL=$3
-    local ROOT_URL=$REPOS_URL
-    if [[ -n ${TEST_PROJECT:-} ]]; then
-        ROOT_URL=$REPOS_URL/$TEST_PROJECT
-    fi
-    init_branch_wc $BRANCH_NAME $REPOS_URL
-    cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
-    done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
-    svn commit -q -m "Made changes for future merge of this branch"
-    svn update -q
-    init_branch $OTHER_BRANCH_NAME $REPOS_URL
-    svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
-    echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
-    svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
-    svn commit -q -m "Made changes for future merge"
-    svn update -q
-    svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made trunk change"
-    svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
-    svn commit -q -m "Made another trunk change"
-    svn update -q
-}
-
-function run_pass() {
-    local TEST_KEY=$1
-    shift 1
-    if ! "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function run_fail() {
-    local TEST_KEY=$1
-    shift 1
-    if "$@" 1>$TEST_DIR/$TEST_KEY.out 2>$TEST_DIR/$TEST_KEY.err; then
-        fail $TEST_KEY
-        return
-    fi
-    pass $TEST_KEY
-}
-
-function setup() {
-    mkdir -p $TEST_DIR/.subversion
-    mkdir -p $TEST_DIR/run
-    cd $TEST_DIR/run
-}
-
-function teardown() {
-    cd $TEST_DIR
-    rm -rf $TEST_DIR/test_repos
-    rm -rf $TEST_DIR/wc
-    rm -rf $TEST_DIR/run
-    rm -rf $TEST_DIR/.subversion
-    if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
-        ssh $TEST_REMOTE_HOST "rm -rf $TEST_REMOTE_DIR"
-    fi
-}
-
-REPOS_URL=
-ROOT_URL=
-PROJECT=
diff --git a/t/fcm-update/test_header b/t/fcm-update/test_header
new file mode 120000
index 0000000..9a2064b
--- /dev/null
+++ b/t/fcm-update/test_header
@@ -0,0 +1 @@
+../lib/bash/svn_test_header
\ No newline at end of file
diff --git a/t/fcm-merge/test_header b/t/lib/bash/svn_test_header
similarity index 79%
copy from t/fcm-merge/test_header
copy to t/lib/bash/svn_test_header
index bd4c036..4cfc7e9 100644
--- a/t/fcm-merge/test_header
+++ b/t/lib/bash/svn_test_header
@@ -28,7 +28,7 @@ function file_cmp() {
     local TEST_KEY=$1
     local FILE_ACTUAL=$2
     local FILE_EXPECT=${3:--}
-    if cmp $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT; then
+    if diff -u $TEST_DIR/$FILE_ACTUAL $FILE_EXPECT >&2; then
         pass $TEST_KEY
         return
     fi
@@ -71,7 +71,8 @@ function file_xxdiff() {
 function init_repos() {
     if [[ -n ${TEST_REMOTE_HOST:-} ]]; then
         TEST_REMOTE_DIR=$(ssh $TEST_REMOTE_HOST "mktemp -d")
-        ssh $TEST_REMOTE_HOST "svnadmin create --fs-type fsfs $TEST_REMOTE_DIR"
+        ssh $TEST_REMOTE_HOST bash -l -c "svnadmin create --fs-type fsfs\
+            $TEST_REMOTE_DIR"
         REPOS_URL="svn+ssh://${TEST_REMOTE_HOST}$TEST_REMOTE_DIR"
     else
         svnadmin create --fs-type fsfs $TEST_DIR/test_repos
@@ -158,34 +159,39 @@ function init_merge_branches() {
     fi
     init_branch_wc $BRANCH_NAME $REPOS_URL
     cd $TEST_DIR/wc
-    file_list=$(find . -type f | sed "/\.svn/d" | sort | head -5)
-    other_file=$(find . -type f | sed "/\.svn/d" | sort | tail -1)
-    for file in $file_list; do
-        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" $file
-        sed -i "/#/d; /^ *!/d" $file
-        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" $file
+    modify_files="lib/python/info/__init__.py lib/python/info/poems.py \
+                  module/hello_constants.f90 module/hello_constants.inc \
+                  module/hello_constants_dummy.inc"
+    for file in $modify_files; do
+        sed -i "s/for/FOR/g; s/fi/end if/g; s/in/IN/g;" "$file"
+        sed -i "/#/d; /^ *!/d" "$file"
+        sed -i "s/!/!!/g; s/q/\nq/g; s/[(]/(\n/g" "$file"
     done
-    file_dir=$(dirname $file)
-    svn copy -q $file ./added_file
-    svn copy -q module added_directory
-    touch module/tree_conflict_file
-    svn add -q $file_dir/tree_conflict_file
-    echo "Modified a line" >>$other_file
+    copy_file="module/hello_constants_dummy.inc"    
+    copy_file_dir=$(dirname "$copy_file")
+    svn copy -q "$copy_file" "./added_file"
+    svn copy -q "$copy_file_dir" "added_directory"
+    touch "$copy_file_dir/tree_conflict_file"
+    append_line_file="subroutine/hello_sub_dummy.h"    
+    svn add -q "$copy_file_dir/tree_conflict_file"
+    echo "Modified a line" >>$append_line_file
     svn commit -q -m "Made changes for future merge of this branch"
     svn update -q
     init_branch $OTHER_BRANCH_NAME $REPOS_URL
     svn switch -q $ROOT_URL/branches/dev/Share/$OTHER_BRANCH_NAME
     echo " " > unversioned_file
-    properties_file=$(find . -type f | sed " /\.svn/d" | sort | tail -3 | head -1)
+    properties_file="subroutine/hello_sub.h"
     svn propset -q svn:executable "executable" $properties_file
-    svn copy -q $file renamed_added_file
+    other_copy_file="module/hello_constants_dummy.inc"
+    svn copy -q "$other_copy_file" "renamed_added_file"
     svn commit -q -m "Made changes for future merge"
     svn update -q
     svn switch -q $ROOT_URL/trunk
-    echo "trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    trunk_change_file="lib/python/info/__init__.py"
+    echo "trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made trunk change"
     svn update -q
-    echo "another trunk change" >>$(find . -type f | sed "/\.svn/d" | sort | head -1)
+    echo "another trunk change" >>"$trunk_change_file"
     svn commit -q -m "Made another trunk change"
     svn update -q
 }
@@ -224,13 +230,26 @@ function test_mergeinfo() {
     local TEST_INFO_NAME="$1-svn-mergeinfo"
     local DIFF_BRANCH=$2
     local INPUT_RESULTS_FILE=${3:--}
+    local WC_REVISION=${4:-WC}
+    if "$SVN_VERSION_IS_19"; then
+        WC_REVISION=WC
+    elif (( WC_REVISION < 10 )); then
+        WC_REVISION="$WC_REVISION "
+    fi
     local RESULTS_FILE=$(mktemp)
-    cat "$INPUT_RESULTS_FILE" > "$RESULTS_FILE"
+    sed "s/^\(.\{23\}\)WC/\1$WC_REVISION/" "$INPUT_RESULTS_FILE" \
+        >"$RESULTS_FILE"
     # Test svn:mergeinfo property.
     TEST_KEY=$TEST_INFO_NAME-prop
-    run_pass "$TEST_KEY" svn propget svn:mergeinfo .
-    file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <$(get_results prop $RESULTS_FILE)
-    file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
+    PROP_RESULT_TEXT=$(cat <$(get_results prop $RESULTS_FILE))
+    if [[ -n "$PROP_RESULT_TEXT" ]]; then
+        run_pass "$TEST_KEY" svn propget svn:mergeinfo .
+        file_cmp "$TEST_KEY.out" "$TEST_KEY.out" <$(get_results prop $RESULTS_FILE)
+        file_cmp "$TEST_KEY.err" "$TEST_KEY.err" </dev/null
+    else
+        # Subversion 1.9 won't set null mergeinfo.
+        skip 3
+    fi
     # Test svn mergeinfo output.
     TEST_KEY=$TEST_INFO_NAME-info
     run_pass "$TEST_KEY" svn mergeinfo $DIFF_BRANCH
diff --git a/t/lib/bash/test_header b/t/lib/bash/test_header
index 2ceaed6..ad88e80 100644
--- a/t/lib/bash/test_header
+++ b/t/lib/bash/test_header
@@ -56,10 +56,14 @@
 #         -e if not specified.
 #     file_grep TEST_KEY PATTERN FILE
 #         Run "grep -q PATTERN FILE". pass/fail $TEST_KEY accordingly.
+#     branch_tidy INPUT_FILE
+#         Standardise branch-create output between Subversion 1.8 and 1.9.
 #     commit_sort INPUT_FILE OUTPUT_FILE
 #         Sort status and transmitting info within the commit output.
 #     diff_sort INPUT_FILE OUTPUT_FILE
 #         Sort Subversion diff output by filename.
+#     diff_svn_version_filter
+#         Preprocess stdin to stdout based on relevant '#IF SVN1.X' prefixes.
 #     status_sort INPUT_FILE OUTPUT_FILE
 #         Sort Subversion status lines.
 #     merge_sort INPUT_FILE OUTPUT_FILE
@@ -186,11 +190,18 @@ function file_grep() {
     fail $TEST_KEY
 }
 
+function branch_tidy() {
+    local INPUT_FILE=$TEST_DIR/$1
+    sed -i "/^Committing transaction/d; /^$/d" "$INPUT_FILE"
+}
+
 function commit_sort() {
     local INPUT_FILE=$1
     local OUTPUT_FILE=$2
     local TMP_OUTPUT_FILE=$(mktemp)
+    # Sort the svn status part of the message
     status_sort $INPUT_FILE $TMP_OUTPUT_FILE
+    # Sort the 'Adding/Deleting', etc part of the message
     python -c 'import re, sys
 text = sys.stdin.read()
 sending_lines = re.findall("^\w+ing  +.*$", text, re.M)
@@ -200,16 +211,30 @@ sending_lines.sort()
 print prefix + "\n".join(sending_lines) + suffix.rstrip()
 ' <"$TMP_OUTPUT_FILE" >"$OUTPUT_FILE"
     rm "$TMP_OUTPUT_FILE"
+    # Remove 1.8 to 1.9 specific changes (transmitting, transaction lines).
+    sed -i "/^Transmitting file data/d; /^Committing transaction/d; /^$/d" \
+        "$OUTPUT_FILE"
 }
 
 function diff_sort() {
     local INPUT_FILE=$1
     local OUTPUT_FILE=$2
+    # Sort the diff file order.
     python -c 'import re, sys
 text = sys.stdin.read()
 print "\nIndex: ".join(
     [l.strip() for l in sorted(re.compile("^Index: ", re.M).split(text))])
 ' <"$INPUT_FILE" >"$OUTPUT_FILE"
+    # In 1.9, new files are (nonexistent) rather than (working copy).
+    sed -i "s/(nonexistent)/(working copy)/" "$OUTPUT_FILE"
+}
+
+function diff_svn_version_filter() {
+    if "$SVN_VERSION_IS_19"; then
+        sed "s/^#IF SVN1.9 //g; /^#IF SVN1.8 /d"
+    else
+        sed "s/^#IF SVN1.8 //g; /^#IF SVN1.9 /d"
+    fi
 }
 
 function status_sort() {
@@ -254,8 +279,8 @@ if status_lines:
 }
 
 function check_svn_version() {
-    if ! svn --version | head -1 | grep -q "^svn, version 1.8"; then
-        skip_all "Tests require Subversion 1.8"
+    if ! svn --version | head -1 | grep -q "^svn, version 1\.\(8\|9\)"; then
+        skip_all "Tests require Subversion 1.8 or 1.9"
         exit 0
     fi
 }
@@ -283,9 +308,19 @@ FCM_HOME=${FCM_HOME:-$(cd $(dirname $(readlink -f $BASH_SOURCE))/../../.. && pwd
 export FCM_HOME
 PATH=$FCM_HOME/bin:$PATH
 
+SVN_VERSION_IS_19=false
+if svn --version 1>/dev/null 2>&1; then
+    SVN_VERSION=$(svn --version | \
+                  sed -n "s/^svn, version \([0-9.]\+\) .*/\1/p")
+    if [[ $SVN_VERSION =~ "1.9." ]]; then
+        SVN_VERSION_IS_19=true
+    fi
+fi
+
 TEST_KEY_BASE=$(basename $0 .t)
 TEST_SOURCE_DIR=$(cd $(dirname $0) && pwd)
 TEST_DIR=$(mktemp -d)
+export LC_ALL=C
 export LANG=C
 cd $TEST_DIR
 
diff --git a/t/svn-hooks/03-post-commit-bg.t b/t/svn-hooks/03-post-commit-bg.t
index ef1839f..424994b 100755
--- a/t/svn-hooks/03-post-commit-bg.t
+++ b/t/svn-hooks/03-post-commit-bg.t
@@ -228,6 +228,7 @@ perl -e 'map {print(rand())} 1..2097152' >'file3' # compress should be >10MB
 svn import --no-auth-cache -q -m"${TEST_KEY}" 'file3' "${REPOS_URL}/file3"
 REV="$(<'rev')"
 poll 10 grep -q '^RET_CODE=' "${REPOS_PATH}/log/post-commit.log"
+poll 10 test -e 'mail.out'
 date2datefmt "${REPOS_PATH}/log/post-commit.log" \
     | sed '/^trac-admin/d; s/^\(REV_FILE_SIZE=\).*\( #\)/\1???\2/' \
     >"${TEST_KEY}.log"
@@ -427,6 +428,7 @@ svn co -q "${REPOS_URL}/hello/trunk" 'hello'
 echo 'Hello' >'hello/file'
 svn ci -q -m 'hello whatever' '--no-auth-cache' '--username=root' 'hello'
 poll 10 grep -q '^RET_CODE=' "${REPOS_PATH}/log/post-commit.log"
+poll 10 test -e 'mail.out'
 REV="$(<rev)"
 file_grep "${TEST_KEY}.mail.out.1" \
     "^-rnotifications at localhost -sfoo@${REV} by root" 'mail.out'

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/fcm.git



More information about the debian-science-commits mailing list