Skip to content

Commit 34983ba

Browse files
authored
Move git call into experiments data (#4036)
* move number of commits call into experiments data * refactor and tidy
1 parent a271e2d commit 34983ba

File tree

11 files changed

+142
-73
lines changed

11 files changed

+142
-73
lines changed

extension/src/data/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import { DeferredDisposable } from '../class/deferred'
1010
import { isSameOrChild } from '../fileSystem'
1111

1212
export type ExperimentsOutput = {
13+
availableNbCommits: { [branch: string]: number }
1314
expShow: ExpShowOutput
14-
rowOrder: { branch: string; sha: string }[]
1515
gitLog: string
16+
rowOrder: { branch: string; sha: string }[]
1617
}
1718

1819
export abstract class BaseData<

extension/src/experiments/data/index.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,17 @@ export class ExperimentsData extends BaseData<ExperimentsOutput> {
5151
const branches = await this.getBranchesToShow(allBranches)
5252
let gitLog = ''
5353
const rowOrder: { branch: string; sha: string }[] = []
54+
const availableNbCommits: { [branch: string]: number } = {}
5455
const args: Args = []
5556

5657
for (const branch of branches) {
57-
gitLog = await this.collectGitLogAndOrder(gitLog, branch, rowOrder, args)
58+
gitLog = await this.collectGitLogAndOrder(
59+
gitLog,
60+
branch,
61+
rowOrder,
62+
availableNbCommits,
63+
args
64+
)
5865
}
5966

6067
const expShow = await this.internalCommands.executeCommand<ExpShowOutput>(
@@ -65,11 +72,7 @@ export class ExperimentsData extends BaseData<ExperimentsOutput> {
6572

6673
this.collectFiles({ expShow })
6774

68-
return this.notifyChanged({
69-
expShow,
70-
gitLog,
71-
rowOrder
72-
})
75+
return this.notifyChanged({ availableNbCommits, expShow, gitLog, rowOrder })
7376
}
7477

7578
protected collectFiles({ expShow }: { expShow: ExpShowOutput }) {
@@ -80,17 +83,26 @@ export class ExperimentsData extends BaseData<ExperimentsOutput> {
8083
gitLog: string,
8184
branch: string,
8285
rowOrder: { branch: string; sha: string }[],
86+
availableNbCommits: { [branch: string]: number },
8387
args: Args
8488
) {
8589
const nbOfCommitsToShow = this.experiments.getNbOfCommitsToShow(branch)
8690

87-
const branchGitLog = await this.internalCommands.executeCommand(
88-
AvailableCommands.GIT_GET_COMMIT_MESSAGES,
89-
this.dvcRoot,
90-
branch,
91-
String(nbOfCommitsToShow)
92-
)
91+
const [branchGitLog, totalCommits] = await Promise.all([
92+
this.internalCommands.executeCommand(
93+
AvailableCommands.GIT_GET_COMMIT_MESSAGES,
94+
this.dvcRoot,
95+
branch,
96+
String(nbOfCommitsToShow)
97+
),
98+
this.internalCommands.executeCommand<number>(
99+
AvailableCommands.GIT_GET_NUM_COMMITS,
100+
this.dvcRoot,
101+
branch
102+
)
103+
])
93104
gitLog = [gitLog, branchGitLog].join(COMMITS_SEPARATOR)
105+
availableNbCommits[branch] = totalCommits
94106

95107
for (const commit of branchGitLog.split(COMMITS_SEPARATOR)) {
96108
const [sha] = commit.split('\n')

extension/src/experiments/index.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,23 @@ export class Experiments extends BaseRepository<TableData> {
168168
return this.data.managedUpdate()
169169
}
170170

171-
public async setState({ expShow, gitLog, rowOrder }: ExperimentsOutput) {
171+
public async setState({
172+
availableNbCommits,
173+
expShow,
174+
gitLog,
175+
rowOrder
176+
}: ExperimentsOutput) {
172177
const hadCheckpoints = this.hasCheckpoints()
173178
const dvcLiveOnly = await this.checkSignalFile()
174179
await Promise.all([
175180
this.columns.transformAndSet(expShow),
176-
this.experiments.transformAndSet(expShow, gitLog, dvcLiveOnly, rowOrder)
181+
this.experiments.transformAndSet(
182+
expShow,
183+
gitLog,
184+
dvcLiveOnly,
185+
rowOrder,
186+
availableNbCommits
187+
)
177188
])
178189

179190
if (hadCheckpoints !== this.hasCheckpoints()) {
@@ -551,12 +562,6 @@ export class Experiments extends BaseRepository<TableData> {
551562
),
552563
() => this.addStage(),
553564
(branchesSelected: string[]) => this.selectBranches(branchesSelected),
554-
(branch: string) =>
555-
this.internalCommands.executeCommand<number>(
556-
AvailableCommands.GIT_GET_NUM_COMMITS,
557-
this.dvcRoot,
558-
branch
559-
),
560565
() => this.data.update()
561566
)
562567

extension/src/experiments/model/collect.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,28 @@ const collectExpState = (
186186
return baseline
187187
}
188188

189+
export const collectAddRemoveCommitsDetails = (
190+
availableNbCommits: {
191+
[branch: string]: number
192+
},
193+
getNbOfCommitsToShow: (branch: string) => number
194+
): {
195+
hasMoreCommits: { [branch: string]: boolean }
196+
isShowingMoreCommits: { [branch: string]: boolean }
197+
} => {
198+
const hasMoreCommits: { [branch: string]: boolean } = {}
199+
const isShowingMoreCommits: { [branch: string]: boolean } = {}
200+
201+
for (const [branch, availableCommits] of Object.entries(availableNbCommits)) {
202+
const nbOfCommitsToShow = getNbOfCommitsToShow(branch)
203+
hasMoreCommits[branch] = availableCommits > nbOfCommitsToShow
204+
isShowingMoreCommits[branch] =
205+
Math.min(nbOfCommitsToShow, availableCommits) > 1
206+
}
207+
208+
return { hasMoreCommits, isShowingMoreCommits }
209+
}
210+
189211
const getExecutor = (experiment: Experiment): Executor => {
190212
if ([experiment.executor, experiment.id].includes(EXPERIMENT_WORKSPACE_ID)) {
191213
return Executor.WORKSPACE

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

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,39 @@ beforeEach(() => {
3333
jest.resetAllMocks()
3434
})
3535

36-
const DEFAULT_DATA: [string, boolean, { branch: string; sha: string }[]] = [
37-
'',
38-
false,
39-
[]
40-
]
36+
const DEFAULT_DATA: [
37+
string,
38+
boolean,
39+
{ branch: string; sha: string }[],
40+
{ [branch: string]: number }
41+
] = ['', false, [], { main: 2000 }]
4142

4243
describe('ExperimentsModel', () => {
4344
it('should return the expected rows when given the base fixture', () => {
4445
const model = new ExperimentsModel('', buildMockMemento())
45-
model.transformAndSet(outputFixture, gitLogFixture, false, rowOrderFixture)
46+
model.transformAndSet(
47+
outputFixture,
48+
gitLogFixture,
49+
false,
50+
rowOrderFixture,
51+
{ main: 6 }
52+
)
4653
expect(model.getRowData()).toStrictEqual(rowsFixture)
4754
})
4855

4956
it('should return the expected rows when given the survival fixture', () => {
5057
const model = new ExperimentsModel('', buildMockMemento())
51-
model.transformAndSet(survivalOutputFixture, '', false, [
52-
{ branch: 'main', sha: '3d5adcb974bb2c85917a5d61a489b933adaa2b7f' },
53-
{ branch: 'main', sha: 'a49e03966a1f9f1299ec222ebc4bed8625d2c54d' },
54-
{ branch: 'main', sha: '4f7b50c3d171a11b6cfcd04416a16fc80b61018d' }
55-
])
58+
model.transformAndSet(
59+
survivalOutputFixture,
60+
'',
61+
false,
62+
[
63+
{ branch: 'main', sha: '3d5adcb974bb2c85917a5d61a489b933adaa2b7f' },
64+
{ branch: 'main', sha: 'a49e03966a1f9f1299ec222ebc4bed8625d2c54d' },
65+
{ branch: 'main', sha: '4f7b50c3d171a11b6cfcd04416a16fc80b61018d' }
66+
],
67+
{ main: 700 }
68+
)
5669
expect(model.getRowData()).toStrictEqual(
5770
expect.objectContaining(survivalRowsFixture)
5871
)
@@ -87,7 +100,7 @@ describe('ExperimentsModel', () => {
87100
}
88101
)
89102

90-
model.transformAndSet(dvcLiveOnly, '', true, [])
103+
model.transformAndSet(dvcLiveOnly, '', true, [], { main: 2000 })
91104
// eslint-disable-next-line @typescript-eslint/no-explicit-any
92105
const runningWorkspace = (model as any).workspace
93106
expect(runningWorkspace?.executor).toStrictEqual(EXPERIMENT_WORKSPACE_ID)
@@ -178,19 +191,27 @@ describe('ExperimentsModel', () => {
178191

179192
it('should return the expected rows when given the deeply nested output fixture', () => {
180193
const model = new ExperimentsModel('', buildMockMemento())
181-
model.transformAndSet(deeplyNestedOutputFixture, '', false, [
182-
{ branch: 'main', sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77' }
183-
])
194+
model.transformAndSet(
195+
deeplyNestedOutputFixture,
196+
'',
197+
false,
198+
[{ branch: 'main', sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77' }],
199+
{ main: 10 }
200+
)
184201
expect(model.getRowData()).toStrictEqual(
185202
expect.objectContaining(deeplyNestedRowsFixture)
186203
)
187204
})
188205

189206
it('should return the expected rows when given the data types output fixture', () => {
190207
const model = new ExperimentsModel('', buildMockMemento())
191-
model.transformAndSet(dataTypesOutputFixture, '', false, [
192-
{ branch: 'main', sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77' }
193-
])
208+
model.transformAndSet(
209+
dataTypesOutputFixture,
210+
'',
211+
false,
212+
[{ branch: 'main', sha: '53c3851f46955fa3e2b8f6e1c52999acc8c9ea77' }],
213+
{ main: 10 }
214+
)
194215
expect(model.getRowData()).toStrictEqual(
195216
expect.objectContaining(dataTypesRowsFixture)
196217
)

extension/src/experiments/model/index.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Memento } from 'vscode'
22
import { SortDefinition, sortExperiments } from './sortBy'
33
import { FilterDefinition, filterExperiment, getFilterId } from './filterBy'
44
import {
5+
collectAddRemoveCommitsDetails,
56
collectExperiments,
67
collectOrderedCommitsAndExperiments,
78
collectRunningInQueue,
@@ -62,6 +63,8 @@ export class ExperimentsModel extends ModelWithPersistence {
6263
private numberOfCommitsToShow: Record<string, number>
6364
private branchesToShow: string[] = []
6465
private availableBranchesToShow: string[] = []
66+
private hasMoreCommits: { [branch: string]: boolean } = {}
67+
private isShowingMoreCommits: { [branch: string]: boolean } = {}
6568

6669
private filters: Map<string, FilterDefinition> = new Map()
6770

@@ -115,7 +118,8 @@ export class ExperimentsModel extends ModelWithPersistence {
115118
expShow: ExpShowOutput,
116119
gitLog: string,
117120
dvcLiveOnly: boolean,
118-
rowOrder: { branch: string; sha: string }[]
121+
rowOrder: { branch: string; sha: string }[],
122+
availableNbCommits: { [branch: string]: number }
119123
) {
120124
const {
121125
workspace,
@@ -125,6 +129,14 @@ export class ExperimentsModel extends ModelWithPersistence {
125129
hasCheckpoints
126130
} = collectExperiments(expShow, gitLog, dvcLiveOnly)
127131

132+
const { hasMoreCommits, isShowingMoreCommits } =
133+
collectAddRemoveCommitsDetails(availableNbCommits, (branch: string) =>
134+
this.getNbOfCommitsToShow(branch)
135+
)
136+
137+
this.hasMoreCommits = hasMoreCommits
138+
this.isShowingMoreCommits = isShowingMoreCommits
139+
128140
commits.sort((a, b) => (b.Created || '').localeCompare(a.Created || ''))
129141

130142
this.rowOrder = rowOrder
@@ -383,6 +395,14 @@ export class ExperimentsModel extends ModelWithPersistence {
383395
]
384396
}
385397

398+
public getHasMoreCommits() {
399+
return this.hasMoreCommits
400+
}
401+
402+
public getIsShowingMoreCommits() {
403+
return this.isShowingMoreCommits
404+
}
405+
386406
public isSelected(id: string) {
387407
return !!this.coloredStatus[id]
388408
}

extension/src/experiments/webview/messages.ts

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,12 @@ export class WebviewMessages {
3737

3838
private hasConfig = false
3939
private hasValidDvcYaml = true
40-
private hasMoreCommits: Record<string, boolean> = {}
41-
private isShowingMoreCommits: Record<string, boolean> = {}
4240

4341
private readonly addStage: () => Promise<boolean>
4442
private readonly selectBranches: (
4543
branchesSelected: string[]
4644
) => Promise<string[] | undefined>
4745

48-
private readonly getNumCommits: (branch: string) => Promise<number>
4946
private readonly update: () => Promise<void>
5047

5148
constructor(
@@ -60,7 +57,6 @@ export class WebviewMessages {
6057
selectBranches: (
6158
branchesSelected: string[]
6259
) => Promise<string[] | undefined>,
63-
getNumCommits: (branch: string) => Promise<number>,
6460
update: () => Promise<void>
6561
) {
6662
this.dvcRoot = dvcRoot
@@ -72,11 +68,9 @@ export class WebviewMessages {
7268
this.hasStages = hasStages
7369
this.addStage = addStage
7470
this.selectBranches = selectBranches
75-
this.getNumCommits = getNumCommits
7671
this.update = update
7772

7873
void this.changeHasConfig()
79-
void this.changeHasMoreOrLessCommits()
8074
}
8175

8276
public async changeHasConfig(update?: boolean) {
@@ -86,10 +80,7 @@ export class WebviewMessages {
8680
update && this.sendWebviewMessage()
8781
}
8882

89-
public sendWebviewMessage(doNotCheckNbCommits?: boolean) {
90-
if (!doNotCheckNbCommits) {
91-
void this.changeHasMoreOrLessCommits(true)
92-
}
83+
public sendWebviewMessage() {
9384
const webview = this.getWebview()
9485
void webview?.show(this.getWebviewData())
9586
}
@@ -233,19 +224,6 @@ export class WebviewMessages {
233224
)
234225
this.experiments.setBranchesToShow(selectedBranches)
235226
await this.update()
236-
await this.changeHasMoreOrLessCommits(true)
237-
}
238-
239-
private async changeHasMoreOrLessCommits(update?: boolean) {
240-
for (const branch of this.experiments.getBranchesToShow()) {
241-
const availableNbCommits = await this.getNumCommits(branch)
242-
const nbOfCommitsToShow = this.experiments.getNbOfCommitsToShow(branch)
243-
this.hasMoreCommits[branch] = availableNbCommits > nbOfCommitsToShow
244-
this.isShowingMoreCommits[branch] =
245-
Math.min(nbOfCommitsToShow, availableNbCommits) > 1
246-
}
247-
248-
update && this.sendWebviewMessage(true)
249227
}
250228

251229
private async changeCommitsToShow(change: 1 | -1, branch: string) {
@@ -262,7 +240,6 @@ export class WebviewMessages {
262240
branch
263241
)
264242
await this.update()
265-
await this.changeHasMoreOrLessCommits(true)
266243
}
267244

268245
private getWebviewData() {
@@ -278,11 +255,11 @@ export class WebviewMessages {
278255
hasCheckpoints: this.experiments.hasCheckpoints(),
279256
hasColumns: this.columns.hasNonDefaultColumns(),
280257
hasConfig: this.hasConfig,
281-
hasMoreCommits: this.hasMoreCommits,
258+
hasMoreCommits: this.experiments.getHasMoreCommits(),
282259
hasRunningWorkspaceExperiment:
283260
this.experiments.hasRunningWorkspaceExperiment(),
284261
hasValidDvcYaml: this.hasValidDvcYaml,
285-
isShowingMoreCommits: this.isShowingMoreCommits,
262+
isShowingMoreCommits: this.experiments.getIsShowingMoreCommits(),
286263
rows: this.experiments.getRowData(),
287264
selectedForPlotsCount: this.experiments.getSelectedRevisions().length,
288265
sorts: this.experiments.getSorts()

0 commit comments

Comments
 (0)