~svn/ubuntu/oneiric/subversion/ppa

« back to all changes in this revision

Viewing changes to contrib/client-side/svn-resolve

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-12-13 17:57:16 UTC
  • mfrom: (1.1.6 upstream) (0.1.3 etch)
  • Revision ID: james.westby@ubuntu.com-20061213175716-2ysv6z4w5dpa2r2f
Tags: 1.4.2dfsg1-2ubuntu1
* Merge with Debian unstable; remaining changes:
  - Create pot file on build.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
# -*- coding:utf-8;mode:shell-script;mode:font-lock -*-
 
3
 
 
4
##
 
5
# Resolve Subversion conflicts using FileMerge.
 
6
#
 
7
# (FileMerge is a graphical diff tool in the Mac OS X Developer
 
8
# Tools.)
 
9
#
 
10
# In your working copy, do (for example):
 
11
#
 
12
#   svn-resolve .
 
13
#
 
14
# FileMerge will open a window for each file that is in a conflict
 
15
# state, showing you diffs with the left/right arrows pointing to the
 
16
# side of each change that is selected.  Diffs with gray outlines are
 
17
# automatically resolved.  Diffs with red outlines are the conflicts.
 
18
# Find those and select which side you want, or pull up the split view
 
19
# at he bottom and edit the text to what it should be.
 
20
##
 
21
# Copyright (c) 2002 Wilfredo Sanchez Vega <wsanchez@wsanchez.net>.
 
22
# All rights reserved.
 
23
#
 
24
# Permission to use, copy, modify, and distribute this software for
 
25
# any purpose with or without fee is hereby granted, provided that the
 
26
# above copyright notice, this permission, and the following
 
27
# disclaimer notice appear in all copies.
 
28
#
 
29
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL
 
30
# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 
31
# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 
32
# AUTHORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
 
33
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
 
34
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 
35
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 
36
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
37
##
 
38
 
 
39
set -e
 
40
set -u
 
41
 
 
42
##
 
43
# Handle command line
 
44
##
 
45
 
 
46
usage ()
 
47
{
 
48
  program=$(basename "$0");
 
49
 
 
50
  if [ $# != 0 ]; then echo "$@"; echo ""; fi;
 
51
 
 
52
  echo "${program}: usage:";
 
53
  echo "    ${program} file1 [file2 ...]";
 
54
}
 
55
 
 
56
# Process arguments
 
57
while [ $# != 0 ]; do
 
58
  case "$1" in
 
59
    --help)
 
60
      usage;
 
61
      exit 0;
 
62
      ;;
 
63
    --|*) break; ;;
 
64
  esac;
 
65
done;
 
66
 
 
67
##
 
68
# Do The Right Thing
 
69
##
 
70
 
 
71
#
 
72
# If opendiff isn't installed, you can't launch FileMerge.
 
73
# If we're not in the OS X Terminal, we probably can't run FileMerge
 
74
#
 
75
if ! type opendiff >& /dev/null || [ "${TERM_PROGRAM:=}" != "Apple_Terminal" ]; then
 
76
    diff "$@";
 
77
    exit $?;
 
78
fi;
 
79
 
 
80
resolve ()
 
81
{
 
82
    local conflict="$1";
 
83
 
 
84
    local revision=$(svn info "${conflict}" | grep '^Revision: ' | sed 's|^Revision: ||');
 
85
 
 
86
    local     left="${conflict}.mine";
 
87
    local    right="${conflict}.r${revision}";
 
88
    local ancestor="";
 
89
 
 
90
    for file in $(ls "${conflict}".r*); do
 
91
        if [ "${file}" != "${right}" ]; then
 
92
            if [ -n "${ancestor}" ]; then
 
93
                echo "ERROR: Multiple possible ancestor files exist for file: ${conflict}";
 
94
                return 1;
 
95
            fi;
 
96
            ancestor="${file}";
 
97
        fi;
 
98
    done;
 
99
 
 
100
    for file in "${left}" "${right}" "${ancestor}"; do
 
101
        if [ ! -f "${file}" ]; then
 
102
            echo "ERROR: Missing file: ${file}";
 
103
            return 1;
 
104
        fi;
 
105
    done;
 
106
 
 
107
    opendiff "${left}" "${right}" -ancestor "${ancestor}" -merge "${conflict}";
 
108
}
 
109
 
 
110
for file in "$@"; do
 
111
    for conflict in $(svn status . | grep '^C' | sed 's|^C......||'); do
 
112
        resolve "${conflict}";
 
113
    done;
 
114
done;