Browse Source

added gopm gen

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

85
cmd/gen.go

@ -14,6 +14,15 @@
package cmd
import (
"github.com/Unknwon/com"
"go/build"
"os"
"path"
"runtime"
"strings"
)
var CmdGen = &Command{
UsageLine: "gen [.gopmfile]",
Short: "generate a gopmfile according current go project",
@ -23,10 +32,82 @@ generate a gopmfile according current go project
}
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
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)
}

40
docs/features_CN.md

@ -22,7 +22,7 @@ gopm
* [gopmspec文件格式](#50)
<a id="10" name="10"></a>
#总体设计目标
# 总体设计目标
1. 支持go语言的版本管理
2. 支持文档管理
@ -32,15 +32,24 @@ gopm
6. 支持从github, code.google.com, gitLab, 等常见的源码托管服务下载
<a id="11" name="11"></a>
#最终程序只有一个,但是通过配置,可以有三种模式:
# 最终程序只有一个,但是通过配置,可以有三种模式:
1 独立服务器
2 子服务器
3 客户端(默认)
##独立服务器
## 独立服务器
独立服务器就是本身的包都是直接从源服务器中获取的。
## 子服务器
子服务器就是包是从所配置的独立服务器上获取的,而不是直接从github等源服务器获取,在一个局域网中,可以通过架设子服务器来加快包的分发。
## 客户端
默认下载即为客户端模式,客户端默认是从源服务器获取包,如果要从包服务器获取包,则可在配置文件中通过配置即可。
<a id="20" name="20"></a>
#Go包版本说明
@ -62,14 +71,25 @@ http://gopm.io
~/.gopm/repos
#数据库说明
包信息数据采用goleveldb,这是一个key/value数据库。数据存放规则如下:
"lastId" : "{lastId}" lastId中存放最大的Id,Id为自增
包信息数据采用goleveldb,这是一个key/value数据库。数据库存默认放在~/.gopm/repos下。数据存放规则如下:
* "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>
#各命令的目标和作用
@ -106,9 +126,9 @@ http://gopm.io
去除一个包,如果不加版本标示,则删除该包的所有版本
<a id="36" name="36"></a>
###gopm search {keyword}
###gopm search [-e] {keyword}
根据关键词查找包
根据关键词查找包名或者包的描述,如果有-e开关,则完全匹配包名
<a id="37" name="37"></a>
###gopm doc [-b] {packagename}[:{version}]

1
gopm.go

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

Loading…
Cancel
Save