11package main
22
3- //import "github.com/google/go-github/github"
43import (
4+ "encoding/json"
55 "fmt"
6- "os"
7- "net/http"
86 "io/ioutil"
9- "strconv "
10- "encoding/json "
7+ "net/http "
8+ "os "
119 "os/exec"
10+ "strconv"
11+ "strings"
1212)
1313
1414type User struct {
15- Login string
16- Id int
17- Avatar_url string
18- Name string
19- Email string
15+ Login string
16+ Id int
17+ Avatar_url string
18+ Name string
19+ Email string
2020}
2121
22+ const fileName = "users.json"
23+
24+ var users []User
25+
2226func main () {
23- userName := os . Args [ 1 ]
27+ load ()
2428
25- user , err := findUser (userName )
26- if err != nil {
29+ login := os .Args [1 ]
30+
31+ user := findUser (login )
32+ if user == nil {
2733 fmt .Println ("Bad user" )
2834 return
2935 }
@@ -32,13 +38,38 @@ func main() {
3238 setGitConfig ("user.email" , user .Email )
3339}
3440
35- func findUser (userName string ) (user * User , err error ){
36- request := "https://api.github.com/users/" + userName
37- fmt .Println ("Request " + request )
41+ func load () {
42+ file , _ := os .Open (fileName )
43+ defer file .Close ()
44+ decoder := json .NewDecoder (file )
45+ decoder .Decode (& users )
46+ }
47+
48+ func findUser (login string ) * User {
49+ user := lUser (login )
50+ if user == nil {
51+ fmt .Println ("Can't find user on local data." )
52+ user = dUser (login )
53+ }
54+ return user
55+ }
56+
57+ func lUser (login string ) * User {
58+ for i := 0 ; i < len (users ); i ++ {
59+ if strings .EqualFold (login , users [i ].Login ) {
60+ return & users [i ]
61+ }
62+ }
63+ return nil
64+ }
65+
66+ func dUser (login string ) (user * User ) {
67+ request := "https://api.github.com/users/" + login
68+ fmt .Println ("Request " + request )
3869 resp , err := http .Get (request )
3970 if err != nil {
4071 fmt .Println ("Can't request the user. Maybe without internet." )
41- return nil , err
72+ return nil
4273 }
4374
4475 // calls 'resp.Body.Close()' after the ending of this funcion
@@ -49,12 +80,22 @@ func findUser(userName string) (user *User, err error){
4980 err = json .Unmarshal (body , & user )
5081 if err != nil {
5182 fmt .Println ("Can't read the json" )
52- return nil , err
83+ return nil
5384 }
54- return user , nil
85+
86+ go save (user )
87+ return user
5588}
5689
57- func setGitConfig (config string , value string ){
90+ func save (user * User ) {
91+ users = append (users , * user )
92+ file , _ := os .Create (fileName )
93+ defer file .Close ()
94+ enc := json .NewEncoder (file )
95+ enc .Encode (& users )
96+ }
97+
98+ func setGitConfig (config string , value string ) {
5899 if len (value ) > 0 {
59100 fmt .Println (value )
60101 err := exec .Command ("git" , "config" , config , strconv .Quote (value )).Run ()
@@ -67,4 +108,3 @@ func setGitConfig(config string, value string){
67108 fmt .Printf ("Can't set %s with a empty value.\n " , config )
68109 }
69110}
70-
0 commit comments