1 #! /bin/bash 2 3 function do_rm { 4 local target target_parent SVN_OPTS 5 target="$1" 6 target_parent="$2" 7 if [ -d "$target" ]; then 8 # need -rf, -fr, -f -r, -r -f to create --force 9 if [ "${OPTS}" = "-rf" -o "${OPTS}" = "-fr" ]; then 10 SVN_OPTS="--force" 11 fi 12 else 13 if [ "${OPTS}" = "-f" -o "${OPTS}" = "-rf" -o "${OPTS}" = "-fr" ]; then 14 SVN_OPTS="--force" 15 fi 16 fi 17 echo svn rm ${SVN_OPTS} \"${target}\" 18 svn rm ${SVN_OPTS} "${target}" 19 } 20 21 function do_mkdir { 22 local target target_parent dest realdir dir 23 target="$1" 24 target_parent="$2" 25 realdir="" 26 for dir in `echo "${target}" | sed 's@/@ @g'`; do 27 realdir="${realdir}${dir}/" 28 if [ -d "${realdir}" ]; then 29 if [ ! -d "${realdir}.svn/" ]; then 30 echo svn add \"${realdir}\" 31 svn add "${realdir}" 32 fi 33 continue 34 fi 35 echo svn mkdir \"${realdir}\" 36 svn mkdir "${realdir}" 37 done 38 } 39 40 function do_cp { 41 local target target_parent dest 42 target="$1" 43 target_parent="$2" 44 dest="$3" 45 echo svn cp \"${target}\" \"${dest}\" 46 svn cp "${target}" "${dest}" 47 } 48 49 function do_mv { 50 local target target_parent dest 51 target="$1" 52 target_parent="$2" 53 dest="$3" 54 echo svn mv \"${target}\" \"${dest}\" 55 svn mv "${target}" "${dest}" 56 } 57 58 function is_managed { 59 local target target_parent target_parent_tmp target_managed 60 target="$1" 61 target_managed=1 62 target_parent="" 63 target_parent_tmp="${target}" 64 while [ -z "${target_parent}" ]; do 65 if [ "${target_parent_tmp}" = "/" ]; then target_parent="/"; break; fi 66 target_parent_tmp="`echo "${target_parent_tmp}" | sed 's@/*$@@;s@/[^/]*$@/@'`" 67 if echo "${target_parent_tmp}" | grep -v '/' >/dev/null; then target_parent_tmp="."; fi 68 target_parent="`readlink -f "${target_parent_tmp}"`" 69 done 70 if [ -d "${target_parent}/.svn/" -o -d "${target}/.svn/" ]; then 71 target_managed=0 72 fi 73 return $target_managed 74 } 75 76 CMD="`basename $0 | cut -f 2 -d _`" 77 OPTS="`echo " $* " | sed 's@ @ @g;s@ [^- ][^ ]* @ @g;s@ *@ @g;s@^ *@@;s@ *$@@'`" 78 79 OLDIFS="${IFS}" 80 IFS="" 81 82 dest="" 83 if [ "${CMD}" = "mv" -o "${CMD}" = "cp" ]; then 84 # last argument is a destination, remove it from the list. 85 for dest in $*; do true; done 86 fi 87 if [ ! -z "${dest}" ]; then 88 if is_managed "${dest}"; then dest_managed=1; else dest_managed=0; fi 89 fi 90 91 for target in $*; do 92 if [ \( "${CMD}" = "mv" -o "${CMD}" = "cp" \) -a "${target}" = "${dest}" ]; then continue; fi 93 if echo "${target}" | grep '^-' >/dev/null; then continue; fi 94 if is_managed "${target}"; then target_managed=1; else target_managed=0; fi 95 if [ -z "${dest}" ]; then dest_managed="${target_managed}"; fi 96 97 IFS="${OLDIFS}" 98 if [ "${dest_managed}" = "1" ]; then 99 do_${CMD} "${target}" "${target_parent}" "${dest}" 100 else 101 if [ -z "${dest}" ]; then 102 echo ${CMD} ${OPTS} \"${target}\" 103 ${CMD} ${OPTS} "${target}" 104 else 105 echo ${CMD} ${OPTS} \"${target}\" \"${dest}\" 106 ${CMD} ${OPTS} "${target}" "${dest}" 107 fi 108 fi 109 IFS="" 110 done 111 IFS="${OLDIFS}" |