Skip to content

Commit

Permalink
diff kitten: Fix a regression that broke diffing against remote files
Browse files Browse the repository at this point in the history
Fixes #7797
  • Loading branch information
kovidgoyal committed Aug 28, 2024
1 parent d363513 commit 8eb0b55
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 1 deletion.
2 changes: 2 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ Detailed list of changes

- kitten @: Fix a regression connecting to TCP sockets using plain IP addresses rather than hostnames (:iss:`7794`)

- diff kitten: Fix a regression that broke diffing against remote files (:iss:`7797`)

0.36.1 [2024-08-24]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
2 changes: 1 addition & 1 deletion kittens/diff/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func get_ssh_file(hostname, rpath string) (string, error) {
for strings.HasPrefix(rpath, "/") {
rpath = rpath[1:]
}
cmd := []string{ssh.SSHExe(), hostname, "tar", "-c", "-f", "-"}
cmd := []string{ssh.SSHExe(), hostname, "tar", "--dereference", "--create", "--file", "-"}
if is_abs {
cmd = append(cmd, "-C", "/")
}
Expand Down
10 changes: 10 additions & 0 deletions tools/utils/tar.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
var hdr *tar.Header
hdr, err = tr.Next()
if errors.Is(err, io.EOF) {
err = nil
break
}
if err != nil {
Expand All @@ -70,6 +71,9 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
}
case tar.TypeReg, tar.TypeRegA:
var d *os.File
if err = os.MkdirAll(filepath.Dir(dest), 0o700); err != nil {
return
}
if d, err = os.Create(dest); err != nil {
return
}
Expand All @@ -82,13 +86,19 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
return
}
case tar.TypeLink:
if err = os.MkdirAll(filepath.Dir(dest), 0o700); err != nil {
return
}
if err = os.Link(hdr.Linkname, dest); err != nil {
return
}
if err = set_metadata(func(m fs.FileMode) error { return os.Chmod(dest, m) }, hdr); err != nil {
return
}
case tar.TypeSymlink:
if err = os.MkdirAll(filepath.Dir(dest), 0o700); err != nil {
return
}
if err = os.Symlink(hdr.Linkname, dest); err != nil {
return
}
Expand Down

0 comments on commit 8eb0b55

Please sign in to comment.