diff kitten: Add support for files that are identical apart from mode changes

Fixes #6611
This commit is contained in:
Kovid Goyal
2023-09-09 19:04:54 +05:30
parent eb51d459ae
commit c99d55691d
3 changed files with 22 additions and 1 deletions

View File

@@ -78,6 +78,8 @@ Detailed list of changes
- ssh kitten: Fix a regression causing hostname directives in :file:`ssh.conf` not matching when username is specified (:disc:`6609`)
- diff kitten: Add support for files that are identical apart from mode changes (:iss:`6611`)
0.29.2 [2023-07-27]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -312,6 +312,16 @@ func (self *Collection) collect_files(left, right string) error {
if ld != rd {
changed_names.Add(n)
self.add_change(left_path_map[n], right_path_map[n])
} else {
if lstat, err := os.Stat(left_path_map[n]); err == nil {
if rstat, err := os.Stat(right_path_map[n]); err == nil {
if lstat.Mode() != rstat.Mode() {
// identical files with only a mode change
changed_names.Add(n)
self.add_change(left_path_map[n], right_path_map[n])
}
}
}
}
}
removed := left_names.Subtract(common_names)

View File

@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"math"
"os"
"strconv"
"strings"
@@ -571,7 +572,15 @@ func lines_for_diff(left_path string, right_path string, patch *Patch, columns,
is_full_width: true,
}
if patch.Len() == 0 {
for _, line := range splitlines("The files are identical", columns-margin_size) {
txt := "The files are identical"
if lstat, err := os.Stat(left_path); err == nil {
if rstat, err := os.Stat(right_path); err == nil {
if lstat.Mode() != rstat.Mode() {
txt = fmt.Sprintf("Mode changed: %s to %s", lstat.Mode(), rstat.Mode())
}
}
}
for _, line := range splitlines(txt, columns-margin_size) {
sl := ScreenLine{}
sl.left.marked_up_text = line
ht.screen_lines = append(ht.screen_lines, &sl)