Merge pull request #361 from tdussa/BrokenSymlink

Transfer symlinks without touching their targets.
This commit is contained in:
Zack 2021-04-15 15:01:49 -07:00 committed by GitHub
commit 828de41d6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View File

@ -324,7 +324,7 @@ func getPaths(fnames []string) (paths []string, haveFolder bool, err error) {
haveFolder = false
paths = []string{}
for _, fname := range fnames {
stat, errStat := os.Stat(fname)
stat, errStat := os.Lstat(fname)
if errStat != nil {
err = errStat
return

View File

@ -41,8 +41,23 @@ func GetInput(prompt string) string {
return strings.TrimSpace(text)
}
// HashFile returns the hash of a file or, in case of a symlink, the
// SHA256 hash of its target
// HashFile returns the hash of a file
func HashFile(fname string) (hash256 []byte, err error) {
var fstats os.FileInfo
fstats, err = os.Lstat(fname)
if err != nil {
return nil, err
}
if fstats.Mode()&os.ModeSymlink != 0 {
var target string
target, err = os.Readlink(fname)
return []byte(SHA256(target)), nil
}
if err != nil {
return nil, err
}
return IMOHashFile(fname)
}