Skip to content

Commit

Permalink
Merge pull request desktop#12406 from desktop/reorder-stats
Browse files Browse the repository at this point in the history
  • Loading branch information
sergiou87 authored Jun 9, 2021
2 parents 218f871 + c9413df commit d51d99e
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 2 deletions.
18 changes: 18 additions & 0 deletions app/src/lib/stats/stats-database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,24 @@ export interface IDailyMeasures {

/** The number of times the user amended a commit without file changes */
readonly amendCommitSuccessfulWithoutFileChangesCount: number

/** The number of times a successful reorder occurs */
readonly reorderSuccessfulCount: number

/** The number of times a reorder is initiated */
readonly reorderStartedCount: number

/** The number of times conflicts encountered during a reorder */
readonly reorderConflictsEncounteredCount: number

/** The number of times reorder ended successfully after conflicts */
readonly reorderSuccessfulWithConflictsCount: number

/** The number of times reorder of multiple commits initiated */
readonly reorderMultipleCommitsCount: number

/** The number of times a reorder was undone */
readonly reorderUndoneCount: number
}

export class StatsDatabase extends Dexie {
Expand Down
43 changes: 43 additions & 0 deletions app/src/lib/stats/stats-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ const DefaultDailyMeasures: IDailyMeasures = {
amendCommitStartedCount: 0,
amendCommitSuccessfulWithFileChangesCount: 0,
amendCommitSuccessfulWithoutFileChangesCount: 0,
reorderSuccessfulCount: 0,
reorderStartedCount: 0,
reorderConflictsEncounteredCount: 0,
reorderSuccessfulWithConflictsCount: 0,
reorderMultipleCommitsCount: 0,
reorderUndoneCount: 0,
}

interface IOnboardingStats {
Expand Down Expand Up @@ -1488,6 +1494,43 @@ export class StatsStore implements IStatsStore {
}))
}

public recordReorderSuccessful(): Promise<void> {
return this.updateDailyMeasures(m => ({
reorderSuccessfulCount: m.reorderSuccessfulCount + 1,
}))
}

public recordReorderStarted(): Promise<void> {
return this.updateDailyMeasures(m => ({
reorderStartedCount: m.reorderStartedCount + 1,
}))
}

public recordReorderConflictsEncountered(): Promise<void> {
return this.updateDailyMeasures(m => ({
reorderConflictsEncounteredCount: m.reorderConflictsEncounteredCount + 1,
}))
}

public recordReorderSuccessfulWithConflicts(): Promise<void> {
return this.updateDailyMeasures(m => ({
reorderSuccessfulWithConflictsCount:
m.reorderSuccessfulWithConflictsCount + 1,
}))
}

public recordReorderMultipleCommits(): Promise<void> {
return this.updateDailyMeasures(m => ({
reorderMultipleCommitsCount: m.reorderMultipleCommitsCount + 1,
}))
}

public recordReorderUndone(): Promise<void> {
return this.updateDailyMeasures(m => ({
reorderUndoneCount: m.reorderUndoneCount + 1,
}))
}

/** Post some data to our stats endpoint. */
private post(body: object): Promise<Response> {
const options: RequestInit = {
Expand Down
2 changes: 2 additions & 0 deletions app/src/ui/changes/continue-rebase.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Dispatcher } from '../dispatcher'
import { Repository } from '../../models/repository'
import { WorkingDirectoryStatus } from '../../models/status'
import { getConflictedFiles } from '../../lib/status'
import { MultiCommitOperationKind } from '../../models/multi-commit-operation'

interface IContinueRebaseProps {
readonly dispatcher: Dispatcher
Expand All @@ -21,6 +22,7 @@ export class ContinueRebase extends React.Component<IContinueRebaseProps, {}> {
const { rebaseConflictState } = this.props

await this.props.dispatcher.continueRebase(
MultiCommitOperationKind.Rebase,
this.props.repository,
this.props.workingDirectory,
rebaseConflictState
Expand Down
34 changes: 32 additions & 2 deletions app/src/ui/dispatcher/dispatcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1152,6 +1152,7 @@ export class Dispatcher {
* tracked files in the working directory.
*/
public async continueRebase(
kind: MultiCommitOperationKind,
repository: Repository,
workingDirectory: WorkingDirectoryStatus,
conflictsState: RebaseConflictState
Expand All @@ -1168,6 +1169,13 @@ export class Dispatcher {
workingDirectory,
manualResolutions
)

if (result === RebaseResult.CompletedWithoutError) {
if (kind === MultiCommitOperationKind.Reorder) {
this.statsStore.recordReorderSuccessfulWithConflicts()
}
}

await this.appStore._loadStatus(repository)

const stateAfter = this.repositoryStateManager.get(repository)
Expand Down Expand Up @@ -3180,6 +3188,12 @@ export class Dispatcher {
return
}

this.statsStore.recordReorderStarted()

if (commitsToReorder.length > 1) {
this.statsStore.recordReorderMultipleCommits()
}

this.appStore._initializeMultiCommitOperation(
repository,
{
Expand Down Expand Up @@ -3409,6 +3423,7 @@ export class Dispatcher {
case RebaseResult.ConflictsEncountered:
await this.refreshRepository(repository)
this.startMultiCommitOperationConflictFlow(
kind,
repository,
targetBranchName,
`${kind.toLowerCase()} commit`
Expand All @@ -3425,6 +3440,7 @@ export class Dispatcher {
* to show conflicts step
*/
private startMultiCommitOperationConflictFlow(
kind: MultiCommitOperationKind,
repository: Repository,
ourBranch: string,
theirBranch: string
Expand Down Expand Up @@ -3452,7 +3468,9 @@ export class Dispatcher {
},
})

// TODO: record conflict encountered during operation
if (kind === MultiCommitOperationKind.Reorder) {
this.statsStore.recordReorderConflictsEncountered()
}

this.showPopup({
type: PopupType.MultiCommitOperation,
Expand Down Expand Up @@ -3512,6 +3530,10 @@ export class Dispatcher {
this.addRebasedBranchToForcePushList(repository, tip, originalBranchTip)
}

if (kind === MultiCommitOperationKind.Reorder) {
this.statsStore.recordReorderSuccessful()
}

this.endMultiCommitOperation(repository)
await this.refreshRepository(repository)
}
Expand All @@ -3525,11 +3547,19 @@ export class Dispatcher {
repository: Repository,
commitsCount: number
): Promise<boolean> {
return this.appStore._undoMultiCommitOperation(
const result = await this.appStore._undoMultiCommitOperation(
kind,
repository,
commitsCount
)

if (result) {
if (kind === MultiCommitOperationKind.Reorder) {
this.statsStore.recordReorderUndone()
}
}

return result
}

/**
Expand Down
1 change: 1 addition & 0 deletions app/src/ui/multi-commit-operation/reorder.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export abstract class Reorder extends BaseMultiCommitOperation {
}

const rebaseResult = await dispatcher.continueRebase(
MultiCommitOperationKind.Reorder,
repository,
workingDirectory,
rebaseConflictState
Expand Down
1 change: 1 addition & 0 deletions app/src/ui/multi-commit-operation/squash.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export abstract class Squash extends BaseMultiCommitOperation {
}

const rebaseResult = await dispatcher.continueRebase(
MultiCommitOperationKind.Squash,
repository,
workingDirectory,
rebaseConflictState
Expand Down
1 change: 1 addition & 0 deletions app/src/ui/rebase/rebase-flow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ export class RebaseFlow extends React.Component<IRebaseFlowProps> {

const continueRebaseAction = async () => {
const rebaseResult = await dispatcher.continueRebase(
MultiCommitOperationKind.Rebase,
repository,
workingDirectory,
conflictState
Expand Down

0 comments on commit d51d99e

Please sign in to comment.