We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see ourdocumentation.
There was an error while loading.Please reload this page.
1 parent0bd7607 commit4a1d826Copy full SHA for 4a1d826
src/channel/index.ts
@@ -8,6 +8,7 @@ import tutorialConfig from '../actions/tutorialConfig'
8
import{COMMANDS}from'../editor/commands'
9
importloggerfrom'../services/logger'
10
importContextfrom'./context'
11
+import{versionasgitVersion}from'../services/git'
12
import{openWorkspace,checkWorkspaceEmpty}from'../services/workspace'
13
14
interfaceChannel{
@@ -106,13 +107,21 @@ class Channel implements Channel {
106
107
// update the current stepId on startup
108
vscode.commands.executeCommand(COMMANDS.SET_CURRENT_STEP,action.payload)
109
return
-case'EDITOR_CHECK_WORKSPACE':
110
+case'EDITOR_VALIDATE_SETUP':
111
+// 1. check workspace is selected
112
constisEmptyWorkspace=awaitcheckWorkspaceEmpty(this.workspaceRoot.uri.path)
-if(isEmptyWorkspace){
-this.send({type:'IS_EMPTY_WORKSPACE'})
113
-}else{
+if(!isEmptyWorkspace){
114
this.send({type:'NOT_EMPTY_WORKSPACE'})
115
+return
116
+}
117
+// 2. check Git is installed.
118
+// Should wait for workspace before running otherwise requires access to root folder
119
+constisGitInstalled=awaitgitVersion()
120
+if(!isGitInstalled){
121
+this.send({type:'GIT_NOT_INSTALLED'})
122
123
}
124
+this.send({type:'SETUP_VALIDATED'})
125
126
case'EDITOR_REQUEST_WORKSPACE':
127
console.log('request workspace')
src/services/git/index.ts
@@ -69,7 +69,7 @@ export async function clear(): Promise<void> {
69
thrownewError('Error cleaning up current unsaved work')
70
71
72
-exportasyncfunctionversion():Promise<string|boolean>{
+exportasyncfunctionversion():Promise<string|null>{
73
const{ stdout, stderr}=awaitnode.exec('git --version')
74
if(!stderr){
75
constmatch=stdout.match(/^gitversion(\d+\.)?(\d+\.)?(\*|\d+)/)
@@ -79,10 +79,7 @@ export async function version(): Promise<string | boolean> {
79
return`${major}${minor}${patch}`
80
81
82
-constmessage='Git not installed. Please install Git'
83
-consterror=newError(message)
84
-onError(error)
85
-throwerror
+returnnull
86
87
88
asyncfunctioninit():Promise<void>{
@@ -95,12 +92,6 @@ async function init(): Promise<void> {
95
92
96
93
97
94
exportasyncfunctioninitIfNotExists():Promise<void>{
98
-consthasGit=awaitversion()
99
-
100
-if(!hasGit){
101
-thrownewError('Git must be installed')
102
-}
103
104
consthasGitInit=node.exists('.git')
105
if(!hasGitInit){
awaitinit()
typings/index.d.ts
@@ -72,8 +72,9 @@ export interface MachineStateSchema {
Error:{}
LoadStoredTutorial:{}
Start:{}
-CheckEmptyWorkspace:{}
+ValidateSetup:{}
76
NonEmptyWorkspace:{}
77
+GitNotInstalled:{}
78
SelectTutorial:{}
SetupNewTutorial:{}
web-app/src/Routes.tsx
@@ -7,6 +7,7 @@ import SelectTutorialPage from './containers/SelectTutorial'
7
importCompletedPagefrom'./containers/Tutorial/CompletedPage'
importLevelSummaryPagefrom'./containers/Tutorial/LevelPage'
importSelectEmptyWorkspacefrom'./containers/Check/SelectWorkspace'
+importGitInstalledfrom'./containers/Check/GitInstalled'
constRoutes=()=>{
const{ context, send, Router, Route}=useRouter()
@@ -26,6 +27,9 @@ const Routes = () => {
26
27
<Routepath={['Setup.NonEmptyWorkspace','Setup.RequestEmptyWorkspace']}>
28
<SelectEmptyWorkspacesend={send}/>
29
</Route>
30
+<Routepath="Setup.GitNotInstalled">
31
+<GitInstalledsend={send}/>
32
+</Route>
33
<Routepath="Setup.Error">
34
<LoadingPagetext="Error"context={context}/>
35
web-app/src/containers/Check/GitInstalled.tsx
@@ -0,0 +1,36 @@
1
+import*asReactfrom'react'
2
+import*asTfrom'typings'
3
+import{css,jsx}from'@emotion/core'
4
+importButtonfrom'../../components/Button'
5
+
6
+conststyles={
+container:{
+padding:'1rem',
+},
+typeProps={
+send:(action:T.Action)=>void
15
16
+constGitInstalled=(props:Props)=>{
17
+constonTryAgain=()=>props.send({type:'TRY_AGAIN'})
18
+return(
19
+<divcss={styles.container}>
20
+<h3>Git Not Installed</h3>
21
+<p>
22
+ Git is required for CodeRun to run. Git is a free open-source distributed version control system. Basically, Git
23
+ helps you easily save your file system changes.
24
+</p>
25
+<ahref="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git">Learn how to install Git</a>
+<br/>
+<Buttontype="secondary"onClick={onTryAgain}>
+ Check Again
+</Button>
+</div>
+)
36
+exportdefaultGitInstalled
web-app/src/services/state/actions/editor.ts
@@ -72,9 +72,9 @@ export default (editorSend: any) => ({
clearStorage():void{
editorSend({type:'TUTORIAL_CLEAR'})
},
-checkEmptyWorkspace(){
+validateSetup(){
editorSend({
-type:'EDITOR_CHECK_WORKSPACE',
+type:'EDITOR_VALIDATE_SETUP',
})
requestWorkspaceSelect(){
web-app/src/services/state/machine.ts
@@ -55,18 +55,19 @@ export const createMachine = (options: any) => {
55
56
Start:{
57
on:{
58
-NEW_TUTORIAL:'CheckEmptyWorkspace',
+NEW_TUTORIAL:'ValidateSetup',
59
CONTINUE_TUTORIAL:{
60
target:'#tutorial-level',
61
actions:['continueConfig'],
62
63
64
65
-CheckEmptyWorkspace:{
66
-onEntry:['checkEmptyWorkspace'],
+ValidateSetup:{
+onEntry:['validateSetup'],
67
68
-IS_EMPTY_WORKSPACE:'SelectTutorial',
NOT_EMPTY_WORKSPACE:'NonEmptyWorkspace',
+GIT_NOT_INSTALLED:'GitNotInstalled',
+SETUP_VALIDATED:'SelectTutorial',
NonEmptyWorkspace:{
@@ -75,7 +76,13 @@ export const createMachine = (options: any) => {
target:'NonEmptyWorkspace',
actions:'requestWorkspaceSelect',
-WORKSPACE_LOADED:'CheckEmptyWorkspace',
+WORKSPACE_LOADED:'ValidateSetup',
+// validation 2: git installed
+GitNotInstalled:{
+on:{
+TRY_AGAIN:'ValidateSetup',
SelectTutorial:{