zipsync handles symlink

This change fixes a bug that zipsync didn't handle symlink correctly;
symlink was extracted as a regular file whose content is the target
path. Fixing the problem by correctly creating the symlink using
os.Symlink.

Bug: N/A
Test: manual

Change-Id: Ib6685c14e1950d1057d89672883cdd9e4879069a
This commit is contained in:
Jiyong Park 2020-11-18 15:52:07 +09:00
parent 073ea55fad
commit dc48afd3c5
1 changed files with 15 additions and 1 deletions

View File

@ -53,6 +53,16 @@ func writeFile(filename string, in io.Reader, perm os.FileMode) error {
return out.Close()
}
func writeSymlink(filename string, in io.Reader) error {
b, err := ioutil.ReadAll(in)
if err != nil {
return err
}
dest := string(b)
err = os.Symlink(dest, filename)
return err
}
func main() {
flag.Usage = func() {
fmt.Fprintln(os.Stderr, "usage: zipsync -d <output dir> [-l <output file>] [-f <pattern>] [zip]...")
@ -122,7 +132,11 @@ func main() {
if err != nil {
log.Fatal(err)
}
must(writeFile(filename, in, f.FileInfo().Mode()))
if f.FileInfo().Mode()&os.ModeSymlink != 0 {
must(writeSymlink(filename, in))
} else {
must(writeFile(filename, in, f.FileInfo().Mode()))
}
in.Close()
files = append(files, filename)
}