diff --git a/repo/fsrepo/fsrepo.go b/repo/fsrepo/fsrepo.go index 0eaa8049ca6..9d86c07e888 100644 --- a/repo/fsrepo/fsrepo.go +++ b/repo/fsrepo/fsrepo.go @@ -637,6 +637,12 @@ func (r *FSRepo) GetStorageUsage() (uint64, error) { return 0, err } + pth, err = filepath.EvalSymlinks(pth) + if err != nil { + log.Debugf("filepath.EvalSymlinks error: %s", err) + return 0, err + } + var du uint64 err = filepath.Walk(pth, func(p string, f os.FileInfo, err error) error { if err != nil { diff --git a/test/sharness/t0088-repo-stat-symlink.sh b/test/sharness/t0088-repo-stat-symlink.sh new file mode 100755 index 00000000000..a5ab95925cf --- /dev/null +++ b/test/sharness/t0088-repo-stat-symlink.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# +# Copyright (c) 2017 John Reed +# MIT Licensed; see the LICENSE file in this repository. +# + +test_description="Test 'ipfs repo stat' where IPFS_PATH is a symbolic link" + +. lib/test-lib.sh + +test_expect_success "create symbolic link for IPFS_PATH" ' + mkdir sym_link_target && + ln -s sym_link_target .ipfs +' + +test_init_ipfs + +# compare RepoSize when getting it directly vs via symbolic link +test_expect_success "'ipfs repo stat' RepoSize is correct with sym link" ' + export IPFS_PATH="sym_link_target" && + reposize_direct=$(ipfs repo stat | grep RepoSize | awk '\''{ print $2 }'\'') && + export IPFS_PATH=".ipfs" && + reposize_symlink=$(ipfs repo stat | grep RepoSize | awk '\''{ print $2 }'\'') && + test $reposize_symlink -ge $reposize_direct +' + +test_done