blob: 96a1fcddd26f263fba52112832121feccdbf5041 [file] [log] [blame]
#!/bin/bash
#
# Copyright 2011 The Apache Software Foundation
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
follow_one() {
# Resolve symlinks and relative path components along a path. This requires
# its argument to be an absolute path. This does not recursively re-resolve
# symlinks; if that is required, use the 'follow' method.
target=$1
OIFS=$IFS
IFS='/'
# Taking each dir component along the way, build up a new target directory,
# resolving '.', '..', and symlinks.
newtarget=''
for part in ${target}; do
if [ -z "${part}" ]; then
continue # Empty dir part. 'foo//bar'
elif [ "." == "${part}" ]; then
continue # Nothing special to do for '.'
elif [ ".." == "${part}" ]; then
IFS=$OIFS
newtarget=`dirname ${newtarget}` # pop a component.
elif [ -h "${newtarget}/${part}" ]; then
IFS=$OIFS
link=`readlink ${newtarget}/${part}`
# links can be relative or absolute. Relative ones get appended to
# newtarget; absolute ones replace it.
if [ "${link:0:1}" != "/" ]; then
newtarget="${newtarget}/${link}" # relative
else
newtarget="${link}" # absolute
fi
else # Regular file component.
newtarget="${newtarget}/${part}"
fi
IFS='/'
done
IFS=$OIFS
echo $newtarget
}
follow() {
# Portable 'readlink -f' function to follow a file's links to the final
# target. Calls follow_one recursively til we're finished tracing symlinks.
target=$1
depth=$2
if [ -z "$depth" ]; then
depth=0
elif [ "$depth" == "1000" ]; then
# Don't recurse indefinitely; we've probably hit a symlink cycle.
# Just bail out here.
echo $target
return 1
fi
# Canonicalize the target to be an absolute path.
targetdir=`dirname ${target}`
targetdir=`cd ${targetdir} && pwd`
target=${targetdir}/`basename ${target}`
# Use follow_one to resolve links. Test that we get the same result twice,
# to terminate iteration.
first=`follow_one ${target}`
second=`follow_one ${first}`
if [ "${first}" == "${second}" ]; then
# We're done.
echo "${second}"
else
# Need to continue resolving links.
echo `follow ${second} $(( $depth + 1 ))`
fi
}
prgm=`follow $0`
bin=`dirname ${prgm}`
bin=`cd ${bin} && pwd`
source ${bin}/configure-sqoop "${bin}"
exec ${HADOOP_HOME}/bin/hadoop com.cloudera.sqoop.Sqoop "$@"