diff --git a/generate/generate.go b/generate/generate.go index 04a6a62..c45f679 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -3,24 +3,28 @@ package generate import ( + "fmt" "git.sr.ht/~akilan1999/p2p-rendering-computation/config" "github.com/otiai10/copy" "go/ast" "go/token" + modfile "golang.org/x/mod/modfile" + "io/ioutil" "os" "os/exec" "strings" ) type NewProject struct { - Name string - Module string - NewDir string - P2PRCPath string - Option *copy.Options - Token *token.FileSet - AST *ast.File - FileNameAST string + Name string + Module string + NewDir string + P2PRCPath string + CurrentModule string + Option *copy.Options + Token *token.FileSet + AST *ast.File + FileNameAST string } // GenerateNewProject creates a new copy of the P2PRC @@ -54,9 +58,22 @@ func GenerateNewProject(name string, module string) error { // - remove go.mod and go.sum and create new ones // Files we require to skip + var Options copy.Options + // IF YOU ARE RELEASING AN EXTENSION OF P2PRC + // MODIFY HERE (AN EXTENSION FROM YOUR EXTENSION :P) // Skip or have the appropriate files and directories not needed + //---------------------------------------------------------------- + // Action performed: + // - Ensuring main.go file exists + // - Skipping all .go files + // - Skipping go.mod file + // - Skipping go.sum file + // - Skipping .idea/ directory + // - Skipping Makefile file + // - Skipping / directory + //---------------------------------------------------------------- Options.Skip = func(src string) (bool, error) { switch { case strings.HasSuffix(src, "main.go"): @@ -88,6 +105,10 @@ func GenerateNewProject(name string, module string) error { } // Creating a new go.mod file in the appropriate directory + err = newProject.CreateGoMod() + if err != nil { + return err + } return nil } @@ -112,3 +133,39 @@ func (a *NewProject)CreateGoMod() error { } return nil } + +// ChangeImportFiles Changes Appropriate imports in the appropriate file +func (a *NewProject)ChangeImportFiles() error { + // IF YOU ARE RELEASING AN EXTENSION OF P2PRC + // MODIFY HERE (AN EXTENSION FROM YOUR EXTENSION :P) + //---------------------------------------------------------------- + // Action performed: + // Files we would need to modify the imports in + // generate/generate.go -> config module + // cmd/action.go -> config module, server module, generate module + // cmd/flags.go -> config module, server module, generate module + // server/server.go -> config module + // main.go -> cmd module + //----------------------------------------------------------------- + a.FileNameAST = a.NewDir + "generate/generator.go" + err := a.ChangeImports("", a.Module+"config") + if err != nil { + return err + } + return nil +} + +// GetCurrentGoModule Gets the current go module name +func (a *NewProject)GetCurrentGoModule() (error) { + goModBytes, err := ioutil.ReadFile(a.P2PRCPath + "go.mod") + if err != nil { + return err + } + modName := modfile.ModulePath(goModBytes) + fmt.Fprintf(os.Stdout, "modName=%+v\n", modName) + + // Set current module to struct of file NewProject + a.CurrentModule = modName + + return nil +} diff --git a/generate/generate_test.go b/generate/generate_test.go index a6e0c5b..0074dcc 100644 --- a/generate/generate_test.go +++ b/generate/generate_test.go @@ -89,4 +89,24 @@ func TestNewProject_CreateGoMod(t *testing.T) { fmt.Println(err) t.Error(err) } +} + +// Testing if the current go module is returned +func TestNewProject_GetCurrentGoModule(t *testing.T) { + // Create a new variable of type NewProject + var np NewProject + path, err := config.GetPathP2PRC() + if err != nil { + fmt.Println(err) + t.Error(err) + } + // Set Current project path + np.P2PRCPath = path + // Get module name + err = np.GetCurrentGoModule() + if err != nil { + fmt.Println(err) + t.Error(err) + } + fmt.Println(np.CurrentModule) } \ No newline at end of file diff --git a/go.mod b/go.mod index d5d86b2..332b647 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/apenella/go-ansible v1.1.0 github.com/containerd/continuity v0.0.0-20210315143101-93e15499afd5 // indirect - github.com/dave/jennifer v1.4.1 github.com/docker/docker v20.10.0-beta1.0.20201113105859-b6bfff2a628f+incompatible github.com/docker/go-connections v0.4.0 github.com/gin-gonic/gin v1.6.3 @@ -26,6 +25,7 @@ require ( github.com/urfave/cli/v2 v2.3.0 gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40 // indirect gitlab.com/NebulousLabs/go-upnp v0.0.0-20181011194642-3a71999ed0d3 + golang.org/x/mod v0.3.0 golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 // indirect golang.org/x/text v0.3.5 // indirect diff --git a/go.sum b/go.sum index db2fe1e..be5176c 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,6 @@ github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1S github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/dave/jennifer v1.4.1 h1:XyqG6cn5RQsTj3qlWQTKlRGAyrTcsk1kUmWdZBzRjDw= -github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -657,6 +655,7 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=