old_path, new_path = splitted_parameter
if not (old_path and new_path):
o.fatal("a graft point cannot be empty")
- graft_points.append((realpath(old_path), realpath(new_path)))
+ graft_points.append((resolve_parent(old_path),
+ resolve_parent(new_path)))
is_reverse = os.environ.get('BUP_SERVER_REVERSE')
if is_reverse and opt.remote:
try:
st = xstat.lstat(n)
except OSError as e:
- add_error(Exception('%s: %s' % (realpath(n), str(e))))
+ add_error(Exception('%s: %s' % (resolve_parent(n), str(e))))
continue
if (st.st_mode & _IFMT) == stat.S_IFDIR:
n += '/'
yield readpipe(command + sub_args, preexec_fn=preexec_fn)
-def realpath(p):
- """Get the absolute path of a file.
+def resolve_parent(p):
+ """Return the absolute path of a file without following any final symlink.
Behaves like os.path.realpath, but doesn't follow a symlink for the last
element. (ie. if 'p' itself is a symlink, this one won't follow it, but it
for flag in options:
(option, parameter) = flag
if option == '--exclude':
- excluded_paths.append(realpath(parameter))
+ excluded_paths.append(resolve_parent(parameter))
elif option == '--exclude-from':
try:
- f = open(realpath(parameter))
+ f = open(resolve_parent(parameter))
except IOError as e:
raise fatal("couldn't read %s" % parameter)
for exclude_path in f.readlines():
# FIXME: perhaps this should be rstrip('\n')
- exclude_path = realpath(exclude_path.strip())
+ exclude_path = resolve_parent(exclude_path.strip())
if exclude_path:
excluded_paths.append(exclude_path)
return sorted(frozenset(excluded_paths))
fatal('invalid --exclude-rx pattern (%s): %s' % (parameter, ex))
elif option == '--exclude-rx-from':
try:
- f = open(realpath(parameter))
+ f = open(resolve_parent(parameter))
except IOError as e:
raise fatal("couldn't read %s" % parameter)
for pattern in f.readlines():
self.count = 0
self.lastfile = None
self.filename = None
- self.filename = filename = realpath(filename)
+ self.filename = filename = resolve_parent(filename)
self.metastore = metastore
self.tmax = tmax
(dir,name) = os.path.split(filename)
def reduce_paths(paths):
xpaths = []
for p in paths:
- rp = realpath(p)
+ rp = resolve_parent(p)
try:
st = os.lstat(rp)
if stat.S_ISDIR(st.st_mode):
import os
import time, tempfile
+
from bup import index, metadata
from bup.helpers import *
+import bup.helpers as helpers
import bup.xstat as xstat
+
from wvtest import *
lib_t_dir = os.getcwd()
cd = os.path.realpath('../../../t')
WVPASS(cd)
sd = os.path.realpath(cd + '/sampledata')
- WVPASSEQ(index.realpath(cd + '/sampledata'), sd)
+ WVPASSEQ(helpers.resolve_parent(cd + '/sampledata'), sd)
WVPASSEQ(os.path.realpath(cd + '/sampledata/x'), sd + '/x')
WVPASSEQ(os.path.realpath(cd + '/sampledata/var/abs-symlink'),
sd + '/var/abs-symlink-target')
- WVPASSEQ(index.realpath(cd + '/sampledata/var/abs-symlink'),
+ WVPASSEQ(helpers.resolve_parent(cd + '/sampledata/var/abs-symlink'),
sd + '/var/abs-symlink')
import errno, glob, grp, pwd, stat, tempfile, subprocess
import bup.helpers as helpers
from bup import git, metadata, vfs
-from bup.helpers import clear_errors, detect_fakeroot, is_superuser, realpath
+from bup.helpers import clear_errors, detect_fakeroot, is_superuser, resolve_parent
from wvtest import *
from bup.xstat import utime, lutime
ex(bup_path, '-d', bup_dir, 'save', '-tvvn', 'test', data_path)
git.check_repo_or_die(bup_dir)
top = vfs.RefList(None)
- n = top.lresolve('/test/latest' + realpath(data_path))
+ n = top.lresolve('/test/latest' + resolve_parent(data_path))
m = n.metadata()
WVPASS(m.mtime == test_time2)
WVPASS(len(n.subs()) == 2)
"$bup_t_lib_script_home/force-delete" "$@"
}
-realpath()
+resolve-parent()
{
test "$#" -eq 1 || return $?
echo "$1" | \
PYTHONPATH="$bup_t_lib_script_home/../lib" bup-python -c \
- "import sys, bup.helpers; print bup.helpers.realpath(sys.stdin.readline())" \
+ "import sys, bup.helpers; print bup.helpers.resolve_parent(sys.stdin.readline())" \
|| return $?
}
WVSTART "save disjoint top-level directories"
(
# Resolve any symlinks involving the top top-level dirs.
- real_pwd="$(WVPASS realpath .)" || exit $?
- real_tmp="$(WVPASS realpath /tmp/.)" || exit $?
+ real_pwd="$(WVPASS resolve-parent .)" || exit $?
+ real_tmp="$(WVPASS resolve-parent /tmp/.)" || exit $?
pwd_top="$(echo $real_pwd | WVPASS awk -F "/" '{print $2}')" || exit $?
tmp_top="$(echo $real_tmp | WVPASS awk -F "/" '{print $2}')" || exit $?