MCPcopy
hub / github.com/kopia/kopia / compareEntry

Method compareEntry

internal/diff/diff.go:108–206  ·  view source on GitHub ↗

nolint:gocyclo

(ctx context.Context, e1, e2 fs.Entry, path string)

Source from the content-addressed store, hash-verified

106
107//nolint:gocyclo
108func (c *Comparer) compareEntry(ctx context.Context, e1, e2 fs.Entry, path string) error {
109 // see if we have the same object IDs, which implies identical objects, thanks to content-addressable-storage
110 h1, e1HasObjectID := e1.(object.HasObjectID)
111 h2, e2HasObjectID := e2.(object.HasObjectID)
112
113 if e1HasObjectID && e2HasObjectID {
114 if h1.ObjectID() == h2.ObjectID() {
115 if _, isDir := e1.(fs.Directory); isDir {
116 compareMetadata(ctx, e1, e2, path, &c.stats.DirectoryEntries)
117 } else {
118 compareMetadata(ctx, e1, e2, path, &c.stats.FileEntries)
119 }
120
121 return nil
122 }
123 }
124
125 if e1 == nil {
126 if dir2, isDir2 := e2.(fs.Directory); isDir2 {
127 c.output(c.statsOnly, "added directory %v\n", path)
128
129 c.stats.DirectoryEntries.Added++
130
131 return c.compareDirectories(ctx, nil, dir2, path)
132 }
133
134 c.output(c.statsOnly, "added file %v (%v bytes)\n", path, e2.Size())
135
136 c.stats.FileEntries.Added++
137
138 if f, ok := e2.(fs.File); ok {
139 if err := c.compareFiles(ctx, nil, f, path); err != nil {
140 return err
141 }
142 }
143
144 return nil
145 }
146
147 if e2 == nil {
148 if dir1, isDir1 := e1.(fs.Directory); isDir1 {
149 c.output(c.statsOnly, "removed directory %v\n", path)
150
151 c.stats.DirectoryEntries.Removed++
152
153 return c.compareDirectories(ctx, dir1, nil, path)
154 }
155
156 c.output(c.statsOnly, "removed file %v (%v bytes)\n", path, e1.Size())
157
158 c.stats.FileEntries.Removed++
159
160 if f, ok := e1.(fs.File); ok {
161 if err := c.compareFiles(ctx, f, nil, path); err != nil {
162 return err
163 }
164 }
165

Callers 2

CompareMethod · 0.95

Calls 9

outputMethod · 0.95
compareDirectoriesMethod · 0.95
compareFilesMethod · 0.95
compareEntryMetadataMethod · 0.95
compareMetadataFunction · 0.70
ObjectIDMethod · 0.65
SizeMethod · 0.45
StringMethod · 0.45
ModTimeMethod · 0.45

Tested by

no test coverage detected