Browse Source

added gopm gen

pull/103/head
Lunny Xiao 11 years ago
parent
commit
ae3674c2e8
  1. 85
      cmd/gen.go
  2. 34
      docs/features_CN.md
  3. 1
      gopm.go

85
cmd/gen.go

@ -14,6 +14,15 @@
package cmd package cmd
import (
"github.com/Unknwon/com"
"go/build"
"os"
"path"
"runtime"
"strings"
)
var CmdGen = &Command{ var CmdGen = &Command{
UsageLine: "gen [.gopmfile]", UsageLine: "gen [.gopmfile]",
Short: "generate a gopmfile according current go project", Short: "generate a gopmfile according current go project",
@ -23,10 +32,82 @@ generate a gopmfile according current go project
} }
func init() { func init() {
CmdGen.Run = gen CmdGen.Run = runGen
CmdGen.Flags = map[string]bool{}
}
func printGenPrompt(flag string) {
}
func isStdPkg(pkgName string) bool {
return com.IsExist(path.Join(path.Join(runtime.GOROOT(), "src/pkg"), pkgName))
}
func getPkgs(path string, inludeSys bool) ([]string, error) {
pkg, err := build.ImportDir(path, build.AllowBinary)
if err != nil {
return []string{}, err
}
if inludeSys {
return pkg.Imports, nil
} else {
pkgs := make([]string, 0)
for _, name := range pkg.Imports {
if !isStdPkg(name) {
pkgs = append(pkgs, name)
}
}
return pkgs, nil
}
} }
// scan a directory and gen a gopm file // scan a directory and gen a gopm file
func gen(cmd *Command, args []string) { func runGen(cmd *Command, args []string) {
// Check flags.
num := checkFlags(cmd.Flags, args, printGenPrompt)
if num == -1 {
return
}
args = args[num:]
var gopmFile string = ".gopmfile"
if len(args) > 0 {
gopmFile = args[0]
}
curPath, err := os.Getwd()
if err != nil {
com.ColorLog("[ERRO] %v.\n", err)
return
}
gopmPath := path.Join(curPath, gopmFile)
if com.IsExist(gopmPath) {
com.ColorLog("[WARN] %v already existed.\n", gopmFile)
return
}
// search the project and gen gopmfile
pkgs, err := getPkgs(curPath, false)
if err != nil {
com.ColorLog("[ERRO] %v.\n", err)
return
}
f, err := os.OpenFile(gopmPath, os.O_RDWR|os.O_CREATE, 0700)
if err != nil {
com.ColorLog("[ERRO] %v.\n", err)
return
}
defer f.Close()
contents := "[build]\n" + strings.Join(pkgs, "\n")
_, err = f.WriteString(contents)
if err != nil {
com.ColorLog("[ERRO] %v.\n", err)
return
}
com.ColorLog("[INFO] %v generated successfully.\n", gopmFile)
} }

34
docs/features_CN.md

@ -33,6 +33,7 @@ gopm
<a id="11" name="11"></a> <a id="11" name="11"></a>
# 最终程序只有一个,但是通过配置,可以有三种模式: # 最终程序只有一个,但是通过配置,可以有三种模式:
1 独立服务器 1 独立服务器
2 子服务器 2 子服务器
3 客户端(默认) 3 客户端(默认)
@ -41,6 +42,14 @@ gopm
独立服务器就是本身的包都是直接从源服务器中获取的。 独立服务器就是本身的包都是直接从源服务器中获取的。
## 子服务器
子服务器就是包是从所配置的独立服务器上获取的,而不是直接从github等源服务器获取,在一个局域网中,可以通过架设子服务器来加快包的分发。
## 客户端
默认下载即为客户端模式,客户端默认是从源服务器获取包,如果要从包服务器获取包,则可在配置文件中通过配置即可。
<a id="20" name="20"></a> <a id="20" name="20"></a>
#Go包版本说明 #Go包版本说明
@ -62,14 +71,25 @@ http://gopm.io
~/.gopm/repos ~/.gopm/repos
#数据库说明 #数据库说明
包信息数据采用goleveldb,这是一个key/value数据库。数据存放规则如下: 包信息数据采用goleveldb,这是一个key/value数据库。数据库存默认放在~/.gopm/repos下。数据存放规则如下:
"lastId" : "{lastId}" lastId中存放最大的Id,Id为自增
* "lastId" : "{lastId}" lastId中存放最大的Id,Id为自增
* "index:{packageName}": "{id}" index:中存放的是包名,value中存放的是这个包的不同版本的id,不同版本用逗号分隔
* “pkg:{id}” : "{pkg}" 某个包的名称
* “ver:{id}” : "{verString1}, {verString2}" 某个包版本对应的内容
* "desc:{id}" : "{desc}" 某个包的最新版本的描述
* "down:{id}" : "{down}" 某个包的下载url
"index:{packageName}": "{id}" index:中存放的是包名,value中存放的是这个包的不同版本的id,不同版本用逗号分隔 * "deps:{id}" : "{deps}" 某个包的最新版本的描述
“ver:{id}” : "{verString1}, {verString2}" 某个包版本对应的内容 * “key:{keyword}:{id}” : "" 关键词及其对应的版本
“key:{keyword}:{id}” : "" 关键词及其对应的版本 * “total” :"{total}" 包总数
<a id="30" name="30"></a> <a id="30" name="30"></a>
#各命令的目标和作用 #各命令的目标和作用
@ -106,9 +126,9 @@ http://gopm.io
去除一个包,如果不加版本标示,则删除该包的所有版本 去除一个包,如果不加版本标示,则删除该包的所有版本
<a id="36" name="36"></a> <a id="36" name="36"></a>
###gopm search {keyword} ###gopm search [-e] {keyword}
根据关键词查找包 根据关键词查找包名或者包的描述,如果有-e开关,则完全匹配包名
<a id="37" name="37"></a> <a id="37" name="37"></a>
###gopm doc [-b] {packagename}[:{version}] ###gopm doc [-b] {packagename}[:{version}]

1
gopm.go

@ -45,6 +45,7 @@ var commands = []*cmd.Command{
cmd.CmdGet, cmd.CmdGet,
cmd.CmdSearch, cmd.CmdSearch,
cmd.CmdServe, cmd.CmdServe,
cmd.CmdGen,
/* /*
cmdBuild, cmdBuild,
cmdClean, cmdClean,

Loading…
Cancel
Save