@@ -4,7 +4,10 @@ import (
44 "exercism"
55 "fmt"
66 "github.com/codegangsta/cli"
7+ "io/ioutil"
78 "os"
9+ "path/filepath"
10+ "strings"
811)
912
1013func main () {
@@ -122,14 +125,33 @@ func main() {
122125
123126 filename := c .Args ()[0 ]
124127
128+ // Make filename relative to config.ExercismDirectory.
129+ absPath , err := absolutePath (filename )
130+ if err != nil {
131+ fmt .Printf ("Couldn't find %v: %v\n " , filename , err )
132+ return
133+ }
134+ exDir := config .ExercismDirectory + string (filepath .Separator )
135+ if ! strings .HasPrefix (absPath , exDir ) {
136+ fmt .Printf ("%v is not under your exercism project path (%v)\n " , absPath , exDir )
137+ return
138+ }
139+ filename = absPath [len (exDir ):]
140+
125141 if exercism .IsTest (filename ) {
126142 fmt .Println ("It looks like this is a test, please enter an example file name." )
127143 return
128144 }
129145
130- response , err := exercism . SubmitAssignment ( config . Hostname , config . ApiKey , filename )
146+ code , err := ioutil . ReadFile ( absPath )
131147 if err != nil {
132- fmt .Printf ("There was an issue with your submission: %s\n " , err )
148+ fmt .Printf ("Error reading %v: %v\n " , absPath , err )
149+ return
150+ }
151+
152+ response , err := exercism .SubmitAssignment (config .Hostname , config .ApiKey , filename , code )
153+ if err != nil {
154+ fmt .Printf ("There was an issue with your submission: %v\n " , err )
133155 return
134156 }
135157
@@ -183,10 +205,22 @@ func askForConfigInfo() (c exercism.Config) {
183205 if err != nil && err .Error () != "unexpected newline" {
184206 panic (err )
185207 }
208+ dir , err = absolutePath (dir )
209+ if err != nil {
210+ panic (err )
211+ }
186212
187213 if dir == "" {
188214 dir = currentDir
189215 }
190216
191217 return exercism.Config {un , key , exercism .ReplaceTilde (dir ), "http://exercism.io" }
192218}
219+
220+ func absolutePath (path string ) (string , error ) {
221+ path , err := filepath .Abs (path )
222+ if err != nil {
223+ return "" , err
224+ }
225+ return filepath .EvalSymlinks (path )
226+ }
0 commit comments