Skip to content

Commit 8de768e

Browse files
authored
Mark all paths underneath a not in cache or delete parent with the same status (#1783)
1 parent 39e0b95 commit 8de768e

File tree

4 files changed

+102
-9
lines changed

4 files changed

+102
-9
lines changed

extension/src/repository/model/collect.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,33 @@ export const collectTrackedPaths = async (
150150
}
151151
return acc
152152
}
153+
154+
const isUncollectedChild = (
155+
deleted: Set<string>,
156+
deletedPath: string,
157+
trackedPath: string
158+
): boolean => {
159+
return !deleted.has(trackedPath) && isSameOrChild(deletedPath, trackedPath)
160+
}
161+
162+
const collectIfDeletedChild = (
163+
deleted: Set<string>,
164+
deletedPath: string,
165+
trackedPath: string
166+
): void => {
167+
if (isUncollectedChild(deleted, deletedPath, trackedPath)) {
168+
deleted.add(trackedPath)
169+
}
170+
}
171+
172+
export const collectDeleted = (
173+
deleted: Set<string>,
174+
tracked: Set<string>
175+
): Set<string> => {
176+
for (const trackedPath of tracked) {
177+
for (const deletedPath of deleted) {
178+
collectIfDeletedChild(deleted, deletedPath, trackedPath)
179+
}
180+
}
181+
return deleted
182+
}

extension/src/repository/model/index.test.ts

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,67 @@ describe('RepositoryState', () => {
539539
resolve(dvcDemoPath, 'predictions.json'),
540540
resolve(dvcDemoPath, 'training_metrics'),
541541
resolve(dvcDemoPath, 'training_metrics.json'),
542-
resolve(dvcDemoPath, 'data', 'MNIST', 'raw')
542+
resolve(dvcDemoPath, 'data', 'MNIST', 'raw'),
543+
resolve(
544+
dvcDemoPath,
545+
'data',
546+
'MNIST',
547+
'raw',
548+
't10k-images-idx3-ubyte'
549+
),
550+
resolve(
551+
dvcDemoPath,
552+
'data',
553+
'MNIST',
554+
'raw',
555+
't10k-images-idx3-ubyte.gz'
556+
),
557+
resolve(
558+
dvcDemoPath,
559+
'data',
560+
'MNIST',
561+
'raw',
562+
't10k-labels-idx1-ubyte'
563+
),
564+
resolve(
565+
dvcDemoPath,
566+
'data',
567+
'MNIST',
568+
'raw',
569+
't10k-labels-idx1-ubyte.gz'
570+
),
571+
resolve(
572+
dvcDemoPath,
573+
'data',
574+
'MNIST',
575+
'raw',
576+
'train-images-idx3-ubyte'
577+
),
578+
resolve(
579+
dvcDemoPath,
580+
'data',
581+
'MNIST',
582+
'raw',
583+
'train-images-idx3-ubyte.gz'
584+
),
585+
resolve(
586+
dvcDemoPath,
587+
'data',
588+
'MNIST',
589+
'raw',
590+
'train-labels-idx1-ubyte'
591+
),
592+
resolve(
593+
dvcDemoPath,
594+
'data',
595+
'MNIST',
596+
'raw',
597+
'train-labels-idx1-ubyte.gz'
598+
),
599+
resolve(dvcDemoPath, 'training_metrics', 'scalars'),
600+
resolve(dvcDemoPath, 'training_metrics', 'report.html'),
601+
resolve(dvcDemoPath, 'training_metrics', 'scalars', 'acc.tsv'),
602+
resolve(dvcDemoPath, 'training_metrics', 'scalars', 'loss.tsv')
543603
]),
544604
renamed: emptySet,
545605
tracked: new Set([

extension/src/repository/model/index.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { dirname, join, resolve } from 'path'
22
import omit from 'lodash.omit'
33
import {
4+
collectDeleted,
45
collectModifiedAgainstHead,
56
collectTrackedNonLeafs,
67
collectTrackedOuts,
@@ -220,21 +221,21 @@ export class RepositoryModel
220221
modifiedAgainstCache
221222
)
222223

224+
const deletedWithChildren = collectDeleted(
225+
this.getStateFromDiff(diffOutput[Status.DELETED]),
226+
this.getTracked()
227+
)
228+
223229
this.state.notInCache = new Set([
224230
...this.getStateFromDiff(diffOutput[Status.NOT_IN_CACHE]),
225231
...this.filterStatuses(
226-
[
227-
...this.getStateFromDiff(diffOutput[Status.DELETED]),
228-
...modifiedAgainstHead
229-
],
232+
[...deletedWithChildren, ...modifiedAgainstHead],
230233
path => this.pathInSet(path, notInCache)
231234
)
232235
])
233236

234237
this.state.deleted = new Set(
235-
this.mapToTrackedPaths(diffOutput.deleted || []).filter(
236-
path => !this.state.notInCache.has(path)
237-
)
238+
[...deletedWithChildren].filter(path => !this.state.notInCache.has(path))
238239
)
239240
}
240241

extension/src/test/suite/repository/index.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,9 @@ suite('Repository Test Suite', () => {
211211

212212
const deleted = new Set([
213213
join(dvcDemoPath, model),
214-
join(dvcDemoPath, dataDir)
214+
join(dvcDemoPath, dataDir),
215+
join(dvcDemoPath, compressedDataset),
216+
join(dvcDemoPath, dataset)
215217
])
216218

217219
const tracked = new Set([

0 commit comments

Comments
 (0)