From f3c21baad82a5928e2df0ab50528b32f51065d5e Mon Sep 17 00:00:00 2001 From: david Date: Thu, 24 Oct 2019 22:41:13 -0400 Subject: [PATCH] restore symlinks from tar archive fixes #50 --- pkg/git.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/git.go b/pkg/git.go index 46e505d..dfaa035 100644 --- a/pkg/git.go +++ b/pkg/git.go @@ -118,10 +118,8 @@ func gzipUntar(dst string, r io.Reader, subDir string) error { // create directories as needed case tar.TypeDir: - if _, err := os.Stat(target); err != nil { - if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil { - return err - } + if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil { + return err } case tar.TypeReg: @@ -139,6 +137,15 @@ func gzipUntar(dst string, r io.Reader, subDir string) error { // Using defer would accumulate an unbounded quantity of // handles and release them all at once at function end. f.Close() + + case tar.TypeSymlink: + if err := os.MkdirAll(filepath.Dir(target), os.FileMode(header.Mode)); err != nil { + return err + } + + if err := os.Symlink(header.Linkname, target); err != nil { + return err + } } } }