You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
3.2 KiB
166 lines
3.2 KiB
#!/bin/bash
|
|
COPYTO=$1
|
|
|
|
if [ "x$COPYTO" = "x" ] || [ ! -d "$COPYTO" ]
|
|
then
|
|
echo "$(basename $0) <directory to merge to>"
|
|
exit 1
|
|
fi
|
|
|
|
STARTDIR=$(pwd)
|
|
|
|
COPYFILES=""
|
|
DELFILES=""
|
|
NEWFILES=""
|
|
|
|
function isversioned {
|
|
F=$1
|
|
svn info $F 2>&1 | grep Checksum > /dev/null
|
|
rc=$?
|
|
if [ $rc -eq 0 ]
|
|
then
|
|
echo 1
|
|
else
|
|
echo 0
|
|
fi
|
|
}
|
|
|
|
function checkCopy {
|
|
|
|
echo "[-] Checking for files that need to be copied to: [$COPYTO]..."
|
|
echo "-----------------------------------------------------"
|
|
|
|
# first pass is to copy all files we care about from current to destination
|
|
for f in $(find . | egrep -vi \
|
|
"aap|build-|\.svn|\.libs|Makefile$|Makefile.in|~$|\.la$")
|
|
do
|
|
if [ -f $f ]; then
|
|
F=$(printf "%-60s\n" $f)
|
|
C=$(sum -r $f)
|
|
O=$(sum -r $COPYTO/$f 2>/dev/null)
|
|
if [ "$C" = "$O" ] ; then
|
|
S="SAME"
|
|
elif [ ! -f $COPYTO/$f ]; then
|
|
S="NEW"
|
|
else
|
|
S="DIFF"
|
|
fi
|
|
|
|
if [ "$S" != "SAME" ]; then
|
|
echo "file: [$F], status: [$S]"
|
|
if [ "$S" = "DIFF" ]; then
|
|
COPY="y"
|
|
elif [ "$S" = "NEW" ] ; then
|
|
V=$(isversioned $f)
|
|
if [ "$V" -eq 0 ]; then
|
|
echo " - new file, but not versioned, so ignoring."
|
|
COPY="n"
|
|
elif [ "$V" -eq 1 ]; then
|
|
echo -n " - new file. versioned. copy this one? (Y/N) -> "
|
|
read ANS
|
|
ANS=$(echo $ANS | tr '[A-Z]' '[a-z]')
|
|
if [ "$ANS" = "y" ]; then
|
|
COPY="y"
|
|
NEWFILES="$NEWFILES $f"
|
|
else
|
|
COPY="n"
|
|
fi
|
|
fi
|
|
fi
|
|
if [ "$COPY" = "y" ]; then
|
|
echo " - copying this file..."
|
|
COPYFILES="$COPYFILES $f"
|
|
else
|
|
echo " - not copying it..."
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
function checkDelete {
|
|
|
|
echo "[-] Checking for files that should be deleted from: [$COPYTO] ..."
|
|
echo "-----------------------------------------------------"
|
|
|
|
# now see if there's anything that was in dest, but is not in new and
|
|
# remove it
|
|
cd $COPYTO
|
|
for f in $(find . | egrep -vi \
|
|
"aap|build|.svn|.libs|Makefile|~$|lib/pilot-link|.la$|.deps|.moc$|.lo$|\.o$")
|
|
do
|
|
if [ -f $f ]; then
|
|
F=$(printf "%-60s\n" $f)
|
|
if [ ! -f $STARTDIR/$f ] ; then
|
|
V=$(isversioned $f)
|
|
if [ "$V" -eq 1 ]; then
|
|
echo -n " - file: [$F] looks like it's been deleted. should I remove it? (Y/N) -> "
|
|
read ANS
|
|
ANS=$(echo $ANS | tr '[A-Z]' '[a-z]')
|
|
if [ "$ANS" = "y" ]; then
|
|
echo " - okay, I'll remove this one..."
|
|
DELFILES="$DELFILES $f"
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
checkCopy
|
|
checkDelete
|
|
|
|
cd "$STARTDIR"
|
|
|
|
echo "okay, here are the files that I'll copy:"
|
|
for f in $(echo $COPYFILES)
|
|
do
|
|
echo " - $f"
|
|
done
|
|
|
|
echo "and here are the files that I'll do an svn remove on:"
|
|
for f in $(echo $DELFILES)
|
|
do
|
|
echo " - $f"
|
|
done
|
|
|
|
echo "and here are the files that I'll do an svn add on:"
|
|
for f in $(echo $NEWFILES)
|
|
do
|
|
echo " - $f"
|
|
done
|
|
|
|
echo -n "Okay to proceed? (y/n) -> "
|
|
read ANS
|
|
ANS=$(echo $ANS | tr '[A-Z]' '[a-z]')
|
|
if [ "$ANS" != "y" ]; then
|
|
echo " - okay, stopping."
|
|
exit
|
|
fi
|
|
|
|
cd "$STARTDIR"
|
|
|
|
echo "okay, copying..."
|
|
for f in $(echo $COPYFILES)
|
|
do
|
|
cp --parents -v "$f" "$COPYTO"
|
|
done
|
|
|
|
cd "$COPYTO"
|
|
|
|
echo "doing svn remove..."
|
|
for f in $(echo $DELFILES)
|
|
do
|
|
echo " - $f"
|
|
svn remove "$f"
|
|
done
|
|
|
|
cd "$COPYTO"
|
|
|
|
echo "doing svn add..."
|
|
for f in $(echo $NEWFILES)
|
|
do
|
|
echo " - $f"
|
|
svn add "$f"
|
|
done
|